Appearance
A TypeScript SDK on a C++ engine. Non-destructive adjustments, RAW decoding, and 32-bit HDR — all via WebAssembly, all on-device.


Quick start
import { createEditor } from '@luminaphoto/lumina-js'; const editor = createEditor({ licenseKey: '...' }); await editor.initialize(); // Load any image: JPEG, PNG, WebP, RAW const meta = await editor.loadImage(buffer, 'raw'); // Stream a live preview — main thread stays free const preview = await editor.previewExposure(1.2); imageEl.src = URL.createObjectURL(new Blob([preview.imageData]));
JPEG · PNG · WebP · RAW










Load raw sensor files directly. White balance metadata extracted automatically.
All processing in linear light. Perceptual conversion applied once, at export.
Images processed entirely on-device. Nothing transmitted. Zero cloud dependency.
Single license key, time-boxed browser tokens, no per-seat or per-image metering.
Flexible architecture
Both share the same adjustment model, operation semantics, and undo/redo behavior.
Off the main thread. All methods return Promises. The default for interactive browser UIs.
const preview = await editor.previewExposure(1.2); await editor.applyTemperature(-20, 5);
Zero async overhead. For pipelines, custom workers, or environments you control.
const preview = editor.previewExposure(1.2); editor.applyTemperature(-20, 5); const result = editor.exportImage('jpeg', 95);