Nodes/ComfyUI-Darkroom/Adjacency Acutance
ComfyUI Node

Adjacency Acutance

The film sharpness that unsharp mask fakes

By jeremieLouvaert·Created 5 months ago·Updated 2 days ago· 101
Adjacency Acutance
  • image
  • image
edge_width2.0
intensity0.50
asymmetry6.0
drag_amount0.00
drag_angle90
strength1.00

Look very closely at a large-format film print and you'll see bright edges are brighter, dark edges are darker - a subtle overshoot on one side of every boundary, an undershoot on the other. Those are Mackie lines, and they're why film has that "organic 3D" sharpness that digital sharpening never quite matches. Unsharp mask is a cheap impersonation. Adjacency Acutance (the node is DarkroomEberhard, after the Eberhard effect) is the real thing: the development-edge-effect physics, simulated.

It's part of ComfyUI-Darkroom's film-emulation group, and honestly it's one of the pack's most underrated nodes. Film grain gives you texture; this gives you definition. Used at low intensity it's the difference between a sharpened-looking AI image and one that reads like it came off a Hasselblad scan. The README is upfront that it's physically inspired, not per-film calibrated - it reproduces the correct edge-profile shape, not a named emulsion.

How it works

Real adjacency effects come from developer exhaustion at a bright/dark boundary: the bright side of an edge gets a density overshoot, the dark side an undershoot. Darkroom models this as an asymmetric, saturating, edge-localized chemical-spread convolution - the derived model, implemented as the cheaper convolution so it doesn't cost a fortune to run. The key controls are the edge's spatial scale, the effect intensity, and an asymmetry ratio that decides how filmic the overshoot/undershoot balance is (1 = symmetric, basically unsharp mask; higher = filmic). There's also bromide drag: developer exhaustion streaks that trail downward from bright areas in the direction of gravity or tank agitation, the density-minus smears you see on real negatives. 0 turns it off; >0 adds the streaks.

The inputs that matter

  • edge_width - the Mackie-line scale in pixels (default 2). Wider = softer, longer-range; smaller = crunchier, tighter.
  • intensity - the strength of both overshoot and undershoot (0–2, default 0.5).
  • asymmetry - overshoot/undershoot ratio (default 6). The filmic dial.
  • drag_amount and drag_angle - bromide drag on/off and direction (90 = downward, with gravity).
  • strength - the final blend with the original.

Output is image - same dimensions in and out.

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.

Two gotchas. First, this is a spatial node - it reads neighboring pixels - so it's on the do-not-put-in-the-LUT-bake-chain list. Apply it after Extract. Second, the bromide drag is tuned, not literature-derived; at drag_amount near 1 it can look like water stains, which is either the point or a surprise depending on your image. The habit worth building: run this at intensity 0.3–0.6 before grain, on a mid-frequency setting, and let it do the definition while Film Grain does the texture. It's the closest thing in ComfyUI to "the film look, minus the film."

CategoryAKURATE/Darkroom/Film

Inputs (7)

NameTypeDefaultDescription
imageIMAGE
edge_widthoptFLOAT2.00.5–8Mackie-line spatial scale (gaussian sigma, px @ 1024; scales with long edge)
intensityoptFLOAT0.500–2Edge-effect strength (scales both overshoot and undershoot gains)
asymmetryoptFLOAT6.01–12Overshoot/undershoot ratio. 1 = symmetric (unsharp-like), high = filmic
drag_amountoptFLOAT0.000–1Bromide drag — density-minus streaks downstream of dark edges. 0 = off (pure adjacency)
drag_angleoptFLOAT900–360Drag direction in degrees. 90 = downward / gravity
strengthoptFLOAT1.000–1Blend between original (0) and adjusted (1)

Outputs (1)

NameTypeDescription
imageIMAGE