Nodes/comfyui-jbnodes/Darkroom Enlarger (Multigrade)
ComfyUI Node

Darkroom Enlarger (Multigrade)

The variable-contrast enlarger, one filter grade at a time

By AlbertJBurton·Created 6 months ago·Updated 3 months ago· 1
Darkroom Enlarger (Multigrade)
  • film_negative
  • image
contrast_filter2
exposure_secs10

Real darkrooms moved past graded paper for a reason: variable-contrast paper means one box of paper does everything, and you change the print's contrast by changing the filter under the enlarger lens, not by buying a different box. PrintLabMultigrade simulates exactly that - take the film_negative from DeveloperLab, pick a contrast grade from 00 to 5, set your exposure, and get a finished print. It's the most-used enlarger node in the pack, and for good reason: it's the one that lets you actually iterate on contrast without changing anything else.

This is the default "make my negative look good" node. The graded variant is more authentic-feeling, the split-grade variant is more advanced, but multigrade is the pragmatic center - one knob (plus exposure) and you're printing.

How it works

Required input is film_negative - the negative from DeveloperLab, not the contact print. Two optional controls:

  • contrast_filter - the grade, in half steps from 00 to 5 (the full list: 00, 0, ½, 1, 1½, 2, 2½, 3, 3½, 4, 4½, 5). Default 2 is the "normal" grade. Lower grades = softer, flatter, more shadow/highlight detail; higher grades = punchier, harder edges between tones, more aggressive blacks. The filter grades map to real contrast filter sets, so the increments aren't arbitrary - 00 to 0 is a small step, 4 to 5 is a big one, just like the real filters.
  • exposure_secs (0–60, default 10) - exposure time, controlling overall print brightness. More time, darker print.

Output is a single image - the finished print, ready to save or upscale.

The workflow loop

The practical rhythm: print at Grade 2, look at the result. Shadows muddy and low contrast? Step up to 2½ or 3. Highlights blown and the image harsh? Step down. Adjust exposure_secs to balance brightness as you change grade - higher contrast usually wants a touch more exposure to hold detail. That loop is the entire darkroom print-matching experience compressed into two dropdowns.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/AlbertJBurton/comfyui-jbnodes.git
cd comfyui-jbnodes
pip install -r requirements.txt

Restart ComfyUI, or ComfyUI Manager → "comfyui-jbnodes."

Gotchas

  • Wire film_negative from DeveloperLab in. Feeding it a positive gives you a tonally inverted print that no amount of grade-fiddling will fix.
  • There's no precision control here (unlike the graded variant) - the LUT is fixed, so very large prints can show banding that the graded node's precision knob would smooth. If you hit that, use PrintLabGraded with a matching grade instead.
  • Beta pack: filter grade names and behavior can shift between versions; save your workflow and re-check the dropdown after updating.
CategoryJBNodes/Darkroom

Inputs (3)

NameTypeDefaultDescription
film_negativeIMAGE
contrast_filteroptCOMBO212 options: 00, 0, ½, 1, 1½, 2, +6
exposure_secsoptFLOAT100–60

Outputs (1)

NameTypeDescription
imageIMAGE