10.14 Section 10: Hardware Limitations (Camera Profiles)

Camera body fixes the film format

Pick a real camera with a set format and the FMT dial locks to it; custom gear stays free.

Where to find it

Viewfinder FMT dial; follows Equipment Camera Body (Gear mode)

Summary

While gear drives the ranges (Gear mode), a bundled catalogue body whose format the app can resolve (a Hasselblad shoots 6x6, a Nikon F shoots 35mm, a Sinar shoots 4x5) pins the FMT dial on the main viewfinder: the dial snaps to that format and goes read-only, so the negative size always matches the body in hand. Custom mode leaves the dial free even with a body picked, and custom or cine bodies never pin it, so you can always set the format by hand when the body does not dictate one. Swiping between equipment presets flips the lock on and off as the active body changes.

How it works

In Gear mode, choose a camera that only ever shoots one format, like a Hasselblad 500C/M, and the app sets the FMT dial to 6x6 and locks it. Format is a property of the body, not a choice: a 6x6 Hasselblad cannot suddenly shoot 6x7, so the dial dims to show it is fixed. The same holds for a 35mm SLR (locked to 35mm) or a 4x5 view camera.

When the dial stays free

Two cases keep FMT editable. First, Custom mode: switch the ranges to Custom and the body steps aside, so you can dial any format by hand even with a Hasselblad picked. Second, a body you added yourself stores only a broad format like 'medium' (it could be 6x4.5, 6x6, 6x7, or 6x9), so the app cannot pin it and leaves the dial live.

Swiping between presets

Say preset one is your Hasselblad and preset two is a custom rig. Swipe from one to the other and the lock follows: fixed on the Hasselblad, free on the custom body. The dial always tracks whatever camera is active, so you are never left on the wrong negative size.

Implementation notes (for developers)
CameraSpec.pinsFilmFormat = !isCustom && filmFormat != null. ClassicControls and PaperControls compute formatLockedByGear = rangesMode == GEAR_BASED && camera(gearCameraId).pinsFilmFormat and gate the FMT RotaryDial enabled flag (alongside the measured-preview freeze) plus dim it. The rangesMode == GEAR_BASED clause is essential: gearCameraId persists across the Gear/Custom toggle, so without it the lock leaks into Custom mode where the user is meant to be able to tweak FMT. RotaryDialStrip passes userScrollEnabled = enabled so the strip style honours the gate too (also fixes a latent freeze leak). onGearCameraChanged / applyPresetToState / onRangesModeChanged already re-assert the body's selectedFormat in Gear mode; restoreSettings forces a pinned body's format only when the saved mode is GEAR_BASED. The shared onFormatSelected setter is left unguarded because the Framing compare-lens-kit paths call it internally.

Search documentation