Nodes/H3 Studio/H3 Soft Denoise Zone (v2v)
ComfyUI Node

H3 Soft Denoise Zone (v2v)

Restyle one region of your H3 v2v without the matte line

By shootthesound·Created about a month ago·Updated 25 days ago· 29
H3 Soft Denoise Zone (v2v)
  • model
  • v2v_latent
  • mask
  • MODEL
center_x0.50
center_y0.50
radius0.35
feather0.50
inner_denoise1.00
outer_denoise0.30
noise_seed77
mask_feather0.10

H3 Soft Denoise Zone (v2v) is the node you reach for when plain v2v isn't enough: instead of restyling the whole frame, it restyles one feathered region harder than the rest, and the denoise strength itself fades across the falloff. No matte line, no hard-edged cut between "changed" and "untouched". It's differential diffusion - the technique that gave images soft regional control - adapted to H3's packed audio-video latent, and per the README it's the first of its kind on H3. Marked experimental, but it's a genuinely useful one.

What it's for

Concrete use: you have footage of a person walking through a street, and you want to change just the person - swap the outfit, restyle their character - while the street stays put. Give the node a circle around them, or a per-frame mask tracking them, and the inside reinvents at the sampler's denoise while the outside drifts at a fraction of it. outer_denoise 0 makes the rest of the frame exactly the footage, untouched.

How it works

The node doesn't touch the sampler. It wraps your model: it builds a per-pixel denoise map - a circle from center_x / center_y / radius / feather (smoothstep falloff, so the strength itself fades), or from your mask - then patches the model's forward pass. A pixel only starts participating in denoising once the sampling progress threshold reaches its map value; on the input side, not-yet-participating pixels are re-noised to the current sigma (the flow forward process), and on the output side their denoised prediction is pulled back toward the clean footage. That's why the boundary is soft instead of a seam: there's no single "swap" moment, just a gradient of participation.

The inputs that matter

  • v2v_latent - the Guide node's LATENT output with a v2v source active; the same latent you feed the sampler. It's the clean footage the protected regions hold on to.
  • center_x / center_y / radius / feather - the circle. radius is a fraction of the short side (0.5 spans it edge to edge); feather is how much of that is falloff.
  • inner_denoise / outer_denoise - fractions of the sampler's denoise. The sampler stays the master dial; inner 1.0 / outer 0.3 at sampler denoise 0.6 reinvents the centre at 0.6 while the surroundings shimmer at ~0.18.
  • mask (optional) - replaces the circle. A single mask applies to the whole clip; a per-frame batch (SAM2 video segmentation) follows the subject through time. mask_feather grows and softens a hard segmentation matte outward.
  • noise_seed - deterministic; change it only to reroll how the protected regions shimmer.

One output, MODEL - wire it to the sampler in place of the plain model.

Wiring it up

Guide LATENT → v2v_latent and the sampler; model → this node → sampler. Feed the same mask to H3 Regional Prompt if you also want to say what belongs in the region rather than only where change is allowed.

Where people get burned

The most common error is feeding the wrong latent - it needs H3's AV latent from the Guide node with a v2v source active, not an empty one, or you'll get a shape error. If the region isn't tracking a moving subject, that's the single-vs-batch mask distinction: one mask for a moving person means the zone stays still. And if you set inner_denoise below outer_denoise you've inverted the zone into a protector - legal, the log even tells you it's checking, but it's usually a mistake.

Install

Manager (search "H3 Studio") or cd ComfyUI/custom_nodes && git clone https://github.com/shootthesound/ComfyUI-H3Studio, restart, hard-refresh (Ctrl+Shift+R) for the frontend extension. Needs a ComfyUI build with MiniMax H3 support (v0.30.0+); no extra Python dependencies.

Categorymodel/conditioning/minimax

Inputs (11)

NameTypeDefaultDescription
modelMODEL
v2v_latentLATENTThe Guide node's LATENT output with a v2v source active — the SAME latent you feed the sampler. It is the clean footage the protected regions hold on to.
center_xFLOAT0.500–1Zone centre, fraction of the frame width.
center_yFLOAT0.500–1Zone centre, fraction of the frame height.
radiusFLOAT0.350.05–1.5Zone radius as a fraction of the frame's SHORT side (0.5 spans it edge to edge).
featherFLOAT0.500–1How much of the radius is the soft falloff. 0 = hard edge (matte-line territory), 0.5 = the outer half fades, 1 = fades from the centre out.
inner_denoiseFLOAT1.000–1Fraction of the SAMPLER'S denoise applied inside the zone. 1.0 = the full wired denoise; the sampler stays the master dial.
outer_denoiseFLOAT0.300–1Fraction of the sampler's denoise outside the zone. 0 = the surroundings reproduce the footage untouched.
noise_seedINT770–2147483647Seed for the re-injection noise field (deterministic; change it only to reroll how protected regions shimmer).
mask_featherFLOAT0.100–0.5Softens a MASK input (radius as a fraction of the frame's short side): the mask is grown then blurred, so a hard segmentation matte (SAM2 etc.) fades outward instead of leaving a matte line. 0 = use the mask as-is. Ignored for the circle (it has its own feather).
maskoptMASKOptional: replaces the circle. White areas get inner_denoise, black get outer_denoise, greys blend. A SINGLE mask applies to the whole clip; a mask BATCH (one per frame at 24 fps — e.g. SAM2 video segmentation tracking a person) follows the subject through time, pooled onto the latent grid. Frame counts that don't match the clip are resampled by index.

Outputs (1)

NameTypeDescription
MODELMODELWire to the sampler in place of the plain model.