All articles

How to Invert Film Negatives at Home (Free Negative Lab Pro Alternative)

A $99 plugin plus a Lightroom subscription is not the only way to get clean colour out of a negative. Here is the full camera-scanning workflow, plus the maths that keeps skin tones from turning blue.

Published Aug 18, 2026Updated Sep 1, 20262 min read·Yichen Lab

Lab scans cost money every roll, and the desktop answer — Negative Lab Pro at $99 on top of a Lightroom Classic subscription — costs money every month. Camera scanning plus a browser removes both bills. The hardware is a light source and the camera you already own; the software part is the one that actually decides whether the result looks like film or like a bruise.

1. Capture the negative

  1. Backlight: a CRI 95+ LED panel, or a tablet showing a pure white image at full brightness. Anything with a green spike in its spectrum bakes a cast into every frame.
  2. Distance: fill the frame with the negative and keep the sensor plane parallel to the film. A tilted capture is unfixable later.
  3. Exposure: base ISO, manual white balance, and lock AE/AF. Auto-exposure drifting between frames means every frame needs its own correction.
  4. Include the film base: leave a sliver of unexposed border or a sprocket gap in the shot. That strip is the reference the inversion is built on.

The one rule people skip

Shoot in a dark room. Ambient light bouncing off the shiny emulsion lifts the blacks, and lifted blacks in a negative become milky, low-contrast highlights after inversion.

2. Why `255 - RGB` never works

C-41 film carries colored couplers that leave an orange mask across the whole base. It exists to compensate for unwanted dye absorption in the green and blue layers — the film is deliberately not neutral. Subtracting each channel from white keeps that orange bias in the picture, inverted: faces go cyan, shadows go navy, and no amount of curve dragging fully removes it.

The correction, as it ships in the NegaScan fragment shader
vec3 inverted = pow(max(vec3(0.0), 1.0 - (pixel / mask)), vec3(u_filmCurve));

Dividing by the sampled base colour is a subtraction in optical density space, which is where film actually lives. u_filmCurve then restores the non-linear response of the emulsion instead of leaving a flat, plastic gradient.

3. Invert it — drag the slider

Live inversion — drag to compareFUJIFILM SUPERIA 200 // 35MM
NEGATIVEPOSITIVE
Open full workbench

Left: the raw capture with its orange base. Right: the same pixels after mask subtraction, level stretch and 1.8 gamma. Drop your own negative on it to test your roll.

4. Sample, tune, export

  1. Load the capture and click Sample Mask on the unexposed border — a 40×40 average with outlier rejection, so grain and dust do not skew it.
  2. Pick the emulsion profile closest to your stock (Portra 400, Gold 200, Superia 400, HP5).
  3. Nudge black point, white point and gamma until the histogram fills the range without clipping.
  4. Export the full-resolution positive. Nothing was uploaded: the whole pipeline ran on your GPU.

Keep reading