π BV Regional LoRA
Route different LoRAs to different regions of the frame
- regional
- 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
- regional
Regular ComfyUI gives you one LoRA stack per model at a time. BV Regional LoRA is where that stops: it attaches an immutable LoRA capability to your Regional V3 context, so different named regions can pull different LoRAs - a character LoRA on the subject, a style LoRA on the background, nothing bleeding across the boundary. It's the LoRA half of the same regional story the pack's LUT nodes tell on the color side.
You use it when your regional prompt already names distinct regions and you want each one's identity to come from a LoRA rather than just words. It chains: it takes a BV_REGIONAL in, transforms it, and hands a new BV_REGIONAL out, so you can stack several of these (or other regional transforms) along a chain before the context gets compiled.
How it works
The node is structured as a capability transform with three controls: operation, config_json, and the resource providers.
operation-replace(default),merge,subtract, orclear. These operate on the LoRA capability already attached to the regional context: replace swaps it, merge combines, subtract removes, clear wipes it entirely. "Immutable" is the design word - each transform produces a new context, it never edits the one it received.config_json- the capability payload, defaulting to{"version":3,"entries":[],"steps":[]}. In v3, entries carry per-entryid, asource(native - a directly-specified LoRA - or external, referencing a runtime resource provider bycollector_idandresource_id), andtargetsthat say which region(s) each entry applies to and at what scope. This is where "which LoRA goes where" is declared.resource_provider_1β¦resource_provider_20- where named LoRA stacks from BV LoRA Registry plug in. If your config's sources areexternal, the materialization step resolves them against these providers at execution time.
The node also validates that every target region actually exists in the regional document - a reference to a deleted region errors out instead of silently doing nothing, which keeps silent no-op LoRAs from poisoning your renders.
Output: regional, the transformed context, ready to feed the next transform or the regional compiler/attention backend.
The inputs and outputs that matter
regional- in and out; chain it.operation- reach formergewhen adding a LoRA to an existing capability,replaceto start fresh.config_json- the v3 entries; the pack's UI builder writes this, and it's worth letting it.resource_provider_*- the named stacks; you'll usually wire just the one from a single BV LoRA Registry.
How to install
Part of BV Node Pack:
cd ComfyUI/custom_nodes
git clone https://github.com/BlackVortexAI/bv_nodepack.git
Restart ComfyUI and hard-refresh. Or ComfyUI Manager β "BV Node Pack". No models to download - the LoRAs come from your existing models/loras folder via the registry.
Common issues
- "LoRA target references a missing region" - the config points at a region that isn't in the regional document (or the document id changed). Rebuild the config from the editor after editing regions.
- A LoRA does nothing - either its stack is disabled in the registry, the entry is scoped to a region that's empty/absent, or you set strength so low it's invisible. Check
enabledflags in the registry config and the entry's target. - "cannot clear a missing LoRA capability" - you used
subtractorclearon a context that has no LoRA capability attached. Usereplaceto set one first.
Regional LoRA is genuinely powerful and genuinely fiddly: the payoff is mixed-style images that stay coherent, the cost is you now manage per-region stacks. For a single-LoRA workflow it's pointless - but that's not what it's for.
Inputs (23)
| Name | Type | Default | Description |
|---|---|---|---|
| regional | BV_REGIONAL | β | |
| operation | COMBO | replace | 4 options: replace, merge, subtract, clear |
| config_json | STRING | {"version":3,"entries":[],"steps":[]} | β |
| 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 (1)
| Name | Type | Description |
|---|---|---|
| regional | BV_REGIONAL | β |