custom_nodes/ComfyTV/workflows/<kind>/. Drop your file in, restart ComfyUI, done. No Python edits.
text, image, shot-images, video, audio, storyboard, panorama, timeline, upscale, outpaint, inpaint, erase, image-edit, multiangle, relight, cutout, multiview, sequence, audio-vocal, audio-bg.
The folder decides the kind. Each shipped kind has a README.md next to its JSONs documenting the run-time inputs and the nodes a workflow typically needs. Read the relevant per-kind README first:
workflows/audio/README.mdworkflows/image/README.mdworkflows/image-edit/README.mdworkflows/inpaint/README.mdworkflows/outpaint/README.mdworkflows/upscale/README.mdworkflows/cutout/README.mdworkflows/erase/README.mdworkflows/relight/README.mdworkflows/multiangle/README.mdworkflows/multiview/README.mdworkflows/sequence/README.mdworkflows/panorama/README.mdworkflows/text/README.mdworkflows/video/README.mdworkflows/shot-images/README.mdworkflows/storyboard/README.md
How to add a custom workflow
- Workflow → Save in ComfyUI (the default GUI format, not “Save (API Format)”).
- Save as
workflows/<kind>/<name>.json. - Restart ComfyUI. Your new workflow appears in the dropdown.
my-workflow → “My Workflow”), register the workflow under the folder’s kind, and auto-detect a SaveImage / SaveVideo / PreviewImage node as the result endpoint.
Wiring stage inputs
Once the workflow is in, you usually need to tell ComfyTV which node receives the stage’s prompt, whichLoadImage takes the upstream image, where the seed comes from, etc.
Use the sidebar: click a stage on the canvas, fill in each widget in the ComfyTV sidebar on the left. Changes apply immediately, no restart. See sidebar-config-editor.md for the editor UI.
To share with someone else: the sidebar has an ⇩ Export preset.json button at the bottom. It packages the current bindings as <name>_preset.json. Ship that alongside the workflow JSON; on the recipient’s first load the bindings apply automatically.
You usually don’t write_preset.jsonby hand — configure in the sidebar, export to share. If you want the raw JSON shape, look at the shipped examples:workflows/inpaint/flux-fill-inpaint_preset.json,workflows/video/local-ltx-2.3-t2v_preset.json.
Updating after re-export
When you re-export the workflow from ComfyUI (bumped a model version, added a step), just overwriteworkflows/<kind>/<name>.json. ComfyTV detects the file modification time has changed; the next time a stage uses this workflow it re-reads the file.
Bindings keep working as long as the node IDs they reference still exist. If you renamed or removed a node, the runner errors:
inputs references missing workflow node "X" — did the API workflow get re-exported with different node ids?
Open the sidebar and update the binding to point at the new ID.