Lumen is an open Rust architecture for ingest, restoration, AI super-resolution, color grading, forensic clarification, audio cleanup, measurement, and delivery — across desktop, CLI, web, and cloud, from one core.
Five Lumen effects, ported faithfully to JavaScript and running
against a sample image right here. Same effect IDs, same parameter
shapes, same scene-linear math, same recipe JSON the
lumen pipeline CLI consumes. Drag the sliders and
watch the output update in real time.
lumen colorize --model PATH.onnx.
lumen pipeline --recipe
{}
Built from a 30-category, ~1,140-leaf engineering spec. Every effect, library, and integration speaks the same Rust core API, so a forensic clarification pipeline and a wedding-photo grade look identical to the scheduler.
CCTV-grade dehaze (Dark Channel Prior), CLAHE plate clarification, deblock, deblur, motion compensation, and Ed25519-signed chain-of-custody manifests with BLAKE3 content hashes.
Scene-linear ACEScg float32 working space. Primary wheels, curves, .cube LUT loader, denoise, sharpen, bicubic upscale, rect masks with feather, audio noise reduction with LUFS loudness normalization.
Pure-Rust ONNX inference via tract. CHW image tensors, alpha-preserving frame round-trip, model registry with BLAKE3-pinned reproducibility. wgpu compute (Vulkan/Metal/ DX12/WebGPU) for hot paths.
Every category from the source spec has a working implementation with unit tests. Built-in effects are listed with their effect IDs; library categories show the supporting crate.
PNG/JPEG/TIFF/WebP/BMPMP4/MOV/MKV (FFmpeg)RAW (CR2/NEF/ARW/DNG/RAF/ORF)HEIF/AVIF/JXL (feature)brightness_contrastgammasaturationlut3dprimary_wheelscurvesunsharp_maskgaussiandeblockresizecroprotate_orthotranslatelaplacian (DoG)bicubic (Mitchell)motion_blur_directionalskin_smooth_in_rectclahealpha_rect (with feather)dehaze_dcpchannel_isolateThe Rust core ships as a single 14 MB binary with 15 subcommands. Same engine, same recipes, used by the desktop app and the web preview server.
$ lumen probe testvid.mp4
{
"kind": "video",
"metadata": {
"width": 128, "height": 96,
"frame_count": 48, "frame_rate": { "num": 24, "den": 1 },
"duration_secs": 2.0, "codec": "h264", "container": "mov"
}
}
$ cat recipe.json
{
"input": "in.png",
"output": "out.png",
"chain": [
{ "effect": "lumen-fx-weather.dehaze_dcp", "params": { "omega": 0.85 } },
{ "effect": "lumen-fx-text.clahe", "params": { "tiles_x": 8 } },
{ "effect": "lumen-fx-deblur.laplacian", "params": { "amount": 0.6 } },
{ "effect": "lumen-fx-color.primary_wheels", "params": { "gamma_r": 1.05 } },
{ "effect": "lumen-fx-upscale.bicubic", "params": { "scale": 2.0 } }
]
}
$ lumen pipeline --recipe recipe.json
wrote out.png
$ lumen video-pipeline --recipe recipe.json --codec h264 --crf 18
wrote out.mp4 (48 frames in 312 ms)
$ lumen keygen
{ "secret_key_hex": "...", "public_key_hex": "..." }
$ lumen sign --input in.png --output out.png --recipe recipe.json --secret-key-hex $SK
wrote out.lumen-cco.json
$ lumen verify --signed out.lumen-cco.json --public-key-hex $PK
{ "verified": true, "manifest": { "render_id": "...", "input_hash": "blake3:..." } }
$ lumen measure --a in.png --b out.png
{ "mse": 0.054, "psnr": 12.63, "ssim": 0.94 }
$ lumen report --input in.png --output out.png --recipe recipe.json --html-out report.html
wrote report.html
$ lumen serve --recipe recipe.json --port 8723
lumen serve listening on http://127.0.0.1:8723/
watching /path/to/recipe.json (re-renders on change)
A 35-crate Rust workspace produces a desktop app (Tauri 2 + React),
a CLI, a live-preview HTTP server, a planned web build (WASM core),
and a cloud server target — all from one core. Every effect
implements the same Effect trait, so built-ins and
Lua plugins are indistinguishable to the scheduler.
The stack is chosen so a solo developer can ship every target. Heavy libraries are linked, not reimplemented; bindings live in isolated crates so the workspace compiles green even when you don't have a system FFmpeg or libheif.
The workspace builds clean on macOS, Linux, and Windows. First build pulls a few hundred crates (FFmpeg + tract + wgpu); a no-op rebuild finishes in seconds.
# 1. Install Rust if you haven't (one-time)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
# 2. Build the workspace
cd ~/Lumen
cargo build --bin cli
# 3. List the registered effects (18 of them, across 13 categories)
./target/debug/cli list-effects
# 4. Open the live preview
./target/debug/cli serve --recipe path/to/recipe.json
# → http://127.0.0.1:8723/ (auto-reloads on edits)
License: Apache-2.0. Source and full
effect spec live at ~/Lumen/. See
docs/PLAN.md for the phased build plan and
docs/PIPELINE.md for the recipe format spec.