Nodes/ComfyUI-Darkroom/Film Stock (B&W)
ComfyUI Node

Film Stock (B&W)

50 B&W stocks with real spectral response — plus the filters to go with them

By jeremieLouvaert·Created 5 months ago·Updated 2 days ago· 101
Film Stock (B&W)
  • image
  • image
film_stockIlford HP5 Plus 400
color_filterNone
strength1.00
contrast0.00
exposure_shift0.00

Black and white isn't "desaturate." A real B&W film decides how bright each color renders based on its spectral sensitivity - and different films disagree. Tri-X renders a red car darker than HP5 does, which is why film photographers carried colored filters to sculpt that balance. Film Stock (B&W) brings the real thing to ComfyUI: 50 stocks with actual spectral-sensitivity data, plus simulated lens filters, so your B&W conversion is a choice, not a default.

It's the monochrome sibling of Darkroom's Film Stock (Color) - same pack, same philosophy. Where most B&W conversions just blend channels with fixed weights, this node weights each color by how the chosen emulsion actually responded to it. The result is that HP5 and Tri-X genuinely look different on the same image, and that's the entire point.

How it works

Each stock carries spectral-sensitivity coefficients derived from real data (the pack parsed published Kodak/Ilford/Fuji technical sheets). Your RGB image is converted using those per-stock weights - effectively a principled channel mixer, not hand-picked numbers. The color_filter dropdown layers on a Wratten-style filter simulation (Red 25A, Orange 21, Yellow 8, Green 58, Blue 47, even an IR R72), which is exactly the tool real B&W shooters used to lighten or darken specific scene colors. Exposure and contrast then behave like they do on film, with an exposure shift measured in stops, Zone System style.

The inputs that matter

  • film_stock - 50 choices, default "Ilford HP5 Plus 400". Start there, then A/B against "Kodak Tri-X 400" - the difference on skin and sky is a real education.
  • color_filter - the filter simulation. A yellow (8) or orange (21) filter is the classic portrait move; a red (25A) dramatically darkens blue skies.
  • strength - blend between the original color image (0) and full B&W (1).
  • contrast - extra contrast on top (−1 to 1, 0 = stock default).
  • exposure_shift - ±3 stops of exposure compensation, for Zone System thinking.

Output is a single image - in at color, out at B&W, same dimensions.

Install and gotchas

cd ComfyUI/custom_nodes
git clone https://github.com/jeremieLouvaert/ComfyUI-Darkroom
pip install -r ComfyUI-Darkroom/requirements.txt

Or search "Darkroom" in ComfyUI Manager and restart. It's under AKURATE/Darkroom/Film.

The honest caveat from the pack: this is a spectral approximation. An sRGB image can't carry a real spectrum, so the conversion is the film's tonal character, not a claim of pixel-exact fidelity. And a real B&W film often has its own grain character - that's what the Film Grain node is for, applied after. One genuinely useful habit: this node is a per-pixel transform, so it's allowed inside a LUT bake chain. Grade your B&W, export it as a .cube, and your HP5 look becomes reusable anywhere that reads LUTs. For the "amateur photography" realism crowd this node at full strength plus a touch of grain is one of the quickest ways to make an AI image read as shot-on-film.

CategoryAKURATE/Darkroom/Film

Inputs (6)

NameTypeDefaultDescription
imageIMAGE
film_stockCOMBOIlford HP5 Plus 400B&W film stock. Each has unique spectral sensitivity
color_filterCOMBONoneSimulate a colored lens filter on B&W film
strengthFLOAT1.000–1Blend between original color (0) and B&W (1)
contrastoptFLOAT0.00-1–1Additional contrast adjustment. 0 = stock default
exposure_shiftoptFLOAT0.00-3–3Exposure compensation in stops (Zone System)

Outputs (1)

NameTypeDescription
imageIMAGE