이 페이지는 아직 번역되지 않았습니다 — 영어 버전을 표시합니다.

The tone curve (the Faithful look)

A naive inversion — flipping density values with a straight line — produces images that look pale, flat, and harsh. OpenEnlarge instead applies a film-faithful S-shaped curve that protects shadow detail, adds mid-tone punch, and rolls highlights gently into a true white.

Toe, mid, shoulder

The Faithful curve mirrors the shape of the classic Hurter–Driffield (H&D) characteristic curve that describes how photographic paper responds to light. It has three distinct zones:

  • Toe — near black, the curve is shallower than a straight line. Very dark values are lifted slightly so shadow detail is protected rather than crushed.
  • Midtones — the steepest region, where the curve rises faster than the linear diagonal. This is where most subject matter lives, and the added contrast gives the image its sense of depth and snap.
  • Shoulder — near white, the curve rolls over gently. Speculars and bright areas are compressed into the upper range without clipping hard to a flat, blown-out white.

The S-shape is parameterized by a gamma of approximately 1.590, with the shoulder asymptoting at a knee of approximately 0.892. Output is clamped to [0, 1] for SDR display.

True white

One subtle but important property: the curve reaches exactly output = 1.0 at input = 1.0. This means the densest point of the negative — typically the brightest highlight in the scene — maps all the way to paper white, not to a mid-grey cap. Many simpler tone mappings leave highlights compressed into a grey ceiling; the Faithful curve does not. Specular highlights, window light, and skin in direct sun can all reach genuine white.

This true-white anchor is visible in the figure: the S-curve ends precisely at the top-right corner of the plot.

toe shoulder true white (1.0) 0 0.25 0.5 0.75 1 input density (normalized t) 0 0.25 0.5 0.75 1 output linear ref
Input density (normalized t, 0–1) versus output (0–1). The dashed diagonal is a linear reference. The S-curve starts at (0, 0), dips below the diagonal in the shadows (toe — shadow protection), rises above it through the midtones (contrast), then rolls over into a soft shoulder before reaching exactly (1, 1) — true white.

Consistent across the roll

OpenEnlarge uses a fixed density scale1 / 0.700 ≈ 1.429 — when computing the tone curve, rather than normalizing to each frame's own measured density. This means every frame in a roll is interpreted on the same tonal ruler. One frame that was slightly under-exposed and another that was slightly over-exposed will both be passed through the same curve shape; only the per-frame exposure slider adapts to compensate. The result is that a roll of street photographs all printed together looks cohesive: the sky stays a consistent white, the shadows maintain the same depth from frame to frame.

This is the same discipline a darkroom printer uses when they dial in a single exposure time for a whole roll on the enlarger, then dodge and burn individual frames — the global tone mapping is fixed, and local corrections are applied on top.

Under the hood

The Faithful tone curve is a power-law with a soft asymptotic shoulder: out = tγ in the toe-to-mid region, transitioning into a shoulder that asymptotes at knee ≈ 0.892, with gamma (γ) ≈ 1.590. The raw density is pre-scaled by the fixed factor FAITHFUL_SCALE = 1 / 0.700 ≈ 1.429 before the curve is applied; this scale is frame-independent, ensuring consistent tone across an entire roll. Only the per-frame exposure (a log-space multiply) adapts to the individual frame's brightness.

On top of the base curve sits the optional Look layer: a normalized tanh S-curve with strength 2.0, anchored so that 0 maps to 0 and 1 maps to 1. This adds an additional S-shaped contrast push without shifting the black or white points. In the current Faithful path the Look layer is always applied.

Next: color & white balance →

OpenEnlarge — 오픈소스 필름 스캔 편집기 · MIT 라이선스