NegPy is a tool for processing film negatives. I built it because I wanted something made specifically for film scans that goes beyond a simple inversion tool. It simulates how film and photographic paper work but also throws in some lab-scanner conveniences.
It is built with Python, running natively on Linux, macOS, and Windows.
Click here to read the USER_GUIDE.md — A complete walkthrough of the NegPy workflow, features, and controls.
- No Camera Profiles: It doesn't use camera profiles or ask you to color-pick the border. It uses math to neutralize the orange mask based on channel sensitometry.
- Positive/Slide Support: A dedicated E-6 mode for processing slide film with optional normalization to save expired or faded film.
- Film Physics: It models the H&D Characteristic Curve of photographic material using a Logistic Sigmoid function instead of doing simple linear inversion.
- Batch Normalization: Perform bounds analysis for all loaded files and apply averaged settings to all.
- GPU Acceleration: Real-time processing and export rendering using Vulkan/Metal.
- Dust Removal: Automatic and manual healing tools with grain synthesis to keep scans clean without looking plastic.
- File Support: Supports standard RAWs/TIFFs, and specialized formats like Kodak Pakon scanner raw files.
- Non-destructive: original files are never touched; edits are stored as recipes.
- Keyboard Shortcuts: see here
- Database: All edits live in a local SQLite database, keyed by file hash. You can move or rename files without losing your work.
- Persistent Undo/Redo: Up to 100 edits saved in local db. Persistent across sessions.
- Print Ready: Export module designed for printing, featuring border controls, ICC soft-proofing, and dynamic filename templating.
📖 Read about the math and the pipeline here
Grab the latest release for your OS from the Releases Page.
I provide an .AppImage. Make it executable using chmod +x and It should just work.
You can also clone the repo and build it yourself, instruction here: CONTRIBUTING.md
Since this is a free hobby project, I don't pay Apple or Microsoft ransom for their developer certificates. You'll get a scary warning the first time you run it.
🍎 MacOS:
- Double click
.dmgfile & drag the app to/Applications. - Open Terminal and run:
xattr -cr /Applications/NegPy.app(this gets rid of the warning). - Launch it.
🪟 Windows:
- Run the installer (ignore the warnings)
- Start the app and click through the warnings.
Everything lives in your Documents/NegPy folder:
edits.db: Your edits.settings.db: Global settings like last used export settings or preview size.cache/: Thumbnails (safe to delete).export/: Default export location.icc/: Drop your paper/printer profiles here.override.toml: Startup overrides — see Troubleshooting / override.toml below.
If NegPy crashes on startup or has rendering issues, edit Documents/NegPy/override.toml. It is created automatically on first run with sensible defaults for your OS.
[rendering]
# Options: "auto", "vulkan" (Linux/Win), "dx12" (Win), "metal" (macOS), "cpu"
backend = "vulkan"
[display]
# Qt scene-graph backend. Options: "auto", "vulkan", "d3d12", "metal", "opengl", "software"
qt_rhi_backend = "auto"
# Window system plugin (Linux only). Options: "auto", "xcb", "wayland"
qt_platform = "auto"
[performance]
# Cap GPU texture size in pixels — useful on low-VRAM cards. "auto" = no limit.
max_texture_size = "auto"
# Force HQ preview on/off. Uncomment to override saved preference.
# force_hq_preview = false
[logging]
# "debug", "info", "warning", "error"
level = "info"Setting backend = "cpu" disables GPU acceleration entirely — useful if the GPU backend crashes on your hardware.
Things I want to add later: ROADMAP.md
Check CONTRIBUTING.md for details.
Copyleft under GPL-3.
If you like this tool, maybe buy me a roll of film so I have more test data :)
