The develop view shall offer a one-gesture 1:1 zoom about a chosen point, and that point shall persist as the photographer moves between frames.
Why
Noise reduction and sharpening cannot be judged at fit view — judging them there is the documented cause of over-sharpening across every source consulted. Persistence across frames is what turns "check the same eye on forty portraits" into forty keystrokes instead of forty pans.
Today: scroll zooms about the pointer (DevelopSession::zoom_about) and there is a reset-to-fit (reset_zoom), but no gesture reaches 100%, and the zoom does not survive opening another frame.
Acceptance
A key toggles between fit and 1:1, anchored on the pointer or on the last inspected point.
Opening the next frame restores the same normalised inspection point at the same zoom.
The zoom stays a viewing state: it does not enter the edit, the sidecar or the export. (Already true — framing.rs separates view() from crop(), and develop.rs deliberately restores framing around an export. Must stay true.)
Documented in the gesture book (see the develop keyboard vocabulary ticket).
Lands in
core/dr-pipeline/src/framing.rs already has the mechanism; this is persistence across sessions plus a binding in ui/dr-ui.
Part of the Develop Ergonomics spec (FR-DEV series proposal), 2026-09-05.
The develop view shall offer a **one-gesture 1:1 zoom** about a chosen point, and that point shall **persist as the photographer moves between frames.**
## Why
Noise reduction and sharpening cannot be judged at fit view — judging them there is the documented cause of over-sharpening across every source consulted. Persistence across frames is what turns "check the same eye on forty portraits" into forty keystrokes instead of forty pans.
Today: scroll zooms about the pointer (`DevelopSession::zoom_about`) and there is a reset-to-fit (`reset_zoom`), but no gesture reaches 100%, and the zoom does not survive opening another frame.
## Acceptance
- [ ] A key toggles between fit and 1:1, anchored on the pointer or on the last inspected point.
- [ ] Opening the next frame restores the same normalised inspection point at the same zoom.
- [ ] The zoom stays a *viewing* state: it does not enter the edit, the sidecar or the export. (Already true — `framing.rs` separates `view()` from `crop()`, and `develop.rs` deliberately restores framing around an export. Must stay true.)
- [ ] Documented in the gesture book (see the develop keyboard vocabulary ticket).
## Lands in
`core/dr-pipeline/src/framing.rs` already has the mechanism; this is persistence across sessions plus a binding in `ui/dr-ui`.
---
Part of the Develop Ergonomics spec (FR-DEV series proposal), 2026-09-05.
Done in 9b674a8 ("Let the photographer look at the pixels, and keep looking"): the 1:1 toggle is anchored on the pointer (toggle_inspection / inspect_at in develop/framing.rs), the next frame restores the inspected point (lib.rs, inspect_at(held.at…)), it is a view state that leaves history alone, and it is in the gesture book as Z / double-tap / double-click.
Done in 9b674a8 ("Let the photographer look at the pixels, and keep looking"): the 1:1 toggle is anchored on the pointer (`toggle_inspection` / `inspect_at` in `develop/framing.rs`), the next frame restores the inspected point (`lib.rs`, `inspect_at(held.at…)`), it is a view state that leaves history alone, and it is in the gesture book as Z / double-tap / double-click.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The develop view shall offer a one-gesture 1:1 zoom about a chosen point, and that point shall persist as the photographer moves between frames.
Why
Noise reduction and sharpening cannot be judged at fit view — judging them there is the documented cause of over-sharpening across every source consulted. Persistence across frames is what turns "check the same eye on forty portraits" into forty keystrokes instead of forty pans.
Today: scroll zooms about the pointer (
DevelopSession::zoom_about) and there is a reset-to-fit (reset_zoom), but no gesture reaches 100%, and the zoom does not survive opening another frame.Acceptance
framing.rsseparatesview()fromcrop(), anddevelop.rsdeliberately restores framing around an export. Must stay true.)Lands in
core/dr-pipeline/src/framing.rsalready has the mechanism; this is persistence across sessions plus a binding inui/dr-ui.Part of the Develop Ergonomics spec (FR-DEV series proposal), 2026-09-05.
Feeds #6 (the binding needs a gesture-book entry) and #3 (fit ↔ 1:1 and hold-to-compare are the two halves of judging an edit).
Done in
9b674a8("Let the photographer look at the pixels, and keep looking"): the 1:1 toggle is anchored on the pointer (toggle_inspection/inspect_atindevelop/framing.rs), the next frame restores the inspected point (lib.rs,inspect_at(held.at…)), it is a view state that leaves history alone, and it is in the gesture book as Z / double-tap / double-click.