πΈ Duo Dupe Check
Cancels the queue when you've already made that character pair
- name_a
- name_b
- status
Frog Duo Dupe Check is the node that saves you from generating your ten-thousandth copy of the same couple. It checks whether a character pair - name A plus name B - already has an entry in the πΈ Library, and if it does, it cancels the current queue job on the spot. No image generated, no time wasted on a pair you've already made. If the pair isn't in the library, both names pass through untouched and the workflow continues.
The context it belongs to is the pack's character-library workflow: you're building a gallery of character pairs, and the point is to only generate pairs you don't have. Wire the two character names in from your character system - the tooltip suggests πΈ Tag to Description's names output or a Library name output - and this node becomes the guardrail that keeps your library free of duplicates. The check runs in both orders, so "A & B" and "B & A" are treated as the same pair, which is exactly the kind of quiet correctness you'd want from a dedupe node. The docstring confirms it: it cancels if a library entry exists "checked in both orders."
It also handles the degenerate case nobody thinks about: if you feed it the same character twice - name A equals name B - it cancels too, because a "pair" of one person is meaningless in this workflow. The status output tells you what happened either way.
The inputs
- name_a - Character A's name.
- name_b - Character B's name.
Both are strings, both wired in rather than typed (they're marked forceInput), because the whole point is that they come from your character pipeline, not from a box you edit by hand.
What comes out
name_a and name_b - the passthrough, unchanged - plus status, a string that says which pair was checked and what happened. Wire status into a display or log node if you want to see the verdict.
Installing it
Pack install:
cd ComfyUI/custom_nodes
git clone https://github.com/RabbitThatIsPink/FrogNodePack
or ComfyUI Manager β "Frog Node Pack". No extra dependencies.
Where people trip
The big one is a design choice you need to accept before wiring it in: this node cancels queue jobs. That's the entire job - the README says it uses "the same mechanism as the Image Picker cancel." If you drop it into a workflow you actually want to run unconditionally, it will quietly abort runs whenever a pair already exists in your library, and a cancelled job can look confusingly like a crash if you're not watching the console. Second, it only works if your character names and Library entry names actually agree - the matching is against the Library's stored entries, so spelling drift means it never catches duplicates. And note it's a check-then-cancel node, not a blocker that waits for input; if you want the opposite behavior - never generate a pair that exists - this is precisely it.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| name_a | STRING | Name of Character A β wire from πΈ Tag to Description 'names' or a Library 'name' output. | |
| name_b | STRING | Name of Character B. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| name_a | STRING | Name A passthrough. |
| name_b | STRING | Name B passthrough. |
| status | STRING | Status message β shows which pair was checked. |