Film light leak

How stray light entering through a camera or magazine seam exposes part of the film outside the intended lens-and-shutter path, producing a soft edge or corner fog that may vary as the strip moves.

Visible effect

A soft coloured exposure enters from a film boundary

A film light leak appears as a soft bright fog entering from an edge or corner, often covering one side more strongly than the other. Colour film may render the exposure as amber, orange, or red because light can reach the emulsion through the film base or interact differently with its layered records.

Unlike exposure flicker, the change is spatial: one part of the frame receives more unwanted exposure than another. The pattern can remain fixed, pulse, or change between frames as film winds past the leak and its distance from the opening changes.

Physics

A second light path bypasses the lens and shutter

A failed camera seam exposes film outside the intended optical path A cutaway camera body shows intended lens light reaching only the gate, while stray light enters a body seam and spreads across film near the supply roll before that film reaches the gate.CAMERA CUTAWAY · INTENDED AND STRAY LIGHT PATHSLENS LIGHTSUPPLY ROLLFILM PATHFRAME GATECAMERA BODY SEAMfailed light sealFOGGED FILMoutside the gateRECORDED FRAMEsoft edge fog follows the film boundary
Intended image-forming light reaches film through the lens, shutter, and gate. A failed body or magazine seal creates a second path that can expose wound or travelling film before it reaches the gate, so the fog is tied to a film edge rather than to objects in the photographed scene.

A camera body, magazine, door, loading port, or cassette must remain light-tight. A damaged seal, imperfect closure, crack, or loading fault admits ambient light onto film that should remain protected. The unwanted exposure may reach wound film, a loop, or material travelling toward the gate rather than only the frame being photographed.

Geometry inside the camera, the direction of the opening, film winding, exposure through the base, and the layered colour emulsion all influence the recorded shape and colour. That is why real leaks may be irregular, red-orange, diffuse, repeated across adjacent frames, or strongest around an edge.

Mathematics

The separable edge lobe

Normalized coordinate x becomes centered coordinateu. Signed position components p select the left, right, top, or bottom half of the frame. The exponential term concentrates the lobe near that edge while the sine term returns it smoothly toward zero at the boundary.

The two one-dimensional lobes sum into spatial fog F. Base intensity I₀ may vary slowly with amplitudeq, frequency f, and phase φas film moves. Tint c and the additive exposure are applied in linear light.

Shader

A procedural edge exposure in one pass

The GLSL evaluates a separable edge-exposure equation. The runtime supplies a signed edge direction, slow temporal intensity, falloff, and colour bias. The shader evaluates the fog in destination coordinates so it stays attached to the film-frame boundary.

filmLightLeakGLSL
// WHAT: Add a coloured accidental exposure entering from a film-frame edge.
// HOW: Build an edge-localized spatial envelope on x and y, tint that envelope,
// and add it to the photographed image in approximate linear light.
// WHY: A light leak fogs the film independently of the lens-formed scene and
// usually grows inward from a camera-body or magazine boundary.

// coordinate is centred image space, approximately [-1, 1]. position selects
// an edge and direction: negative=left/bottom, positive=right/top, zero=off.
float filmLightLeakAxis(
  float coordinate,
  float position,
  float falloff
) {
  if (abs(position) < 0.001) {
    return 0.0;
  }

  // The exponential term is strongest near the selected edge and decays into
  // the frame. The sine term smoothly returns the lobe to zero at both ends.
  // Base 3 is a visual curve choice, not a measured camera-body transmission.
  float edgeDecay = pow(
    3.0,
    -max(falloff, 0.05)
      * position
      * (sign(position) - coordinate)
  );
  float smoothWindow = sin(3.14159265 * coordinate);
  return position * edgeDecay * smoothWindow;
}

float filmLightLeakEnvelope(
  vec2 centeredUv,
  vec2 edgeDirection,
  float falloff
) {
  // Add horizontal and vertical lobes so corner leaks can use both axes.
  float horizontalLeak = filmLightLeakAxis(
    centeredUv.x,
    edgeDirection.x,
    falloff
  );
  float verticalLeak = filmLightLeakAxis(
    centeredUv.y,
    edgeDirection.y,
    falloff
  );
  return max(0.0, horizontalLeak + verticalLeak);
}

vec3 filmLightLeak(
  vec3 sourceSrgb,
  vec2 centeredUv,
  vec2 edgeDirection,
  float intensity,
  float falloff,
  float redBias,
  float effectMix
) {
  // Decode before adding light. Direct addition to sRGB would give a less
  // meaningful energy relationship between source and leak.
  vec3 linearSource = pow(
    max(sourceSrgb, vec3(0.0)),
    vec3(2.2)
  );
  float leakEnvelope = filmLightLeakEnvelope(
    centeredUv,
    edgeDirection,
    falloff
  );

  // redBias moves from warm amber toward a strongly red leak.
  vec3 leakTint = mix(
    vec3(1.0, 0.68, 0.24),
    vec3(1.0, 0.13, 0.025),
    clamp(redBias, 0.0, 1.0)
  );
  vec3 fogged = linearSource
    + leakTint * leakEnvelope * max(intensity, 0.0);
  vec3 mixed = mix(
    linearSource,
    fogged,
    clamp(effectMix, 0.0, 1.0)
  );

  // Encode the approximate linear result back to display space.
  return pow(max(mixed, vec3(0.0)), vec3(1.0 / 2.2));
}
Processing pipelineBoxes mark actual render-pass boundaries.
  1. Source texturesRGB · one texture read per pixel
  2. Procedural stray-light compositeOne fullscreen render pass
    • Aspect-fill sample
    • Decode sRGB
    • Evaluate the separable edge envelope
    • Tint and add the stray exposure in linear light
    • Mix and encode to sRGB
  3. Display output

Why these steps are here

  1. Choose the boundary explicitly. Signed axis components reproduce side and corner leaks without rotating the source image.
  2. Evaluate in destination space. The fog stays fixed to the film frame instead of tracking objects in the scene.
  3. Clamp the summed lobe. The procedural approximation adds exposure and never creates an accidental dark band.
  4. Add in linear light. Stray photons add exposure before display encoding.
  5. Keep texture overlays optional. A measured or artist-authored texture is better when irregular shape matters more than compact parameterization.

Notes

  • The separable edge equation exposes falloff, colour, boundary selection, and bounded slow modulation explicitly.
  • The model is intentionally smooth. Texture overlays can represent scratches in seals, complex internal shadows, multiple openings, or photographed leak plates more cheaply and faithfully.
  • Exposure flicker changes the complete frame over time. A light leak changes exposure by image position and may also vary as film moves.
  • Halation spreads light already recorded from bright scene regions. A leak introduces new off-axis exposure that did not pass through the taking lens.
  • Restoration should inspect frame-edge continuity and adjacent-frame patterns before removing a leak; aggressive luminance flattening can erase intentional lighting.

References

Kodak — Essential Reference Guide for Filmmakers — manufacturer reference for film transport, exposure, sensitometry, camera steadiness, projection, and laboratory handling.