ComfyUI Node
Film Damage
A ComfyUI node in AKURATE/Darkroom/Film with 21 inputs and 2 outputs.
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)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| defect_originopt | COMBO | negative (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_typeopt | COMBO | Color neg (C-41) | Drives emulsion-scratch colour via dye-layer order. B&W has no dye layers, so scratches stay neutral |
| print_gammaopt | FLOAT | 2.00.5–4 | Paper grade / scanner-inversion contrast. Negative-plane only: it is the exponent magnitude, so it sets how hard dust prints out |
| densityopt | FLOAT | 0.500–5 | Master defect count multiplier across all classes. 0 = passthrough. Raise this, not the sizes, for a dirtier frame |
| dust_amountopt | FLOAT | 1.00–3 | Dust count multiplier (gamma-distributed count and size) |
| dust_sizeopt | FLOAT | 0.350.05–4 | Dust mean radius, ref-px @1024 long edge. Default ~22-41um at real scale; larger reads as confetti, not dust |
| dirt_amountopt | FLOAT | 1.00–3 | Dirt/lint count multiplier. Larger, softer and lower opacity than dust, more strongly clustered |
| dirt_sizeopt | FLOAT | 1.10.1–8 | Dirt mean radius, ref-px @1024 long edge |
| hair_amountopt | FLOAT | 1.00–3 | Hair/fibre count multiplier. Short and long strands share one generator |
| hair_lengthopt | FLOAT | 14020–600 | Long-strand length, ref-px @1024 long edge (short strands are 0.35x this) |
| scratch_countopt | INT | 30–40 | Number of scratches. They run along the transport axis with bounded lateral wander |
| scratch_widthopt | FLOAT | 0.80.1–12 | Scratch core width, ref-px @1024. The literature 3-10px band describes heavily damaged archive film; stills want far less |
| scratch_sideopt | COMBO | base (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_depthopt | FLOAT | 0.500–1 | Emulsion side only. Removes dye layers top-down: C-41 walks yellow -> red -> black, reversal walks blue -> cyan -> white |
| layer_densityopt | FLOAT | 0.700.1–2.5 | Optical density of dye removed per layer. Real maxima run 2-3, which drives straight to clear base and clips |
| transport_axisopt | COMBO | auto (along long edge) | Scratches follow the film transport. Auto = along the long edge (still 35mm). Cine runs vertically through the gate, hence vertical tramlines |
| softnessopt | FLOAT | 0.00–8 | Optical 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_castopt | FLOAT | 0.000–1 | TASTE 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_frameopt | BOOLEAN | true | Batch of N gets N different defect fields (as a real roll does). Off = the identical field on every frame |
| seedopt | INT | 420–4294967295 | Seeds every defect class: counts, sizes, positions, paths and scratch envelopes |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| defect_mask | MASK | — |