π BV Detailer Loop Job Resolver
The node that turns one loop step into a real detail job
- loop_state
- model
- clip
- vae
- detailer_job
- current_image
- region_mask
- basic_pipe
Of the six nodes in the BV Detailer Loop, this is the one doing the actual thinking. BV Detailer Loop Job Resolver takes the loop state, figures out which job is current, and turns it into everything an Impact detailer needs: a composed region mask, the current image, and a ready-to-use BASIC_PIPE with positive and negative conditioning compiled from your regional prompts.
If you've read the Impact Pack docs on Detailer (SEGS), you know the loop underneath all of this is just detect β crop β re-render β paste back. The Resolver is where "re-render" stops being a blank and starts being your regional conditioning. It's the node that makes each region detail with its own prompt context instead of one global prompt applied to everything.
How it works
The Resolver reads job_index out of the loop_state, pulls the matching job from the plan, and does three things:
- Composes the mask. Each job is built from one or more regions. Their masks combine per the plan's
mask_composition-union(default),intersection, orsubtract. - Compiles the conditioning. It encodes Global, Background, and the primary region's prompts, plus any context regions, weighted by the influence values. This is why a face region gets "detailed face, sharp eyes" while a character region gets its own full prompt.
- Bundles a
BASIC_PIPE=(model, clip, vae, positive, negative)- Impact's standard carrier, so you can feedMaskDetailer (pipe)orDetailer (SEGS/pipe)directly without a separateToBasicPipenode.
Inputs that matter
loop_state(BV_DETAILER_LOOP_STATE) - from BV Detailer Loop Start. Never set this by hand.model,clip,vae- the same checkpoint family that generated the image. Wire these straight from your loader.global_influence(default1.0),background_influence(0.35),primary_region_influence(1.0) - these weight how much each prompt scope contributes to the detail pass. The defaults are sane: global fully in, background pulled back so it doesn't fight the region, primary region driving. A per-jobconditioningblock in the plan overrides these.
Outputs and where they go
detailer_job(BV_DETAILER_JOB) β BV Detailer Loop Detect to SEGS (Impact). Carries the region identity and any assigned detector.current_image(IMAGE) β Detect-to-SEGS and the Impact Detailer. This is the image accumulated from earlier jobs.region_mask(MASK) β Detect-to-SEGS. The exact composed mask at full image resolution.basic_pipe(BASIC_PIPE) β ImpactDetailer (SEGS/pipe). Model, CLIP, VAE and the freshly compiled conditioning, all in one wire.
BV Detailer Loop Job Resolver.detailer_job / current_image / region_mask
--> BV Detailer Loop Detect to SEGS (Impact)
BV Detailer Loop Job Resolver.current_image / basic_pipe
+ Detect-to-SEGS.segs --> Impact Detailer (SEGS/pipe)
Installing and dependencies
Part of BV Node Pack - Manager search "BV Node Pack", or:
cd ComfyUI/custom_nodes
git clone https://github.com/BlackVortexAI/bv_nodepack.git
Restart and hard-refresh (Ctrl+F5). Because this node emits BASIC_PIPE and feeds Impact's detailers, you need ComfyUI-Impact-Pack installed for the downstream half of the loop. The plan and mask contracts themselves are package-neutral - the Resolver doesn't import Impact internals - but the detailer you wire it into does.
Common issues
- "requires a single IMAGE shaped B,H,W,C". The Resolver, like the Impact detailers it feeds, handles one image per run. Feed batch 1 only.
- Output looks identical to the input. A detail pass that's genuinely under-resolved is the canonical use; if your face is already large and sharp, the pass changes it without improving it - the community verdict on detailing is "turn it off for anything already big." Consider whether the region actually needs the pass.
- Region mask empty. A job with a mask that renders empty (say, a
subtractthat eats everything) fails at detect time. Check the mask output with a preview node.
The Resolver is the node you'll actually tune. If the loop runs but regions look wrong, this is where you start - influence weights, then the plan's per-job conditioning.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| loop_state | BV_DETAILER_LOOP_STATE | β | |
| model | MODEL | β | |
| clip | CLIP | β | |
| vae | VAE | β | |
| global_influence | FLOAT | 1.000β2 | β |
| background_influence | FLOAT | 0.350β2 | β |
| primary_region_influence | FLOAT | 1.000β2 | β |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| detailer_job | BV_DETAILER_JOB | β |
| current_image | IMAGE | β |
| region_mask | MASK | β |
| basic_pipe | BASIC_PIPE | β |