Photo Studio
Edit one photo, apply the look to the whole shoot, matched per photo — nothing is uploaded.
Photo Studio · loading
01
How it works
- 01
Drop the shoot
Drag in a folder or up to 1,000 JPG, PNG, WebP or HEIC files. Photos are sorted by capture time and grouped into scenes wherever there is a time gap (8 minutes by default) or a big jump in ISO, brightness or colour. Merge, split and rename scenes as you like.
- 02
Edit one hero
Pick the frame that represents the scene and edit it. The Look layer holds the creative work — tone curve, colour mixer, colour grading, vignette, grain, sharpening, an optional 3D LUT. The Correction layer holds exposure, white balance, highlights and shadows.
- 03
Let matching do the rest
Every other photo gets the Look copied exactly, plus its own Correction solved so its brightness and neutral colour land where the hero’s do. The consistency filmstrip renders every frame with its final settings and flags any that still differ.
- 04
Export for delivery
Write several sizes in one run (for example full resolution and 2048 px for the web), with a text or logo watermark, a naming pattern, and the original EXIF and colour profile kept. Save straight into a folder or a ZIP.
02
What smart matching does
A wedding card fills with frames shot seconds apart under slightly different light: the camera’s auto white balance drifts as a white dress enters the frame, and exposure shifts as the couple moves from shade to a window. Copying one set of settings to every photo copies those differences too. Photo Studio separates the edit into two layers so it can fix them.
- Exposure. Each photo’s mid-tone is measured on a 64-pixel proxy as a centre-weighted median of linear brightness; clipped pixels keep their rank but never contribute a value, so a brighter frame with more blown highlights is not under-corrected. The offset is log₂(hero ÷ photo) stops, capped at ±2 EV.
- White balance. The light’s colour is estimated by letting each plausible light colour vote with the number of mid-tone pixels it would turn grey, then averaging those pixels (a grey-world restricted to neutral surfaces, so a lawn or sky can’t dominate). Hero and photo are measured over the same brightness window, below where either clips. If a frame has no neutral surfaces, a shades-of-grey estimate (Minkowski p = 6) is used instead. The difference from the hero becomes a temperature and tint offset, capped at ±60.
- Strength and overrides. A strength slider blends between no matching and full matching. Any photo can be locked with its own values, excluded, or promoted to hero.
- Checking the result. After matching, every frame’s rendered proxy is measured again. Frames more than 0.3 EV or a visible colour shift away from the hero are flagged “check” in the filmstrip.
It is measurement, not AI: it won’t recover blown highlights, relight a face, or decide that a moody frame should be darker. Those stay your call.
03
Formats and limits
- Input
- JPG, PNG, WebP, HEIC/HEIF (HEIC is decoded with a WebAssembly library that loads only when needed).
- Output
- JPEG (quality 40–100) or WebP where the browser can encode it. Original size or a long-edge size per output; up to four outputs per run.
- Batch size
- Up to 1,000 photos per session. Only small proxies stay in memory; full-resolution images are decoded one per worker during export.
- Resolution
- Large images are rendered on the GPU in tiles (above 16.7 MP or the GPU’s texture limit), so very large files (45 MP and up) can export at full size, memory permitting.
- Metadata
- EXIF and ICC profile copied from JPEG originals; orientation reset; optional GPS removal or full strip.
- Looks
- Save looks in this browser, export them as JSON or as a 33³ .cube (colour only), import .cube LUTs and Lightroom .xmp presets (approximate).
- Privacy
- Everything runs on this device. No account, no upload, no watermark added unless you add one.
04
Keyboard shortcuts
| Keys | Action |
|---|---|
| ← / → | Previous or next photo (continues into the next scene) |
| \ (hold) | Show the original while held |
| Z | Toggle 1:1 zoom (full-resolution decode); drag to pan |
| S | Split before/after view |
| G | Survey: compare 2–4 selected photos |
| H | Make the current photo the scene’s hero |
| X | Exclude the current photo from matching |
| ⌘/Ctrl + Shift + C | Copy settings |
| ⌘/Ctrl + Shift + V | Paste settings, choosing groups |
| ⌘/Ctrl + Z · ⌘/Ctrl + Shift + Z | Undo · redo |
| ⌘/Ctrl + E | Open export |
| Double-click a slider | Reset it |
05
Questions
Are my photos uploaded anywhere?
No. Files are read, rendered and encoded inside your browser using Web Workers and WebGL. There is no server step for this tool, so nothing is sent while you edit or export. You can confirm it in your browser’s developer tools: the Network tab shows no requests carrying your images.
What exactly does smart matching change?
Only the Correction layer: exposure, and white balance expressed as temperature and tint. Each photo is measured on a small proxy — a centre-weighted, clip-excluded median of linear brightness, and a neutral-colour estimate from mid-tone, low-saturation pixels — and offset so it lands on the hero’s corrected values. The Look (curve, colour mixer, grading, grain and so on) is copied unchanged.
When should I not trust the match?
Deliberate silhouettes, frames dominated by one strong colour (a red wall, a green lawn), and scenes lit by mixed sources can fool any automatic estimate. Offsets are capped at ±2 EV and ±60 temperature/tint, and frames that still differ after matching are marked in the filmstrip. Lock a photo by moving its sliders, or exclude it so it simply takes the hero’s correction.
Can I use my Lightroom presets?
You can import .xmp presets, and the common Develop settings are mapped: basic tone, white balance, vibrance and saturation, the eight-colour HSL mixer, tone curves, split toning / colour grading, grain, vignette and sharpening. Lightroom’s rendering maths is not public, so the result is an approximation and is labelled that way. .cube LUTs are applied exactly (trilinear 3D lookup).
Does it keep EXIF data and colour profiles?
Yes for JPEG originals exported as JPEG: the original EXIF block and ICC colour profile are copied into each output. Orientation is reset to normal because pixels are exported upright, and you can remove GPS location or strip all metadata. HEIC, PNG and WebP originals, and WebP outputs, are exported without camera metadata.
Can it edit RAW files?
No. Photo Studio works with JPG, PNG, WebP and HEIC. If you shoot RAW, export JPEGs from your camera or raw converter first (or shoot RAW + JPEG) and use Photo Studio for the batch look and delivery.
Is my work saved if I close the tab?
Saved looks are stored in this browser (IndexedDB) and stay available next time. The editing session itself — the imported photos and their per-photo settings — lives in memory only, so export before closing the tab.
Which browsers work best?
Chrome and Edge on desktop support everything, including writing directly into a folder (re-running skips files that already exist) and streaming large ZIPs to disk. Firefox and Safari export to ZIP; very large batches are split into parts of about 1 GB. Safari cannot encode WebP, so use JPEG there. Phones work, but have far less memory — keep batches to a couple of hundred photos.
Need to fix a single image instead? See the full list of tools.