ComfyUI Node

Text to Video

Text to Video Is a RunPod Client

By turnbros·Created 11 months ago·Updated 10 months ago· 0
Text to Video
    • frames
    • metadata
    instance_nameNo instances configured
    positive_prompta beautiful landscape with mountains and trees
    negative_promptBright tones, overexposed, static, blurred details, subtitles, style, works, paintings, images, static, overall gray, worst quality, low quality, JPEG compression residue, ugly, incomplete, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured, misshapen limbs, fused fingers, still picture, messy background, three legs, many people in the background, walking backwards
    width512
    height512
    length81
    fps24
    steps50
    cfg5.0
    seed-1
    batch_size1

    What the name doesn't tell you

    "Text to Video" is a lie in the way that matters most: this node doesn't generate anything on your machine. It's a thin client for a remote RunPod-serverless text-to-video workflow. No model download, no VRAM used, no sampler running locally. You type a prompt, it gets shipped as JSON to a RunPod endpoint you configured yourself, and minutes later a stack of frames comes back. If you don't have - and pay for - a RunPod instance running the author's companion workflow, this node is dead on arrival. That's why its very first input is instance_name, and its default value is the pack's little joke: "No instances configured".

    Who this is for

    Two audiences. First: people who already run a ComfyBros-style RunPod serverless endpoint and want the ComfyUI graph as the control surface - prompt, size, seed, batch - while their local box stays free for other work. Second: people with no local GPU at all who still want the ComfyUI graph to drive cloud generation. If you have a decent card, be honest with yourself: running a video model locally (the community default is Wan 2.2 through Kijai's WanVideoWrapper) is cheaper and faster per clip once you're past a few generations. This is the "rent someone else's cluster" option.

    How it works

    The node bundles everything into one payload: workflow_name: "standalone_text_to_video", the prompts, width/height, length, fps, steps, cfg, seed, batch_size, and a model_path pointing at the server's shared model directory. It POSTs to {endpoint}/run, then polls {endpoint}/status/{job_id} every four seconds until the job is done - with a hard 900-second (15 minute) timeout, queue time included. The frames don't come straight back, either: the server parks a ZIP of PNGs in a Cloudflare R2 bucket, and the node downloads it with boto3, extracts the frames, sorts them, and reassembles them into an IMAGE batch in order. Everything round-trips through base64, which is a big part of why nothing about this feels instant.

    The inputs and outputs that matter

    • instance_name - the enum that decides which configured endpoint gets the job. This is the one you must fix first.
    • positive_prompt / negative_prompt - multiline. The negative ships with a long, sensible default (static, blur, extra fingers, the usual), so you can leave it alone.
    • width / height - 64–2048, step 64; the 512² default is a sane starting point.
    • length - 81 frames by default (about 3.4 seconds at 24fps); fps 24, steps 50, cfg 5, seed −1 for random, batch_size.
    • Outputs: frames (IMAGE) - the whole clip as one tensor batch, wire it into any video preview or save node; metadata (STRING) - JSON with frame_count, execution and delay time, status, and R2 info.

    Setting it up

    There's no in-graph configuration. Edit ComfyUI/user/default/comfy.settings.json:

    {
      "serverlessConfig": {
        "instances": [
          { "name": "my-endpoint", "endpoint": "https://api.runpod.ai/v2/<endpoint_id>", "auth_token": "<runpod_api_key>" }
        ],
        "offloadBucket": {
          "cloudflare_account_id": "...",
          "name": "my-bucket",
          "secret_key_id": "...",
          "secret_key": "..."
        }
      }
    }
    

    The R2 bucket keys aren't optional - the frames are fetched from R2, not from the endpoint. Miss the bucket config and the job will "succeed" on RunPod but this node will error out trying to collect the result.

    Installing

    ComfyUI Manager, search "ComfyBros" - or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/turnbros/ComfyBros
    

    Restart, then the real dependency step. The README says pip install -r requirements.txt, but no requirements.txt exists in the repo. The code imports boto3 at the top of the module, and boto3 isn't in the declared dependency list either - so without pip install boto3 into ComfyUI's Python environment, this node fails to load at all.

    The failure modes you'll actually hit

    • "No instances configured" in the dropdown - you haven't added a serverlessConfig.instances entry yet.
    • Long queues and cold starts - serverless means the instance may wake from zero, and you pay for that.
    • The 15-minute cap kills big jobs when the queue is busy.
    • An import error mentioning boto3/botocore - the missing-dependency case above.
    • This pack has essentially zero community footprint. When it breaks, the error message you're reading is likely the only documentation anyone has written about it.
    CategoryComfyBros/Video Generation

    Inputs (11)

    NameTypeDefaultDescription
    instance_nameCOMBONo instances configured1 options: No instances configured
    positive_promptSTRINGa beautiful landscape with mountains and trees
    negative_promptSTRINGBright tones, overexposed, static, blurred details, subtitles, style, works, paintings, images, static, overall gray, worst quality, low quality, JPEG compression residue, ugly, incomplete, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured, misshapen limbs, fused fingers, still picture, messy background, three legs, many people in the background, walking backwards
    widthINT51264–2048
    heightINT51264–2048
    lengthINT811–300
    fpsINT241–60
    stepsINT501–150
    cfgFLOAT5.00.1–30
    seedINT-1-1–2147483647
    batch_sizeINT11–32

    Outputs (2)

    NameTypeDescription
    framesIMAGE
    metadataSTRING