https://github.com/marcinz606/negpy
Tool for processing film negatives.
https://github.com/marcinz606/negpy
film-photography image-processing photography
Last synced: about 2 months ago
JSON representation
Tool for processing film negatives.
- Host: GitHub
- URL: https://github.com/marcinz606/negpy
- Owner: marcinz606
- License: gpl-3.0
- Created: 2025-12-27T15:21:10.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2026-01-25T19:12:06.000Z (5 months ago)
- Last Synced: 2026-01-26T11:11:34.001Z (5 months ago)
- Topics: film-photography, image-processing, photography
- Language: Python
- Homepage:
- Size: 40 MB
- Stars: 139
- Watchers: 10
- Forks: 7
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Roadmap: docs/ROADMAP.md
Awesome Lists containing this project
README

NegPy
**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.
---

---
## ๐ New User Guide
**[Click here to read the USER_GUIDE.md](docs/USER_GUIDE.md)** โ A complete walkthrough of the NegPy workflow, features, and controls.
---
## โจ Features
* **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](docs/KEYBOARD.md)
* **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](docs/TEMPLATING.md).
---
### ๐งช How it works
[๐ Read about the math and the pipeline here](docs/PIPELINE.md)
---
## ๐ Getting Started
### Download
Grab the latest release for your OS from the **[Releases Page](https://github.com/marcinz606/NegPy/releases)**.
#### **๐ง Linux**
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](CONTRIBUTING.md)
#### **๐ก๏ธ Unsigned Software Warning**
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**:
1. Double click `.dmg` file & drag the app to `/Applications`.
2. Open Terminal and run: `xattr -cr /Applications/NegPy.app` (this gets rid of the warning).
3. Launch it.
**๐ช Windows**:
1. Run the installer (ignore the warnings)
2. Start the app and click through the warnings.
---
## ๐ Data Location
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](#troubleshooting) below.
---
## ๐ง Troubleshooting
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.
```toml
[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.
---
## Roadmap
Things I want to add later: [ROADMAP.md](docs/ROADMAP.md)
## Changelog:
[CHANGELOG.md](docs/CHANGELOG.md)
---
### For Developers
Check [CONTRIBUTING.md](CONTRIBUTING.md) for details.
## โ๏ธ License
Copyleft under **[GPL-3](LICENSE)**.
## Support
If you like this tool, maybe buy me a roll of film so I have more test data :)
[](https://ko-fi.com/marcinzawalski)