skills/node-docs/SKILL.md
Write and improve documentation for ComfyUI nodes in per-node JSON files. Use when asked to document nodes, write node descriptions, add tips to nodes, improve node docs, enrich node content, fill in empty node descriptions, or batch-write documentation for new/updated nodes. Also triggers on "write docs for nodes", "document the new nodes", "improve node tips", "fill in node descriptions", "enrich nodes", or "node content pass".
npx skillsauth add espennilsen/pi node-docsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Write original, beginner-friendly documentation for ComfyUI nodes. Each node is stored as an individual JSON file. Use the embedded docs as a reference source but always rewrite content — never copy-paste.
Node data is split into per-node JSON files organized by section and category:
src/data/nodes/
_metadata.json — metadata + schema_version
comfy_nodes/<category>/<NodeName>.json — core ComfyUI nodes (476)
partner_nodes/<category>/<NodeName>.json — API/partner nodes (177)
subgraph_blueprints/<category>/<Name>.json — subgraph blueprints (36)
extensions/<category>/<NodeName>.json — extension nodes (1)
The top-level directories (comfy_nodes, partner_nodes, subgraph_blueprints,
extensions) match the tree pane sections. Below that, the category path matches
the node's category field with spaces replaced by hyphens.
src/data/nodes/<section>/<category>/<NodeName>.jsonsrc/data/nodes/_metadata.jsonexports/comfyui_nodes_2026-03-14_0-17-0.json (structural source of truth)embedded-docs/comfyui_embedded_docs/docs/<NodeName>/en.md (reference only)exports/NODE_UPDATE_PLAN.md (progress tracking)To locate a node's JSON file:
find src/data/nodes -name 'KSampler.json'
# → src/data/nodes/comfy_nodes/sampling/KSampler.json
To search across all nodes:
rg '"documentation_complete": false' src/data/nodes/ -l
For each node, write these fields:
| Field | What to write | Length |
|---|---|---|
| description | Technical but clear explanation of what the node does | 50–200 chars |
| beginner_description | Plain-language explanation for someone new to ComfyUI | 100–400 chars |
| tips.general_tips | Practical advice any user should know | 2–5 tips |
| tips.beginner_tips | "Start here" guidance with specific values and settings | 2–4 tips |
| tips.advanced_tips | Power-user techniques, edge cases, combo strategies | 1–4 tips (skip for simple nodes) |
| use_cases | Concrete scenarios with context | 2–4 use cases |
| common_errors | Real problems users hit, with actionable fixes | 1–4 errors |
| complexity_level | "beginner", "intermediate", or "advanced" | — |
| documentation_complete | Set true when all content fields are filled | — |
One or two sentences. Technical but accessible. State what the node does and its role in a workflow.
Good: "Loads a Stable Diffusion checkpoint file containing the model weights, text encoder, and VAE needed for image generation."
Bad: "Checkpoint loader node." (too short, says nothing)
Bad: Copy-pasting the export's description field verbatim.
Explain the node as if the reader has used ComfyUI for a week. Avoid jargon or explain it inline. Say what it does in practical terms.
Good: "This node loads the AI model that generates your images. Think of it as picking which artist you want to work with — different checkpoints produce different styles, from photorealistic to anime to oil paintings."
Bad: "Loads checkpoint files for diffusion model inference." (jargon)
Bad: Repeating description with slightly different words.
Each tip must be specific and actionable. Include concrete values, settings, node names, or workflows.
Good tip: "Start with euler sampler, 25 steps, CFG 7.5 — this works reliably for most models and gives good results in about 10 seconds."
Bad tip: "Experiment with different settings to find what works best." (vague, unhelpful)
Good tip: "For Flux models, set CFG to 1.0 and use the FluxGuidance node instead — Flux uses guidance differently than SD 1.5 or SDXL."
Bad tip: "Different models may require different settings." (obvious)
Use an array of objects with scenario and context:
[
{
"scenario": "Text-to-image generation",
"context": "The most common workflow — connect Empty Latent Image as input with denoise 1.0 to generate from scratch"
}
]
Use an array of objects with symptom and solution:
[
{
"symptom": "Black or completely blank images",
"solution": "CFG scale too high (>15). Lower to 7–9 range. Also check that model, VAE, and conditioning are all connected."
}
]
The embedded docs at embedded-docs/comfyui_embedded_docs/docs/<NodeName>/en.md
are a reference source, not a template.
What to extract from embedded docs:
What NOT to do:
beginner_descriptionWhen asked to document a set of nodes (e.g. "document the new audio nodes"):
find src/data/nodes -name '*.json' -path '*audio*'embedded-docs/comfyui_embedded_docs/docs/<NodeName>/en.md
c. Read the export entry for structural context: check exports/comfyui_nodes_*.json
d. Write all content fields
e. Set documentation_complete: trueexports/NODE_UPDATE_PLAN.md if relevantWhen asked to improve node docs:
documentation_complete: falsebeginner_descriptionuse_cases or common_errorsdescription under 50 charsTo find nodes needing work:
# Incomplete nodes
rg '"documentation_complete": false' src/data/nodes/ -l | wc -l
# Nodes where beginner_description copies description
python3 -c "
import json, os
for root, dirs, files in os.walk('src/data/nodes'):
for f in files:
if not f.endswith('.json') or f == '_metadata.json': continue
path = os.path.join(root, f)
try:
with open(path) as fh: d = json.load(fh)
except json.JSONDecodeError:
print(f'BAD_JSON: {path}')
continue
except UnicodeDecodeError:
continue
desc = d.get('description','')
bdesc = d.get('beginner_description','')
if desc and desc == bdesc:
print(f'LAZY: {d.get(\"name\",f)} ({path})')
"
# Nodes missing tips
python3 -c "
import json, os
for root, dirs, files in os.walk('src/data/nodes'):
for f in files:
if not f.endswith('.json') or f == '_metadata.json': continue
path = os.path.join(root, f)
try:
with open(os.path.join(root, f)) as fh: d = json.load(fh)
except json.JSONDecodeError:
print(f'BAD_JSON: {path}')
continue
except UnicodeDecodeError:
continue
if not d.get('tips',{}).get('general_tips'):
print(d.get('name', f))
"
api node/...) — found in partner_nodes/dataset/...)sampling/...)latent/...)audio/...)For large batches (50+ nodes), use parallel subagents grouped by category. Each subagent gets a category batch and writes docs for all nodes in that group. This keeps context focused and produces more consistent output within a category.
Coordination: The subagents should write their results to per-node JSON files
(different files per node, so no write conflicts) rather than editing a single shared
plan file. A single coordinator agent can update exports/NODE_UPDATE_PLAN.md
after all workers complete.
tools
# pi-a2a Long-Running Tasks Skill ## Overview The pi-a2a extension supports **long-running tasks** that can execute for hours or days without timeouts. This is essential for: - Data processing pipelines - Batch operations - Research and aggregation tasks - External API jobs with unpredictable duration - Any A2A task that exceeds the standard timeout ## When to Use **Use long-running tasks when:** - Task execution time is unpredictable or known to exceed 10 minutes - The remote agent is proc
development
Orchestrate cmux terminal panes — split terminals, run parallel processes, read output from other panes, and use the built-in browser. Use when working inside cmux and you need to run a dev server, watch tests, spawn sub-agents, or preview web pages.
testing
Review UI designs and implementations for accessibility, consistency, usability, and visual quality. Use when asked to review a design, audit accessibility, check UI consistency, compare implementation against mockups, or evaluate a user interface.
tools
Create, review, and improve skills for Pi agents. A skill is a folder with a SKILL.md that teaches an agent specialized workflows, domain knowledge, or tool integrations. Use when asked to create a new skill, improve an existing skill, review a skill for quality, scaffold a skill from a workflow, or convert documentation into a skill. Also triggers on "make a skill for", "build a skill", "skill for [topic]", "teach the agent to", or "package this workflow as a skill".