← Back to ZoneLab

Release Notes

What's New in ZoneLab

Beta 0.78.0 - February 9, 2026

Lambrecht Methodology Integration

πŸŽ“ Lambrecht Film Testing Methodology

Integration with "Way Beyond Monochrome"

Complete implementation of Ralph Lambrecht's industry-standard film testing methodology:

  • Gradient Calculation: Calculates film gradient over working range (Zones II-VIII): Ξ”D / 1.8 log E
  • Adaptive Density Per Stop: Replaced hardcoded 0.3 density/stop with gradient-adjusted calculation: 0.3 Γ— (gradient / 0.57)
  • More Accurate EI: Effective ISO calculation now accounts for actual film contrast variations
  • Normal Gradient Target: 0.57 gradient represents "normal" contrast from Lambrecht's methodology
  • High Contrast Compensation: Higher gradient films (>0.57) get proportionally adjusted density per stop
  • Low Contrast Compensation: Lower gradient films (<0.57) get proportionally adjusted density per stop

πŸ”¬ Fog-Adjusted Densities

Lambrecht Fog Compensation

Professional fog-adjusted density tracking separates film base from actual response:

  • Base + Fog: Zone 0 density represents film base plus fog layer
  • Absolute Dmin: Minimum density minus base+fog (true clear film response)
  • Absolute Dmax: Maximum density minus base+fog (true maximum exposure response)
  • Fog Separation: Distinguishes film base characteristics from actual film response to light
  • Industry Standard: Matches Lambrecht's spreadsheet methodology

πŸ“Š LogH Range Tracking

Standard Exposure Terminology

Professional log exposure (logH) range tracking aligned with industry standards:

  • LogH Range: 0.0 to 3.0 (Zone 0 to Zone X = 10 stops = 3.0 log H)
  • Each Zone = 0.3 log H: Standard 1-stop increments in log exposure
  • Lambrecht Terminology: Uses logH notation matching "Way Beyond Monochrome"
  • Exposure Documentation: Tracks useful exposure range for film characterization

πŸ“ˆ New Metrics Display

Gradient Shown in Session List

Session list now displays gradient alongside CI and Gamma:

  • Gradient Display: Shows "G: 0.57" for each full mode session
  • Automatic Hiding: Only displays when gradient > 0 (hides for legacy sessions)
  • Card View: Gradient appears alongside CI and Gamma in metrics row
  • Compact View: Gradient included in compact metrics display

🏷️ Terminology Update: ISO β†’ EI

Correct Photographic Terminology

Updated display terminology to match Zone System standards:

  • ISO: Film's rated/box speed (e.g., "Kodak TMax 400" = ISO 400)
  • EI (Exposure Index): Calculated effective speed from testing (e.g., "rated at EI 320")
  • Session List: Changed "ISO 100" β†’ "EI 100" for calculated values
  • Alert Message: "Effective ISO:" β†’ "Effective ISO (EI):" for clarity
  • CSV Export: Header now reads "Effective ISO (EI)"
  • Industry Alignment: Matches Lambrecht and Zone System literature terminology

πŸ’Ύ Enhanced CSV Export/Import

7 New Lambrecht Metric Columns

CSV format expanded with full Lambrecht methodology support:

  • New Columns: Gradient, Base+Fog, Absolute Dmin, Absolute Dmax, logH Min, logH Max, logH Range
  • Format Detection: Auto-detects old (37 columns) vs new (43 columns) format
  • Backward Compatible: Old CSV files import successfully with new metrics defaulting to 0.0
  • Forward Compatible: New CSV files export all Lambrecht metrics
  • Dynamic Column Mapping: Automatically adjusts zone and lighting column offsets based on format
  • Precision: Gradient (2 decimals), fog-adjusted densities (3 decimals), logH (2 decimals)

Backward Compatibility

  • Legacy Sessions: Old sessions display normally with gradient hidden (default 0.0)
  • Legacy CSVs: Import successfully with Lambrecht metrics defaulting to 0.0
  • Database Migration: Seamless - new attributes default to 0.0 for existing sessions
  • Re-editing: Old sessions recalculate with new methodology when edited for improved accuracy
  • No Data Loss: All existing session data preserved during upgrade

