Changelog
1.0.0
April 2026
Pipeline
- Pure JavaScript pipeline — no ImageMagick or sharp required
- Multi-threaded worker-based conversion (whole roll in seconds)
- Direct buffer path to processing engine, no intermediate TIFF files
- ~40–50x faster than legacy negfix8 + ImageMagick pipeline
Inversion
- Custom inversion engine replaces negfix8 (no more ImageMagick dependency)
- Roll-level analysis — computes a shared color profile across all frames for consistent results
- Automatic outlier frame rejection — backlit or unusual frames are excluded from the shared profile so they don't skew the rest of the roll
- Percentile-based pixel rejection — ignores brightest/darkest pixels (default 0.1%) to prevent dust and specular highlights from affecting the profile
- Tunable border exclusion — ignores outer edge pixels (default 2%) to eliminate film holder and rebate artifacts
- Independent shadow/highlight clipping —
--clip-blackand--clip-whitefor fine control over contrast stretch - Clipping risk detection — warns when narrow-density negatives may clip too aggressively, with suggested alternative settings
- LUT-based per-pixel inversion — ~26x faster than per-pixel
Math.pow() - Per-image balancing mode — optional per-frame profiling via
--per-image-balancing
CLI & Configuration
- macOS Finder Quick Action (
--install-quick-action) - Automatic update notifications via npm dist tags
- Output directory auto-increment to avoid overwrites
--dir-outwithINPUT_DIRplaceholder support- Global config file support (
~/.pprc/configs/default.json) - Last-run config saved automatically — copy to reuse settings
License
- Switched from GPL-3.0 to PolyForm Noncommercial 1.0.0. Free for personal, educational, and non-commercial use.
0.x (Legacy)
Earlier releases
- Inversion & balancing via third party negfix8 script (ImageMagick-based)
- Basic planar raw to TIFF conversion, each file individually inverted
- Initial CLI