Releases: marcinz606/NegPy
Releases · marcinz606/NegPy
Release list
NegPy 0.34.0
0.34.0
- Change: Dodge & Burn moved into the print exposure — masks now adjust exposure before the paper curve instead of scaling the finished image, which is how dodging and burning physically work. Strong burns and dodges roll off through the paper's toe and shoulder instead of clipping flat. The section moved to the Exposure tab; existing dodge/burn edits will render slightly differently.
- Change: Selenium and Sepia work on print density — both toners now convert silver density instead of tinting by brightness, matching the real baths. Selenium acts on the densest areas (deeper blacks, cooler shadows); sepia acts on the thinnest (warmer highlights, shadows hold). Existing toned edits will render differently.
- Change: Export Presets main button now runs only the selected frames (previews the single frame when just one is selected) instead of always exporting everything. @jboneng
- New: Export Presets gains an export-all-visible option, with a confirmation dialog before it runs. @jboneng
- Fix: dodge/burn mask overlay now shows the real feathered falloff instead of a hard-edged polygon — the on-canvas mask previously didn't match the soft edge the pipeline actually renders.
- Fix: exporting all RGB-scan triplets no longer fails with "Input/output error" on most frames. Batch export was reusing stale saved paths for each frame's green/blue exposures instead of the ones the triplet was actually built from, so it tried to read files that weren't there; it now uses each frame's own exposures, the same as exporting one at a time.
- Fix: exported JPEG EXIF no longer blocks ExifTool from rewriting tags — stale RAW preview SubIFD pointers are now stripped on export. @jboneng
NegPy 0.33.0
0.33.0
- New: Temperature slider — a Kelvin lever above the CMY white balance: drag it and Magenta/Yellow move together along the warm–cool axis in the right ratio, like re-dialing a dichroic filter pack, while your green–magenta tint stays put. Move M/Y (or Pick WB) yourself and the slider reads back the print's temperature instead. Warm sits on the right, travel is mired-linear (equal drag = equal perceived shift), and
T/Gnudge it from the keyboard. The thermometer button locks the temperature for the roll: every frame you open gets re-aimed to it — keeping its own tint — and the lock survives restarts. - Change: White balance sliders are real CC filtration — ±1.0 = ±20cc of density on any frame. Before, the same slider position did more on a contrasty negative and less on a flat one, so a WB that worked on one frame drifted on the next. Frames with saved WB will shift slightly.
- Change: Paper base tint sits in the paper white — Fujicolor Crystal Archive's cool tint now lives in the base density, so it shows in the highlights and disappears into the blacks, like actual paper. Turning off Paper White turns the tint off with it.
- New: RA-4 dye coupling — Kodak Endura and Fujicolor Crystal Archive model the unwanted absorptions of their print dyes. Greys stay neutral; strong colours shift the way they do on real paper. Values estimated based on manufacturers technical sheets.
- New: Histogram pixel marker — hover the image and the Analysis histogram marks the pixel's R, G and B values with dashed lines in channel colours.
- New: Tone-curve drag feedback — while dragging a Tone slider, the H&D chart keeps the pre-drag curve as a faded ghost so you see exactly what moved; Toe/Shoulder sliders glow their zone of the curve, Grade/Density highlight the pivot crosshair.
- Change: Lock Bounds is now a labeled button beside Linear RAW in the Process panel, instead of a small icon squeezed next to the process dropdown that many likely missed.
- New: Expanded tutorial — the walkthrough now explains the physics behind the pipeline (log density, the H&D print, orange-mask metering) and why a tight crop or the Analysis Buffer matters for clean black/white points. New steps for the Analysis Buffer, Crosstalk dye unmixing, roll consistency, Cast Removal and the Finish panel.
- Fix: the GPU histogram was binning scene-linear values since the scene-linear pipeline rework (0.30.0), reading darker than the CPU one — both now bin the display-encoded image.
- Fix: the bundled RGBScan input ICC profile used an sRGB TRC instead of the gamma 2.2 curve NegPy's pipeline expects at that stage, lifting the toe and giving a washed-out look — rebuilt to match, same colour transform. @thetalkingdrum
- Fix: a roll's Batch Analysis baseline no longer leaks onto other rolls — the roll-wide bounds and colour balance were being remembered globally and quietly applied to every freshly opened file, so a different film stock (e.g. mask-less Phoenix II) came up with a heavy cast until you hit Reset. The baseline now stays with the roll it was measured on; open a new roll and it meters per frame again.
NegPy 0.32.1
0.32.1
- Perf: fewer disk syncs on every edit (settings writes batched into one transaction), smoother slider dragging, faster contact-sheet/batch/tiled export, and lighter preview rendering — no change in output.
NegPy 0.32.0
0.32.0
- Change: Crosstalk moved to the Process panel — the unmix now applies to the raw negative densities before analysis and inversion, making it more physically correct. Old edits migrate automatically, but expect a subtle shift on frames that used Separation. Re-run Batch Analysis after changing it.
- Change: Process panel split into Process and Roll Analysis collapsibles.
- New: Print stats row — exposure in stops and CMY white balance as dichroic CC filtration (±1.0 = ±20cc).
- New: Scan clip warning — per-channel share of source pixels at sensor white (red above 1%); in a negative scan that clipping destroys base/shadow separation and can only be fixed at capture.
- Change: halation is masked in linear light (its footprint no longer moves with Grade/Density) and, like glow, composited additively.
- Fix: the H&D chart now matches the render at hard grades — the grade-coupled toe/shoulder was applied by the engine but not shown by the chart.
NegPy 0.31.2
0.31.2
- Fix: in the Apply dialog, ticking Tonal span or Colour balance no longer clears the other — each now toggles only its own axis (Use Luma Average / Use Colour Average) on the target frames and leaves the other as it was. (#375)
- Fix: the filmstrip thumbnail now tracks the current edit — resetting settings or adjusting sliders updates the grid preview in place, instead of leaving it stale until you switch, save or export. (#376)
NegPy 0.31.1
0.31.1
- Fix: new bundled Lab Crosstalk matrices weren't copied to the user's profile folder on startup once any profile already existed there — each bundled matrix is now seeded independently, so later releases' additions show up without waiting on a fresh install.
NegPy 0.31.0
0.31.0
- Default tone curve retuned — Auto Grade targets slightly lower contrast, and the midtone contrast boost eases in more gradually, for a softer out-of-the-box look.
- Cast Removal is now a slider — the toggle becomes a 0–1 strength slider to dial colour-cast neutralization back partway (default 0.5). A small auto button (like Density/Grade) sets the strength from how confidently the frame's neutral references read — clean greys full, few-neutral scenes gentler — with the slider trimming on top.
- Lens distortion correction — the Flat-Field profile gains a k1 slider for radial (barrel/pincushion) correction, alongside illumination correction. Folded into the geometry transform (no RAW re-decode on drag), scale-to-fill, and kept in sync with crop/retouch/dodge-burn.
- Apply settings dialog — the Sync Edits / Sync Crop buttons become one Apply button opening a dialog: pick Selected frames or the whole roll, tick any of Process, Crop, Rotation, Exposure, Color, Finish, Tonal span and Colour balance. The bounds options broadcast the source frame's normalization as a locked roll baseline (single-frame Batch Normalization).
- Optional edit sidecars — mirror edits to plain
.negpyfiles next to the source for archival (SQLite stays primary). Off by default; enable in the Export panel or write on demand. Loading falls back to a beside-source sidecar when there's no DB entry, and promotes it into the DB. - Exposure panel split into Colour + Tone — two independent collapsible sections, each with its own edited badge and reset: Colour (white balance, Cast Removal) and Tone (density, grade, toe/shoulder, contrast lift, paper). The region selector is now an icon column beside the CMY sliders (yellow when adjusted), the heading names the active region, and Pick WB is an eyedropper. Colour shows an RGB mini-histogram, Tone the luminance one.
- Geometry gets its own tab — the Setup tab (Presets, Geometry, Process) is split: Geometry and Flat Field move to a dedicated tab, leaving Setup as Presets + Process.
- Kodak Aerocolor IV 2460 crosstalk matrix added to the bundled Lab Crosstalk profiles (also sold as SantaColor 100 / 1Hundred). @whepper
- Flat master as a per-preset export option — export presets gain a render intent (Print or Flat master), so Export Presets can produce a mix in one click — e.g. JPEG + PNG + Flat Master — independently of the main panel's Print/Flat toggle. Manage Presets' + button now offers a Print or a Flat master preset (flat presets limit format to 16-bit TIFF / Linear DNG). @jboneng
- Fix: toggling Linear RAW no longer leaves a stale magenta cast — the auto-meter cache invalidates when the RAW decode changes.
- Fix: the Flatfield Correction toggle is no longer reset to off when switching files or applying edits — it was colliding with RGB Scan's toggle in saved settings.
- Fix: sidebar labels no longer show an opaque black background patch against lighter section panels, and field labels next to combos/entries now share consistent styling across panels.
- Fix: right-panel sections now stack from the top at their natural height instead of stretching to fill the panel and splitting the leftover space between them.
- Fix: the tutorial overlay's body text no longer pans slightly wider than its popup — long unbreakable strings (e.g. file paths) now wrap instead of pushing the content past the visible width. @seanharding
NegPy 0.30.2
0.30.2
- Cast Removal — cleaner highlights — the per-channel gray balance now anchors a third (highlight) reference, fitting a curve through highlight/midtone/shadow instead of a line. Fixes highlights occasionally overcorrecting past neutral (toward magenta) under 0.30.1.
- More bundled crosstalk profiles — additional Lab Crosstalk matrices for common film stocks, derived from official datasheets. @jboneng
NegPy 0.30.1
0.30.1
- Improved Cast Removal — neutral greys no longer drift slightly green. Cast Removal now balances each colour layer at the midtone as well as the shadows (a true two-point per-channel gray balance), measured only on near-neutral pixels so green-heavy scenes (foliage, skin) can't pull the balance. Previously the midtone leaned on a single luminance reading that is mostly green, leaving a faint green cast on many C-41 conversions. The default look shifts slightly toward neutral.
NegPy 0.30.0
0.30.0
- Scene-linear pipeline — the whole conversion now runs in scene-linear light internally: the creative stages (Retouch, Lab, Local, Toning, Finishing) operate on linear light instead of gamma-encoded data, so their math is physically correct, and the "print" colour space is now the wide-gamut ProPhoto RGB. The output/display transform is applied only at the very end with the correct working-space curve, fixing a latent mismatch where the internal buffer was sRGB-encoded but tagged as a wider space. Dust retouching keeps the same (perceptual) detection but now heals in linear light, with the CPU and GPU paths unified. In practice: more headroom before saturated colours clip, and a more accurate, slightly more saturated default look — existing edits will look a touch different, so re-tune Saturation/Toning to taste.
- Independent roll average for luma and colour — the single Use Roll Average toggle is now two buttons, Use Luma Average and Use Colour Average. You can take the roll-wide tonal-range (black/white-point) baseline while letting each frame find its own colour balance, or vice-versa. With both on it behaves exactly like the old Use Roll Average; with both off, like per-image local.
- Linear RAW on by default — RAW files now decode with neutral (1,1,1,1) multipliers, bypassing the camera's as-shot white balance. You can still re-enable camera WB with the Linear RAW toggle in the Exposure sidebar (off = camera WB applied).
- Faster auto-exposure analysis — the block-median prefilter behind Auto Density/Grade and normalization is now multi-threaded with bit-for-bit identical results, roughly 2.5× faster on large frames, so opening files and batch analysis feel snappier.
- Snappier live preview (GPU) — the GPU preview no longer re-meters the negative every frame (auto-exposure analysis is cached per image and reused while you drag creative sliders), and the engine caches bind groups, uses lighter preview decodes and a source cache. Dragging sliders is dramatically smoother and repeat exports are faster, with identical results.
- Contact-sheet output location & templates — set an explicit output folder for the contact sheet, and save/recall named layout templates. @jboneng
- Flat output tidies the Export panel — the Flat intent hides controls that don't apply, and honours your Print/Pixels sizing. @jboneng
- Export panel reorganised — laid out in export order (output intent, settings, then the Export buttons), with presets, contact sheet and preview tucked into collapsible sections below.
- Rule-of-thirds grid on crop, plus a denser 10×10 leveling grid while fine-rotating.
- Edited controls turn yellow — changed sliders and the tabs holding them tint yellow, so you can see what you've touched.
- VISION3 500T crosstalk matrix added to the bundled Lab Crosstalk profiles.
- Fix: main window now fits small (1368×768) screens, and remembers its size/position.
- Fix: long monitor ICC profile names no longer force a horizontal scrollbar in the Export panel.
- Fix: Pakon
.rawfiles no longer show a thin strip of garbage pixels along the left edge (and process a touch darker) — the loader now skips the file's small header.