ComfyUI Node

Film Damage

A ComfyUI node in AKURATE/Darkroom/Film with 21 inputs and 2 outputs.

By jeremieLouvaert·Created 5 months ago·Updated a day ago· 96
Film Damage
  • image
  • image
  • defect_mask
defect_originnegative (dust prints white)
film_typeColor neg (C-41)
print_gamma2.0
density0.50
dust_amount1.0
dust_size0.35
dirt_amount1.0
dirt_size1.1
hair_amount1.0
hair_length140
scratch_count3
scratch_width0.8
scratch_sidebase (refractive, neutral)
scratch_depth0.50
layer_density0.70
transport_axisauto (along long edge)
softness0.0
base_scratch_cast0.00
vary_per_frametrue
seed42
CategoryAKURATE/Darkroom/Film

Inputs (21)

NameTypeDefaultDescription
imageIMAGE
defect_originoptCOMBOnegative (dust prints white)Where the defect sits in the chain. This alone flips the sign: on a negative it blocks PRINTING light so the print goes lighter; on a positive it just blocks the image light
film_typeoptCOMBOColor neg (C-41)Drives emulsion-scratch colour via dye-layer order. B&W has no dye layers, so scratches stay neutral
print_gammaoptFLOAT2.00.5–4Paper grade / scanner-inversion contrast. Negative-plane only: it is the exponent magnitude, so it sets how hard dust prints out
densityoptFLOAT0.500–5Master defect count multiplier across all classes. 0 = passthrough. Raise this, not the sizes, for a dirtier frame
dust_amountoptFLOAT1.00–3Dust count multiplier (gamma-distributed count and size)
dust_sizeoptFLOAT0.350.05–4Dust mean radius, ref-px @1024 long edge. Default ~22-41um at real scale; larger reads as confetti, not dust
dirt_amountoptFLOAT1.00–3Dirt/lint count multiplier. Larger, softer and lower opacity than dust, more strongly clustered
dirt_sizeoptFLOAT1.10.1–8Dirt mean radius, ref-px @1024 long edge
hair_amountoptFLOAT1.00–3Hair/fibre count multiplier. Short and long strands share one generator
hair_lengthoptFLOAT14020–600Long-strand length, ref-px @1024 long edge (short strands are 0.35x this)
scratch_countoptINT30–40Number of scratches. They run along the transport axis with bounded lateral wander
scratch_widthoptFLOAT0.80.1–12Scratch core width, ref-px @1024. The literature 3-10px band describes heavily damaged archive film; stills want far less
scratch_sideoptCOMBObase (refractive, neutral)Which FACE of the film. Base = a refractive groove (removes no dye, wet-gate cancels it) so it prints white. Emulsion = material loss, colour set by depth
scratch_depthoptFLOAT0.500–1Emulsion side only. Removes dye layers top-down: C-41 walks yellow -> red -> black, reversal walks blue -> cyan -> white
layer_densityoptFLOAT0.700.1–2.5Optical density of dye removed per layer. Real maxima run 2-3, which drives straight to clear base and clips
transport_axisoptCOMBOauto (along long edge)Scratches follow the film transport. Auto = along the long edge (still 35mm). Cine runs vertically through the gate, hence vertical tramlines
softnessoptFLOAT0.00–8Optical blur of the defect, ref-px. 0 = auto (0.6 negative-plane, 1.6 positive-plane: scanner-glass dirt sits off the image plane so it is more defocused)
base_scratch_castoptFLOAT0.000–1TASTE ONLY, off by default. Green/cyan tint on base-side scratches. This is an inference from wet-gate physics plus orange-mask channel gain, not a sourced causal link
vary_per_frameoptBOOLEANtrueBatch of N gets N different defect fields (as a real roll does). Off = the identical field on every frame
seedoptINT420–4294967295Seeds every defect class: counts, sizes, positions, paths and scratch envelopes

Outputs (2)

NameTypeDescription
imageIMAGE
defect_maskMASK