A Rust RAW image processing toolkit with a desktop editor, web editor (WASM), and backend server.
Run once to install dev tooling:
just setup
This installs the wasm32-unknown-unknown target, trunk (WASM bundler), and cargo-watch (hot-reload).
Run just with no arguments to see all available recipes.
| Command | Description |
|---|---|
just run-desktop |
Run the desktop editor (release) |
just dev-desktop |
Run with hot-reload on code changes |
just build-desktop |
Build release binary |
| Command | Description |
|---|---|
just dev-web |
Start dev server with hot-reload (default: http://127.0.0.1:8080) |
just build-web |
Build release WASM bundle to apps/web/dist/ |
| Command | Description |
|---|---|
just run-server |
Start the API server on http://localhost:3000 |
just dev-server |
Run with hot-reload on code changes |
just build-server |
Build release binary |
| Command | Description |
|---|---|
just check |
Type-check all targets (native + WASM) |
just test |
Run all tests |
just lint |
Format + clippy |
just fmt |
Format code |
just clippy |
Run clippy lints |
just clean |
Remove all build artifacts |
curl -F file=@photo.cr3 \
-F 'settings={"wb_r":1.2,"wb_g":1.0,"wb_b":0.9,"shadows":0.1,"highlights":0.0,"sharpen_amount":0.5,"sharpen_radius":1.0,"sharpen_threshold":0.01}' \
http://localhost:3000/api/export -o output.png
# Submit batch
curl -F file=@photo1.cr3 -F file=@photo2.cr3 \
-F 'settings={"wb_r":1.0,"wb_g":1.0,"wb_b":1.0,"shadows":0.0,"highlights":0.0,"sharpen_amount":0.0,"sharpen_radius":1.0,"sharpen_threshold":0.01}' \
http://localhost:3000/api/batch
# Check job status
curl http://localhost:3000/api/jobs/<job-id>
# Download result
curl http://localhost:3000/api/jobs/<job-id>/result -o output.png
# Create
curl -X POST http://localhost:3000/api/presets \
-H 'Content-Type: application/json' \
-d '{"name":"Warm Daylight","params":{"wb_r":1.3,"wb_g":1.0,"wb_b":0.8,"shadows":0.1,"highlights":0.0,"sharpen_amount":0.3,"sharpen_radius":1.0,"sharpen_threshold":0.01}}'
# List all
curl http://localhost:3000/api/presets
# Get one
curl http://localhost:3000/api/presets/<preset-id>
# Delete
curl -X DELETE http://localhost:3000/api/presets/<preset-id>
Connect via WebSocket to ws://localhost:3000/ws/collab/<session-id>. Send and receive JSON EditorParams messages to sync slider state across clients.
CR2, CR3, NEF, ARW, DNG, RAF