Colour grading, entirely in your browser

Light that bleeds a little.

Halation is the warm fringe film gets around a blown highlight — light scattering through the emulsion and bouncing back. It is the single detail that separates a photograph that was shot from one that was rendered. This tool puts it, and everything around it, on your pictures.

0 KBuploaded
6looks
21parameters
Full resexport

No model. Just arithmetic on pixels.

Every look here is a set of numbers, not a guess. The same photo and the same settings produce the same file every time — which is exactly what a generative model cannot promise you.

/ 01

Tone curve and fade

Contrast arrives as an S-curve around middle grey, then the blacks get lifted off zero. That lift is why a flat scan reads as film rather than as an underexposed JPEG — negative stock physically cannot reach true black.

c = mix(c, c²(3−2c), contrast) c = c·(1 − 0.26·fade) + 0.115·fade
/ 02

Split toning

Two tints ride on separate luminance masks — one in the shadows, one in the highlights — blended in soft light so they colour the image without draining it. Teal below, orange above, and you have the look every action film has used since 2005.

shadowMask = 1 − smoothstep(0, 0.58, L) c = mix(c, softLight(c, tint), amount · mask)
/ 03

Halation and diffusion

Highlights above a threshold get isolated, blurred across two separable gaussian passes, tinted the orange-red of anti-halation backing, and added back. Diffusion is the same blur screened in untinted — a Black Pro-Mist, in software.

glow = blur(highlights > threshold) c += glow · tint · amount
/ 04

Grain that survives export

Grain is defined as a fixed number of cells across the frame rather than per screen pixel, so what you see at preview size is what lands in the full resolution file. It is weighted toward the midtones, where silver halide actually clumps.

cells = 2600 / size weight = 1 − |2L − 1|

Six starting points, all editable.

Pick one, then take it apart. Every slider a preset touches stays exposed, so a look is a beginning rather than a filter you are stuck with.

Notes on colour.

Working notes on grading, film emulation and the maths underneath. First pieces are being written.