Nodes/ComfyTV/Director
ComfyUI Node

Director

Generate a whole shot-by-shot video from one node

By jtydhr88·Created 3 months ago·Updated about 15 hours ago· 725
Director
    • video
    force_run_token0
    project_id
    parent_output_id0
    workflowLocal LTX 2.3 T2V
    resolution720P
    aspect_ratio16:9
    generate_audiotrue
    main_prompt
    timeline_data
    custom_params{}

    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_prompt and 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.
    CategoryComfyTV/Generate

    Inputs (10)

    NameTypeDefaultDescription
    force_run_tokenINT00–2147483647Internal — bumped on Run to invalidate ComfyUI's input cache.
    project_idSTRINGInternal — populated by the projectStore on the frontend.
    parent_output_idINT00–2147483647Internal — lineage parent set by spawn handlers on the frontend.
    workflowCOMBOLocal LTX 2.3 T2VDefault video workflow for clips. Each clip may override it in the timeline.
    resolutionCOMBO720POutput resolution tier shared by every clip.
    aspect_ratioCOMBO16:9Output aspect ratio shared by every clip.
    generate_audioBOOLEANtrueWhether clip workflows should generate audio.
    main_promptSTRINGGlobal prompt — prefixed to every clip's own prompt.
    timeline_dataSTRINGSerialized director timeline JSON — driven by the Vue panel.
    custom_paramsSTRING{}Internal — JSON of user-defined parameter attachments/values for this node.

    Outputs (1)

    NameTypeDescription
    videoCOMFYTV_VIDEO