Zone System Testing & Film Process Documentation for macOS
Getting Started
What is ZoneLab?
ZoneLab started as a deeply nerdy personal project to take a lot of my old school chemical photographic knowledge and bring it into the digital age. The goal was to systematically document, chart and analyze my film and developer combinations by measuring the tangible effects of pushing, pulling, over and under exposing and contrast compression across different film stocks.
As I shared early screen shots and testing results with some of my other photo nerd friends, I was asked quite often if I would ever consider making this into a desktop app that others could use.
So sure, why not? I set out to make this an app to help film photographers determine the effective ISO of their specific film and development processes through Zone System testing methodology, and I've since started on the base of a larger goal: a complete suite of tools for the modern film heads.
So this is the point where you might be asking yourself: "Will the zone system make me a better photographer?"
No.
But by shooting a 10-stop wedge test and measuring the resulting film densities, ZoneLab can help you calculate your effective ISO, Contrast Index, Gamma, Tonal Range and Exposure Latitude—helping you gain a better understanding of how your particular processes affect your image quality.
Important: ZoneLab determines the effective ISO your specific process produces through Zone System testing. This is not ISO 6:1993 laboratory film speed testing, which requires absolute lux-second measurements and toe-region analysis. ZoneLab is a practical testing tool for optimizing your personal workflow.
First Launch
When you first launch ZoneLab, you'll see an onboarding wizard that helps you set up:
Favorite Films: Select up to 5 films you use most often
Development Method: Choose between lab processing or self-development
Cameras & Lenses: Add your equipment to the library
Grey Card: Verify your reference grey card settings
System Requirements
macOS 14.0 (Sonoma) or later
Apple Silicon (M1/M2/M3/M4) or Intel Mac
Calibrated transmission densitometer (any brand), or use a photo lab service
Optional: Printalyzer Densitometer for USB integration
Testing Modes
ZoneLab offers two testing modes to suit different needs:
Full Mode
Complete 11-zone analysis with all metrics for full process documentation.
Use Full Mode when you want to:
Analyze the complete characteristic curve of your film/developer combination
Calculate Contrast Index (CI), Gamma, Tonal Range, and Exposure Latitude
Compare how different developers affect contrast rendering
Document complete curve characteristics for process control
Requirements:
10-stop wedge test (Zones I-X) plus Zone 0 (base + fog)
Density measurements for all 11 zones
Each zone represents one stop of exposure difference (0.30 log-H units)
Zone V Quick Mode
Single Zone V measurement for fast effective ISO testing without full metrics.
Use Zone V Quick Mode when you want to:
Quickly verify your effective ISO for a film/developer combination
Test a new film stock without full analysis
Confirm ISO consistency for a familiar process
Save time when you don't need full curve data
Requirements:
Single Zone V exposure (metered 18% grey card)
One density measurement only
Faster workflow, effective ISO only (no CI/Gamma)
Tip: Toggle between modes using the segmented picker in the zone input panel. The mode setting only affects new sessions - existing sessions retain their original mode.
Basic Workflow
Step 1: Set Up Equipment
In the left sidebar, select your equipment:
Film: Choose your film stock (e.g., Tri-X 400, HP5+)
Developer: Select developer and settings (time, temp, dilution, agitation)
Camera & Lens: Pick the camera and lens you'll use
Grey Card: Confirm your reference grey card
Use the "Show Favorites" toggle to see only your most-used items.
Step 2: Shoot Your Test
For Full Mode (10-Stop Wedge Test):
Set up your 18% grey card with even, consistent lighting
Meter the grey card at the film's box speed ISO to determine your base exposure (Zone V)
Shoot 10 frames with one-stop increments:
Zone I: Base exposure -4 stops
Zone II: Base exposure -3 stops
Zone III: Base exposure -2 stops
Zone IV: Base exposure -1 stop
Zone V: Base exposure (metered grey card)
Zone VI: Base exposure +1 stop
Zone VII: Base exposure +2 stops
Zone VIII: Base exposure +3 stops
Zone IX: Base exposure +4 stops
Zone X: Base exposure +5 stops
After development, measure Zone 0 (base + fog) on an unexposed portion of the film
Note: Zone 0 is base + fog density (unexposed, processed film). You don't shoot a frame for Zone 0—simply measure an unexposed edge or leader after development. This is a 10-stop wedge test, not 11 exposures.
For Zone V Quick Mode:
Set up your 18% grey card with even lighting
Meter the grey card at the film's box speed ISO
Shoot one frame at the metered exposure (Zone V)
After development, measure the Zone V density to calculate effective ISO
Step 3: Develop Your Film
Process the film with your chosen developer
Maintain consistent temperature, time, and agitation
Note all development parameters in ZoneLab
Let the film dry completely before measuring
Step 4: Enter Density Readings
In the bottom zone input panel:
Select your testing mode (Full or ISO Only)
Measure each zone with your calibrated densitometer
Enter density values (typically 0.02 to 1.8):
Full Mode: Enter all 11 readings from Zone 0 to Zone X
Zone V Quick Mode: Enter only Zone V reading
Optional: Add lighting conditions and session notes (up to 500 characters)
Tip: Use "Fill Sample Data" to test the app with realistic values before your real tests.
Step 5: Calculate Effective ISO
Click the "Calculate ISO" button at the bottom
ZoneLab finds the zone closest to 0.72 density (18% grey target)
Your effective ISO is calculated and displayed
The session is saved automatically with all data
Full Mode sessions also calculate CI, Gamma, Tonal Range, and Exposure Latitude. Zone V Quick Mode sessions calculate effective ISO only.
Step 6: Review Results
In the right sidebar (Session Library):
View all your test sessions in chronological order
See the calculated ISO and metrics (Full Mode only)
Compare sessions on the interactive chart
Filter by film, developer, camera, or lens
Equipment Library
Managing Your Equipment
ZoneLab maintains libraries for all your equipment. Add, edit, or delete items as needed.
Films
Add films with manufacturer, name, and box speed
Mark up to 5 films as favorites for quick access
Common films (Tri-X, HP5+, etc.) are available by default
Developers
Add developers with specific development parameters
Track time, temperature, dilution, and agitation method
Support for both self-development and lab processing
Configure settings in Input → Densitometer Settings... (⌘⌥D)
Using the Densitometer:
Full Mode: Click "Start" to begin reading Zone 0. Accept or reject each reading. ZoneLab advances through all 11 zones automatically.
Zone V Quick Mode: Click "Start" to read Zone V. The reading auto-stops after Zone V is captured.
Note: USB integration is experimental (Phase 1). Full automatic reading features are in development.
Session Comparison
Comparing Sessions
Compare up to 5 sessions simultaneously to see how different variables affect your results.
Selection Methods:
Click: Select a single session
⌘ + Click: Add/remove non-consecutive sessions
⇧ + Click: Select consecutive sessions
Chart Visualization:
Full Mode Sessions: Display as complete characteristic curves with all 11 data points
Zone V Quick Mode Sessions: Display as larger single dots (Zone V only)
Hover: Mouse over any point or session to see details
Colors: Each session gets a unique color for easy identification
What to Compare:
Same film with different developers (contrast differences)
Same developer at different times/temperatures
Different films with the same developer (ISO variations)
Different cameras/lenses (exposure consistency)
Filtering Sessions
Use the filter controls in the Session Library to show only specific sessions:
Filter by film (e.g., show only Tri-X tests)
Filter by developer (e.g., show only D-76 tests)
Filter by camera or lens
Combine filters for precise results
Reordering Sessions
Drag and drop sessions in the Session Library to reorder them. This can help group related tests together.
Editing Session Information
After calculating a session, you can edit its metadata and parameters without having to re-enter all the zone readings.
What You Can Edit
To edit a session, select it in the Session Library and click the "Edit" button (or double-click the session). You can modify:
Equipment Changes:
Film: Change the film stock used
Developer: Update developer type and development parameters
Camera: Change which camera body was used
Lens: Update which lens was used
Grey Card: Change the reference grey card
Session Details:
Lighting Conditions: Add or update lighting information
Session Notes: Add or edit notes about the test (up to 500 characters)
Zone Readings: Correct any density measurements if needed
When to Edit Sessions
Correction: Fix data entry errors without re-entering everything
Additional Information: Add notes or lighting details you forgot initially
Metadata Update: Correct equipment selections if you documented the wrong camera or lens
Zone Reading Adjustments: Update density values if you re-measured more accurately
Note: When you edit zone readings, click "Calculate ISO" again to update the results with the new data. The metrics (Effective ISO, CI, Gamma, Tonal Range, Exposure Latitude) will be recalculated automatically.
Tip: You cannot change the testing mode (Full vs Zone V Quick) after a session is created. If you need to switch modes, create a new session.
Data Management
CSV Export
File → Export Sessions (⌘E)
Exports all session data to a CSV file with 33+ columns
Includes all metadata: films, developers, cameras, lenses, settings
Includes lighting conditions and session notes
Includes all zone readings and calculated results
Perfect for backup or analysis in spreadsheet applications
CSV Import
File → Import Sessions (⌘I)
Import previously exported session data
Automatically creates missing films, developers, cameras, and lenses
Preserves all zone readings, metrics, notes, and settings
Useful for transferring data between Macs or restoring backups
Data Storage
All data is stored locally on your Mac in a Core Data database:
ZoneLab never transmits data over the internet. Everything stays on your device.
Clearing Data
Two options are available in the Edit menu:
Clear Session Data
Deletes all test sessions and zone readings
Preserves your equipment libraries (films, developers, cameras, lenses)
Use when you want fresh test data but keep your equipment setup
Clear All Data
Complete factory reset - deletes everything
Removes sessions and all equipment libraries
Use when starting completely fresh
Warning: Both operations require confirmation and cannot be undone. Always export your data first!
Understanding Results
Important Note on Units: One stop of exposure equals 0.30 log-H units. However, the density change per stop depends on your film's gradient (CI or Gamma). You cannot assume a fixed density-to-stop relationship.
Effective ISO
Available in: Full Mode and Zone V Quick Mode
The ISO your specific process produces, determined by where 18% grey (0.72 density) falls in your exposure range. This is what you should set your light meter to when using that exact combination of film and process.
Formula:
Effective ISO = Metered ISO × 2^(stops difference)
Where:
- Metered ISO = the ISO you set on your meter when shooting the test
- Stops difference = (target zone - actual zone)
- Target zone = 5 (Zone V, where grey card should fall)
- Actual zone = the zone that measured closest to 0.72D
Example:
Metered at: ISO 400 (what you set on your light meter)
Shot grey card as: Zone V (base exposure)
After development, Zone V measured: 1.05D (too dense)
Zone measuring 0.72D (target): Zone III
Stops difference: 5 - 3 = +2 stops
Effective ISO: 400 × 2² = 400 × 4 = 1600
This means your film/developer combination is 2 stops faster than box speed. You were effectively shooting at ISO 1600 when you thought you were at ISO 400. Next time, meter at ISO 1600.
Contrast Index (CI)
Available in: Full Mode only
Measures the practical gradient over a useful exposure range (Zones II through IX). Higher CI values indicate more contrast. Use CI to compare how different developers affect your film's contrast rendering.
Formula:
CI = (Density at Zone IX - Density at Zone II) / (Log Exposure Range)
Where:
- Log Exposure Range = 7 zones × 0.30 log H = 2.10 log H
- Each zone = 1 stop = 0.30 log H units
Simplified formula:
CI = (D_IX - D_II) / 2.10
Interpretation:
CI < 0.50: Low contrast (longer development needed)
CI = 0.50-0.65: Normal contrast (N development)
CI = 0.65-0.80: High contrast (shorter development or dilution needed)
CI > 0.80: Very high contrast (reduce development significantly)
Typical targets:
CI = 0.56: Kodak film data sheet recommendation for general development
CI = 0.58: Kodak recommendation for diffusion enlarger printing
CI = 0.43: Kodak recommendation for condenser enlarger printing
Note on Density vs. Stops: While one stop of exposure always equals 0.30 log-H units, the resulting density change depends on the film's gradient. This demonstrates why you cannot assume a fixed density-to-stop relationship: it varies based on your film's contrast characteristics.
Gamma (γ)
Available in: Full Mode only
Measures the slope of the straight-line portion of the characteristic curve. Related to CI but measured over the central linear portion only (Zones III-VIII). Higher gamma = steeper curve = more contrast.
Formula:
γ = (Density at Zone VIII - Density at Zone III) / (Log Exposure Range)
Where:
- Log Exposure Range = 5 zones × 0.30 log H = 1.50 log H
Simplified formula:
γ = (D_VIII - D_III) / 1.50
Interpretation:
γ < 0.65: Soft/flat curve
γ = 0.65-0.80: Normal gradient
γ > 0.80: Contrasty/steep curve
Note: Gamma is more sensitive to development than CI because it measures only the straight-line portion.
Tonal Range
Available in: Full Mode only
The total density difference your film can capture, measured from base + fog to maximum density.
Formula:
Tonal Range = Density at Zone X - Density at Zone 0
Where:
- Zone 0 = base + fog (unexposed film)
- Zone X = maximum exposure (+5 stops from grey card)
Interpretation:
< 1.6D: Limited dynamic range
1.6-2.2D: Normal range (most films)
> 2.2D: Extended range (high-capacity films)
Exposure Latitude (Stops)
Available in: Full Mode only
How much exposure error your process can tolerate while still producing usable negatives. Calculated from tonal range. Higher latitude = more forgiving film.
Formula:
Latitude (stops) = Tonal Range / 0.30
Where:
- 0.30 = density change per stop in the straight-line portion
Example:
Tonal Range: 1.8D
Latitude: 1.8 / 0.30 = 6 stops
Note: This is a simplified estimation. Actual usable latitude depends on printing requirements and desired tonal separation.