This is a collection of custom workflows for ComfyUI
They can generate multiple subjects. Each subject has its own prompt.
They require some custom nodes to function properly, mostly to automate out or simplify some of the tediousness that comes with setting up these things.
To install any required custom nodes, the best way is to get the ComfyUI Manager, then go to Manager, and click "Install Missing Custom Nodes". If you're still missing nodes, refer to the dependencies listed in the "About this version" section for that workflow
Recently updated workflows:
Latent Couple Pose (renamed from LoRA Latent Couple) - new workflow but user experience-wise it is very similar to Region LoRA and Region LoRA+, just using the newer, better methods that allow you to hook LoRA models to conditioning areas so everything can be done in 1 sampling rather than having each area be sampled separately. If you used those before it's going to be basically the same. This workflow makes Region LoRA, Region LoRA+ and Interaction OpenPose workflows redundant by being able to do everything they did all-in-one but better and as such they will be discontinued.
Latent Couple - updated to work with current ComfyUI and custom node versions. Added LoRA support. Since this has area-conditioned LoRA now it was confusing to keep the above workflow name as LoRA Latent Couple so that was changed.
Reworking Latent Couple I realized the two active workflows are very similar at this point and could be combined into one without much issue, however I ultimately decided against it to avoid adding pathing logic and keep the workflows more focused.
Here's a demo video of using Latent Couple Pose:
Latent Couple is temporarily marked as deprecated as I work on an updated version.
Please download from the model version, not "Update Notification Push" as I delete and recreate it every time I release a new version to push notifications and deleting a version removes statistics, reviews and comments made on it.
Latent Couple vs Latent Couple Pose
At this point both of these workflows are very similar and only differ in that we use the OpenPose ControlNet for additional guidance in Latent Couple Pose. The additional complication it seems to have at first glance comes from the fact that by default we try to first generate an image to pass through an OpenPose Preprocessor to get the ControlNet image without needing to load any external assets which requires adding on a basic T2I workflow at the start, but this can be easily replaced with an image loader for a prepared pose image.
The Pose version is capable of generating more precise images in more complex scenarios, however the same complex scenarios are harder for the preprocessor to accurately extract pose data from so paradoxically letting the AI run more loose with the more basic Latent Couple can return better results by pure chance. That is comparing to using the default method of extracting poses from an image in the workflow, but providing a pre-made pose from an OpenPose editor for Latent Couple Pose will always be superior. I wanted to integrate such an editor into the workflow as it would be a massive improvement, especially if we could supply the initial poses and a background image (as stick figures can be hard to judge properly) in the workflow, but sadly not a single one seems to be properly maintained anymore.
Workflows:
Latent Couple
Allows for more detailed control over image composition by applying different prompts to different parts of the image.
From my testing, this generally does better than Noisy Latent Composition.
This is pretty standard for ComfyUI, just includes some QoL stuff from custom nodes
Noisy Latent Composition (discontinued)
Generates each prompt on a separate image for a few steps (eg. 4/20) so that only rough outlines of major elements get created, then combines them together and does the remaining steps with Latent Couple.
This is pretty standard for ComfyUI, just includes some QoL stuff from custom nodes
Character Interaction (Latent) (discontinued)
First of all, if you want something that actually works well, check Character Interaction (OpenPose) or Region LoRA. This doesn't, I'm leaving it for archival purposes.
This is an """attempt""" at generating 2 characters interacting with each other, while retaining a high degree of control over their looks, without using ControlNets. Extremely inconsistent and unreliable.
We do this by generating the first few steps (eg. 6/30) on a single prompt encompassing the whole image that describes what sort of interaction we want to achieve (+background and perspective, common features of both characters help too).
Then, for the remaining steps in the second KSampler, we add two more prompts, one for each character, limited to the area where we "expect" (guess) they'll appear, so mostly just the left half/right half of the image with some overlap.
I'm not gonna lie, the results and consistency aren't great. If you want to try it, some settings to fiddle around with would be at which step the KSampler should change, the amount of overlap between character prompts and prompt strengths. From my testing, the closest interaction I've been able to get out of this was a kiss, I've tried to go for a hug but with no luck.
The higher the step that you switch KSamplers at, the more consistently you'll get the desired interaction, but you'll lose out on the character prompts (I've been going between 20-35% of total steps). You may be able to offset this a bit by increasing character prompt strengths.
Latent Couple Pose
This should come after the next section about Character Interaction (OpenPose) and Region Lora, but this description is long enough as is and it's more visible up here, and the workflows below are deprecated anyway.
This workflow employs very similar methods to those described below and images showcased there also apply here. The main difference is that we're no longer using Regional Sampling in favor of newer and much superior LoRA hooks which allow for the whole image to be sampled at once instead of having to sample each LoRA area separately.
Character Interaction (OpenPose) (discontinued)
Another method of generating character interaction, except this time it actually works, and very consistently at that. To achieve this we simply run latent composition with ControlNet openpose mixed in. To make it more convenient to use, the OpenPose image can be pregenerated, so there is no need to hassle with inputting premade ones yourself. As a result, it's not too complicated as compared with a normal generation. You can find instructions in the notes in the workflow itself after importing it into ComfyUI.
From a more technical side of things, implementing it is actually a bit more complicated than just applying OpenPose to the conditioning. Because we're dealing with a total of 3 (or more!) conditionings (background and both subjects) we're running into problems. Applying ControlNet to all three, be it before combining them or after, gives us the background with OpenPose applied correctly (the OpenPose image having the same dimensions as the background conditioning), and subjects with the OpenPose image squeezed to fit their dimensions, for a total of 3 non-aligned ControlNet images. For that reason, we can only apply unchanged OpenPose to the background. Stopping here, however, results in there being no ControlNet guidance for our subjects and the result has nothing to do with our OpenPose image. Therefore, now we crop parts of the OpenPose that correlate with subject areas and apply that to the subject conditioning for each subject before combining them into the final conditioning. Only then can we generate the final image.
The following image demonstrates our resulting conditioning:
btw the workflow will generate similar ones for you :)
Background conditioning covers the entire image and contains the entirety of the pose data.
Subject 1 is represented as the green area and contains a crop of the pose that is inside that area.
Subject 2 is represented as the blue area and contains a crop of the pose that is inside that area.
The image itself is generated first, then the pose data is extracted from it, cropped, applied to conditioning and used in generating the proper image. This saves you from having to have applicable OpenPose images on hand.
And here is the final result:

