com um clique
add-model-page
// add, update, or remove a model page entry on the comfy org website. creates a PR to Comfy-Org/ComfyUI_frontend apps/website folder with the change and posts a Vercel preview link back to Slack.
// add, update, or remove a model page entry on the comfy org website. creates a PR to Comfy-Org/ComfyUI_frontend apps/website folder with the change and posts a Vercel preview link back to Slack.
Manages cherry-pick backports across stable release branches. Discovers candidates from Slack/git, analyzes dependencies, resolves conflicts via worktree, and logs results. Use when asked to backport, cherry-pick to stable, manage release branches, do stable branch maintenance, or run a backport session.
Bug fix workflow that proves test validity with a red-then-green CI sequence. Commits a failing test first (CI red), then the minimal fix (CI green). Use when fixing a bug, writing a regression test, or when asked to prove a fix works.
Writes Playwright e2e tests for ComfyUI_frontend. Use when creating, modifying, or debugging browser tests. Triggers on: playwright, e2e test, browser test, spec file.
Use when reviewing Vitest unit-test diffs in ComfyUI_frontend, especially new mocks, store tests, component tests, or bugfix regression tests.
Ships performance fixes with CI-proven improvement using stacked PRs. PR1 adds a @perf test (establishes baseline on main), PR2 adds the fix (CI shows delta). Use when implementing a perf optimization and wanting to prove it in CI.
Diagnoses and fixes flaky Playwright e2e tests by replacing race-prone patterns with retry-safe alternatives. Use when triaging CI flakes, hardening spec files, fixing timing races, or asked to stabilize browser tests. Triggers on: flaky, flake, harden, stabilize, race condition in e2e, intermittent failure.
| name | add-model-page |
| description | add, update, or remove a model page entry on the comfy org website. creates a PR to Comfy-Org/ComfyUI_frontend apps/website folder with the change and posts a Vercel preview link back to Slack. |
add, update, or remove model pages in the ComfyUI website.
Add a model page for <model-name>Update the model page for <model-name>Remove <model-name> from model pagesExtract:
add | update | removeflux1-schnell, flux1_dev.safetensors)Normalize to a slug: lowercase, replace _ and . with -, strip file extensions.
Example: flux1_dev.safetensors → flux1-dev
Models come from two sources merged at build time:
| File | Purpose |
|---|---|
apps/website/src/config/generated-models.json | Auto-generated from workflow_templates (slug, name, directory, huggingFaceUrl, workflowCount, displayName, thumbnailUrl, docsUrl) |
apps/website/src/config/model-metadata.ts | Hand-curated overrides (docsUrl, blogUrl, featured) — only add entries that need overrides |
apps/website/src/config/models.ts | Merges the two above; exports typed Model[] |
To regenerate the JSON from workflow_templates:
pnpm tsx apps/website/scripts/generate-models.ts
This writes apps/website/src/config/generated-models.json directly.
Thumbnails are populated from local .webp files in workflow_templates/templates/ — no network access needed.
Run the generator to get fresh data, then find the model:
pnpm tsx apps/website/scripts/generate-models.ts
jq '.[] | select(.slug | contains("MODEL_SLUG"))' \
apps/website/src/config/generated-models.json
The JSON fields are:
slug — URL slugname — exact filename or display name for partner nodeshuggingFaceUrl — download URL (empty for partner nodes)directory — diffusion_models | loras | … | partner_nodesworkflowCount — integerdisplayName — human-readable nameIf no match and it is a known API/partner model, add it to API_PROVIDER_MAP in
generate-models.ts and re-run. Otherwise tell the user.
jq --arg slug "${SLUG}" '.[] | select(.slug == $slug)' \
apps/website/src/config/generated-models.json
add → switch to UPDATE flow automaticallyupdate → stop and tell the userFor partner nodes (no local file), add an entry to API_PROVIDER_MAP in
apps/website/scripts/generate-models.ts:
mymodel: { name: 'My Model', slug: 'my-model' },
Then re-run pnpm tsx apps/website/scripts/generate-models.ts — it will appear
in generated-models.json automatically.
If you also want a docsUrl, blogUrl, or a link to the hub model page, add an entry to model-metadata.ts:
'my-model': {
docsUrl: 'https://docs.comfy.org/tutorials/...',
blogUrl: 'https://blog.comfy.org/...',
hubSlug: 'my-model', // slug at comfy.org/workflows/model/{hubSlug} — only set if the page exists (returns 200)
featured: true
}
No changes to models.ts or translations.ts are needed.
Only model-metadata.ts needs editing for most updates (docsUrl, blogUrl,
featured). For displayName or directory changes, edit the entry directly in
generated-models.json (until the next generator run would overwrite it — then
fix the source in generate-models.ts).
Remove the entry from generated-models.json (or mark it with canonicalSlug
pointing to the replacement). No translation file changes needed.
pnpm typecheck 2>&1 | grep -E "error|warning" | head -20
Fix any type errors before proceeding. Common issues:
ModelDirectory type not matching a new directory value — add it to the uniongenerated-models.json must match OutputModelBRANCH="add-model-page-MODEL-SLUG" # or update- / remove-
git checkout -b $BRANCH
git add apps/website/src/config/generated-models.json \
apps/website/scripts/generate-models.ts \
apps/website/src/config/model-metadata.ts
git commit -m "feat(models): add model page for MODEL-SLUG"
git push -u origin $BRANCH
gh pr create \
--title "Add model page: MODEL-SLUG" \
--body "$(cat <<'EOF'
Adds a new model page entry for MODEL-SLUG.
## Changes
- `generated-models.json`: regenerated with new entry (workflowCount N, directory DIRECTORY)
- `model-metadata.ts`: editorial overrides (docsUrl, featured) if needed
EOF
)"
For UPDATE use branch update-model-page-MODEL-SLUG.
For REMOVE use remove-model-page-MODEL-SLUG.
| Situation | Response |
|---|---|
| Model not in workflow templates | Ask user to verify spelling or add it manually as a partner node |
| Slug already exists (add) | Switch to update flow automatically |
| Slug not found (update/remove) | Stop and ask user to confirm |
| Typecheck fails | Fix the error before pushing |