π BV Regional Detailer Plan
Your drawn regions, turned into an ordered detail queue
- regional_prompt
- detector_registry
- resource_provider
- resource_provider_1
- resource_provider_2
- resource_provider_3
- resource_provider_4
- resource_provider_5
- resource_provider_6
- resource_provider_7
- resource_provider_8
- resource_provider_9
- resource_provider_10
- resource_provider_11
- resource_provider_12
- resource_provider_13
- resource_provider_14
- resource_provider_15
- resource_provider_16
- resource_provider_17
- resource_provider_18
- resource_provider_19
- resource_provider_20
- detailer_plan
- job_count
- plan_summary
You drew six regions in the BV Regional Editor: two characters, a hand interaction zone, a background area. Now you want to detail them in a sensible order, each with its own prompt, possibly with a different detector per region. BV Regional Detailer Plan is the node that turns that drawing into an actual list of jobs the loop can execute.
Think of it as the conductor's score. It doesn't render anything and it doesn't detect anything - it reads the BV_REGIONAL document, picks out the regions marked for detailing, and produces an ordered detailer_plan that every other loop node obeys. It also owns the optional BV Detector Registry: connect one here and it validates that every detector a job names actually exists.
How it works
The plan is built from regions whose Usage is Detailer only or Generation + Detailer (the editor stores this in the BV_REGIONAL v2 document), sorted by priority. With no config, the default is one job per eligible region - the natural starting point. The node's Configure Detailer Plan dialog is where you go from there:
- Group regions into a single job - two mask pieces that should detail as one.
- Reorder jobs, because order matters: every completed job becomes the next job's input image, so later regions see earlier fixes.
- Pick mask composition -
union,intersection, orsubtract- for grouped jobs. - Pick prompt composition -
primary,combined, orcontext- controlling which regions' prompts feed the detail pass. - Assign a detector to any job from the registry's dropdown.
Under the hood all of this serializes to the plan contract (a bv.detailer_plan JSON), but you don't need to touch the JSON - the dialog does. The config_json input exists because that's how the node's state is stored in the workflow.
Inputs and outputs
regional_prompt(BV_REGIONAL) - from BV Regional Prompt. Required; it's the document being planned.config_json(default empty) - leave empty for the automatic one-job-per-region plan; the dialog fills it when you configure.detector_registry(BV_DETECTOR_REGISTRY) - optional, from BV Detector Registry. If any job names a detector, this must be connected.
Outputs: detailer_plan (BV_DETAILER_PLAN) β BV Detailer Loop Start; plus job_count (INT) and plan_summary (STRING) - both genuinely useful debug outputs that tell you how many jobs you actually built and in what order.
Installing it
Ships with BV Node Pack; one install covers the whole loop family. ComfyUI 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). Detector-backed jobs additionally require ComfyUI-Impact-Pack for the registry's model loading and the SEGS detailer path downstream. The plan and mask contracts themselves stay package-neutral - that's deliberate.
Common issues
plan_summarysays "No enabled detailer regions". Every region is set toGenerationonly, or disabled. Set at least one region's Usage toDetailer onlyorGeneration + Detailerin the editor.- "detector_id 'X' is not registered" (or the job validates empty). You assigned a detector in the dialog but the registry isn't connected, or the id doesn't exist in it. Connect the registry to the Plan node.
- A job's mask looks wrong. Check the
mask_compositionfor grouped jobs -subtracton the wrong region ordering will carve out the thing you wanted to keep. - Invalid
config_jsonerrors. If you hand-edit the JSON, it must be a validbv.detailer_planobject; an empty string is always safe, which is why leaving it alone is the right default.
One honest note: the plan does exactly what you configure and nothing more. If the loop runs but a region keeps getting detailed that you thought you'd excluded, go back to the editor and check that region's Usage - that's the single most common "why is this running" confusion.
Inputs (24)
| Name | Type | Default | Description |
|---|---|---|---|
| regional_prompt | BV_REGIONAL | β | |
| config_json | STRING | β | |
| detector_registryopt | BV_DETECTOR_REGISTRY | β | |
| resource_provideropt | BV_RUNTIME_RESOURCE_PROVIDER | β | |
| resource_provider_1opt | BV_RUNTIME_RESOURCE_PROVIDER | β | |
| resource_provider_2opt | BV_RUNTIME_RESOURCE_PROVIDER | β | |
| resource_provider_3opt | BV_RUNTIME_RESOURCE_PROVIDER | β | |
| resource_provider_4opt | BV_RUNTIME_RESOURCE_PROVIDER | β | |
| resource_provider_5opt | BV_RUNTIME_RESOURCE_PROVIDER | β | |
| resource_provider_6opt | BV_RUNTIME_RESOURCE_PROVIDER | β | |
| resource_provider_7opt | BV_RUNTIME_RESOURCE_PROVIDER | β | |
| resource_provider_8opt | BV_RUNTIME_RESOURCE_PROVIDER | β | |
| resource_provider_9opt | BV_RUNTIME_RESOURCE_PROVIDER | β | |
| resource_provider_10opt | BV_RUNTIME_RESOURCE_PROVIDER | β | |
| resource_provider_11opt | BV_RUNTIME_RESOURCE_PROVIDER | β | |
| resource_provider_12opt | BV_RUNTIME_RESOURCE_PROVIDER | β | |
| resource_provider_13opt | BV_RUNTIME_RESOURCE_PROVIDER | β | |
| resource_provider_14opt | BV_RUNTIME_RESOURCE_PROVIDER | β | |
| resource_provider_15opt | BV_RUNTIME_RESOURCE_PROVIDER | β | |
| resource_provider_16opt | BV_RUNTIME_RESOURCE_PROVIDER | β | |
| resource_provider_17opt | BV_RUNTIME_RESOURCE_PROVIDER | β | |
| resource_provider_18opt | BV_RUNTIME_RESOURCE_PROVIDER | β | |
| resource_provider_19opt | BV_RUNTIME_RESOURCE_PROVIDER | β | |
| resource_provider_20opt | BV_RUNTIME_RESOURCE_PROVIDER | β |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| detailer_plan | BV_DETAILER_PLAN | β |
| job_count | INT | β |
| plan_summary | STRING | β |