[PR #39] feat(skills): add technique-multi-scene-comic recipe #38

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

📋 Pull Request Information

Original PR: https://github.com/Comfy-Org/comfy-skills/pull/39
Author: @mattmillerai
Created: 10/5/2026
Status: 🔄 Open

Base: main ← Head: matt/be-18920-multi-scene-comic


📝 Commits (6)

  • 0a4f207 feat(skills): add technique-multi-scene-comic recipe
  • 0bc514d fix(skills): only suggest panel templates with enough reference slots
  • 24eedf1 fix(skills): fill every image input in the comic recipe and wait on batches
  • 12ee72c fix(skills): word the text-only reference step positively for the guide lint
  • 957b0f2 fix(skills): cover empty scenes, long comics and expiring links in the comic recipe
  • 968f517 fix(skills): say how a partner_generate reference reaches the sheet template

📊 Changes

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

View changed files

➕ skills/technique-multi-scene-comic.md (+56 -0)

📄 Description

ELI5

This adds a step-by-step recipe that helps the assistant make a comic or storyboard with the same characters looking the same in every panel. For each panel it picks an image tool with exactly as many picture inputs as there are characters, and fills every input. That way no character's look gets dropped and no stray sample picture slips into a panel.

Summary

Adds skills/technique-multi-scene-comic.md. The Comfy Cloud MCP server's get_creative_technique serves the technique-* entries mirrored from this directory. Until now technique-combine-people was the only one, so a multi-scene comic / manga / 漫剧 request had no recipe to land on.

The file has the same shape as technique-combine-people.md: no frontmatter, a one-sentence first line ending : $ARGUMENTS, then Follow these steps exactly: and six ## Step N sections. It is about 6 KB.

The recipe:

  1. Plan the script and fix one style string.
  2. Make one character sheet per character (turnaround or contact-sheet template). A text-only starting reference comes from partner_generate and is chained into the sheet template with use_previous_output. If partner_generate returns a direct-dispatch id that cannot be chained, the reference is downloaded and re-uploaded with upload_file instead. Keep the sheet's job id as the identity anchor.
  3. Make one multi-reference panel job per scene, with the sheets chained in via use_previous_output. Each scene uses the template whose LoadImage count equals its reference count (api_flux2 4, api_bfl_flux_1_kontext_multiple_images_input 3, api_nano_banana_pro 2, api_kling_o3_image 2, flux_kontext_dev_basic 1), and every LoadImage is overridden, because an untouched one runs with the template's demo picture. With more than four characters, the sheets are packed into fully filled utility_image_stitch 2x2 grids until the count fits a template exactly. A scene with no characters is made with text-to-image instead. Scenes beyond three go through submit_batch + wait_for_batch.
  4. Re-run only the panels that drifted, with the scene's full original reference set.
  5. Optionally animate the panels (credit warning first), in groups of six plus clip pairs for longer comics.
  6. Download the panels and clips, because their signed URLs expire, and deliver them in scene order.

Verification against the server

  • Template names. I fetched data/templates.json from Comfy-Org/comfy-cloud-mcp-server (main, today). Each of the 13 template names in the recipe matches "name": "<template>" exactly once.
  • Tool names. All 11 tools the recipe uses (search_templates, get_template_schema, run_template, upload_file, use_previous_output, wait_for_job, get_output, submit_batch, wait_for_batch, get_batch_output, partner_generate) appear as tool names in the server source.
  • Server tests. I added this file to the server's data/skills.json, the same way refresh-skills.yml would, and ran the server's own suites: the two guide guards the refresh workflow runs plus every test that reads the skills snapshot. All passed.
  • Negative-claim guard. On the first run, guide-negative-claims flagged a sentence ("…not by re-uploading"). I reworded it as a positive instruction and it now passes. Without that change, the refresh auto-PR would have opened as a draft.

Judgment calls / deviations from the planned text

  • Page layout. The plan said to tell the user "the catalog has no comic page-layout template." I searched the catalog for comic / manga / panel / grid / storyboard / collage and found utility_image_stitch ("Image Stitch 2x2 Grid", 4 LoadImage slots, no model). It does put four panels on one page. So Step 6 sends the user to it when they ask for a page. It only states the real limits: no speech balloons, no custom borders, four panels per page. I did not ship the "nothing exists" line.
  • Storyboard-to-video. The catalog description of template_seedance2_storyboard_to_video says it generates its own 8-panel storyboard from a text prompt. The server's usage guide for it says more: the video stage reads the storyboard image in its own LoadImage input, so the board it draws in the same run goes unused. The recipe fills that input with a page stitched from the Step 3 panels (or the user's own board), fills the other input with the character sheet, and overrides both prompts. Panel chaining goes through templates-6-key-frames (6 LoadImage slots, verified) or the FLF2V templates.
  • First reference image. The turnaround template needs a LoadImage reference. So when the user has no reference, Step 2 first generates one front-facing image from text with partner_generate, then builds the sheet. A reference-image template would have run its demo inputs here.
  • Panel candidates (review rounds). The first version listed api_google_nano_banana2_image_edit (1 LoadImage slot), image_qwen_image_edit_2509 (1) and api_kling_omni_image (0). None of them can take two character sheets, so they were replaced. The second round found that spare inputs run with demo pictures. The recipe now requires an exact fit and fills every image input, including in the contact sheet (3 inputs), templates-6-key-frames (exactly 6), storyboard-to-video (2) and a short last page.
  • Named templates kept. One review asked to drop the template names in favour of discovery at runtime. The names stay as a starting set, and get_template_schema is stated as the source of truth for whether a template exists and how many inputs it has.
  • get_node is not used, because no step needs it.
  • No step claims that a single template produces a multi-panel comic. The recipe says the opposite in its preamble.

