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

Color & white balance

Balancing a color negative means deciding what should be neutral, then adjusting color without shifting black. OpenEnlarge gives you an automatic starting point and precise manual controls to get there.

Auto white balance

When you open a frame, OpenEnlarge runs a damped gray-world estimate: it measures the average of each color channel across the image and nudges the balance toward the point where all three channels read equal — neutral gray. The estimate is damped to avoid over-correcting on scenes that are genuinely dominated by a single color (a red door, a field of green grass). The default strength is 0.7, leaving some of the original scene color intact.

If the automatic result is not quite right, you have two options: re-pick a gray by clicking a patch that should be neutral in your image, or dial in Temperature and Tint by hand.

Temperature & Tint

The two white balance axes map to familiar photographic concepts:

  • Temperature — the warm/cool axis, expressed as correlated color temperature in kelvin. Higher values shift the image toward warm amber; lower values shift it toward cool blue. (As in any raw converter, the number names the light's assumed temperature: a higher value assumes bluer light, so the image is warmed to compensate.) A neutral balance for most daylight negative film falls near 5500 K.
  • Tint — the green/magenta axis, orthogonal to temperature. A positive tint shift adds magenta; a negative shift adds green. This corrects for fluorescent casts, reciprocity failures, or the slight green bias some scanners introduce.

Temperature and Tint together give you full coverage of the chromaticity plane — any neutral can be reached by combining them.

Gain vs. color head

OpenEnlarge's engine supports two ways to apply white balance. The app currently applies Gain mode; the subtractive Color head mode described below is supported in the engine but is not exposed in the UI (the toggle was removed):

  • Gain mode — balance is applied as a post-curve linear multiply, after the tone curve has already produced a positive image. Because the multiply is linear, pure black (output = 0) is unaffected: 0 × gain = 0, so shadows stay perfectly neutral. This is the von-Kries adaptation model — the same principle used in most digital camera white balance.
  • Color head (subtractive) — balance is applied as a density offset before the curve, exactly like the CMY dichroic filters on a traditional color enlarger. The tint operates in log density space and modifies how the tone curve shapes each channel. Because density and contrast are coupled in log space, the tint influence is felt not just in the highlights but also through the midtones and into the lower tonal values. Shadows remain anchored at true black, but the character of the tint shifts with the tonal structure of the image.

The figure below illustrates the difference: the Gain strip keeps the shadow end neutral while warm tint accumulates only in the mids and highlights; the Color head strip shows the tint woven through the midtones earlier and deeper into the tonal range.

Gain (post-curve) black shadows neutral warm tint in mids/highlights Color head (pre-curve) black tint couples to contrast warm into mids & lower tones 0 · · · · · · · 1 shadow → highlight 0 · · · · · · · 1 shadow → highlight
Top: Gain (post-curve) — a gradient from true black to warm white; the warm tint appears only in the midtones and highlights while shadows remain neutral. Bottom: Color head (pre-curve) — the warm tint is present earlier and deeper into the tonal range, coupling tint to contrast. Both strips are anchored at true black on the left.

Saturation in OKLab

Vibrance and saturation adjustments in OpenEnlarge operate in the OKLab color space — a perceptually uniform model designed so that equal numerical steps produce equal-looking changes across all hues. This has two important practical consequences:

  • A saturation boost of a given amount looks consistent whether you are boosting the blues in a sky, the reds in a sunset, or the greens in foliage — no single hue dominates.
  • Neutral tones (grays) and skin tones are detected and protected: they receive a smaller boost, so pushing saturation does not cast a color onto what should be colorless areas or make skin look oversaturated.

Gamut roll-off is also applied, compressing highly saturated colors toward the display boundary smoothly rather than clipping them hard.

Under the hood

Auto WB damping: the gray-world estimate is blended toward no-op at a default strength of 0.7 — meaning 70 % of the full gray-world shift is applied. This avoids the classic gray-world failure mode on non-neutral scenes.

Color head math: in subtractive (color-head) mode, the per-channel density is multiplied by gainCMY_STRENGTH where CMY_STRENGTH = 1.6. Applied in log density space before the tone curve, this is equivalent to changing the filter pack on an enlarger: the exponent of 1.6 gives the tint a slightly non-linear coupling to density, matching the behavior of real dichroic filters more closely than a plain linear scale. The anchor at pure black is exact: density = 0 (black) maps to 0 × any gain factor = 0.

Gain mode math: a straightforward post-curve multiply — the neutral point is anchored at black (0) and stretched linearly toward white. Identical to the von-Kries chromatic adaptation transform when applied per channel.

Neutral CCT: the auto-WB target is approximately 5500 K, consistent with the color temperature of overcast daylight — a common shooting condition for outdoor color negative film.

Next: base calibration →

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