RS MultiCharacter Prompts
The shortest path from two characters to one image
- character_pipe
Every regional prompting setup comes down to the same three pieces of information per character: some text, a position, and ideally a LoRA. The modular way to supply that is three separate nodes feeding a Finalize node. This node is the one-node version - all the rows, all the coordinates, optional per-row boxes and LoRAs, in a single table - and it plugs directly into the sampler with one wire.
If you're starting out, start here.
Why one node instead of the pipe assembly
The pack ships a modular trio (RS Character Prompt, RS Character LoRA, RS Character Position, then RS Finalize Character Pipe) which lets several people edit different parts of the same character set, connect in any order, and see each role's rows together. That's genuinely nicer for a big workflow. But it's four nodes where one will do, and a beginner debugging "why did character 3 vanish" has four places to look instead of one.
RS MultiCharacter Prompts outputs character_pipe - the RS_MC_CHARACTER_PIPE type the sampler and the detailer both eat. That's the whole interface. The author keeps this node around for saved workflows even though the modular nodes are now the recommended build, so it isn't going anywhere.
What's inside the table
character_count is the important first field, and its tooltip is the honest summary: only visible, enabled, nonempty slots are used, and hidden text stays saved but isn't generated. Set it to 2 for a couple, 3 for two people plus a word. Rows 1–10 each get:
character1- the prompt, multiline. One person's appearance and action. The tested examples use1girlor1boyper slot, so keep the count tag local to the row.character1_x/character1_y- normalised 0–1, where(0, 0)is the upper left. Equal centres spread out left to right in slot order, which is why two people both left at 0.5/0.5 still end up side by side instead of stacked.character1_enable- the per-row kill switch.character1_uc- a per-character negative. Reserved for metadata round-trips: the regional sampler only supports a common negative and throws an explicit error if this is nonempty. Don't fill it in for generation. (The detailer can use it when it does its matched-crop pass.)
Optional fields unlock the fancier modes. layout_mode picks points (each centre owns a Voronoi-ish slice of the whole canvas), boxes (centre X/Y plus width/height), or mixed, where each slot decides for itself and boxes win over point regions. Outside all regions you get the common prompt; overlapping boxes share their captions. character1_kind switches a row between character and text, and character1_text carries the literal words to draw - a text row always needs a box, because a point has no area to write in. character1_lora, character1_lora_strength and character1_lora_clip_strength attach a per-character LoRA. Spelling and person count in text regions remain model-dependent; the author is upfront that the SD1.5 example only checks "two distinguishable people and visible lettering", not exact typography.
Wiring it up
Three wires total: MODEL, CLIP, VAE into RS MultiCharacter Sampler, and this node's character_pipe into the sampler's character_pipe. The sampler's own prompt field holds the shared scene - the cafe, the classroom, the style tags, the total count - and its negative_prompt is the negative for the whole image.
cd ComfyUI/custom_nodes
git clone https://github.com/raspie10032/ComfyUI_RS_MultiCharacter_Sampler.git
# restart ComfyUI
Or find RS MultiCharacter Sampler in ComfyUI Manager and install from there. Use one method, not both. The sampler needs no extra Python packages; only the detailer and tagger paths pull dependencies.
Traps worth knowing before you hit run
Leave character1_uc empty and put your negatives in the sampler. Keep the person-count tag realistic - asking for six bodies in two rows produced seven and eleven in the author's tests, so treat counts as suggestions. And remember what the coordinates are doing: they route attention to prompt regions. They do not pin a head to a pixel, and a single character owns the entire canvas, so moving that one centre changes essentially nothing.
If you later want per-character LoRAs on ten slots, boxes per row, or a layout guide you can eyeball, the modular nodes are the upgrade path - the pipe type is identical, so the sampler doesn't care which one you used.
Inputs (132)
| Name | Type | Default | Description |
|---|---|---|---|
| character_count | INT | 51–10 | Only visible, enabled, nonempty slots are used. Hidden text stays saved but is not generated. |
| character1_enable | BOOLEAN | true | — |
| character1 | STRING | — | |
| character1_uc | STRING | Reserved for metadata round trips. Regional sampling supports a common negative only; nonempty character negatives give an explicit error. | |
| character1_x | FLOAT | 0.500–1 | — |
| character1_y | FLOAT | 0.500–1 | — |
| character2_enable | BOOLEAN | true | — |
| character2 | STRING | — | |
| character2_uc | STRING | Reserved for metadata round trips. Regional sampling supports a common negative only; nonempty character negatives give an explicit error. | |
| character2_x | FLOAT | 0.500–1 | — |
| character2_y | FLOAT | 0.500–1 | — |
| character3_enable | BOOLEAN | true | — |
| character3 | STRING | — | |
| character3_uc | STRING | Reserved for metadata round trips. Regional sampling supports a common negative only; nonempty character negatives give an explicit error. | |
| character3_x | FLOAT | 0.500–1 | — |
| character3_y | FLOAT | 0.500–1 | — |
| character4_enable | BOOLEAN | true | — |
| character4 | STRING | — | |
| character4_uc | STRING | Reserved for metadata round trips. Regional sampling supports a common negative only; nonempty character negatives give an explicit error. | |
| character4_x | FLOAT | 0.500–1 | — |
| character4_y | FLOAT | 0.500–1 | — |
| character5_enable | BOOLEAN | true | — |
| character5 | STRING | — | |
| character5_uc | STRING | Reserved for metadata round trips. Regional sampling supports a common negative only; nonempty character negatives give an explicit error. | |
| character5_x | FLOAT | 0.500–1 | — |
| character5_y | FLOAT | 0.500–1 | — |
| character6_enable | BOOLEAN | true | — |
| character6 | STRING | — | |
| character6_uc | STRING | Reserved for metadata round trips. Regional sampling supports a common negative only; nonempty character negatives give an explicit error. | |
| character6_x | FLOAT | 0.500–1 | — |
| character6_y | FLOAT | 0.500–1 | — |
| character7_enable | BOOLEAN | true | — |
| character7 | STRING | — | |
| character7_uc | STRING | Reserved for metadata round trips. Regional sampling supports a common negative only; nonempty character negatives give an explicit error. | |
| character7_x | FLOAT | 0.500–1 | — |
| character7_y | FLOAT | 0.500–1 | — |
| character8_enable | BOOLEAN | true | — |
| character8 | STRING | — | |
| character8_uc | STRING | Reserved for metadata round trips. Regional sampling supports a common negative only; nonempty character negatives give an explicit error. | |
| character8_x | FLOAT | 0.500–1 | — |
| character8_y | FLOAT | 0.500–1 | — |
| character9_enable | BOOLEAN | true | — |
| character9 | STRING | — | |
| character9_uc | STRING | Reserved for metadata round trips. Regional sampling supports a common negative only; nonempty character negatives give an explicit error. | |
| character9_x | FLOAT | 0.500–1 | — |
| character9_y | FLOAT | 0.500–1 | — |
| character10_enable | BOOLEAN | true | — |
| character10 | STRING | — | |
| character10_uc | STRING | Reserved for metadata round trips. Regional sampling supports a common negative only; nonempty character negatives give an explicit error. | |
| character10_x | FLOAT | 0.500–1 | — |
| character10_y | FLOAT | 0.500–1 | — |
| layout_modeopt | COMBO | points | Points divide the full canvas. Boxes use center X/Y and width/height. Mixed lets each slot use points or a box; boxes take priority over point regions. Text always uses a box. Outside all regions uses the common prompt; overlapping boxes share their captions. |
| character1_widthopt | FLOAT | 0.400.01–1 | — |
| character1_heightopt | FLOAT | 0.800.01–1 | — |
| character2_widthopt | FLOAT | 0.400.01–1 | — |
| character2_heightopt | FLOAT | 0.800.01–1 | — |
| character3_widthopt | FLOAT | 0.400.01–1 | — |
| character3_heightopt | FLOAT | 0.800.01–1 | — |
| character4_widthopt | FLOAT | 0.400.01–1 | — |
| character4_heightopt | FLOAT | 0.800.01–1 | — |
| character5_widthopt | FLOAT | 0.400.01–1 | — |
| character5_heightopt | FLOAT | 0.800.01–1 | — |
| character6_widthopt | FLOAT | 0.400.01–1 | — |
| character6_heightopt | FLOAT | 0.800.01–1 | — |
| character7_widthopt | FLOAT | 0.400.01–1 | — |
| character7_heightopt | FLOAT | 0.800.01–1 | — |
| character8_widthopt | FLOAT | 0.400.01–1 | — |
| character8_heightopt | FLOAT | 0.800.01–1 | — |
| character9_widthopt | FLOAT | 0.400.01–1 | — |
| character9_heightopt | FLOAT | 0.800.01–1 | — |
| character10_widthopt | FLOAT | 0.400.01–1 | — |
| character10_heightopt | FLOAT | 0.800.01–1 | — |
| character1_kindopt | COMBO | character | Boxes/mixed modes. Text uses this slot's prompt for font/color/style and its literal-text field for the word to draw. Text regions do not count as people in the detailer. |
| character1_textopt | STRING | Exact visible text, e.g. HELLO. Model spelling and placement are not guaranteed. Remove 'text' from the common negative prompt when requesting text. | |
| character2_kindopt | COMBO | character | Boxes/mixed modes. Text uses this slot's prompt for font/color/style and its literal-text field for the word to draw. Text regions do not count as people in the detailer. |
| character2_textopt | STRING | Exact visible text, e.g. HELLO. Model spelling and placement are not guaranteed. Remove 'text' from the common negative prompt when requesting text. | |
| character3_kindopt | COMBO | character | Boxes/mixed modes. Text uses this slot's prompt for font/color/style and its literal-text field for the word to draw. Text regions do not count as people in the detailer. |
| character3_textopt | STRING | Exact visible text, e.g. HELLO. Model spelling and placement are not guaranteed. Remove 'text' from the common negative prompt when requesting text. | |
| character4_kindopt | COMBO | character | Boxes/mixed modes. Text uses this slot's prompt for font/color/style and its literal-text field for the word to draw. Text regions do not count as people in the detailer. |
| character4_textopt | STRING | Exact visible text, e.g. HELLO. Model spelling and placement are not guaranteed. Remove 'text' from the common negative prompt when requesting text. | |
| character5_kindopt | COMBO | character | Boxes/mixed modes. Text uses this slot's prompt for font/color/style and its literal-text field for the word to draw. Text regions do not count as people in the detailer. |
| character5_textopt | STRING | Exact visible text, e.g. HELLO. Model spelling and placement are not guaranteed. Remove 'text' from the common negative prompt when requesting text. | |
| character6_kindopt | COMBO | character | Boxes/mixed modes. Text uses this slot's prompt for font/color/style and its literal-text field for the word to draw. Text regions do not count as people in the detailer. |
| character6_textopt | STRING | Exact visible text, e.g. HELLO. Model spelling and placement are not guaranteed. Remove 'text' from the common negative prompt when requesting text. | |
| character7_kindopt | COMBO | character | Boxes/mixed modes. Text uses this slot's prompt for font/color/style and its literal-text field for the word to draw. Text regions do not count as people in the detailer. |
| character7_textopt | STRING | Exact visible text, e.g. HELLO. Model spelling and placement are not guaranteed. Remove 'text' from the common negative prompt when requesting text. | |
| character8_kindopt | COMBO | character | Boxes/mixed modes. Text uses this slot's prompt for font/color/style and its literal-text field for the word to draw. Text regions do not count as people in the detailer. |
| character8_textopt | STRING | Exact visible text, e.g. HELLO. Model spelling and placement are not guaranteed. Remove 'text' from the common negative prompt when requesting text. | |
| character9_kindopt | COMBO | character | Boxes/mixed modes. Text uses this slot's prompt for font/color/style and its literal-text field for the word to draw. Text regions do not count as people in the detailer. |
| character9_textopt | STRING | Exact visible text, e.g. HELLO. Model spelling and placement are not guaranteed. Remove 'text' from the common negative prompt when requesting text. | |
| character10_kindopt | COMBO | character | Boxes/mixed modes. Text uses this slot's prompt for font/color/style and its literal-text field for the word to draw. Text regions do not count as people in the detailer. |
| character10_textopt | STRING | Exact visible text, e.g. HELLO. Model spelling and placement are not guaranteed. Remove 'text' from the common negative prompt when requesting text. | |
| character1_geometryopt | COMBO | point | Mixed mode: point = automatic partition from X/Y; box = explicit center and size. Text always uses a box. Boxes take priority inside their bounds. |
| character2_geometryopt | COMBO | point | Mixed mode: point = automatic partition from X/Y; box = explicit center and size. Text always uses a box. Boxes take priority inside their bounds. |
| character3_geometryopt | COMBO | point | Mixed mode: point = automatic partition from X/Y; box = explicit center and size. Text always uses a box. Boxes take priority inside their bounds. |
| character4_geometryopt | COMBO | point | Mixed mode: point = automatic partition from X/Y; box = explicit center and size. Text always uses a box. Boxes take priority inside their bounds. |
| character5_geometryopt | COMBO | point | Mixed mode: point = automatic partition from X/Y; box = explicit center and size. Text always uses a box. Boxes take priority inside their bounds. |
| character6_geometryopt | COMBO | point | Mixed mode: point = automatic partition from X/Y; box = explicit center and size. Text always uses a box. Boxes take priority inside their bounds. |
| character7_geometryopt | COMBO | point | Mixed mode: point = automatic partition from X/Y; box = explicit center and size. Text always uses a box. Boxes take priority inside their bounds. |
| character8_geometryopt | COMBO | point | Mixed mode: point = automatic partition from X/Y; box = explicit center and size. Text always uses a box. Boxes take priority inside their bounds. |
| character9_geometryopt | COMBO | point | Mixed mode: point = automatic partition from X/Y; box = explicit center and size. Text always uses a box. Boxes take priority inside their bounds. |
| character10_geometryopt | COMBO | point | Mixed mode: point = automatic partition from X/Y; box = explicit center and size. Text always uses a box. Boxes take priority inside their bounds. |
| character1_loraopt | COMBO | None | Optional LoRA for this character. Use a file for the connected model family. Separate LoRA predictions are blended in this region; more distinct LoRAs increase time and memory. Global style/acceleration LoRAs still use normal loaders. |
| character1_lora_strengthopt | FLOAT | 1.00-10–10 | Diffusion-model LoRA strength in this region. Zero disables the model part. |
| character1_lora_clip_strengthopt | FLOAT | 1.00-10–10 | Text-encoder LoRA strength for this character's prompt only, if the file contains compatible text-encoder weights. Zero disables that part. |
| character2_loraopt | COMBO | None | Optional LoRA for this character. Use a file for the connected model family. Separate LoRA predictions are blended in this region; more distinct LoRAs increase time and memory. Global style/acceleration LoRAs still use normal loaders. |
| character2_lora_strengthopt | FLOAT | 1.00-10–10 | Diffusion-model LoRA strength in this region. Zero disables the model part. |
| character2_lora_clip_strengthopt | FLOAT | 1.00-10–10 | Text-encoder LoRA strength for this character's prompt only, if the file contains compatible text-encoder weights. Zero disables that part. |
| character3_loraopt | COMBO | None | Optional LoRA for this character. Use a file for the connected model family. Separate LoRA predictions are blended in this region; more distinct LoRAs increase time and memory. Global style/acceleration LoRAs still use normal loaders. |
| character3_lora_strengthopt | FLOAT | 1.00-10–10 | Diffusion-model LoRA strength in this region. Zero disables the model part. |
| character3_lora_clip_strengthopt | FLOAT | 1.00-10–10 | Text-encoder LoRA strength for this character's prompt only, if the file contains compatible text-encoder weights. Zero disables that part. |
| character4_loraopt | COMBO | None | Optional LoRA for this character. Use a file for the connected model family. Separate LoRA predictions are blended in this region; more distinct LoRAs increase time and memory. Global style/acceleration LoRAs still use normal loaders. |
| character4_lora_strengthopt | FLOAT | 1.00-10–10 | Diffusion-model LoRA strength in this region. Zero disables the model part. |
| character4_lora_clip_strengthopt | FLOAT | 1.00-10–10 | Text-encoder LoRA strength for this character's prompt only, if the file contains compatible text-encoder weights. Zero disables that part. |
| character5_loraopt | COMBO | None | Optional LoRA for this character. Use a file for the connected model family. Separate LoRA predictions are blended in this region; more distinct LoRAs increase time and memory. Global style/acceleration LoRAs still use normal loaders. |
| character5_lora_strengthopt | FLOAT | 1.00-10–10 | Diffusion-model LoRA strength in this region. Zero disables the model part. |
| character5_lora_clip_strengthopt | FLOAT | 1.00-10–10 | Text-encoder LoRA strength for this character's prompt only, if the file contains compatible text-encoder weights. Zero disables that part. |
| character6_loraopt | COMBO | None | Optional LoRA for this character. Use a file for the connected model family. Separate LoRA predictions are blended in this region; more distinct LoRAs increase time and memory. Global style/acceleration LoRAs still use normal loaders. |
| character6_lora_strengthopt | FLOAT | 1.00-10–10 | Diffusion-model LoRA strength in this region. Zero disables the model part. |
| character6_lora_clip_strengthopt | FLOAT | 1.00-10–10 | Text-encoder LoRA strength for this character's prompt only, if the file contains compatible text-encoder weights. Zero disables that part. |
| character7_loraopt | COMBO | None | Optional LoRA for this character. Use a file for the connected model family. Separate LoRA predictions are blended in this region; more distinct LoRAs increase time and memory. Global style/acceleration LoRAs still use normal loaders. |
| character7_lora_strengthopt | FLOAT | 1.00-10–10 | Diffusion-model LoRA strength in this region. Zero disables the model part. |
| character7_lora_clip_strengthopt | FLOAT | 1.00-10–10 | Text-encoder LoRA strength for this character's prompt only, if the file contains compatible text-encoder weights. Zero disables that part. |
| character8_loraopt | COMBO | None | Optional LoRA for this character. Use a file for the connected model family. Separate LoRA predictions are blended in this region; more distinct LoRAs increase time and memory. Global style/acceleration LoRAs still use normal loaders. |
| character8_lora_strengthopt | FLOAT | 1.00-10–10 | Diffusion-model LoRA strength in this region. Zero disables the model part. |
| character8_lora_clip_strengthopt | FLOAT | 1.00-10–10 | Text-encoder LoRA strength for this character's prompt only, if the file contains compatible text-encoder weights. Zero disables that part. |
| character9_loraopt | COMBO | None | Optional LoRA for this character. Use a file for the connected model family. Separate LoRA predictions are blended in this region; more distinct LoRAs increase time and memory. Global style/acceleration LoRAs still use normal loaders. |
| character9_lora_strengthopt | FLOAT | 1.00-10–10 | Diffusion-model LoRA strength in this region. Zero disables the model part. |
| character9_lora_clip_strengthopt | FLOAT | 1.00-10–10 | Text-encoder LoRA strength for this character's prompt only, if the file contains compatible text-encoder weights. Zero disables that part. |
| character10_loraopt | COMBO | None | Optional LoRA for this character. Use a file for the connected model family. Separate LoRA predictions are blended in this region; more distinct LoRAs increase time and memory. Global style/acceleration LoRAs still use normal loaders. |
| character10_lora_strengthopt | FLOAT | 1.00-10–10 | Diffusion-model LoRA strength in this region. Zero disables the model part. |
| character10_lora_clip_strengthopt | FLOAT | 1.00-10–10 | Text-encoder LoRA strength for this character's prompt only, if the file contains compatible text-encoder weights. Zero disables that part. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| character_pipe | RS_MC_CHARACTER_PIPE | — |