The problem with browser tools
Browsers color-manage images when they decode them: a wide-gamut photo tagged as Adobe RGB or Display P3 is quietly converted to sRGB, and colors outside sRGB are clipped. When a web tool then saves the result, the browser writes no color profile at all. A file that left Lightroom as Adobe RGB comes back as an untagged sRGB file with flatter color.
What FilmGrainLab does instead
- Decode without conversion. The photo is decoded with color conversion switched off, so the pixel values reach the GPU exactly as your camera or editor wrote them.
- Keep the profile. The embedded ICC profile is read straight from the file, from JPEG and PNG.
- Write it back. On export the same profile bytes are embedded in the JPEG again. The pixel values were never reinterpreted, so the exported file is the original plus grain. We have verified the round trip: the exported profile is identical to the source, byte for byte.
Supported profiles
- sRGB
- Display P3
- Adobe RGB (1998)
- ProPhoto RGB
Any profile is kept on export. The color-accurate preview supports matrix-based RGB profiles, which is what cameras, Lightroom and Photoshop use. For the rare LUT-based profile the export is still exact, but the preview is shown uncorrected.
A preview you can trust
Your screen needs to know which color space the numbers are in, and the canvas does not. So FilmGrainLab reads the profile’s own primaries and tone curves, adapts white points with the Bradford method and builds a correction for display only. It runs in 32-bit float, so smooth shadows stay free of banding. We benchmarked the math against LittleCMS, the reference color engine: preview colors match within 1–2 levels out of 255. The export never passes through this step and stays untouched.
Export
- Full resolution, never downscaled, as a high-quality JPEG (95%).
- The original file name with
-filmgrainlabadded. - Several photos at once download as one ZIP, each with its own profile.
- Everything runs locally in your browser. No photo is uploaded.
Current limits
Profiles embedded in WebP and GIF files are not read yet. Those photos are handled as sRGB. The largest photo you can open is set by your graphics card, usually 8,192 or 16,384 pixels on the long side, and you get a clear message if a file is too big.