Residual

  • README tension. This repo's README marks skills/ as legacy/frozen. Its authoring rule also says commands should not hard-code template names. The server's refresh-techniques.yml likewise names a future techniques/ directory as the home for recipes. But get_creative_technique today reads technique-* from data/skills.json, which mirrors skills/ (checked in the server's src/techniques.ts). So skills/ is the only place a recipe gets served from right now. I added a preamble line telling the agent to fall back to search_templates if a named template has been retired. Once techniques/ exists, a maintainer should decide whether to move this recipe and technique-combine-people there.
  • Nothing was run live. I ran no template on Comfy Cloud because that costs credits. Two things are untested end to end: whether the identity reproduction holds across panels, and whether use_previous_output filenames work in each listed template's LoadImage slots, and whether the reference grids keep characters apart. Everything above was checked against the catalog metadata and the server's static tests only.
  • Wording I could not verify. The "Wan 2.2" note for templates-6-key-frames matches the catalog models field.
  • Listing. After merge, the server's daily refresh-skills.yml cron should open the auto-PR that adds technique-multi-scene-comic to data/skills.json. That happens after this PR and I did not observe it.

Provenance

  • Authored by: agent-work loop
  • Verified:
    • All 13 template names in the recipe are in the server's data/templates.json. The LoadImage counts the recipe states (panel candidates 4/3/2/2/1; stitch 4; contact sheet 3; 6-key-frames 6; storyboard-to-video 2) match each template's catalog io.inputs.
    • The storyboard-to-video input roles (board input drives the video, the other is the character) match the server's own usage guide for that template.
    • The server's negative-claim finder flagged no sentence at 957b0f2. It was not re-run on the Step 2 handoff sentence added at the current head.
    • The server's guide and technique test suites passed on an earlier version of the text. They were not re-run on the latest wording.
    • Doc-drift sweep: 1 reference checked (README authoring rule), 0 updated. That tension is explained under Residual.
    • Nothing was run live on Comfy Cloud.
  • Deviations:
    • The page-layout dead-end was replaced with the utility_image_stitch route, which does not stitch a short last page.
    • Storyboard-to-video is fed a stitched page of the panels as its board, not described as a standalone generator.
    • A text-to-image partner_generate step makes the first reference, and also any scene with no characters.
    • Panels use exact-fit templates with every image input filled, and more than four characters are packed into grids.

🤖 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/39 **Author:** [@mattmillerai](https://github.com/mattmillerai) **Created:** 10/5/2026 **Status:** 🔄 Open **Base:** `main` ← **Head:** `matt/be-18920-multi-scene-comic` --- ### 📝 Commits (6) - [`0a4f207`](https://github.com/Comfy-Org/comfy-skills/commit/0a4f207d60225a01a5317758e21490fa9ba22add) feat(skills): add technique-multi-scene-comic recipe - [`0bc514d`](https://github.com/Comfy-Org/comfy-skills/commit/0bc514db4e622cdf7abc81434dbe3380e9ed326c) fix(skills): only suggest panel templates with enough reference slots - [`24eedf1`](https://github.com/Comfy-Org/comfy-skills/commit/24eedf17c64b76a902927c93731ad9ec1fb824ea) fix(skills): fill every image input in the comic recipe and wait on batches - [`12ee72c`](https://github.com/Comfy-Org/comfy-skills/commit/12ee72c2384ad93ddb90ef3f9ad5e9c55211213e) fix(skills): word the text-only reference step positively for the guide lint - [`957b0f2`](https://github.com/Comfy-Org/comfy-skills/commit/957b0f2074964e4fc2603d91ab124fcbad6bf0d8) fix(skills): cover empty scenes, long comics and expiring links in the comic recipe - [`968f517`](https://github.com/Comfy-Org/comfy-skills/commit/968f517cfae2103814453abebb86ac71101b6aa6) fix(skills): say how a partner_generate reference reaches the sheet template ### 📊 Changes **1 file changed** (+56 additions, -0 deletions) <details> <summary>View changed files</summary> ➕ `skills/technique-multi-scene-comic.md` (+56 -0) </details> ### 📄 Description ## ELI5 This adds a step-by-step recipe that helps the assistant make a comic or storyboard with the same characters looking the same in every panel. For each panel it picks an image tool with exactly as many picture inputs as there are characters, and fills every input. That way no character's look gets dropped and no stray sample picture slips into a panel. ## Summary Adds `skills/technique-multi-scene-comic.md`. The Comfy Cloud MCP server's `get_creative_technique` serves the `technique-*` entries mirrored from this directory. Until now `technique-combine-people` was the only one, so a multi-scene comic / manga / 漫剧 request had no recipe to land on. The file has the same shape as `technique-combine-people.md`: no frontmatter, a one-sentence first line ending `: $ARGUMENTS`, then `Follow these steps exactly:` and six `## Step N` sections. It is about 6 KB. The recipe: 1. Plan the script and fix one style string. 2. Make one character sheet per character (turnaround or contact-sheet template). A text-only starting reference comes from `partner_generate` and is chained into the sheet template with `use_previous_output`. If `partner_generate` returns a direct-dispatch id that cannot be chained, the reference is downloaded and re-uploaded with `upload_file` instead. Keep the sheet's job id as the identity anchor. 3. Make one multi-reference panel job per scene, with the sheets chained in via `use_previous_output`. Each scene uses the template whose LoadImage count equals its reference count (`api_flux2` 4, `api_bfl_flux_1_kontext_multiple_images_input` 3, `api_nano_banana_pro` 2, `api_kling_o3_image` 2, `flux_kontext_dev_basic` 1), and every LoadImage is overridden, because an untouched one runs with the template's demo picture. With more than four characters, the sheets are packed into fully filled `utility_image_stitch` 2x2 grids until the count fits a template exactly. A scene with no characters is made with text-to-image instead. Scenes beyond three go through `submit_batch` + `wait_for_batch`. 4. Re-run only the panels that drifted, with the scene's full original reference set. 5. Optionally animate the panels (credit warning first), in groups of six plus clip pairs for longer comics. 6. Download the panels and clips, because their signed URLs expire, and deliver them in scene order. ## Verification against the server - **Template names.** I fetched `data/templates.json` from `Comfy-Org/comfy-cloud-mcp-server` (main, today). Each of the 13 template names in the recipe matches `"name": "<template>"` exactly once. - **Tool names.** All 11 tools the recipe uses (`search_templates`, `get_template_schema`, `run_template`, `upload_file`, `use_previous_output`, `wait_for_job`, `get_output`, `submit_batch`, `wait_for_batch`, `get_batch_output`, `partner_generate`) appear as tool names in the server source. - **Server tests.** I added this file to the server's `data/skills.json`, the same way `refresh-skills.yml` would, and ran the server's own suites: the two guide guards the refresh workflow runs plus every test that reads the skills snapshot. All passed. - **Negative-claim guard.** On the first run, `guide-negative-claims` flagged a sentence ("…not by re-uploading"). I reworded it as a positive instruction and it now passes. Without that change, the refresh auto-PR would have opened as a draft. ## Judgment calls / deviations from the planned text - **Page layout.** The plan said to tell the user "the catalog has no comic page-layout template." I searched the catalog for comic / manga / panel / grid / storyboard / collage and found `utility_image_stitch` ("Image Stitch 2x2 Grid", 4 LoadImage slots, no model). It does put four panels on one page. So Step 6 sends the user to it when they ask for a page. It only states the real limits: no speech balloons, no custom borders, four panels per page. I did not ship the "nothing exists" line. - **Storyboard-to-video.** The catalog description of `template_seedance2_storyboard_to_video` says it generates its own 8-panel storyboard from a text prompt. The server's usage guide for it says more: the video stage reads the storyboard image in its own LoadImage input, so the board it draws in the same run goes unused. The recipe fills that input with a page stitched from the Step 3 panels (or the user's own board), fills the other input with the character sheet, and overrides both prompts. Panel chaining goes through `templates-6-key-frames` (6 LoadImage slots, verified) or the FLF2V templates. - **First reference image.** The turnaround template needs a LoadImage reference. So when the user has no reference, Step 2 first generates one front-facing image from text with `partner_generate`, then builds the sheet. A reference-image template would have run its demo inputs here. - **Panel candidates (review rounds).** The first version listed `api_google_nano_banana2_image_edit` (1 LoadImage slot), `image_qwen_image_edit_2509` (1) and `api_kling_omni_image` (0). None of them can take two character sheets, so they were replaced. The second round found that spare inputs run with demo pictures. The recipe now requires an exact fit and fills every image input, including in the contact sheet (3 inputs), `templates-6-key-frames` (exactly 6), storyboard-to-video (2) and a short last page. - **Named templates kept.** One review asked to drop the template names in favour of discovery at runtime. The names stay as a starting set, and `get_template_schema` is stated as the source of truth for whether a template exists and how many inputs it has. - `get_node` is not used, because no step needs it. - No step claims that a single template produces a multi-panel comic. The recipe says the opposite in its preamble. ## Residual - **README tension.** This repo's README marks `skills/` as legacy/frozen. Its authoring rule also says commands should not hard-code template names. The server's `refresh-techniques.yml` likewise names a future `techniques/` directory as the home for recipes. But `get_creative_technique` today reads `technique-*` from `data/skills.json`, which mirrors `skills/` (checked in the server's `src/techniques.ts`). So `skills/` is the only place a recipe gets served from right now. I added a preamble line telling the agent to fall back to `search_templates` if a named template has been retired. Once `techniques/` exists, a maintainer should decide whether to move this recipe and `technique-combine-people` there. - **Nothing was run live.** I ran no template on Comfy Cloud because that costs credits. Two things are untested end to end: whether the identity reproduction holds across panels, and whether `use_previous_output` filenames work in each listed template's LoadImage slots, and whether the reference grids keep characters apart. Everything above was checked against the catalog metadata and the server's static tests only. - **Wording I could not verify.** The "Wan 2.2" note for `templates-6-key-frames` matches the catalog `models` field. - **Listing.** After merge, the server's daily `refresh-skills.yml` cron should open the auto-PR that adds `technique-multi-scene-comic` to `data/skills.json`. That happens after this PR and I did not observe it. ## Provenance - **Authored by:** agent-work loop - **Verified:** - All 13 template names in the recipe are in the server's `data/templates.json`. The LoadImage counts the recipe states (panel candidates 4/3/2/2/1; stitch 4; contact sheet 3; 6-key-frames 6; storyboard-to-video 2) match each template's catalog `io.inputs`. - The storyboard-to-video input roles (board input drives the video, the other is the character) match the server's own usage guide for that template. - The server's negative-claim finder flagged no sentence at 957b0f2. It was not re-run on the Step 2 handoff sentence added at the current head. - The server's guide and technique test suites passed on an earlier version of the text. They were not re-run on the latest wording. - Doc-drift sweep: 1 reference checked (README authoring rule), 0 updated. That tension is explained under Residual. - Nothing was run live on Comfy Cloud. - **Deviations:** - The page-layout dead-end was replaced with the `utility_image_stitch` route, which does not stitch a short last page. - Storyboard-to-video is fed a stitched page of the panels as its board, not described as a standalone generator. - A text-to-image `partner_generate` step makes the first reference, and also any scene with no characters. - Panels use exact-fit templates with every image input filled, and more than four characters are packed into grids. 🤖 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>
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#38
No description provided.