1.1 Section 1: The Core Exposure Triangle

ISO 1 to 12800 range

Full ISO range from technical paper to ultra-fast colour stocks, picked through a Film Stock or Custom ISO mode.

Where to find it

Viewfinder ISO dial tap to open the ISO picker

Summary

The ISO picker offers two mutually exclusive modes. Film Stock mode pins the dial to a loaded film's box ISO and exposes a Push / Pull row that shifts effective sensitivity by up to two stops in either direction. Custom ISO mode unlocks the dial, lets you choose full, half, or third step increments, and surfaces an Available ISOs list where every standard speed (1 through 12800, including the technical sub-25 series 1, 2, 3, 4, 6, 8, 10, 12, 13, 16, 20) can be toggled on or off and any custom value can be typed in.

Tap to zoom — actual screenshot from the app

Detail

More views

How it works

What it covers

Every commercially relevant film speed, from photo paper and microfilm at ISO 1, 3, and 6 through the standard colour and black-and-white range (25 to 3200) and on into the pushed-stock territory at 6400 and 12800. Standard values line up with full, half, and third stops so the meter speaks in the same units your camera does.

Two ways to pick ISO

The ISO picker leads with a Film Stock switch and a Custom ISO switch. Exactly one of the two is active at any moment. Film Stock mode is the right pick when you have a film loaded and want the dial pinned to its box speed. Custom ISO mode is the right pick when you are shooting a stock the app does not know about, or when you simply want full manual control over the dial.

Film Stock mode

Flip the Film Stock switch on and the picker shows a film-stock dropdown plus a Push / Pull from box ISO row with chips at -2, -1, 0, +1, and +2 stops. Tap a push or pull chip to override the box speed for the loaded film; the caption underneath reads out the effective ISO (Shooting at ISO 800 if you pull Tri-X to +1). Tap 0 to clear the override. The dropdown opens the full film-stock picker, including any custom stocks you have added.

Custom ISO mode

Flip Custom ISO on and the dial unlocks. A Step increments row lets you choose 1 (full stop), 1/2, or 1/3 stop spacing. An Available ISOs list shows every value the dial will offer; each row carries a switch you can flick off to hide that speed from the main viewfinder dial. The list mixes standard values (rendered in white) with any custom ISOs you have added (rendered in green and accompanied by a delete icon). The picker enforces a floor of one enabled value at all times.

Adding custom ISOs

In Custom ISO mode, tap the Custom button to expand an inline numeric field. Type any positive integer and tap Add. The value joins the Available ISOs list, persists across app restarts on the active profile, and is deduplicated against the standard sequence so an entry of 400 never shows up twice. The Custom-coloured rows also show a delete icon so you can prune ISOs you no longer use.

Technical / paper ISOs

Below ISO 25 the dial exposes the official ISO 5800 sub-25 series: 1, 3, 6, 12 as full stops; 2, 4, 8 as half stops; 10, 13, 16, 20 as third stops. ISO 13 matches Lomography Babylon Kino 13 and ISO 20 matches Adox CMS 20 II. If your profile is currently capped above ISO 1, a Show technical ISOs row appears between Custom and Available ISOs; one tap drops the floor to ISO 1 and adds the sub-25 entries.

How the meter uses it

The selected ISO drives every exposure calculation: aperture and shutter recommendations, the EV100 chip in the metering layer, the SBR-to-development advisor, and the reciprocity correction. Change the ISO, push or pull the box value, or toggle entries on the dial and the whole pipeline updates instantly.

Implementation notes (for developers)
IsoPickerDialog in ViewfinderScreen.kt. Mode switch is mutually exclusive: filmStockMode is gated on rangesMode == GEAR_BASED && (selectedFilmStock != NONE || activeCustomFilmStock != null); customIsoMode is the complement. Push / Pull writes customIsoValue via onFilmStockPushPullChanged(stops). Custom mode merges StandardIso.filtered() and customIsos, dedupes, and renders each as a toggleable row (last enabled row's switch locks so the dial always has at least one value).

Search documentation