[PR #38] [MERGED] docs(skills): add technique-consistent-characters recipe #36

Closed
opened 2026-10-26 22:34:16 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/Comfy-Org/comfy-skills/pull/38
Author: @mattmillerai
Created: 10/5/2026
Status: ✅ Merged
Merged: 10/22/2026
Merged by: @mattmillerai

Base: main ← Head: matt/be-18928-technique-consistent-characters


📝 Commits (1)

  • 06d3d94 docs(skills): add technique-consistent-characters recipe

📊 Changes

1 file changed (+62 additions, -0 deletions)

View changed files

➕ skills/technique-consistent-characters.md (+62 -0)

📄 Description

ELI-5

When you ask for the same two characters across several shots, the model drifts. Each shot gives them slightly different faces, and in two-person scenes it often draws one of them twice. This adds a recipe agents can fetch with get_creative_technique (as consistent-characters). It walks them through what works: make one clean reference per character, plug each reference into its own numbered slot, name each slot and the exact head-count in the prompt, and reuse the same references for every shot and every video clip.

What this is

One new file, skills/technique-consistent-characters.md (4,782 bytes). It is the third technique-* recipe and copies the shape of technique-combine-people.md exactly: no frontmatter, a first line that ends in : $ARGUMENTS, then Follow these steps exactly:, seven ## Step N sections and a closing ## Key learnings:. Following the README authoring rule, it names node classes for steering but sends the agent to get_node for slot names and to search_templates for live templates.

The content reaches agents on its own through the MCP server's daily skills refresh, which reads skills/. No server change is needed.

For a two-character still or video, the recipe tells the agent to make each character's reference in a separate run, wire one reference per auto-grow slot with slot names copied from get_node, and state the person count and per-slot identity in every prompt. If a character still duplicates, it falls back to a split image-edit pass. Every shot reuses the same references and never chains the previous output. Reference-to-video templates and motion-control templates are found by search.

Judgment calls

  • I corrected the ticket on Kling. The plan listed KlingOmniProImageToVideoNode.reference_images as an auto-grow slot. In the bundled object_info snapshot, reference_images on both KlingOmniProImageToVideoNode and KlingOmniProImageNode is a single IMAGE input that takes a batch ("Up to 7 reference images" / "Up to 10"). It is not COMFY_AUTOGROW_V3. Wiring it per-slot would fail. So the recipe sends Kling references through BatchImagesNode, with one reference per auto-grow slot. The auto-grow claim stays only where it holds: GeminiNanoBanana2V2 (model.images.image_*, max 14) and MiniMaxH3ReferenceToVideo (ref_images, prefix ref_image_, max 9).
  • MiniMax slot numbering is not hard-coded. The auto-grow template has min: 0, so I did not guess whether the first slot is _0 or _1. The recipe writes ref_images.* and points to get_node.
  • Template and model family names are given as examples only ("at time of writing"), as the plan asked. Discovery still goes through search_templates. I checked that each family has a template in the server's data/templates.json (e.g. api_seedance2_5_r2v, api_minimax_h3_r2v, api_wan3_0_r2v, api_google_gemini_omni_flash_1_1_r2v, video_wan21_scail2_character_replacement, api_kling_motion_control3, video_wan_animate2, api_google_nano_banana_create_turnaround_sheet). HappyHorse is backed by the HappyHorseReferenceVideoApi node class. I did not find a template whose title says "HappyHorse ... Reference to Video".
  • No comic recipe to cross-link. gh pr list --state all on this repo shows no technique-multi-scene-comic PR, open or merged. So there is no cross-link, and none of the storyboard-to-video content was duplicated.

Verification

This repo has no test suite. I checked the file against the catalog and the code that consumes it (both from comfy-cloud-mcp-server@main):

  • Every node class named in backticks (GeminiNanoBanana2V2, KlingOmniProImageNode, KlingOmniProImageToVideoNode, MiniMaxH3ReferenceToVideo, BatchImagesNode; LoadImage appears in the JSON snippet) is present in data/object_info.json.gz with deprecated false or unset. The deprecated ImageBatch and GeminiNanoBanana2 are not named.
  • The JSON snippet parses (wrapped in {}). Its dotted keys match GeminiNanoBanana2V2's dynamic-combo layout (model → images auto-grow, prefix image_), the same convention technique-combine-people.md uses.
  • Size is 4,782 bytes. That is under the ticket's 6 KB budget and far under the server's MAX_TECHNIQUE_RESULT_CHARS = 20_000 in capTechniqueText (src/techniques.ts). Note that the real server cap is 20,000 chars, not 6 KB.
  • Every tool and field the recipe names (upload_file, get_node, search_templates, run_template / input_overrides, partner_generate / medias[], use_previous_output, and the partner playbook) is referenced in the server's src/.
  • claude plugin validate ./claude-code passes. This PR does not touch that directory.

Residual

  • I did not run the recipe end to end against Comfy Cloud. The claims that it stops duplication (explicit count plus per-slot naming), that the previous output must not be used as a reference, and that a fixed seed per character helps all come from the upstream investigation. I did not re-measure them here. A creative-team reviewer who has run multi-character shots should check Steps 3-5.
  • I did not exercise search_templates live. I checked the queries "character turnaround sheet", "reference to video" and "image edit reference" against the bundled data/templates.json titles only, not against the running server's ranking. I found no match at all for "image edit reference" in that check.
  • The partner route for references. The recipe says each reference is its own medias[] item with a role and defers to the partner playbook. I did not confirm which partner models accept more than one reference role.
  • A not-yet-filed comic recipe. If a technique-multi-scene-comic recipe lands later, it should link to this one, and this one should gain a "for comic panels see technique-multi-scene-comic" line.

Provenance

  • Authored by: agent-work loop
  • Verified: object_info class/deprecation check: 6 classes present, 0 deprecated, 0 deprecated names used; JSON snippet parse: ok; size: 4,782 bytes; claude plugin validate ./claude-code: passed
  • Deviations: the Kling reference_images wiring differs from the plan (batch via BatchImagesNode, not per-slot), because the catalog shows a single IMAGE input; the PR body carries no issue-tracker links because this repo is public; no comic recipe exists to cross-link

🤖 Generated with Claude Code


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/Comfy-Org/comfy-skills/pull/38 **Author:** [@mattmillerai](https://github.com/mattmillerai) **Created:** 10/5/2026 **Status:** ✅ Merged **Merged:** 10/22/2026 **Merged by:** [@mattmillerai](https://github.com/mattmillerai) **Base:** `main` ← **Head:** `matt/be-18928-technique-consistent-characters` --- ### 📝 Commits (1) - [`06d3d94`](https://github.com/Comfy-Org/comfy-skills/commit/06d3d947d33464eb9e2a91cdeefd4bae84b84d14) docs(skills): add technique-consistent-characters recipe ### 📊 Changes **1 file changed** (+62 additions, -0 deletions) <details> <summary>View changed files</summary> ➕ `skills/technique-consistent-characters.md` (+62 -0) </details> ### 📄 Description ## ELI-5 When you ask for the same two characters across several shots, the model drifts. Each shot gives them slightly different faces, and in two-person scenes it often draws one of them twice. This adds a recipe agents can fetch with `get_creative_technique` (as `consistent-characters`). It walks them through what works: make one clean reference per character, plug each reference into its own numbered slot, name each slot and the exact head-count in the prompt, and reuse the same references for every shot and every video clip. ## What this is One new file, `skills/technique-consistent-characters.md` (4,782 bytes). It is the third `technique-*` recipe and copies the shape of `technique-combine-people.md` exactly: no frontmatter, a first line that ends in `: $ARGUMENTS`, then `Follow these steps exactly:`, seven `## Step N` sections and a closing `## Key learnings:`. Following the README authoring rule, it names node classes for steering but sends the agent to `get_node` for slot names and to `search_templates` for live templates. The content reaches agents on its own through the MCP server's daily skills refresh, which reads `skills/`. No server change is needed. For a two-character still or video, the recipe tells the agent to make each character's reference in a separate run, wire one reference per auto-grow slot with slot names copied from `get_node`, and state the person count and per-slot identity in every prompt. If a character still duplicates, it falls back to a split image-edit pass. Every shot reuses the same references and never chains the previous output. Reference-to-video templates and motion-control templates are found by search. ## Judgment calls - **I corrected the ticket on Kling.** The plan listed `KlingOmniProImageToVideoNode.reference_images` as an auto-grow slot. In the bundled `object_info` snapshot, `reference_images` on both `KlingOmniProImageToVideoNode` and `KlingOmniProImageNode` is a single `IMAGE` input that takes a batch ("Up to 7 reference images" / "Up to 10"). It is not `COMFY_AUTOGROW_V3`. Wiring it per-slot would fail. So the recipe sends Kling references through `BatchImagesNode`, with one reference per auto-grow slot. The auto-grow claim stays only where it holds: `GeminiNanoBanana2V2` (`model.images.image_*`, max 14) and `MiniMaxH3ReferenceToVideo` (`ref_images`, prefix `ref_image_`, max 9). - **MiniMax slot numbering is not hard-coded.** The auto-grow template has `min: 0`, so I did not guess whether the first slot is `_0` or `_1`. The recipe writes `ref_images.*` and points to `get_node`. - **Template and model family names are given as examples only** ("at time of writing"), as the plan asked. Discovery still goes through `search_templates`. I checked that each family has a template in the server's `data/templates.json` (e.g. `api_seedance2_5_r2v`, `api_minimax_h3_r2v`, `api_wan3_0_r2v`, `api_google_gemini_omni_flash_1_1_r2v`, `video_wan21_scail2_character_replacement`, `api_kling_motion_control3`, `video_wan_animate2`, `api_google_nano_banana_create_turnaround_sheet`). HappyHorse is backed by the `HappyHorseReferenceVideoApi` node class. I did not find a template whose title says "HappyHorse ... Reference to Video". - **No comic recipe to cross-link.** `gh pr list --state all` on this repo shows no `technique-multi-scene-comic` PR, open or merged. So there is no cross-link, and none of the storyboard-to-video content was duplicated. ## Verification This repo has no test suite. I checked the file against the catalog and the code that consumes it (both from `comfy-cloud-mcp-server@main`): - Every node class named in backticks (`GeminiNanoBanana2V2`, `KlingOmniProImageNode`, `KlingOmniProImageToVideoNode`, `MiniMaxH3ReferenceToVideo`, `BatchImagesNode`; `LoadImage` appears in the JSON snippet) is present in `data/object_info.json.gz` with `deprecated` false or unset. The deprecated `ImageBatch` and `GeminiNanoBanana2` are not named. - The JSON snippet parses (wrapped in `{}`). Its dotted keys match `GeminiNanoBanana2V2`'s dynamic-combo layout (`model` → `images` auto-grow, prefix `image_`), the same convention `technique-combine-people.md` uses. - Size is 4,782 bytes. That is under the ticket's 6 KB budget and far under the server's `MAX_TECHNIQUE_RESULT_CHARS = 20_000` in `capTechniqueText` (`src/techniques.ts`). Note that the real server cap is 20,000 chars, not 6 KB. - Every tool and field the recipe names (`upload_file`, `get_node`, `search_templates`, `run_template` / `input_overrides`, `partner_generate` / `medias[]`, `use_previous_output`, and the partner playbook) is referenced in the server's `src/`. - `claude plugin validate ./claude-code` passes. This PR does not touch that directory. ## Residual - **I did not run the recipe end to end against Comfy Cloud.** The claims that it stops duplication (explicit count plus per-slot naming), that the previous output must not be used as a reference, and that a fixed seed per character helps all come from the upstream investigation. I did not re-measure them here. A creative-team reviewer who has run multi-character shots should check Steps 3-5. - **I did not exercise `search_templates` live.** I checked the queries `"character turnaround sheet"`, `"reference to video"` and `"image edit reference"` against the bundled `data/templates.json` titles only, not against the running server's ranking. I found no match at all for `"image edit reference"` in that check. - **The partner route for references.** The recipe says each reference is its own `medias[]` item with a role and defers to the partner playbook. I did not confirm which partner models accept more than one reference role. - **A not-yet-filed comic recipe.** If a `technique-multi-scene-comic` recipe lands later, it should link to this one, and this one should gain a "for comic panels see technique-multi-scene-comic" line. ## Provenance - **Authored by:** agent-work loop - **Verified:** object_info class/deprecation check: 6 classes present, 0 deprecated, 0 deprecated names used; JSON snippet parse: ok; size: 4,782 bytes; `claude plugin validate ./claude-code`: passed - **Deviations:** the Kling `reference_images` wiring differs from the plan (batch via `BatchImagesNode`, not per-slot), because the catalog shows a single IMAGE input; the PR body carries no issue-tracker links because this repo is public; no comic recipe exists to cross-link 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
bsakaguchi 2026-10-26 22:34:16 +00:00
Sign in to join this conversation.
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Comfy-Org/comfy-skills#36
No description provided.