Nodes/saya-comfy-couple-plus/Saya Comfy Couple - Forge Coarse Main 2.3 - COPY
ComfyUI Node

Saya Comfy Couple - Forge Coarse Main 2.3 - COPY

The copy node that stops your character regions drifting mid-workflow

By alphaziod·Created 3 months ago·Updated 2 days ago· 3
Saya Comfy Couple - Forge Coarse Main 2.3 - COPY
  • model_main
  • main_positive
  • person_1_positive
  • person_2_positive
  • negative
  • latent
  • couple_config
  • dual_sampling_model
  • support_model_1
  • support_model_2
  • support_model_3
  • patched_model_main
  • patched_dual_sampling_model
  • patched_support_model_1
  • patched_support_model_2
  • patched_support_model_3
  • positive_final
  • detailer_positive
  • negative
  • mask_person_1
  • mask_person_2
  • couple_config

Why a second node exists at all

You set up your two-character split, you're happy with it, and then you add a hires fix pass. Now you need the same regional logic again - and if you reach for another SayaComfyCoupleForge, you're re-typing center, transition, orientation and mask_floor on a second set of widgets. Two places to keep in sync, and the first time you nudge one and not the other, your upscale pass regenerates a different seam position than the base pass did.

SayaComfyCoupleForgeCopy is the answer to that. It's the same Forge attn2 engine, but instead of five geometry widgets it takes a couple_config socket. You wire the config output from the MASTER node into it, and this pass now uses the layout that actually produced the image you're refining. Nothing to keep in sync, because there's only one copy of the geometry.

This is the same instinct as ComfyUI's context-bundle nodes - one wire instead of forty - and in this pack it's a deliberate pattern: MASTER exposes the knobs, every COPY reuses them.

How it works

Technically it's a subclass of the MASTER with the tuning widgets stripped out of INPUT_TYPES. The config carries orientation, center, transition, mask_floor, swap flags and the internally fixed contact/coarse-main weights. The COPY node rebuilds the same ownership masks from the latent you hand it, rebuilds Base + Person concatenations from your conditionings, patches the models it's given, and returns the same patched models, positive_final, detailer_positive, negative and masks.

The important consequence: COPY does not inherit the MASTER's prompts. It inherits the geometry. So on a second pass you can hand it a different person prompt - a softer, later-step version, a Naturalize-style cleanup prompt - and keep the regions nailed where they were. That's the actual use case, and it's why the pack's example workflow runs detailers and upscale passes through COPY nodes rather than re-deriving the split.

Inputs and outputs

Required: model_main, main_positive, person_1_positive, person_2_positive, negative, latent, and couple_config. Optional: dual_sampling_model, support_model_1, support_model_2, support_model_3 - same as the MASTER, the same patch applied to however many extra model branches you're running.

Outputs are identical to the MASTER's original eleven, with no Naturalize trio appended: patched_model_main, patched_dual_sampling_model, patched_support_model_1..3, positive_final, detailer_positive, negative, mask_person_1, mask_person_2, and a couple_config you can chain onward to yet another COPY. Wire patched_model_main and positive_final into that pass's KSampler exactly as you did with the master.

Install

Same pack, same install - nothing extra to do:

cd /path/to/ComfyUI/custom_nodes
git clone https://github.com/alphaziod/saya-comfy-couple-plus.git

Restart, refresh, done. requirements.txt only wants NumPy and Pillow; PyTorch deliberately isn't listed because replacing ComfyUI's build is how you break everything. Node IDs and output ordering are preserved across the V1 release, so workflows saved against an older copy keep working - but only if you have exactly one copy installed. A leftover folder named comfy_saya_couple registers the same IDs and gives you two of everything.

Where people get burned

Feeding it a config from nothing. The couple_config input is required, and in practice it comes from SayaComfyCoupleForge (or an earlier COPY). If you're building a graph by hand and grabbed the COPY node first because the name looked right, you'll be staring at a red socket. MASTER first, then COPY.

Assuming COPY will fix a bad base pass. It won't. If your regions came out wrong on the first sampler, the geometry that produced them is what the config faithfully reproduces. Change center or swap_person_positions on the MASTER and re-run.

Same silent FALLBACK as the master. Empty person/negative conditioning, or any conditioning with more than one entry, and this node also degrades to plain concatenated conditioning with no regional routing. The console log line tells you which mode you got - run with SAYA_COUPLE_DEBUG=1 and look for mode=COUPLE versus mode=FALLBACK.

Forgetting the second pass needs its own latent. Like the MASTER, the masks are built from the latent you wire in, so a hires pass at a different resolution needs its own correctly-sized latent or the split will be off by the difference.

Categorysaya/rescue

Inputs (11)

NameTypeDefaultDescription
model_mainMODEL
main_positiveCONDITIONING
person_1_positiveCONDITIONING
person_2_positiveCONDITIONING
negativeCONDITIONING
latentLATENT
couple_configSAYA_COUPLE_CONFIG
dual_sampling_modeloptMODEL
support_model_1optMODEL
support_model_2optMODEL
support_model_3optMODEL

Outputs (11)

NameTypeDescription
patched_model_mainMODEL
patched_dual_sampling_modelMODEL
patched_support_model_1MODEL
patched_support_model_2MODEL
patched_support_model_3MODEL
positive_finalCONDITIONING
detailer_positiveCONDITIONING
negativeCONDITIONING
mask_person_1MASK
mask_person_2MASK
couple_configSAYA_COUPLE_CONFIG