Technical Implementation

  • Core Data Extensions: 7 new Session attributes with @NSManaged properties
  • Calculation Sync: SessionState and EditSessionView both use gradient-adjusted formulas
  • ISO-only Mode: Defaults to normal gradient (0.57) when zone data unavailable
  • Full Mode: Calculates actual gradient from Zones II-VIII density readings
  • CSV Format Version: Column count determines format (43 = new, 37 = old)

Example: High Contrast Film

Scenario: Kodak TMax-100 in Rodinal (high contrast developer)

  • Measured Gradient: 0.68 (higher than normal 0.57)
  • Old Calculation: Used fixed 0.3 density/stop β†’ EI 120
  • New Calculation: Adjusted to 0.358 density/stop β†’ EI 117
  • Result: More accurate EI accounts for actual film contrast

Beta 0.77.0 - January 22, 2026

Dynamic Version Display & Chart Fix

πŸ”„ Version Management Enhancement

Automatic Version Display

Improved version management to prevent hardcoded version mismatches:

  • Dynamic Version Reading: Footer now reads version from Bundle.main.infoDictionary instead of hardcoded string
  • Single Source of Truth: Version defined in Xcode project settings, automatically displayed throughout app
  • Prevents Mismatches: No more outdated version strings (e.g., showing "Beta 0.73" when app is 0.77)
  • Fallback Protection: Gracefully falls back to current version if Bundle info unavailable
  • Consistency: Follows same pattern as About dialog for version display

πŸ› Bug Fix: Y-Axis Density Scale

  • Fixed incomplete density scale labels: Chart Y-axis was missing labels at 1.0, 1.1, 1.8, 2.0, and other values
  • Complete scale now displayed: All density labels appear at correct 0.2D intervals (0, 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.2, 2.4, etc.)
  • Root cause: Floating point precision errors accumulated when generating ticks with stride(by: 0.1)
  • Solution: Using integer arithmetic to generate major tick positions avoids precision errors

Benefits

  • Automatic Updates: Version display updates automatically when version changed in Xcode
  • No Manual Updates: UI no longer needs manual version string updates when bumping versions
  • Reduced Errors: Eliminates human error in version synchronization
  • Better Maintenance: One less thing to remember when releasing new versions
  • Improved Chart Readability: Complete Y-axis scale makes density measurements easier to read

Beta 0.76.0 - January 22, 2026

Session Editing Enhancements & Documentation Cleanup

✏️ Zone Reading Editing

Complete Session Edit Functionality

Edit zone density readings directly within existing sessions:

  • Zone Reading Updates: Edit any zone density value in both ISO-only and full mode sessions
  • Two Save Modes: "Save" for metadata-only updates, "Recalculate & Save" to update metrics from edited zone data
  • Smart Recalculation: Automatically recomputes Effective ISO, Contrast Index, Gamma, and Tonal Range from updated zone readings
  • Visual Layout: Zone readings displayed in intuitive 2-row grid (Zones 0-V, Zones VI-X)
  • Mode Detection: Automatically adapts UI to show only Zone V for ISO-only sessions or all 11 zones for full mode
  • Validation: Input validation ensures density values are valid numbers within acceptable range

πŸ“š Documentation Improvements

Clarified Technical Implementation

Comprehensive documentation cleanup to eliminate confusion:

  • App Sandbox Status: Clarified that sandbox IS enabled via entitlements file, not Xcode build setting
  • Serial Communication: Documented current POSIX serial implementation with device.serial entitlement
  • IOKit History: Archived IOKit USB implementation documentation as completed alternative approach
  • Build Settings: Explained that ENABLE_APP_SANDBOX = NO build setting is misleading - entitlements control sandbox at runtime
  • Calibration Notes: Updated placeholder calibration comments to clarify they're intentionally unused

Technical Details

  • EditSessionView Enhancements: Added zone reading state management, updateZoneReadings(), and recalculateMetrics() methods
  • Modal Size: Increased from 500Γ—700 to 550Γ—800 to accommodate zone editing UI
  • Save Workflow: Clear separation between metadata-only saves and full recalculation
  • Sandbox Configuration: App Sandbox enabled via com.apple.security.app-sandbox in ZoneLabApp.entitlements
  • Serial Access: POSIX serial port access granted via com.apple.security.device.serial entitlement

Beta 0.75.0 - January 20, 2026

B&W Filter Support & Chart Improvements

🎞️ B&W Filter Tracking

Comprehensive Filter Documentation

Track B&W filters used during Zone System testing with accurate specifications:

  • 9 Common B&W Filters: Yellow #8, Deep Yellow #12, Orange #21, Red #25, Deep Red #29, Green #11, Blue #47, Polarizer, and None
  • Complete Specifications: Wratten numbers, filter factors (e.g., 2Γ—, 4Γ—), and stop compensation (e.g., +1, +2)
  • Filter Management: Add, edit, and delete custom filters with FilterToolPanel
  • Session Metadata: Filters tracked as additional equipment metadata, do not affect calculations
  • CSV Export/Import: Filter data included in CSV files with 4 columns (name, Wratten number, factor, stops)
  • Equipment Integration: Filters displayed alongside camera, lens, and grey card in session details

πŸ“Š Chart Visualization

Enhanced Zone V Target Display

Improved chart readability and Zone V target visualization:

  • Fixed Zone V Target: Target box now stays at fixed density range (0.75–0.85D), not session-dependent
  • Semi-transparent Fill: Zone V target box has 50% white fill for better visibility against zone bands
  • "Zone V Target" Label: Clear text label overlaid on target box for identification
  • Consistent Reference: Target box no longer moves when switching between sessions

✨ Session Display Improvements

  • Consolidated Equipment Section: Camera, lens, filter, and grey card now under single "Equipment" header
  • Consistent Spacing: Fixed line spacing in Equipment section (uniform 2pt spacing)
  • Lighting Conditions: Now shows "N/A" when no lighting data entered instead of hiding section
  • Better Organization: Cleaner, more consistent session detail layout

πŸ› Bug Fixes

  • CSV Import: Fixed column indexing after adding filter columns
  • Filter Seeding: Filters now seed independently of films (no longer blocked by existing data)
  • Spacing Issues: Corrected inconsistent spacing in session detail views

Beta 0.74.0 - January 11, 2026

Densitometer Reliability & Onboarding UX

πŸ”§ Densitometer Improvements

Enhanced Connection Reliability

Significant improvements to USB densitometer stability and user experience:

  • Simplified disconnection handling: Single "OK" alert instead of complex reconnection dialog
  • Fixed reconnection functionality: Proper state reset after disconnection errors
  • Auto-cleanup on read errors: Automatic connection reset when errors occur
  • Improved status indicators: "Disconnected" shown with red indicator when connection lost
  • Red status dot when disabled: Clear visual feedback when densitometer feature is off
  • Better error recovery: Handles connection errors gracefully without hanging

✨ Onboarding Experience

Searchable Equipment Selection

First-run onboarding now includes powerful search capabilities:

  • Searchable film selection: Live filtering as you type, making it easy to find your favorite films
  • Searchable developer selection: Quick access to specific developers from the large library
  • Search UI: Magnifying glass icon with clear button (X) for easy text clearing
  • Empty states: "No films found" / "No developers found" messages when search returns no results
  • Better for large libraries: Navigate 200+ films and 100+ developers efficiently

🧹 Data Cleanup

Refined default equipment library for black & white photography focus:

  • Removed color films: Kodak Aerocolor IV 2460 and Kosmo Ultramax 800 no longer in defaults
  • Removed C-41 developer: Color-only processing removed from defaults
  • B&W focus: All default films and developers now black & white only
  • Cleaner experience: More relevant defaults for Zone System testing

πŸ“š Documentation Organization

  • Documentation cleanup: 22 historical markdown files archived to `/archive` folder
  • Added ROADMAP_FUTURE_FEATURES.md: Comprehensive future planning document
  • Added ROADMAP_REALITY_CHECK.md: Project status audit comparing plans vs. reality
  • IOKit documentation: Added USB rewrite planning and status documents
  • Print Context spec: Added v2.0 darkroom workflow design document

Hardware Status: IOKit USB implementation has been fully tested with actual Printalyzer hardware. All read/write operations, connection handling, and error recovery verified. App Sandbox re-enabled and production-ready.

Beta 0.73.0 - January 4, 2026

POSIX Serial Port & App Sandbox

πŸ”§ Major Technical Improvements

Printalyzer Serial Port Rewrite

Complete rewrite of USB densitometer communication using POSIX serial ports instead of IOKit. This provides better reliability and compatibility with macOS App Sandbox requirements.

  • POSIX serial I/O: Direct /dev/cu.usbmodem* access with termios configuration
  • 115200 baud, 8N1: Standard serial port settings for CDC ACM devices
  • Background threading: Continuous read loop without blocking UI
  • Automatic device discovery: Scans /dev for connected Printalyzer
  • Simplified architecture: SerialPortManager replaces complex IOKit code

✨ New Features

Automatic Mode Validation

ZoneLab now validates that your Printalyzer is in the correct mode for film density measurements:

  • Transmission mode required: Film density measurements need T mode readings
  • Error alerts: Clear warnings if device is in Reflection (R) or UV (U) mode
  • User guidance: Instructions to switch device mode when necessary
  • Prevents invalid data: Won't accept R or U readings for film tests

πŸ”’ App Sandbox Compliance

Full macOS App Sandbox support for App Store distribution:

  • App Sandbox enabled: Required for Mac App Store submission
  • Serial device entitlement: Allows USB serial port access within sandbox
  • USB device entitlement: Future-proofing for additional hardware support
  • File access entitlement: User-selected file read/write operations
  • Print entitlement: Printing capabilities preserved

πŸ› Bug Fixes

  • Line processing bug: Fixed double CRLF splitting that prevented readings from being processed
  • Connection reliability: Improved auto-connect and reconnect behavior
  • Permission errors: Resolved "Operation not permitted" errors in sandboxed builds
  • Reading flow: Fixed callback chain from SerialPortManager β†’ DensitometerManager β†’ DensitometerState

For Printalyzer Users: Make sure your device is in Transmission (T) mode before starting a reading session. The app will alert you if you need to switch modes.

Technical Note: This update abandons the complex IOKit USB approach in favor of standard POSIX serial port I/O. The Printalyzer appears as a CDC ACM class device, which macOS treats as a virtual serial port (/dev/cu.usbmodem*). This approach is simpler, more reliable, and compatible with App Sandbox restrictions.

Beta 0.72.0 - January 1, 2026

Public Beta Launch

πŸš€ Public Beta Release

  • TestFlight distribution: First public beta available via TestFlight
  • Public testing: Opened to external beta testers
  • User feedback integration: TestFlight feedback system enabled

✨ Features

  • Zone System testing methodology: 10-stop wedge test (Zones I-X) plus Zone 0 (base + fog)
  • Effective ISO determination: Calculate the effective ISO (EI) for your specific film/developer/camera/lens combination and procedures
  • Full 11-zone analysis: Complete characteristic curve analysis with CI and Gamma measurements
  • Zone V quick mode: Single grey card measurement for fast effective ISO testing
  • Printalyzer USB integration (Phase 1): Initial USB densitometer support
  • Session comparison: Compare up to 5 tests simultaneously with overlay charting
  • Process documentation: Log developer, time, temp, dilution, and agitation for each test
  • Equipment library: Manage films, developers, cameras, lenses, grey cards
  • CSV export/import: Data portability and backup
  • Dark theme UI: with a 3 column design

About Effective ISO: ZoneLab determines the effective ISO (EI) for your specific process by finding where 18% grey (0.72 density) falls in your exposure range. This is not ISO 6:1993 laboratory film speed testingβ€”it's practical Zone System testing for optimizing your personal workflows.

Beta 0.7 - January 1, 2026

Tabbed Three-Column Layout

✨ Major UI Redesign

  • Three-column layout: Tool panels (left), chart (center), session library (right)
  • Collapsible sidebars: Toggle visibility with keyboard shortcuts
  • Chart improvements: Hover interactions, better legend, session colors
  • Session filtering: Filter by film, developer, camera, lens
  • Drag-and-drop reordering: Organize sessions in library

Older Versions

Alpha 0.11 - December 18, 2025

Alpha 0.1 - November 18, 2025

Need Help?

For additional support, bug reports, or feature requests: