Director
Generate a whole shot-by-shot video from one node
- video
Most ComfyTV nodes do one thing to pixels you already have. Director does the opposite - it's the node where you make a video. It's the "Director console" from the README: a shot-by-shot clip timeline where every clip is generated, with per-clip transitions, a shared reference cast for cross-shot consistency, and a master timeline with a ruler and unified film preview.
If you've ever hand-chained "generate clip 1, then clip 2, then concatenate, then add transitions," this is that whole assembly line as one stage. You type what the scene should be, break it into shots, and Director renders every clip and stitches them. It's the closest thing in the pack to "make me a short film," and it is the heaviest node in this batch to run, because every clip is a real text-to-video generation.
How it works
Director drives a video workflow per clip. The default is Local LTX 2.3 T2V, and the in-node Vue panel serializes the whole timeline into the timeline_data field - a JSON blob the node executes. That's why the schema looks so sparse for a node this ambitious: the real interface lives in the node's editor panel, not in the widget list.
The output is a single COMFYTV_VIDEO - the assembled master timeline render, ready to wire into FX stages, an FX Chain, or export.
The inputs that matter
- main_prompt - the global prompt, prefixed to every clip's own prompt. Put the scene's through-line here (location, tone, style, the shared cast) and let each clip add its specific action.
- timeline_data - serialized director timeline JSON, "driven by the Vue panel." You don't hand-edit this; you build the timeline inside the node.
- workflow - which video workflow clips run. Each clip can override it in the timeline.
- resolution (720P by default) and aspect_ratio (16:9) - shared output tiers every clip renders to, so your shots actually match when stitched.
- generate_audio - whether clip workflows produce audio alongside video.
Every ComfyTV stage also carries hidden internal inputs (force_run_token, project_id, parent_output_id) that the frontend populates - that's how per-node Run works. Leave them alone.
Installing it and getting models
ComfyTV installs as one pack - ComfyUI Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/jtydhr88/ComfyTV
Full backend restart, and it shows up under ComfyTV → Generate.
But install the pack is the easy part. Director runs Local LTX 2.3 T2V, and that workflow needs real models: ltx-2.3-22b-dev-fp8.safetensors plus a spatial upscaler, two LoRAs, and the Gemma-3-12B text encoder, scattered across checkpoints/, latent_upscale_models/, loras/, and text_encoders/ under your ComfyUI/models/ tree. The README's models page links the downloads (Lightricks and Comfy-Org HF repos). Budget for roughly 22B of diffusion model plus a 12B text encoder - this is a serious-VRAM workflow, not a toy.
The one install gotcha: on ComfyUI Desktop, macOS, or multiple ComfyUI installs, clone into the running instance by absolute path and confirm custom_nodes/ComfyTV/__init__.py exists, then fully restart. The pack declares zero pip dependencies, though video stages lazily import PyAV - pip install av if a video node errors.
Common issues
- "Missing model" at run time - a clip's workflow references a file ComfyUI can't find. Check the
ComfyUI/models/<folder>paths above against the models doc. - Clips don't match - that's what the global
main_promptand the shared reference cast are for. If you're not using a cast, character consistency across shots is on you. - It's slow / OOM - expected. Only changed clips re-render (content-addressed caching), so iterate on one shot, not the whole timeline.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| force_run_token | INT | 00–2147483647 | Internal — bumped on Run to invalidate ComfyUI's input cache. |
| project_id | STRING | Internal — populated by the projectStore on the frontend. | |
| parent_output_id | INT | 00–2147483647 | Internal — lineage parent set by spawn handlers on the frontend. |
| workflow | COMBO | Local LTX 2.3 T2V | Default video workflow for clips. Each clip may override it in the timeline. |
| resolution | COMBO | 720P | Output resolution tier shared by every clip. |
| aspect_ratio | COMBO | 16:9 | Output aspect ratio shared by every clip. |
| generate_audio | BOOLEAN | true | Whether clip workflows should generate audio. |
| main_prompt | STRING | Global prompt — prefixed to every clip's own prompt. | |
| timeline_data | STRING | Serialized director timeline JSON — driven by the Vue panel. | |
| custom_params | STRING | {} | Internal — JSON of user-defined parameter attachments/values for this node. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | COMFYTV_VIDEO | — |