[ The Workspace ]
The backend is a Rust workspace. Each crate owns one concern. The Tauri commands stay thin: the real work lives in the engine, core, and render crates, never in the app shell.
redlnx-common Shared types and errors. The foundation every other crate builds on. redlnx-core RAW decode, EXIF, thumbnails, the raw_processor that unpacks the sensor data. redlnx-render Develop operators and the render / export pipeline. RAW and XMP to JPEG, WebP, AVIF, TIFF. redlnx-engine Orchestration: the processing pipeline, culling, scoring, profiling, the adaptive style model. redlnx-xmp XMP sidecar read and write, the format Lightroom-oriented workflows speak. redlnx-lightroom .lrcat catalog parsing. Reads the Lightroom SQLite catalog directly. redlnx-ml The ONNX runtime layer and model loading, including the provider fallback chain. redlnx-app The Tauri 2 desktop shell and the thin command layer. Real logic lives in the crates above. [ Local AI Runtime ]
Inference runs through ONNX on your own hardware. There is no inference server and no cloud queue. The runtime picks the fastest execution provider it can actually use and falls back, in order, until it reaches the CPU.
The fallback is honest. A GPU provider that registers but cannot run a given operator does not silently mislabel a CPU run as accelerated; the work falls through to the CPU, correct and slower, and is reported as such.
[ RAW + Colour Pipeline ]
RedLnx owns its own RAW path. The heart of it is one seam: the conversion from camera-native linear light to a neutral sRGB-linear working space, before any look is applied. Operators run in that space; output encoders sit at the end.
The seam
Sensor data is unpacked, demosaiced to camera-linear RGB, then mapped through the camera colour matrix into sRGB-linear. Keeping that seam explicit is what lets the develop operators, and a future in-pipeline denoise step, work on clean linear data rather than on an already-cooked image.
Demosaic (in progress)
The demosaic stage is a faithful, line-by-line port of LibRaw, and it is not finished. The current state:
- Bayer sensors demosaic through an AAHD (anti-aliasing AHD) port. This is the default Bayer path today.
- X-Trans (Fuji) sensors demosaic through a three-pass Markesteijn port. That is the shipped default, and it is validated.
- AMaZE, the state-of-the-art classical Bayer demosaic, is being ported and is gated off by default; until the port body lands it delegates to the AAHD path.
Further LibRaw stages (pre-demosaic CFA cleanup, highlight reconstruction) are scaffolded but not yet wired into the default render. We do not claim a complete in-house RAW processor. That is roadmap work, stated as roadmap work.
Tone map
After the colour conversion, a Timothy Lottes tone curve maps linear light into a neutral base look. Neutral is the point: it is a faithful base to build a style on, not a baked-in aesthetic. Looks are applied on top, learned from your own edits.
Output
The export side encodes to JPEG, WebP, and TIFF, plus AVIF behind a build-time cargo feature (its encoder needs libaom / libdav1d present at build, on Linux). An optional in-pipeline AI denoise step exists at the camera-linear seam; it is opt-in, off unless explicitly enabled, and not something every release necessarily turns on.
[ LOCAL / AUDITABLE / AGPL ]
No network path in the editing flow.
The cull, develop, render, and inference paths do not contact a network. There is no telemetry, no analytics, no upload path, no account. Your catalog, faces, coordinates, and edit history stay on your disk.
The only outbound connections live in clearly bounded places: checking for and fetching releases or runtime components from the settings flow, and talking to a local model endpoint you run yourself for optional dataset tooling. None of it touches your photos, and none of it runs while you edit.
The whole thing is AGPL-3.0. A corporation that wraps RedLnx into a proprietary cloud service has to release the entire stack under the same terms. The license is the doctrine, written in legal code.
Do not take any of this on faith. Read the code.