main
Image Pipeline
Modular Python framework for chaining image processing steps after Darktable export.
Each pipeline is a Python script that defines a DAG of processing steps. Every step writes its output to a numbered subfolder inside a timestamped run directory.
Requirements
- Python 3.11+
- ImageMagick (
magickorconverton PATH)
Installation
cd /path/to/imagepipeline
pip install -e ".[dev]"
Quick Start
Edit the input path in pipelines/example_grayscale.py, then run:
python pipelines/example_grayscale.py
Or from Python:
from pathlib import Path
from imagepipeline import Pipeline
with Pipeline(name="my_run", input_dir=Path("/path/to/export")) as p:
gray = p.step("imagemagick_grayscale", inputs="input")
p.run()
Output Structure
Each run creates a folder like my_run_20260527143022/:
my_run_20260527143022/
├── pipeline_manifest.json
├── input/ # symlinks to source images
├── imagemagick_grayscale_01/
│ └── photo.jpg
└── ...
Step folders are named {module_name}_{nn} (two-digit counter per module name).
Writing Pipelines
Pipelines are plain Python scripts. Reference previous steps via StepRef objects returned by p.step():
with Pipeline(name="colorsplash", input_dir=INPUT) as p:
rembg_out = p.step("rembg", inputs="input")
bw = p.step("imagemagick_grayscale", inputs="input")
combined = p.step("composite", inputs=[bw, rembg_out], mode="foreground_over")
p.step("darktable_style", inputs=combined, style="vintage.dtstyle")
p.run()
"input"refers to the original input directory- Parameters are passed as kwargs and validated against each module's schema
- Multiple uses of the same module get separate numbered folders
Adding Modules
See docs/MODULE_DEVELOPMENT.md.
Tests
pytest
Description
Languages
Python
100%