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-black and --clip-white for 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-out with INPUT_DIR placeholder support
  • Global config file support (~/.pprc/configs/default.json)
  • Last-run config saved automatically — copy to reuse settings

License

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