The short version. A raw scan of a negative squeezes the whole photograph into the first few percent of its scale. Converting it to density spreads it out evenly, and a slider then moves the dark parts as much as the bright ones. That is the whole idea; the rest of this page is why it works.
Every scanned negative has to be turned back into a positive, and the obvious way to do it is to subtract it from white: 1 − x. It is an inversion, it is one line of code, and it is what most quick tools do. It is also the reason those tools are so hard to steer.
The application that does it the other way is Open Negative Initiative, a free macOS application for converting and editing scanned film: colour negatives, positives and black & white, from a camera scan or a scanner. It runs on its own, with no host application to buy. Your original scans are only ever read. macOS 13 or later. Apple Silicon and Intel.
Free, macOS 13 or later. It runs on its own, with no host application to buy and no account.
What goes wrong when you invert a scan
A scan is linear, meaning the numbers in the file are proportional to the light that reached the sensor, with no curve applied on top. A negative's dense areas, which are the highlights of the original scene, transmit very little of that light, so they arrive as very small numbers, and subtracting them from one leaves the whole photograph crowded down there.
- A curve drawn on such an image is steep where it should be gentle.
- An exposure slider moves the shadows and barely touches the highlights.
- The image is all there, mathematically, but every control you reach for is working on a badly stretched axis.
blackwhite
The three channels inside a tenth of the scale, one on top of the other.
blackwhite
The same frame, spread across the width, the channels apart.
What density is, and why film is measured in it
Film has been measured in density for as long as film has been measured at all. Density says how much light a piece of film blocks, on a logarithmic scale: D = −log₁₀(T), where T is transmittance, the fraction of the light that gets through. A density of 1.0 passes a tenth of the light, 2.0 a hundredth, 3.0 a thousandth.
The useful property is that a stop is a fixed distance on that axis. Doubling the exposure always moves density by about 0.301, whether you are in the deepest shadow or the brightest highlight. On a linear scale one stop is a doubling: a tiny step down low, an enormous one up high.
So the app converts to density first, and then there is nothing left to invert. Two rows are enough to see why:
| In the scene | What the film does | Light it lets through | Number in the file | Density |
|---|---|---|---|---|
| A white sky | Exposed hard, so it went dense | 1 % | 0.01 | 2.0 |
| A shadow | Barely exposed, so it stayed thin | 80 % | 0.80 | 0.1 |
The large number is already on the bright side of the scene. Nothing has to be turned around: the order on the density axis is the positive's order, and the measurement is read as it stands.
A slide is the opposite case. It is already a positive picture, so to put it on the same density axis as everything else the app has to flip it back, and that is the one mode where something is genuinely inverted.
What inverting in density buys you
- The sliders behave linearly in stops. Pushing red by one stop moves red by the same visible amount wherever it sits. A correction reads like an exposure change instead of a fight with a curve, which is what a colour negative demands, its three channels never starting from the same point.
- The levels are graduated in real densities. The black and white handles carry numbers you can compare against what you know about the film, not percentages of an arbitrary range.
- Nothing has to guess. An axis graduated in the film's own units needs no clever model to make a photograph steerable. The inversion stays dumb, and the judgement is yours.
The part that is delicate
The logarithm has no answer at zero, and a scan does contain zeros and values below them, for two separate reasons that get confused with each other constantly:
- A channel that hit the scanner's black level arrives at nothing at all, or a hair below it as sensor noise. That is a clipped channel, and no setting recovers it.
- An area brighter than the reference transmits more light than the film base does, which is a negative density and a perfectly healthy reading. One of the reference films sits at −0.243. It is why the levels are graduated from −0.35 upward: the track has to reach under zero, with room to spare.
Either way, something has to be done before the logarithm is taken. The tempting fix is a floor (clamp anything under a threshold up to that threshold) and it is wrong. The app lifts instead, adding a small constant to every value instead of flooring the small ones. That constant is the pedestal, and the density ceiling slider is what moves it. Under it sits a numerical guard, an eighth of the pedestal lower, catching whatever arrives below even that; values piled onto the guard are the ones nothing downstream can separate.
I measured the difference on a real film, Harman Azure, whose red channel has a median sitting at −0.003 in the linear values of the scan, which is to say just under zero:
| Approach | Share of that channel's pixels piled onto one single value |
|---|---|
| Pedestal added to everything | 0.315 % |
| Floor clamping the small values | over 50 % |
Half a channel on one value is half the picture made identical, and nothing downstream recovers that. An offset compresses the neighbourhood of zero instead, which is what the logarithm needs, and it leaves the pixels distinct.
Figures measured on the eight reference films I scanned to calibrate the app, 2026. They are named on the automatic balance page.
In the manual: Density ceiling
See it on one frame
If you already convert negatives somewhere else, the comparison takes two minutes: convert one frame both ways and reach for the exposure slider. If you have never converted one at all, start with the six-step guide, which gets you to a finished picture without any of this.
Next: the levels that sit on this axis, graduated in the densities this page just defined. Every word used here is defined again in the glossary.
Free, no account, no trial limit. It runs on its own on macOS.