Skip to content

Lumina JSProfessional image editing in the browser.

A TypeScript SDK built on a C++ engine. All processing runs locally via WebAssembly — images never leave the device. RAW decoding, non-destructive adjustments, and precision color science.

Quickstart

Install the package and start editing images in minutes.

sh
npm install @luminaphoto/lumina-js

Create an editor, load an image, stream a live preview, then apply:

typescript
import { createEditor } from '@luminaphoto/lumina-js';

const editor = createEditor({ licenseKey: 'YOUR_KEY' });
await editor.initialize();

const { width, height } = await editor.loadImage(buffer, 'jpeg');

// Preview without committing — the main thread stays free
const preview = await editor.previewExposure(1.2);
imageEl.src = URL.createObjectURL(new Blob([preview.imageData]));

// Apply when the user confirms
await editor.applyExposure(1.2);
await editor.dispose();

Two APIs, one engine

Choose based on your context. Both tiers share the same adjustment model, operation semantics, and undo/redo behavior.

Client API — async, Web Worker-based. The default choice for interactive UIs where the main thread must stay responsive.

Core API — synchronous, direct WASM access. For pipeline processing, custom workers, or environments where you control the thread model.

typescript
// Client API — all operations return Promises
const preview = await editor.previewExposure(1.2);
await editor.applyTemperature(-20, 5);

// Core API — synchronous, zero async overhead
const preview = editor.previewExposure(1.2);
editor.applyTemperature(-20, 5);
const result = editor.exportImage('jpeg', 95);

Choosing an API →

Proprietary. All rights reserved.