Nodes/BV Node Pack/πŸŒ€ BV Regional Detailer Plan
ComfyUI Node

πŸŒ€ BV Regional Detailer Plan

Your drawn regions, turned into an ordered detail queue

By BlackVortexAIΒ·Created 9 months agoΒ·Updated 3 days agoΒ· 7
πŸŒ€ BV Regional Detailer Plan
  • 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
β—„config_jsonβ–Ί

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, or subtract - for grouped jobs.
  • Pick prompt composition - primary, combined, or context - 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_summary says "No enabled detailer regions". Every region is set to Generation only, or disabled. Set at least one region's Usage to Detailer only or Generation + Detailer in 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_composition for grouped jobs - subtract on the wrong region ordering will carve out the thing you wanted to keep.
  • Invalid config_json errors. If you hand-edit the JSON, it must be a valid bv.detailer_plan object; 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.

CategoryπŸŒ€ BV Node Pack/regional/detailer

Inputs (24)

NameTypeDefaultDescription
regional_promptBV_REGIONALβ€”
config_jsonSTRINGβ€”
detector_registryoptBV_DETECTOR_REGISTRYβ€”
resource_provideroptBV_RUNTIME_RESOURCE_PROVIDERβ€”
resource_provider_1optBV_RUNTIME_RESOURCE_PROVIDERβ€”
resource_provider_2optBV_RUNTIME_RESOURCE_PROVIDERβ€”
resource_provider_3optBV_RUNTIME_RESOURCE_PROVIDERβ€”
resource_provider_4optBV_RUNTIME_RESOURCE_PROVIDERβ€”
resource_provider_5optBV_RUNTIME_RESOURCE_PROVIDERβ€”
resource_provider_6optBV_RUNTIME_RESOURCE_PROVIDERβ€”
resource_provider_7optBV_RUNTIME_RESOURCE_PROVIDERβ€”
resource_provider_8optBV_RUNTIME_RESOURCE_PROVIDERβ€”
resource_provider_9optBV_RUNTIME_RESOURCE_PROVIDERβ€”
resource_provider_10optBV_RUNTIME_RESOURCE_PROVIDERβ€”
resource_provider_11optBV_RUNTIME_RESOURCE_PROVIDERβ€”
resource_provider_12optBV_RUNTIME_RESOURCE_PROVIDERβ€”
resource_provider_13optBV_RUNTIME_RESOURCE_PROVIDERβ€”
resource_provider_14optBV_RUNTIME_RESOURCE_PROVIDERβ€”
resource_provider_15optBV_RUNTIME_RESOURCE_PROVIDERβ€”
resource_provider_16optBV_RUNTIME_RESOURCE_PROVIDERβ€”
resource_provider_17optBV_RUNTIME_RESOURCE_PROVIDERβ€”
resource_provider_18optBV_RUNTIME_RESOURCE_PROVIDERβ€”
resource_provider_19optBV_RUNTIME_RESOURCE_PROVIDERβ€”
resource_provider_20optBV_RUNTIME_RESOURCE_PROVIDERβ€”

Outputs (3)

NameTypeDescription
detailer_planBV_DETAILER_PLANβ€”
job_countINTβ€”
plan_summarySTRINGβ€”