Nodes/ComfyUI_RS_MultiCharacter_Sampler/RS Finalize Character Pipe
ComfyUI Node

RS Finalize Character Pipe

The node that tells you what you forgot

By raspie10032·Created 3 days ago·Updated 2 days ago· 1
RS Finalize Character Pipe
  • building_pipe
  • character_pipe

Every modular workflow has a convergence node - the one everybody wires into at the end, that either hands you the finished thing or refuses and explains itself. In this pack it's RS Finalize Character Pipe, and it's about as small a node as you'll find: one input, one output, no widgets.

Its job is validation. That sounds dull until you've debugged a three-character scene and discovered the actual problem was a slot with an enabled checkbox and an empty string.

One input, one output

Input: building_pipe (RS_MC_BUILD_PIPE). Output: character_pipe (RS_MC_CHARACTER_PIPE). That's it. The output type is what RS MultiCharacter Sampler and RS MultiCharacter Detailer actually consume, so this node is the handoff between "a bunch of role nodes" and "something that samples".

The pipe itself is an immutable list of numbered slots. Each role node reads the pipe, replaces only its own fields, and passes a new pipe along. That's why the connect order doesn't matter: Prompt → LoRA → Position → Finalize works, Position → Prompt → Finalize works, and so does skipping LoRA and Position entirely if you don't need per-character LoRAs or boxes. The node's description says it in one line: character numbers determine ordering, not node order.

Which is the useful design decision here. Slot 3 is slot 3 whether you set its prompt first or its position first, and re-arranging the canvas for readability can't silently reorder your characters.

What it validates

Reading the shipped code, Finalize walks the slots in number order and does a short list of checks - all of which produce readable errors rather than a weird image:

  • A prompt node must exist somewhere upstream. If nothing ever set the character count, you get "connect a Character Prompts node anywhere before Finalize."
  • Every live, enabled slot needs a nonempty string. Otherwise: "Character N: connect a nonempty STRING to the matching Prompt row, or disable that row." This is the most common thing you'll see, and the fix is in the message.
  • Text regions need box geometry. Point positions have no area to draw words into.
  • Text regions can't carry a character LoRA. Choose None.
  • At least one character or text region must survive the enabled/nonempty filter, or it errors out instead of sampling an empty prompt.

What it does not do is invent defaults for missing pieces. Unlisted LoRA slots become None, unlisted positions become centre - but a blank prompt is an error, never a silent skip. I'd call that the right trade: a two-character image with a mystery silhouette is much worse than a red node border.

Where it sits in the graph

Typical modular graph, left to right: your text sources feed RS Character Prompt, which feeds RS Character Position and RS Character LoRA (any order), which feed Finalize, whose character_pipe goes into the sampler's character_pipe. The sampler's image output and its own character_pipe output then go into RS MultiCharacter Detailer along with the same MODEL/CLIP/VAE, a Detection Loader and a Tagger Loader.

If you'd rather not assemble roles at all, RS MultiCharacter Prompts emits a character_pipe directly and you can skip Finalize - same type, different route. The modular path buys you per-character LoRAs, per-slot box geometry and a layout line you can eyeball.

Install

The whole pack installs as one; there's no separate package for this node.

cd ComfyUI/custom_nodes
git clone https://github.com/raspie10032/ComfyUI_RS_MultiCharacter_Sampler.git

Then restart ComfyUI. Manager users can search RS MultiCharacter Sampler instead - use one method, not both. Nothing extra to pip install for the pipe nodes; the Python dependencies in requirements-detailer.txt are only for the detailer and tagger halves.

Two things to keep in mind

First, hidden slots stay hidden: if character_count is 2 on the prompt node, slots 3–10 are excluded even if you left text in them and even if a Position row still holds coordinates. Finalize obeys the prompt count, not the other role counts. That's why a character can "vanish" after you lower a spinner.

Second, Finalize is a validator, not a healer. It won't quietly drop a text slot with a LoRA or stretch a point into a box. Every one of those cases is a deliberate stop with the reason attached - read the error, fix the row it names, run again.

CategoryRS MultiCharacter/Characters

Inputs (1)

NameTypeDefaultDescription
building_pipeRS_MC_BUILD_PIPE—

Outputs (1)

NameTypeDescription
character_pipeRS_MC_CHARACTER_PIPE—