Professional photo & video enhancement,
end to end.

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.

30 / 30
Spec categories
35
Rust crates
18
Built-in effects
15
CLI subcommands
155+
Passing tests
Try it · running in your browser

Live demo

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.

Before drag the divider to compare · drop any image here · upload below After
Realistic CCTV samples: Smart Auto: one click — Lumen analyzes the input and picks Auto-Enhance for normal photos, Clarify for blurry / hazy / CCTV stills.
Stylistic presets:
Colorize (heuristic luma → duotone): Heuristic. For real ML colorization use lumen colorize --model PATH.onnx.
Pipeline stages click any stage to use it as the “after” image — pick the last good one if a later step went too far
Recipe JSON · same format as lumen pipeline --recipe
{}
What it does

Three lanes. One pipeline.

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.

🔬

Forensic clarification

CCTV-grade dehaze (Dark Channel Prior), CLAHE plate clarification, deblock, deblur, motion compensation, and Ed25519-signed chain-of-custody manifests with BLAKE3 content hashes.

🎨

Color & restoration

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.

🤖

AI-augmented

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.

Coverage

30 categories, all shipped.

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.

1Input, Formats & Codecs
PNG/JPEG/TIFF/WebP/BMPMP4/MOV/MKV (FFmpeg)RAW (CR2/NEF/ARW/DNG/RAF/ORF)HEIF/AVIF/JXL (feature)
2Playback & Navigation
lumen-playback — LRU frame cache + scrub engine + prefetch
3UI, Workspace & Viewing
apps/desktop — Tauri 2 + React + native IPC
4Exposure, Tone & Range
brightness_contrastgamma
5Color Science & Grading
saturationlut3dprimary_wheelscurves
6Sharpening & Detail
unsharp_mask
7Noise Reduction
gaussian
8Compression Artifacts
deblock
9Geometric & Lens
resizecroprotate_ortho
10Stabilization & Motion
translate
11Deblurring
laplacian (DoG)
12Super-Resolution
bicubic (Mitchell)
13Frame Rate & Temporal
motion_blur_directional
14AI-Powered
lumen-ai — tract-onnx, ImageTensor, identity-check smoke
15Face / Skin / Portrait
skin_smooth_in_rect
16Text / Plate / Object
clahe
17Masking & ROI
alpha_rect (with feather)
18Weather / Atmospheric
dehaze_dcp
19Imaging Modalities
channel_isolate
20Measurement & Analysis
lumen-measure — PSNR / SSIM / MSE in f64
21Audio Enhancement
lumen-audio — spectral NR + ITU BS.1770 LUFS
22Authentication
lumen-auth — Ed25519 signed manifests, BLAKE3 hashes
23Workflow & Non-Destructive
lumen-workflow — Param/Graph diffs + presets
24Collaboration
lumen-collab — .lumenbundle ZIPs + signed share links
25Reporting
lumen-report — self-contained HTML reports
26Export & Encoding
lumen-export — H.264 / H.265 / ProRes 422 HQ via FFmpeg
27Performance & Hardware
lumen-perf — wgpu compute (Metal verified)
28Extensibility / API
lumen-api — Lua plugin host (vendored Lua 5.4)
29Platform & Distribution
lumen-platform — signed licenses, update check
30Quality Assurance
lumen-qa — golden-frame regression harness
In 30 seconds

Drive everything from the CLI.

The 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.

Probe any input — still or video

$ 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"
  }
}

Multi-stage pipeline from a JSON recipe

$ 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

Per-frame video pipeline (same recipe, every frame)

$ lumen video-pipeline --recipe recipe.json --codec h264 --crf 18
wrote out.mp4 (48 frames in 312 ms)

Forensic chain-of-custody

$ 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:..." } }

Reference quality metrics + HTML report

$ 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

Live preview server with auto-reload

$ 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)
How it works

One core. Five surfaces.

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.

Desktop app Tauri 2 + React CLI binary 15 subcommands Live preview HTTP + auto-reload Web (planned) WASM core Cloud server Axum + Tokio Plugin host (Lua) · Tauri IPC · HTTP routes · CLI dispatch · WASM bindings Workflow · Collab · Report · Export · QA · Auth · Platform · Measure project file (.lumenproj) · history · presets · diffs · golden-frame tests 18 built-in effects across 13 categories exposure · color · sharpen · denoise · compression · geometric · stabilize · deblur · upscale · temporal · face · text · mask · weather · modalities I/O · Color · GPU · AI · Playback · Audio FFmpeg + image + rawloader · OCIO ready · wgpu (WGSL) · tract-onnx · LRU cache · spectral / LUFS lumen-core Frame · ColorSpace · Effect trait · Graph + Scheduler · Project · Error · ParamSpec · EffectRegistry
Stack

Boring, capable, fast.

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.

Language
Rust 2021
Memory safety + C++-class performance, no GIL.
Desktop UI
Tauri 2 + React + TS
10× smaller than Electron, native IPC, web-builds-too.
GPU
wgpu (WGSL)
One shader source → Vulkan/Metal/DX12/WebGPU.
AI inference
tract-onnx
Pure Rust, no system ONNX Runtime install.
Video
ffmpeg-next
H.264/H.265/AV1/ProRes, swscale colour conversion.
Color
Scene-linear ACEScg
f32 working space, OCIO bindings ready.
Plugin host
Lua 5.4 (mlua, vendored)
Plugins implement the same Effect trait.
Hashing
BLAKE3 + Ed25519
Content-addressed assets and signed manifests.
Get started

Three commands and you're in.

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.