Still in Test Phase - You Need Forge Couple installed (https://github.com/Haoming02/sd-forge-couple)
I was a bit annoyed by needing to change my prompt or loosing the layout of it, when using Forge Couple or Regional Prompt, so i tried to make an own extension for better avoiding of character bleeding. Also Forge Couple had problems with batch generations. This extension works not perfect, but it helps.
It is pretty simple. Instead of writing one long mixed prompt, you get three prompt fields:
Global Prompt (replaces the positive prompt field, when the extension is not enabled)
For the scene, style, lighting, camera, and shared action
Interaction should be prompted hereCharacter 1 Prompt for the first character’s look, outfit, LoRA, and details
Action of the Character here, helps to get pose rightCharacter 2 Prompt for the second character’s look, outfit, LoRA, and details
Action of the Character here, helps to get pose right
Each character also has a simple position grid. You click or drag on the grid to mark where that character should appear in the image. The extension then uses regional attention masking through Forge Couple to guide each character prompt toward its own area. If you want to add to the area later, hold down strg.
It can help with:
keeping outfits separated
reducing character feature mixing
making two LoRAs easier to use together
giving each character a rough position
making batch generation easier than manual Forge Couple setup
Basic Usage
Enable Two Character Composer.
Write shared scene/style text in Global Prompt.
Write Character's details in Character 1/2 Prompt.
Mark each character’s rough area on the position grids.
Generate normally.
If you click only one grid cell, it is treated like the character’s rough body center.
If you drag over multiple cells, it becomes a simple body/region mask.
Controls
Position Strength
Controls roughly how strongly each character follows its selected region.
Spread
Makes single-cell positions looser or tighter.
Batch Jitter
Adds slight random movement between batch images, so positions do not stay too rigid.
Global Weight
Controls how much the global prompt affects the whole image.
If you have any problems, please tell me, so that i can have a look on it. Thanks :)
Description
Fixed for Anima
Added random character position switching
FAQ
Comments (11)
The canvas is almost completely destroyed... I don't know, maybe my 27-inch monitor is affecting that. It works with Illustrious but not in Anima. Forge Couple is compatible with Anima. I guess I'll have to forgo using it.
wo_character_composer.py", line 119, in text_to_cond
raise NotImplementedError("Two Character Composer currently supports SD1 and SDXL-style checkpoints.")
NotImplementedError: Two Character Composer currently supports SD1 and SDXL-style checkpoints.
So far i don't use Anima - as i dont see much benefit in it for me yet. Thats why i did not tested it. I will add it.
What do you mean with it destroys your canvas?
thats goated, any chance that it would be possible to "randomize" it a bit. Flip it horizontally or vertically . I do a lot of batchgens with random resolution and wildcards it would be really cool if the extension could just Flip itself horizontally or vertically between every gen 👀
It already should be able to adapt to batch genning and wildcards, when you put the placements for the Characters and swap the resolution afterwards, the position should adapt to it. (I dont have a way to batch gen in random resolutions, as i dont use agent scheduler or something similar)
To randomize it a bit, you can increase the batch jitter (but it is experimental so far). But it is only a rough help for character locations, and more there to prevent character bleeding.
But i can add a randomizing option so characters swap places in between, if you mean this.
I just uploaded a new Version
@furyon ooo thank you,. ill try it out once im off work !
How do I install this? Do I just extract the files and overwrite the Forge Couple folder?
This is an amazing extension! It works perfectly fine on reForge as well.
However, due to a conflict with another tagcomplete extension, previews for features like wildcards do not work properly. I found that modifying the following parts makes it work much better:
Line 189: classList.add(...) → classList.toggle(..., enabled) — Fixed a bug where the original prompt field remains hidden even when TCC is disabled.
Line 197: syncPrompt(); → window.setTimeout(syncPrompt, 0); — Fixed an issue where syncPrompt interrupts synchronously before Tab completion for wildcards consumes the tacSelfTrigger flag.
// Before function updateEnabledState() { const enabled = isEnabled(); const prompt = wrapper("txt2img_prompt"); if (prompt) prompt.classList.add("tcc-hidden-positive-prompt"); setVisible("tcc_char1_row", enabled); setVisible("tcc_char2_row", enabled); setVisible("tcc_tuning_row", enabled); setVisible("tcc_randomize_row", enabled); setVisible("tcc_background_tools", enabled); syncPrompt(); } // After function updateEnabledState() { const enabled = isEnabled(); const prompt = wrapper("txt2img_prompt"); if (prompt) prompt.classList.toggle("tcc-hidden-positive-prompt", enabled); setVisible("tcc_char1_row", enabled); setVisible("tcc_char2_row", enabled); setVisible("tcc_tuning_row", enabled); setVisible("tcc_randomize_row", enabled); setVisible("tcc_background_tools", enabled); window.setTimeout(syncPrompt, 0); }I will have a look on it. :)
