Starter template for ComfyUI custom nodes with a TypeScript frontend and optional Python node code. Example use: ComfyUI Node Organizer
Use it for:
- frontend-only extensions
- Python-backed custom nodes
- nodepacks that ship both
- Create a repo from this template.
- Clone it locally.
- Link or symlink it into ComfyUI's
custom_nodes/directory. - Replace the template placeholders before you publish anything.
PowerShell example:
New-Item -ItemType SymbolicLink `
-Path C:\path\to\ComfyUI\custom_nodes\comfyui-my-node `
-Target C:\path\to\your\repomacOS / Linux example:
ln -s /path/to/your/repo /path/to/ComfyUI/custom_nodes/comfyui-my-nodeInstall dependencies:
pnpm install
uv sync --locked --group devFrontend commands:
pnpm dev
pnpm typecheck
pnpm test
pnpm buildPython tests:
uv run pytest tests/python -qReload the ComfyUI browser tab after frontend changes. Restart the ComfyUI server after Python changes.
If your nodepack includes Python code, start with these files:
tests/python/test_entrypoint_smoke.pychecks that__init__.pyimports cleanly and exposes the expected entrypoint symbols.tests/python/fixtures/example_node.pyandtests/python/test_example_node_pattern.pyshow a small unit-test pattern for backend node logic.
If you are shipping a frontend-only extension, keep the smoke test anyway. It still catches broken entrypoint changes in CI.
GitHub CI runs:
uv sync --locked --group devuv run pytest tests/python -qpnpm typecheckpnpm testpnpm build
The publish workflow runs the same checks, bumps the version, regenerates uv.lock, tags the release, and then publishes to the ComfyUI registry.
- Make sure the metadata and branding are no longer template defaults.
- Confirm
pnpm test,pnpm build, anduv run pytest tests/python -qpass locally. - Add the
REGISTRY_ACCESS_TOKENrepository secret. - Run the
Publish to Comfy registryworkflow in GitHub Actions. - Choose the version bump type.
| Search for | Replace with |
|---|---|
comfyui-custom-node |
Your package slug |
My Custom Node |
Your display name |
A ComfyUI custom node |
Your description |
Your Name |
Your name or org |
your-username |
Your GitHub or registry username |
Update these files before release:
package.jsonpyproject.tomlsrc/constants.tssrc/index.tsLICENSEassets/icon.svg
- Replace the default icon in
assets/icon.svg - Replace the placeholder homepage URL in
src/index.ts - Replace the placeholder settings prefix in
src/constants.ts - Replace package metadata in
package.jsonandpyproject.toml - Replace
Your NameinLICENSE - Re-read the rendered README once with your real project name
MIT