New: Earn 20% as an AgentAlley affiliate. Share your link and earn on every sale you refer. Join now New: Earn 20% as an affiliate. Join now

Keep the ComfyUI sidebar panel node-pack in step

Keep the panel node-pack in sync with the orchestrator

by artokun · MIT license · ★ 759 on GitHub · updated Sep 21

Keep the panel node-pack in sync with the orchestrator cover

Keep the ComfyUI sidebar panel node-pack (comfyui-agent-panel) in step with the orchestrator after comfyui-mcp updates. Use this whenever the orchestrator was just updated (install_comfyui (action:"self_update"), npm i -g comfyui-mcp, a…

---
name: panel-node-pack-sync
description: Keep the ComfyUI sidebar panel node-pack (comfyui-agent-panel) in step with the orchestrator after comfyui-mcp updates. Use this whenever the orchestrator was just updated (install_comfyui (action:"self_update"), npm i -g comfyui-mcp, a new version in the ENVIRONMENT line), when a panel/bridge command fails in a way that smells like version drift ("panel is too old", a graph_/ui_ command the panel doesn't implement, a feature that works in the docs but not in the sidebar), or when the user asks to update/pin/unpin the panel. It checks the installed panel version against what THIS orchestrator build needs, RESPECTS an explicit version pin (warn-only, never move a pinned user), offers a clear way to unset the pin, runs the sync through the verified install_comfyui(action:'panel') path, and reports the version RE-READ from disk. Never claim a sync that did not happen.
---

# Keep the panel node-pack in sync with the orchestrator

The orchestrator (`comfyui-mcp`, from npm) and the sidebar panel
(`comfyui-agent-panel` on the Comfy Registry, repo `comfyui-mcp-panel`) ship
**separately**. Updating one does not update the other. A new orchestrator
driving an old panel fails in confusing ways, such as a bridge command the panel
doesn't implement or a feature that exists in the docs but not in the sidebar,
and those failures are hard for a user to diagnose. This skill closes that gap.

## The two rules that outrank everything else here

1. **Never report a sync that did not happen.** This whole feature sits on top of
   the fabricate-success fixes (#639/#641): ComfyUI-Manager reports its queue

Overview

The orchestrator (comfyui-mcp, from npm) and the sidebar panel (comfyui-agent-panel on the Comfy Registry, repo comfyui-mcp-panel) ship separately. Updating one does not update the other. A new orchestrator driving an old panel fails in confusing ways, such as a bridge command the panel doesn't implement or a feature that exists in the docs but not in the sidebar, and those failures are hard for a user to diagnose. This skill closes that gap.

Manual install (npx, ZIP)
Claude Codenpx skills add artokun/comfyui-mcp --skill panel-node-pack-sync -g -a claude-code
Claude Code (manual)mkdir -p ~/.claude/skills && curl -sL https://codeload.github.com/artokun/comfyui-mcp/tar.gz/1d5b12b1b499 \ | tar -xz -C ~/.claude/skills --strip-components=3 comfyui-mcp-1d5b12b1b499/plugin/skills/panel-node-pack-sync
Windows (PowerShell)New-Item -ItemType Directory -Force "$HOME\.claude\skills" | Out-Null; Invoke-WebRequest "https://m.agentalley.io/zip/07f844dab6e6f746dabd/panel-node-pack-sync.zip" -OutFile "$env:TEMP\panel-node-pack-sync.zip"; Expand-Archive "$env:TEMP\panel-node-pack-sync.zip" -DestinationPath "$HOME\.claude\skills" -Force
Claude.ai / desktopDownload the ZIP and upload it under Settings → Capabilities → Skills.
Codex, Cursor, other agentsPoint them at SKILL.md. The other files are plain text.

Connects with Agent Alley MCP · agentalley.io/mcp

Files included

  • SKILL.md11.4 KB
Read the files here
artokun/1d5b12b1 file
Shared references1SKILL.md reads these from elsewhere in the repo. Not in the ZIP.Get them on GitHub ↗
SKILL.md
Show the full text202 lines

Keep the panel node-pack in sync with the orchestrator

The orchestrator (comfyui-mcp, from npm) and the sidebar panel (comfyui-agent-panel on the Comfy Registry, repo comfyui-mcp-panel) ship separately. Updating one does not update the other. A new orchestrator driving an old panel fails in confusing ways, such as a bridge command the panel doesn't implement or a feature that exists in the docs but not in the sidebar, and those failures are hard for a user to diagnose. This skill closes that gap.

The two rules that outrank everything else here

  1. Never report a sync that did not happen. This whole feature sits on top of the fabricate-success fixes (#639/#641): ComfyUI-Manager reports its queue "drained" even when it never enqueued anything, and a .bak-style copy in custom_nodes can shadow the real panel in the browser. So the only version you may ever tell the user is the one read back from disk after the fact. If the tool throws, the sync FAILED. Say so plainly. Do not soften it, do not retry it into a success, do not report the version you intended to install.

  2. Never move a pinned user. A pin is a promise. If the user pinned the panel, you warn and stop. You do not unpin for them, you do not "just this once", you do not sync anyway because the new version is obviously better. Offer to clear the pin, and act only if they say yes.

Step 1 — Look before you touch anything

install_comfyui(action:'panel', panel_action:'status')

This never errors. Read these fields:

Field Meaning
installedVersion The panel version on disk (from its pyproject.toml).
sync.requiredPanelVersion The highest panel version this orchestrator build needs.
sync.decision What to do — the whole decision is made for you (Step 2).
sync.summary Plain-language explanation, safe to paraphrase to the user.
pin The active pin: { pinned, version, source: "env"|"settings", reason }.
shadows .bak-style copies that shadow the real panel in the browser.
isDevSymlink A developer's symlinked checkout — never ours to modify.

Do not compute the comparison yourself. sync.decision already accounts for the pin, shadow copies, dev symlinks, remote/cloud mode, and unreadable versions.

Step 2 — Act on sync.decision

decision What it means What you do
meets-floor Panel clears the minimum the orchestrator needs. It is not a statement that a newer panel does not exist — nothing on this path knows the newest published version, and most panel fixes ship without raising the floor (#806). Nothing, unless the user is chasing a bug. Say "meets the minimum (X ≥ Y)", never "up to date". If they are debugging, add that a newer panel may carry the fix and that the latest is published in the pack's pyproject.toml.
sync Behind, not pinned, nothing ambiguous. Step 3 — sync it.
pinned-warn Behind, but pinned. Step 4 — warn only. Do not sync.
blocked A shadow copy, or a pin we couldn't read. Step 5 — get it unblocked first.
unknown The installed version isn't comparable (nightly, dev, unreadable) and nothing is pinned. Report it, don't guess. Offer a deliberate install_comfyui(action:'panel', panel_action:'update') and let the user decide. (If they were pinned you'd have got pinned-warn instead, so unknown never means "quietly ignore a pin".)
dev-install Symlinked dev checkout. Tell them to git pull their own checkout. Change nothing.
not-applicable Remote/cloud, or no local ComfyUI. Explain the panel is managed on the ComfyUI host.

Step 3 — Sync (decision: "sync")

install_comfyui(action:'panel', panel_action:'sync')

That single call re-checks the decision at execution time (the pin may have been set a second ago), runs the update through the hardened, verified path, and re-reads the pack from disk afterwards. Read the result:

  • synced: true → it moved. Report verifiedVersion, the version observed on disk after the op, not the one we asked for. Then tell the user ComfyUI must be RESTARTED to load it (restartRequired: true); this never auto-restarts. Now read stillBehind, which is tri-state:
    • false → the panel provably meets what the orchestrator needs. Done.
    • true → the update applied but did not close the gap. Say so; do not round it up to "you're current now".
    • null → it landed, but the resulting version (e.g. nightly) can't be compared, so whether the mismatch is fixed is unknown. Say exactly that. null is not false. Never report it as "you're fine".
  • synced: false → nothing was changed. decision says why (pinned-warn, meets-floor, blocked, …). This is a normal outcome, not a failure.
  • The tool errored → the sync FAILED. The error text names the cause (ComfyUI-Manager's stale-3.x silent no-op, a shadow copy, an unverifiable post-state) and the fix. Relay it. Never describe a failed sync as "completed with warnings" or "probably fine after a restart".

For a user who is on Comfy Desktop, restart via the Manager reboot endpoint rather than killing the process.

Step 4 — Pinned (decision: "pinned-warn") — WARN, DO NOT SYNC

The user deliberately held the panel where it is. Tell them three things and then stop:

  1. A newer panel that matches their orchestrator exists (requiredPanelVersion).
  2. They are pinned (say to what, and where the pin lives, from pin.source).
  3. How to get off it, if they want to.

Your orchestrator (comfyui-mcp 0.48.32) expects panel 0.11.28+, and you're on 0.11.3. You've pinned the panel to 0.11.3, so I haven't changed anything. Want me to clear the pin and update? I'd unpin and then sync; ComfyUI needs a restart afterwards.

Only if they say yes:

install_comfyui(action:'panel', panel_action:'unpin')      # clears the persisted pin
install_comfyui(action:'panel', panel_action:'sync')       # then Step 3

If pin.source is "env", unpin cannot clear it, because the pin comes from the COMFYUI_MCP_PANEL_PIN environment variable. Tell the user to unset it (or set it to off) in their environment or ~/.comfyui-mcp/.env and restart the orchestrator. Do not edit their environment for them, and do not report them as unpinned. install_comfyui(action:'panel', panel_action:'unpin') returns the still-active pin in that case, and its note says exactly this.

Step 5 — Blocked

  • Shadow copy (shadows non-empty): a dir like .comfyui-agent-panel.bak-0.11.28 in custom_nodes is also served as a web extension, and a dot-prefixed name wins by sort order, so the browser may be loading the old panel no matter what the disk says. Nothing can be verified until it's gone. Tell the user to move it out of custom_nodes (not only rename it) and hard-refresh the ComfyUI tab, then re-run Step 1.
  • Unreadable pin: ~/.comfyui-mcp/panel-settings.json exists but couldn't be parsed, so we cannot prove the user isn't pinned, and we refuse to move them on a guess. Ask them to fix or delete that file (or set COMFYUI_MCP_PANEL_PIN=off), then re-run Step 1.

Pinning on request

If the user wants to stay on their current panel (they're mid-project, a newer panel regressed something, they're testing):

install_comfyui(action:'panel')(action='pin', version='<installedVersion from status>', reason='<why>')

version is required. Never invent one. Pass the installedVersion from Step 1 to pin them where they already are. A pin records intent only. It does not change what is installed.

While it's set, everything that could move the panel refuses, not only install_comfyui(action:'panel'). The panel is an ordinary custom node pack, so the generic node tools are a second door into the same operation, and they are guarded too:

  • install_custom_node / install_custom_node (action: "update") / install_custom_node (action: "reinstall") targeting the panel by any spelling: the registry id, the repo name, or a git URL including ref-carrying forms like …/[email protected] and …/comfyui-mcp-panel/tree/main. These also route through the verified path automatically, so the version they report is re-read from disk like sync's.
  • id="all", and install_comfyui (action:"update_all"). A bulk update moves the panel along with everything else. ComfyUI-Manager can't update everything-except-one-pack, so while pinned these refuse outright. If the user wants the rest updated, either unpin first or update the other packs individually by id. Say that plainly rather than quietly unpinning to make all work.
  • install_custom_node (action: "fix"), panel_install_node and panel_update_node refuse a panel target outright, pinned or not. They report success as soon as the ComfyUI-Manager queue drains, which proves nothing, and there's no verified equivalent to route them into. Use install_comfyui(action:'panel') instead; don't work around the refusal.

Prefer install_comfyui(action:'panel') throughout. It's the one with status, sync and the pin.

When to run this at all

  • Right after the orchestrator updates (install_comfyui (action:"self_update"), a fresh npm i -g, or a version in the ENVIRONMENT line that's newer than last you saw).
  • When a panel/bridge command fails in a way that smells like version drift: "panel is too old", a graph_*/ui_* command the panel doesn't implement, a documented sidebar feature that isn't there.
  • Whenever the user asks to update, pin, or unpin the panel.

Be proportionate. This is a one-line check. If decision is meets-floor and the user didn't ask, don't narrate it. Carry on with what they wanted. The exception is a user who is DEBUGGING the panel. meets-floor is exactly the state that hides a shipped fix behind an unchanged floor, so there it is worth the sentence.

Absolute rules

  • A sync that didn't move bytes is a FAILURE. Report the thrown error, never a success.
  • Report verifiedVersion (re-read from disk), never the target version, never nightly.
  • A pin is never overridden, not even "temporarily". Unpin requires the user's explicit yes.
  • Never touch a dev symlink. It's someone's working repo.
  • Always say a restart is required after a sync lands; nothing here auto-restarts ComfyUI.

Sources

  • Official: comfyui-mcp panel product behavior (this repo).
  • Empirical: sync/mismatch recipes from observed panel vs disk drift.
1---
2name: panel-node-pack-sync
3description: Keep the ComfyUI sidebar panel node-pack (comfyui-agent-panel) in step with the orchestrator after comfyui-mcp updates. Use this whenever the orchestrator was just updated (install_comfyui (action:"self_update"), npm i -g comfyui-mcp, a new version in the ENVIRONMENT line), when a panel/bridge command fails in a way that smells like version drift ("panel is too old", a graph_/ui_ command the panel doesn't implement, a feature that works in the docs but not in the sidebar), or when the user asks to update/pin/unpin the panel. It checks the installed panel version against what THIS orchestrator build needs, RESPECTS an explicit version pin (warn-only, never move a pinned user), offers a clear way to unset the pin, runs the sync through the verified install_comfyui(action:'panel') path, and reports the version RE-READ from disk. Never claim a sync that did not happen.
4---
5 
6# Keep the panel node-pack in sync with the orchestrator
7 
8The orchestrator (`comfyui-mcp`, from npm) and the sidebar panel
9(`comfyui-agent-panel` on the Comfy Registry, repo `comfyui-mcp-panel`) ship
10**separately**. Updating one does not update the other. A new orchestrator
11driving an old panel fails in confusing ways, such as a bridge command the panel
12doesn't implement or a feature that exists in the docs but not in the sidebar,
13and those failures are hard for a user to diagnose. This skill closes that gap.
14 
15## The two rules that outrank everything else here
16 
171. **Never report a sync that did not happen.** This whole feature sits on top of
18 the fabricate-success fixes (#639/#641): ComfyUI-Manager reports its queue
19 "drained" even when it never enqueued anything, and a `.bak`-style copy in
20 `custom_nodes` can shadow the real panel in the browser. So the only version
21 you may ever tell the user is the one **read back from disk after the fact**.
22 If the tool throws, the sync FAILED. Say so plainly. Do not soften it, do not
23 retry it into a success, do not report the version you *intended* to install.
24 
252. **Never move a pinned user.** A pin is a promise. If the user pinned the
26 panel, you **warn and stop**. You do not unpin for them, you do not "just this
27 once", you do not sync anyway because the new version is obviously better.
28 Offer to clear the pin, and act only if they say yes.
29 
30## Step 1 — Look before you touch anything
31 
32```
33install_comfyui(action:'panel', panel_action:'status')
34```
35 
36This never errors. Read these fields:
37 
38| Field | Meaning |
39|---|---|
40| `installedVersion` | The panel version on disk (from its `pyproject.toml`). |
41| `sync.requiredPanelVersion` | The highest panel version **this** orchestrator build needs. |
42| `sync.decision` | What to do — the whole decision is made for you (Step 2). |
43| `sync.summary` | Plain-language explanation, safe to paraphrase to the user. |
44| `pin` | The active pin: `{ pinned, version, source: "env"\|"settings", reason }`. |
45| `shadows` | `.bak`-style copies that shadow the real panel in the browser. |
46| `isDevSymlink` | A developer's symlinked checkout — never ours to modify. |
47 
48Do not compute the comparison yourself. `sync.decision` already accounts for the
49pin, shadow copies, dev symlinks, remote/cloud mode, and unreadable versions.
50 
51## Step 2 — Act on `sync.decision`
52 
53| `decision` | What it means | What you do |
54|---|---|---|
55| `meets-floor` | Panel clears the **minimum** the orchestrator needs. It is **not** a statement that a newer panel does not exist — nothing on this path knows the newest published version, and most panel fixes ship without raising the floor (#806). | Nothing, unless the user is chasing a bug. Say "meets the minimum (X ≥ Y)", never "up to date". If they are debugging, add that a newer panel may carry the fix and that the latest is published in the pack's `pyproject.toml`. |
56| `sync` | Behind, not pinned, nothing ambiguous. | Step 3 — sync it. |
57| `pinned-warn` | Behind, **but pinned**. | Step 4 — warn only. **Do not sync.** |
58| `blocked` | A shadow copy, or a pin we couldn't read. | Step 5 — get it unblocked first. |
59| `unknown` | The installed version isn't comparable (`nightly`, `dev`, unreadable) **and nothing is pinned**. | Report it, don't guess. Offer a deliberate `install_comfyui(action:'panel', panel_action:'update')` and let the user decide. (If they *were* pinned you'd have got `pinned-warn` instead, so `unknown` never means "quietly ignore a pin".) |
60| `dev-install` | Symlinked dev checkout. | Tell them to `git pull` their own checkout. Change nothing. |
61| `not-applicable` | Remote/cloud, or no local ComfyUI. | Explain the panel is managed on the ComfyUI host. |
62 
63## Step 3 — Sync (`decision: "sync"`)
64 
65```
66install_comfyui(action:'panel', panel_action:'sync')
67```
68 
69That single call re-checks the decision at execution time (the pin may have been
70set a second ago), runs the update through the hardened, verified path, and
71re-reads the pack from disk afterwards. Read the result:
72 
73- `synced: true` → it moved. Report **`verifiedVersion`**, the version observed
74 on disk after the op, not the one we asked for. Then tell the user
75 **ComfyUI must be RESTARTED** to load it (`restartRequired: true`); this
76 never auto-restarts. Now read `stillBehind`, which is **tri-state**:
77 - `false` → the panel provably meets what the orchestrator needs. Done.
78 - `true` → the update applied but did **not** close the gap. Say so; do not
79 round it up to "you're current now".
80 - **`null`** → it landed, but the resulting version (e.g. `nightly`) can't be
81 compared, so whether the mismatch is fixed is **unknown**. Say exactly that.
82 `null` is not `false`. Never report it as "you're fine".
83- `synced: false` → nothing was changed. `decision` says why (`pinned-warn`,
84 `meets-floor`, `blocked`, …). This is a normal outcome, not a failure.
85- **The tool errored** → the sync FAILED. The error text names the cause
86 (ComfyUI-Manager's stale-3.x silent no-op, a shadow copy, an unverifiable
87 post-state) and the fix. Relay it. **Never** describe a failed sync as
88 "completed with warnings" or "probably fine after a restart".
89 
90For a user who is on Comfy Desktop, restart via the Manager reboot endpoint
91rather than killing the process.
92 
93## Step 4 — Pinned (`decision: "pinned-warn"`) — WARN, DO NOT SYNC
94 
95The user deliberately held the panel where it is. Tell them three things and then
96**stop**:
97 
981. A newer panel that matches their orchestrator exists (`requiredPanelVersion`).
992. They are pinned (say to what, and *where* the pin lives, from `pin.source`).
1003. How to get off it, if they want to.
101 
102> Your orchestrator (comfyui-mcp 0.48.32) expects panel 0.11.28+, and you're on
103> 0.11.3. You've pinned the panel to 0.11.3, so I haven't changed anything.
104> Want me to clear the pin and update? I'd unpin and then sync; ComfyUI needs a
105> restart afterwards.
106 
107Only if they say yes:
108 
109```
110install_comfyui(action:'panel', panel_action:'unpin') # clears the persisted pin
111install_comfyui(action:'panel', panel_action:'sync') # then Step 3
112```
113 
114**If `pin.source` is `"env"`**, `unpin` cannot clear it, because the pin comes
115from the `COMFYUI_MCP_PANEL_PIN` environment variable. Tell the user to unset it
116(or set it to `off`) in their environment or `~/.comfyui-mcp/.env` and restart
117the orchestrator. Do not edit their environment for them, and do not report them
118as unpinned. `install_comfyui(action:'panel', panel_action:'unpin')` returns the
119still-active pin in that case, and its `note` says exactly this.
120 
121## Step 5 — Blocked
122 
123- **Shadow copy** (`shadows` non-empty): a dir like
124 `.comfyui-agent-panel.bak-0.11.28` in `custom_nodes` is *also* served as a web
125 extension, and a dot-prefixed name wins by sort order, so the browser may be
126 loading the old panel no matter what the disk says. Nothing can be verified
127 until it's gone. Tell the user to move it **out of** `custom_nodes` (not only
128 rename it) and hard-refresh the ComfyUI tab, then re-run Step 1.
129- **Unreadable pin**: `~/.comfyui-mcp/panel-settings.json` exists but couldn't be
130 parsed, so we cannot prove the user *isn't* pinned, and we refuse to move them
131 on a guess. Ask them to fix or delete that file (or set
132 `COMFYUI_MCP_PANEL_PIN=off`), then re-run Step 1.
133 
134## Pinning on request
135 
136If the user wants to stay on their current panel (they're mid-project, a newer
137panel regressed something, they're testing):
138 
139```
140install_comfyui(action:'panel')(action='pin', version='<installedVersion from status>', reason='<why>')
141```
142 
143`version` is required. Never invent one. Pass the `installedVersion` from
144Step 1 to pin them where they already are. A pin **records intent only**. It does
145not change what is installed.
146 
147While it's set, everything that could move the panel refuses, not only
148`install_comfyui(action:'panel')`. The panel is an ordinary custom node pack, so the generic node
149tools are a second door into the same operation, and they are guarded too:
150 
151- `install_custom_node` / `install_custom_node` (`action: "update"`) / `install_custom_node` (`action: "reinstall"`)
152 targeting the panel by **any** spelling: the registry id, the repo name, or a
153 git URL including ref-carrying forms like `…/[email protected]`
154 and `…/comfyui-mcp-panel/tree/main`. These also **route through the verified
155 path** automatically, so the version they report is re-read from disk like
156 `sync`'s.
157- **`id="all"`, and `install_comfyui (action:"update_all")`.** A bulk update moves the panel along with
158 everything else. ComfyUI-Manager can't update everything-except-one-pack, so
159 while pinned these refuse outright. If the user wants the rest updated, either
160 unpin first or update the other packs individually by id. Say that plainly
161 rather than quietly unpinning to make `all` work.
162- `install_custom_node` (`action: "fix"`), `panel_install_node` and `panel_update_node` **refuse** a
163 panel target outright, pinned or not. They report success as soon as the
164 ComfyUI-Manager queue drains, which proves nothing, and there's no verified
165 equivalent to route them into. Use `install_comfyui(action:'panel')` instead; don't work around
166 the refusal.
167 
168Prefer `install_comfyui(action:'panel')` throughout. It's the one with `status`, `sync` and the
169pin.
170 
171## When to run this at all
172 
173- Right after the orchestrator updates (`install_comfyui (action:"self_update")`, a fresh `npm i -g`, or a
174 version in the ENVIRONMENT line that's newer than last you saw).
175- When a panel/bridge command fails in a way that smells like version drift:
176 "panel is too old", a `graph_*`/`ui_*` command the panel doesn't implement, a
177 documented sidebar feature that isn't there.
178- Whenever the user asks to update, pin, or unpin the panel.
179 
180Be proportionate. This is a one-line check. If `decision` is `meets-floor` and the
181user didn't ask, don't narrate it. Carry on with what they wanted.
182The exception is a user who is DEBUGGING the panel. `meets-floor` is exactly the
183state that hides a shipped fix behind an unchanged floor, so there it is worth the
184sentence.
185 
186## Absolute rules
187 
188- **A sync that didn't move bytes is a FAILURE.** Report the thrown error, never
189 a success.
190- **Report `verifiedVersion`** (re-read from disk), never the target version,
191 never `nightly`.
192- **A pin is never overridden**, not even "temporarily". Unpin requires the
193 user's explicit yes.
194- **Never touch a dev symlink.** It's someone's working repo.
195- **Always say a restart is required** after a sync lands; nothing here
196 auto-restarts ComfyUI.
197 
198## Sources
199 
200- **Official:** comfyui-mcp panel product behavior (this repo).
201- **Empirical:** sync/mismatch recipes from observed panel vs disk drift.
202 
View all files on GitHub →

Details

Updated
Sep 21, 2026
License
MIT
Stars on the repo
★ 759
Checked
Source
artokun/comfyui-mcp ↗
Creator
artokun · 44 listings
View creator

Similar skills

See all →
SkillMake Japanese TV-anime style videos with codeAnime celedenfunf/reelmimic · by edenfunfMake Japanese TV-anime style videos (MP4) with code — cel-shaded characters with tapered line art, big detailed eyes, hair clumps with a specular band, comedic anime reactions (sweat drop, anger vein, sparkle eyes, ≥< eyes, dot eyes, tears), painted skies with cumulus clouds, school/street/classroom/rooftop sets with time-of-day palettes, speed/focus lines, impact frames, dramatic zooms, smears, sakura petals and anime subtitles (CJK). Canvas 2D rendered frame by frame in headless Chrome, encoded with ffmpeg. Use when a reference video or brief calls for anime / 動畫 / 日系動畫 / アニメ / cel-shaded / slice-of-life / school romance / shōnen-style reactions, or when the video-clone router picks the anime-cel style. 2D only; characters are original (Hina, Ren) or new ones built on the same rig.★ 3.6k GitHub starsSkillDirect and produce a short film made entirely in codeLemo opuscarlemomo-ai/lemo-opuscar · by lemomo-aiDirect and produce a short film made entirely in code, in one of the styles of the Lemo-Opuscar library (e.g. Impasto Oil Painting 油画厚涂, Watercolor Brush 水彩笔刷, Ukiyo-e 浮世绘, Satellite Briefing 卫星简报, Exploded Teardown 产品拆解, Microscope Story 显微叙事). Use when the user asks for a video, film, short, promo, explainer or animation (视频、短片、动画、宣传片) in a named style, including data, science and product explainers built from real material such as satellite imagery, laser scans, CAD files or archive scans (数据解说、科普、产品拆解); when they want a film made about their own topic and haven't chosen a style (help them choose); or when they ask which film styles there are. Not for editing or converting existing video files.★ 3k GitHub starsSkillGenerate Ian-style Xiaohei illustrations for articles, postsdzhng/skills · by dzhngGenerate Ian-style Xiaohei illustrations for articles, posts, blogs, Notion documents, workflows, methods, processes, structures, states, metaphors, and opinions. Use when the user asks for weird, hand-drawn, Xiaohei, article, editorial, body illustrations, illustration ideas, shot lists, title removal, image edits, or image regeneration. By default, all image text and annotations are English, even when the source article is Chinese; only use another language when the user explicitly asks.★ 1.3k GitHub starsSkillCreating game art through Scenario MCP: spritesScenario game assetsscenario-labs/skills · by scenario-labsUse when creating game art through Scenario MCP: sprites, sprite sheets, icons, props, loot, tilesets and autotile terrain transitions, seamless tiles, isometric buildings, top-down maps, pixel art, UI buttons and panels, parallax background layers or depth planes for side-scrollers, and character or concept art; or when assets need transparent backgrounds, background removal, style-consistent variation batches, upscaling, pixel-grid cleanup, or PNG export for Unity, Godot, or Unreal.★ 854 GitHub starsSkillTrain custom LoRAs with ostris AI-ToolkitAI-Toolkit LoRA Trainer (WAN 2.2 & Z-Image)artokun/comfyui-mcp · by artokunTrain custom LoRAs with ostris AI-Toolkit. Covers WAN 2.2/2.1 (people, styles, video motion) and Z-Image (Turbo & Base, low-VRAM image LoRAs). Use when the user wants to train a WAN or Z-Image LoRA; covers local + RunPod setup, dataset prep, key params, and using the result in a ComfyUI workflow.★ 759 GitHub starsSkillAnime/illustration text-to-imageANIMA 1.0 (Anima Base Ultra) Text-to-Image Workflowsartokun/comfyui-mcp · by artokunAnime/illustration text-to-image (ANIMA 1.0, ~2B Cosmos DiT). Use for anime, manga, illustrated characters; accepts Danbooru tags + natural language; runs/trains on <6GB VRAM; includes anime inpainting via Anima-LLLite ControlNet★ 759 GitHub stars

More from artokun

SkillTrain custom LoRAs with ostris AI-ToolkitAI-Toolkit LoRA Trainer (WAN 2.2 & Z-Image)artokun/comfyui-mcp · by artokunTrain custom LoRAs with ostris AI-Toolkit. Covers WAN 2.2/2.1 (people, styles, video motion) and Z-Image (Turbo & Base, low-VRAM image LoRAs). Use when the user wants to train a WAN or Z-Image LoRA; covers local + RunPod setup, dataset prep, key params, and using the result in a ComfyUI workflow.★ 759 GitHub starsSkillAnime/illustration text-to-imageANIMA 1.0 (Anima Base Ultra) Text-to-Image Workflowsartokun/comfyui-mcp · by artokunAnime/illustration text-to-image (ANIMA 1.0, ~2B Cosmos DiT). Use for anime, manga, illustrated characters; accepts Danbooru tags + natural language; runs/trains on <6GB VRAM; includes anime inpainting via Anima-LLLite ControlNet★ 759 GitHub starsSkillAuthoring & Publishing ComfyUI Custom Nodesartokun/comfyui-mcp · by artokunAuthoring & publishing ComfyUI custom nodes to the Comfy Registry, covering node structure, pyproject.toml spec, comfy-cli publishing, and CI★ 759 GitHub starsSkillTrain a custom anime LoRA on the ANIMA base modelCitron Anima LoRA Trainerartokun/comfyui-mcp · by artokunTrain a custom anime LoRA on the ANIMA base model with Citron's local Gradio trainer (kohya sd-scripts), <6GB VRAM, character/style LoRAs; covers setup, dataset prep, training params, and using the result in the anima-base workflow★ 759 GitHub starsSkillDiscover Civitai models with the BUILT-IN downloadmodelCivitai + comfyui-mcpartokun/comfyui-mcp · by artokunDiscover Civitai models with the BUILT-IN download_model action:"search_civitai" and install/generate them locally. Find a checkpoint/LoRA/embedding on Civitai, download it into ComfyUI, and use its trigger words. Optionally pair the official Civitai MCP for community features (images browsing, posting, collections).★ 759 GitHub starsSkillDiagnose and fix video/image color OBJECTIVELYColor Correction (measure, don't eyeball)artokun/comfyui-mcp · by artokunDiagnose and fix video/image color OBJECTIVELY with the get_image (action:"analyze_color") tool (scopes/stats such as black/white points, contrast, saturation, clipping, cast) instead of eyeballing a contact sheet. Covers the "washed out" signature, why reference color-match (mkl/ColorMatch/ColorMatchAdobe) CAN'T add contrast a flat source lacks, the levels/contrast-stretch fix (core AdjustContrast / CurveEditor), the measure→fix→re-measure loop, the side-by-side sandbox pattern, and where to place the fix in a render graph (after decode, before save). Use when a render looks washed out / flat / dull / over-saturated / color-cast, or when deciding between a color-match and a contrast/levels fix.★ 759 GitHub stars