Skip to content

feat(capture): show shutter speeds as the camera marks them - #1471

Merged
marcinz606 merged 2 commits into
marcinz606:mainfrom
seanharding:shutter-fractions
Oct 23, 2026
Merged

marcinz606 merged 2 commits into
marcinz606:mainfrom
seanharding:shutter-fractions

Conversation

@seanharding

Copy link
Copy Markdown
Contributor

What

  • Shutter steppers (Scan panel Shutter and IR Shutter, Live View
    Shutter), the meter's messages and the IR Shutter warning show a
    decimal label as a marked speed: Nikon's 0.0333s shows as 1/30,
    0.4000s as 0.4". A 1/N label stays as published, since bodies
    differ (1/2 against 0.5").
  • The camera's own label stays in the item data. It is what settings
    store and what a write sends, so nothing written to the body changes.
  • Four decimals cannot tell 1/800 from 1/750, so the body's ladder
    spacing picks third- or half-stop speeds. An unknown spacing tries
    third stops first.
  • Metadata Preview: the EXIF exposure rational is reduced before it
    shows (a D3300 stores 1/30 as 10/300). The text parses back to the
    same time in the export writer.

Not covered

At the fast end, 1/3200 and 1/4000 both publish as 0.0003s and show
as 1/3200. The Scanlight meter stops at 1/250.

Tests

Formatter tests on full third- and half-stop decimal ladders, a stepper
test (shows fractions, stores and sends the camera label) and an EXIF
round-trip test. make all passes. Checked in make run-sim with the
simulated camera given a Nikon-style decimal ladder.

seanharding and others added 2 commits October 21, 2026 15:00
Nikon publishes decimal seconds ("0.0333s" for 1/30), and the shutter
steppers, the meter's messages and the IR Shutter warning showed them
as published. They now show 1/30 below 0.3 s and 0.4" from there up.
The body's own spacing picks third- or half-stop speeds, because four
decimals cannot tell 1/800 from 1/750. A 1/N label stays as published,
and the camera's label is still the value a write sends.

The Metadata Preview printed the EXIF exposure rational unreduced
(10/300s from a D3300). It now reduces it (1/30s), in a form the export
writer parses back to the same time.
# Conflicts:
#	tests/test_scanlight_sidebar.py
@marcinz606
marcinz606 merged commit b282500 into marcinz606:main Oct 23, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants