Release Notes
What's New in ZoneLab
Beta 0.78.0 - February 9, 2026
Enhanced Film Testing Calculations
π Gradient-Adjusted EI Calculations
More Accurate Film Speed Testing
Improved calculation methodology based on established sensitometric principles:
- 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 (industry standard)
- 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
Professional Sensitometric Metrics
Fog-adjusted density tracking separates film base from actual film 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
- Professional Testing: Follows established sensitometric analysis methods
π 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
- Industry Terminology: Uses logH notation matching professional sensitometry
- 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 Sensitometric Metric Columns
CSV format expanded with professional film testing metrics:
- 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 sensitometric 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 new metrics defaulting to 0.0
- Database Migration: Seamless - new attributes default to 0.0 for existing sessions
- Re-editing: Old sessions recalculate with improved methodology when edited for better 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.serialentitlement - IOKit History: Archived IOKit USB implementation documentation as completed alternative approach
- Build Settings: Explained that
ENABLE_APP_SANDBOX = NObuild 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-sandboxin ZoneLabApp.entitlements - Serial Access: POSIX serial port access granted via
com.apple.security.device.serialentitlement
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
- Printalyzer densitometer planning and initial implementation
- USB integration architecture design
- Protocol analysis and documentation
Alpha 0.1 - November 18, 2025
- Initial internal alpha release
- Core ISO calculation functionality
- Basic UI and data model
- Equipment library foundation
Need Help?
For additional support, bug reports, or feature requests:
- Email: beta@zonelab.app
- TestFlight Feedback: Use the built-in feedback feature in TestFlight
- User Guide: Read the complete user guide