This includes a second pass after upscaling, face restoration and additional upscaling at the end, all of which are included in the workflow.
A handy preview of the conditioning areas (see the first image) is also generated. Ideally, it would happen before the proper image generation, but the means to control that are not yet implemented in ComfyUI, so sometimes it's the last thing the workflow does. Sadly, I can't do anything about it for now.
Some more use-related details are explained in the workflow itself.
Region LoRA/Region LoRA PLUS
As the name implies, these workflows will let you apply Lora models to specified areas of the image.
You can, for example, generate 2 characters, each from a different lora and with a different art style, or a single character with one set of loras applied to their face, and the other to the rest of the body - cosplay!
How does Region LoRA differ from Region LoRA PLUS?
Region LoRA is limited to 2 regions - you draw a single mask, the masked area is region 1, everything else is region 2.
With Region LoRA PLUS you can have as many regions as you want, but you need to draw the region for every single one of them (much like in Interaction OpenPose)
Therefore, if you only need 2 regions, the base version is simpler to use, and guarantiess that the regions will be aligned perfectly.
Additionally, the PLUS variant currently can't use region sampling after upscaling as there are some crucial nodes missing for now and a workaround would massively complicate it.
How does it work?
The secret are the Regional Sampling nodes from Impact Pack and Inspire Pack by ltdr.data. It allows us to generate parts of the image with different samplers based on masked areas. That means we can put in different Lora models, or even use different checkpoints for masked/non-masked areas. This is the central piece, but of course, it's not actually as simple as just using that. The full workflow is as follows:
First, we generate an image of our desired pose with a realistic checkpoint and pass it through a ControlNet OpenPose Preprocessor:
The next step is in a Preview Bridge (another node from Impact Pack), which is essentially a preview image node with image and mask output that you can draw masks on. This is where the the above image ends up. Once it is there, we stop the image generation, and open this image in the MaskEditor, where we can draw a mask over one of the characters like so:
Next, we crop the controlnet image along the mask boundries and apply it to the region's conditioning. Thanks to the controlnet, our image will remain consistent in perspective, and we can achieve interaction between characters in different regions. These region masks also determine the sampling regions that are responsible for the clean LoRA separation.
Final Result:
Description
Region Lora v2.0.1
Requirements:
(with ComfyUI Manager go to Manager -> Install Missing Nodes)
ComfyUI - Visual Area Conditioning / Latent composition
(Needs to be installed manually, only need the
ConditioningStretchnode)
Changes since the last version:
Total remake
image pregeneration like in latent couple
can load image too
uses group nodes
Hotfix 1
removed an unnecessary custom node that was causing issues on loading the worklow
FAQ
Comments (42)
Love the workflow for InteractionOpenPose!
I can't seem to get Region Lora to work though - the placeholder images aren't updating after the initial pose generation.
A recent update to Impact Pack broke the ImageReceiver node, I've notified the creator.
You can follow this issue to find out when it is fixed:
https://github.com/ltdrdata/ComfyUI-Impact-Pack/issues/32
edit; It should work now
ive followed the install procedures but im missing these :
Text Multiline
Text Concatenate
Constant Number
Random Number
Text to Conditioning
Text Input Switch
Number Operation
FromBasicPipe
IterativeLatentUpscale
IterativeImageUpscale
Number to Float
Number to Int
Image Size to Number
EditBasicPipe
SAMLoader
Segs & Mask
SegsToCombinedMask
DetailerForEachPipe
MMDetDetectorProvider
SAMDetectorCombined
PixelKSampleUpscalerProviderPipe
BboxDetectorSEGS
ToBasicPipe
how to resolve this?
Looks like you're lacking some custom nodes; WAS's node suite and Impact Pack. You can also get them inside ComfyUI f you have the ComfyUI Manager installed
Easy installation:
2. Open Manager on menu panel -> Install missing nodes
3. Open [ComfyUI\custom_nodes\ComfyUI-Impact-Pack\impact-pack.ini] -> change "mmdet_skip" to "False"
4. Reload ComfyUI
Without upscaler this workflow works on my 4GB GPU. It looks like I need at least 6GB for processing with upscaler.
i was looking for it,
glad i found it
This is hell ! I love comfyui ... but for now, you can't beat "Latent couple + Composable Lora" for Automatic 1111
Yes, Comfy doesn't have the features yet that would allow me to make it simpler. Both to use and keep up to date properly as Comfy and custom nodes get updates.
There are some PRs that would allow to make it better, but then again, they're all buggy and if they get abandoned in favour of a different approach or another one gets merged into the master branch, I would potentially have to rework these already huge workflows. And as of right now I'm already burned out on keeping them properly updated and don't have enough time for that either way.
On the other hand, there are some things that you can do with the Region Lora workflow (Interaction OpenPose too, but it would need a rework to use painted masks instead of rectangular ones) that the A1111 extensions you mentioned can't. If you don't mind needing to move some nodes that got bigger due to some update and are now overlapping because of that, they should still work. They utilise a 2-step generation process with openpose controlnet, which allows for character interaction and lets you accurately apply loras to each character. I put some examples of how it can be used in the previews.
@Bocian Actually, you can do mask on the latent couple in A1111, I tried it recently but it doesn't work very well (blending prompts from one to another). I don't deny that your comfyui workflow is quite impressive ! And as you said, hard to keep them up updated. On comfyui, I tried the Davemane42 custom node (Visual Latent composition), unfortunatly it seems to be lay-off, but it works (just don't click on the 'index' outside the number of layers as it will freeze your whole comfyui workflow and you have to reload your browser (yeah that bad !)). But no multilora support. I hope that someone will port that "latent-couple + composable lora" combo to comfyui, it will just open to unfathom possibilities !
In the LatentCouple-v3 workflow, I encountered an error when executing MMDetDetectorProvider:
'ConfigDict' object has no attribute 'test_dataloader'
I don't know how to handle this...
Loads checkpoint by local backend from path: D:\ComfyUI_windows_portable\ComfyUI\models\mmdets\bbox\mmdet_anime-face_yolov3.pth !!! Exception during processing !!! Traceback (most recent call last): File "D:\ComfyUI_windows_portable\python_embeded\lib\site-packages\mmengine\config\config.py", line 52, in __getattr__ value = super().__getattr__(name) File "D:\ComfyUI_windows_portable\python_embeded\lib\site-packages\addict\addict.py", line 67, in __getattr__ return self.__getitem__(item) File "D:\ComfyUI_windows_portable\python_embeded\lib\site-packages\mmengine\config\config.py", line 48, in __missing__ raise KeyError(name) KeyError: 'test_dataloader' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "D:\ComfyUI_windows_portable\ComfyUI\execution.py", line 151, in recursive_execute output_data, output_ui = get_output_data(obj, input_data_all) File "D:\ComfyUI_windows_portable\ComfyUI\execution.py", line 81, in get_output_data return_values = map_node_over_list(obj, input_data_all, obj.FUNCTION, allow_interrupt=True) File "D:\ComfyUI_windows_portable\ComfyUI\execution.py", line 74, in map_node_over_list results.append(getattr(obj, func)(**slice_dict(input_data_all, i))) File "D:\ComfyUI_windows_portable\ComfyUI\custom_nodes\ComfyUI-Impact-Pack\modules\impact\mmdet_nodes.py", line 208, in load_mmdet model = load_mmdet(mmdet_path) File "D:\ComfyUI_windows_portable\ComfyUI\custom_nodes\ComfyUI-Impact-Pack\modules\impact\mmdet_nodes.py", line 11, in load_mmdet model = init_detector(model_config, model_path, device="cpu") File "D:\ComfyUI_windows_portable\python_embeded\lib\site-packages\mmdet\apis\inference.py", line 94, in init_detector test_dataset_cfg = copy.deepcopy(config.test_dataloader.dataset) File "D:\ComfyUI_windows_portable\python_embeded\lib\site-packages\mmengine\config\config.py", line 903, in __getattr__ return getattr(self._cfg_dict, name) File "D:\ComfyUI_windows_portable\python_embeded\lib\site-packages\mmengine\config\config.py", line 54, in __getattr__ raise AttributeError(f"'{self.__class__.__name__}' object has no " AttributeError: 'ConfigDict' object has no attribute 'test_dataloader'use UltralyticsDetectorProvider will ok, MMDetDetectorProvider is hard to use....
thanks so much for sharing all these workflows along with your descriptions for each of them!
I have a question about the latest one... the latent coupling one, any ideas why purple blotches appear after the face detection/fixing? The first image is generated fine, but then the other 2 have purple blotches. Also, the coloring degrades for the final 2 images. I'm not sure if it's somehow using a different VAE or what... but the first image's colors look great and there's no blotches, however the first image does require face detailing
Can't tell for sure, but I haven't updated any of those for quite some time now, so it could very well be due to some update to a custom node as well. Frankly, I'm surprised you still got it to run after I left it for so long now
There are a lot of node missing when I import the workflow. How can I solve this?
I have installed the missing nodes, delete the imported workflow and import again, but it is still missing nodes. You can see image I uploaded.
First thing: I uploaded the work-in-progress file on accident instead of the finished version so please re-download.
Second: re-downloading the finished version (probably?) won't fix this issue, so here's a list of the custom node packs in that group node:
https://github.com/WASasquatch/was-node-suite-comfyui
https://github.com/ltdrdata/ComfyUI-Impact-Pack
https://github.com/pythongosssss/ComfyUI-Custom-Scripts
https://github.com/Davemane42/ComfyUI_Dave_CustomNode
If you're missing any, and Comfy Manager doesn't get it, try installing it manually. <y bet would be on the last one since it wasn't updated for ages
Can you try using efficiency nodes to reduce modules? Streamline your nodes, like MultiAreaconditioning NOOD,(It is simple and clear at a glance, and supports both 1.5 and XL models)
Thanks for the suggestion, but I try to avoid adding new node packs to my workflows if they aren't necessary and do as much as I can with what is available in base ComfyUI to avoid issues with updates
Is it possible to make this work with LoRA without having the traits of each LoRA bleed into each other?
I've been able to get some decent results with character LoRA's that require trigger words to activate, even multiple ones.
Beyond that, and to completely prevent bleeding, you'd need a different approach as seen in my Region Lora workflow. It's outdated and quite broken right now, but I'm working on it. It's going to take a bit though.
It works by using different samplers for each area, which lets you apply different loras for each sampler and separate them completely. You could even use different checkpoints this way, though they probably wouldn't blend too well. The biggest issue with this is generation times are vastly increased due to using multiple samplers and having to switch them every step to ensure everything blends properly. Even 1st pass can take a long time. For the second pass after upscaling, I think (haven't tried this yet) you should be able to go on with a single sampler as long as denoising isn't too high without losing too much information to make it faster there.
If you'd like to try putting something together yourself, you'll need the regional nodes from Impactpack and InspirePack
@Bocian You did not have to take all that time to type this up. It's full of so much information and I didn't expect that. Thank you very much!
Wow i learn a lot stydying your WFs!
Thanks you! Here 100 Buzz)
But i cant find answer what Hypernetwork loader for, tomepatch and tome ratio, can you help?
Thanks! I'm glad you like it!
To answer your questions,
Hypernetworks are another method to modify the generation process like embeddings or LoRA, but they're largely abandoned now as the other methods proved better suited for the purpose. I still leave it there on the off chance someone may have a use for one.
Tome Patch is supposed to improve generation times a bit at the cost of causing some minor changes to the image, whether those changes produce lower quality is debatable tbh. The higher the tome ratio the stronger the effect
@Bocian Thank you! I would be very glad to see new version of regional lora/model)
I tried to reverse-engineer and fix your Regional Lora 1.3 but it has 317 nodes and too complicated for me(((
@Neront Yeah, I should do something with it. It's so frustrating to work with though, I constantly run into problems seemingly out of nowhere. The last time I had a look at it, I got it to start generating, but it would crash anyway after a few steps. Right now I have too many IRL things to take care of, so it will take some time before I can continue.
Thank you for sharing these amazing workflows!
When I first test the 'RegionLora' workflow, just drag the final result image into comfy, it doesn't work for me at the recent version of comfyui and custom node(special of was-node-suite, impact-pack). Then I try to fix and run, but the first step realistic pose image does not look like you gave.
Could you please fix it or which version does it work?
It doesn't work right now. On my side, I got an updated version to generate for a few steps, but it crashes there and I haven't figured out a workaround yet. It will be some time before I can take another look at it as I have too much stuff to do IRL at the moment
When loading the graph, the following node types were not found:
OpenposePreprocessor (In group node 'workflow/OpenPose Preprocessor')
workflow/OpenPose PreprocessorRemove from workflow
Nodes that have failed to load will show as red on the graph.
- I installed the missing custom nodes, why won't it work?
I love how efficient this set up is. My ones are all cluttered everywhere. I was wondering about your 'quality prompt preset' and 'size select' custom nodes. When I try to recreate these, they don't appear to work. How does it work? I believe you create a group node with a couple of nodes that link together, but when i create the group, it isnt working for me. any help?
A bit of a late responce, but...
I'm not sure what the issue could be honestly, I've encountered it (I think it's the same thing?) as well, but it's very weird. I messed around with the quality prompt select recently and it worked fine... until I copied it to another workflow and it refuses to work there with no changes whatsoever. I even tried recreating it manually on that workflow and it still doesn't work. so I'm completely stumped.
It's the issues like these that make me quit working on anything in ComfyUI for months. All too often I spend a lot of time making something for it to have the weirdest issues ever. Group nodes only working when ungrouped is the worst.
A recent commit to WAS has changed a number of WAS input switches to use boolean instead of boolean_number.
Previously there were a number of places where booleans were passed through a series of nodes (such as ImpactConvertDataType) to become a boolean_number but that is not necessary anymore because the WAS Input Switches will now accept regular boolean inputs.
Error occurred when executing VAE Input Switch: WAS_VAE_Input_Switch.vae_switch() got an unexpected keyword argument 'boolean_number'
How would one fix this?
@eldrazeem623 For me it was trial and error because I had never used the Manage Group Nodes feature. You'll have to break the groups apart (the ones with the affected switches), use the Fix option on the Switches, reconnect their output to where ever it went before, and then connect the boolean value directly to the switch, bypassing the converter nodes because they are no longer needed.
If you want to repack them back into a group node, you'll have something that looks nothing like the original because they tidied it up by hiding some widgets and outputs that were unnecessary to have exposed to the user. If you kept a copy of the original group node you can use the Manage Group Nodes feature to compare to your new group node. I came close and called it good enough.
ComfyUI\ComfyUI\custom_nodes\was-node-suite-comfyui
Open CMD
git checkout 33534f2e48682ddcf580436ea39cffc7027cbb89
Hi, sorry for the long wait. I've updated the workflows so they should work now on the latest versions of everything. The change to booleans was indeed the culprit.
I'm glad to see people actually try to figure out fixes, most of what I got earlier on here was just angry accusations so I can't express enough how nice it feels to see this.
@Bocian Happy to contribute back - it was an interesting technique to learn about and taking it apart to figure out what wasn't working at the time taught me a lot. Appreciate you coming back when you had the time to make an update - this is a hobby for most of us and life happens.
The node "workflow/Upscale (image/cond)" is not able to be loaded in this workflow. Trying to install missing nodes does not fix it.
I don't believe this is related to the issues others have encountered with the WAS Node Suite plugin as I was able to get that issue sorted out by using an older commit, meaning I can use the 2nd Pass by just using an image upscale node and VAE encoding it.
The issue though is that this alone does not produce optimal results, with tons of bleeding and regional inconsistencies. My only guess is that whatever the image/cond upscaler did was able to fix these sorts of things, but I cannot test it since I can't find any way to download or repair it.
i had the same problem until I found the "UltimateSDUpscale“ in the manager
But this Node has different inputs, right?
I saw in other responses that the author said they needed this package.
https://github.com/Davemane42/ComfyUI_Dave_CustomNode
But I don't know why I couldn't find it in the manager.
@stamr734827496225 Ooooh, at least we can install via GIT HUB URL, thank you for the info :)
Hello, as another commenter pointed out earlier, there was an update to some boolean-related nodes which simplified some things but also broke some of my type-conversion workaround shenanigans (partially by getting rid of the need for the workaround). I've fixed it now.
@seto007 @stamr734827496225
The `Upcale (image/cond)` group node uses a ConditioningStretch node by Davemane42. It allows for scaling the conditioning in the same manner as the image scale in base ComfyUI. You can also scale conditionings with some vanilla nodes, but for some reason, they all are extremely slow at it (minutes long just for them), while Dave's node is practically instant. The lack of conditioning scaling is what caused the prompt bleed in the second pass for you @seto007 as prompt areas set in the conditioning no longer aligned with the upscaled image.
@Bocian can confirm that downloading the Davemane42 CustomNode extension fixes the errors. For anyone curious the repo was archived back on April 1st for some reason, which is probably why it wasn't showing up when searching for missing extensions in the manager.




















Left: