Free & open source · No ads · No tracking or telemetry · No registration · Photos stay on your device
Starting editor… If this message stays visible, reload the complete HTML file.
A quick guide
A private RAW and JPEG editor
Free and open source. Runs in your browser, with no ads, tracking, telemetry or registration. Photos stay on your device. Many RAW formats are supported, including RW2, CR3, CR2, NEF, ARW and DNG, plus JPEG and other browser images. Exact camera and compression support depends on the decoder.
Brighten a dark portrait
Start with Portrait lift to raise dark and middle tones while keeping brighter values steadier. It also changes other dark objects; it is not face detection. The dark-portrait button sets Portrait lift to 40 and Brilliance to 15, and enables highlight and skin protection. It leaves other sliders in place.
Protect highlights during Exposure reduces positive exposure gain in bright areas. Turn it off for uniform EV: +1 EV doubles linear light. Tone mapping compresses a wide brightness range in one image, including usable above-white RAW values. Strong settings can look flat. It does not merge multiple photos, and JPEG output remains 8-bit SDR.
Contrast separates light and dark around middle lightness. Brilliance lifts darker and middle tones while gently softening the brightest range; it does not sharpen texture. Midtones targets the middle. Lightness broadly shifts perceived brightness and can lift blacks. Gamma bends the curve: above 1 brightens the middle. Shadows targets darker values.
What order is used?
Moving sliders in a different order does not change the result. Choose whether Highlights runs before Exposure or after Exposure and Tone mapping. The live ordered list beside the histogram shows the complete sequence. Every render starts from the working source, so repeated adjustments do not accumulate JPEG damage.
The histogram shows the final preview. Its clipping estimate counts samples with a channel at black or white; this can be intentional. Bright RAW differences are retained until output fitting, but detail already lost at the camera cannot be recreated.
White balance and skin
Try Auto WB, or use Pick gray on a neutral gray or unclipped white object under the same light as your subject. Avoid skin, reflections and deep shadows. Auto WB is an estimate and can be wrong in mixed or strongly colored light. Fine-tune Warmth and Tint, or use Undo.
The Protect skin colors checkbox reduces Saturation, Vibrance and creative color changes within a soft color range. Its strength is in Skin color controls. Brightness, white balance and deliberate skin sliders still work. This is color selection, not face detection; similar colors elsewhere can change. Saturation at zero, monochrome and sepia intentionally affect skin too.
Creative looks
Thirteen adjustable looks cover natural and soft portraits, warm/cool themes, muted film, Golden hour, Rose studio, Cinema teal & amber, Earthy lifestyle, Editorial, Pastel daylight, Classic monochrome and Vintage sepia. Set white balance first, then choose a look and adjust its strength.
Crop, inspect and repair
Use free crop, original proportions or 16:9, 9:16, 4:3, 3:4, 1:1, 3:2 or 2:3. Straightening trims empty corners. At 100%/200%, use Hand to pan. Touch movement scrolls instead of repairing; tap to apply a repair.
Texture match copies nearby matching texture. Smooth gradient fits surrounding color, useful on plain fabric and backgrounds. Radius reaches 1,000 source pixels, but larger repairs need more memory and can still leave seams. Up to 30 repairs are supported within the history budget. Use Undo to compare methods.
Export and phones
JPEG quality and resolution start at maximum. Preview size does not reduce export resolution. Auto RAW import uses half-size on phones; choose Full size before opening if memory allows. Inputs are limited to 200 MiB and 50 megapixels after development; device limits can be lower.
Use Open file for RAW files in Files, and Photos for your photo library. If saving does not begin automatically, tap Download JPEG. Edits stay only in the tab; export before refreshing or closing. All code, source and notices are in this HTML file. No network connection is needed for editing once the page is loaded.
Source and third-party credits
The readable application code, developer notes, RAW decoder, complete LibRaw source archive and required notices are all embedded in this HTML file. Save a copy of this file to keep the app and its source together.
Original app: © 2026 Casinolove Kft., GPL-2.0-only. LibRaw 0.22.2: LibRaw LLC and contributors, LGPL 2.1 option. Oklab conversions: Björn Ottosson, MIT. Emscripten runtime: MIT option; musl: MIT and preserved notices; LLVM runtimes: Apache 2.0 with LLVM exceptions. Complete notices and underlying contributor credits are included below.
Developer notes
The application is one HTML file. Edit the HTML, CSS and labeled JavaScript sections directly. There is no package manager, Git setup, bundler or application build step. RAW development still requires a compiled decoder, already embedded. The full LibRaw source and the small C++ bridge are included above for recipients who wish to modify that decoder.
The processing worker retains one linear floating-point RGB source. Its contrast, brilliance, protected exposure, tone mapping and repair algorithms are readable original application code. Preview jobs render a small base image plus only the visible detail region at 100%/200%. Slider movement uses a smaller draft and refines after release. JPEG export samples the original imported pixels, not the preview.
White balance uses Bradford chromatic adaptation. Light controls work on Oklab lightness; chroma and hue are retained where possible. Out-of-gamut colors are brought into sRGB by reducing chroma at constant Oklab hue. Skin controls use a soft color-range mask. Portrait looks are original formulas, not third-party LUT assets.
Workers are created from the embedded code using local blob URLs. The decoder receives embedded WASM bytes, so it performs no fetch. CSP blocks all network connections. Executable script/style hashes are recorded in the CSP. The source comment at the top explains how to refresh those hashes after editing code.