EmpirioLabs AI Generate Video
Ten minutes of queue time, and it won't take a local image
- video
- url
Video is the one modality where renting makes obvious sense even to people who own the GPU. A local video stack is a checkpoint in the tens of gigabytes, a text encoder, a VAE, a sampler config and an hour of your evening before the first clip. This node replaces all of it with a dropdown and a prompt - and then makes you wait, because the model is running somewhere else and you're at the end of somebody's queue.
What it actually does
Two jobs in one node. Text-to-video: give it a prompt, get a clip. Image-to-video: give it a prompt and a start frame, get that frame moving. Which one you get depends entirely on whether image_url has something in it.
The default model, hunyuan-video-1-5, is worth a note. Hunyuan Video won 2024 and lost 2025: the 1.5 update cut it to 8.3B and a ~14GB floor, but by mid-2026 the local crowd had settled on Wan for quality and LTX for speed, with Hunyuan a distant third. As a hosted call most of that history stops mattering - you're not maintaining the stack or hunting the right workflow, you're renting the endpoint. Whether it beats the other hosted models for your prompt is an empirical question, and cheap enough to test.
How it works
It POSTs to /v1/videos/generations. That call usually comes back as a job rather than a finished file, so the node then polls every five seconds, updating the ComfyUI progress bar and a live elapsed-time readout while it waits. When the job lands, it downloads the first video, checks with PyAV that the file actually has a video track (so a broken response fails with a clear message instead of a mystery downstream), and wraps it as a ComfyUI VIDEO value. Your prompt, your start image link and your key go to one fixed host and nowhere else.
Cancelling the run in ComfyUI does stop the node and cancels the job it's waiting on. It may not stop the bill: a generation that already started can still be charged. That's in the README, and it's the one piece of fine print here you'd genuinely regret skipping.
The inputs that matter
model- combo built from the EmpirioLabs catalog, filtered to video models.hunyuan-video-1-5is the default and the internal fallback if the catalog can't load.prompt- required, and a blank one is an error rather than a request.image_url(optional) - a publichttp/httpslink to the start frame. This is the trap: it's a STRING, not an IMAGE slot, and anything that isn't a link is rejected. You cannot wire a locally generated tensor in here. What you can do is wire theurloutput of EmpirioLabs AI Generate Image straight in - that's the intended image-to-video path, and the pack ships an example workflow for it.duration- seconds, 0 to 120, where0means the model's own default. Supported lengths vary by model; ask for something a model doesn't do and the API says so.resolutionandaspect_ratio- combos filled from the catalog,defaultfor the model's own choice. Image-to-video usually follows the start frame's shape whatever you pick.seed- change it to force a new request; only sent on to models that accept one.extra_parameters- JSON for other request fields. It can't setmodelorprompt; the node owns those.
Outputs: video (VIDEO), which goes to a Save Video node - do that, because the other output, url, expires.
Install and the key
Manager → Custom Nodes Manager → search EmpirioLabs AI → install → restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/EmpirioLabs-AI/comfyui-empiriolabs.git
ComfyUI 0.3.48 or later, since the pack is built on the newer comfy_api node class. No extra Python packages - it leans on libraries ComfyUI already carries, PyAV included.
Key from platform.empiriolabs.ai: set EMPIRIOLABS_API_KEY and restart ComfyUI, or copy config.example.ini to config.ini in the pack folder and paste the key after api_key = (read every run, no restart). The folder is custom_nodes/comfyui-empiriolabs after a git clone, custom_nodes/empiriolabs after a Manager install.
Where people get burned
It blocks your queue for 1 to 15 minutes. ComfyUI runs one job at a time, so a video request stops everything behind it. Batch overnight, or accept that your image workflow is paused.
The start-image link expires. image_url is a link with a lifetime. A workflow that ran fine yesterday can fail today because the source image is gone - regenerate it, or animate in the same run.
One model in the dropdown. The catalog fetch failed at startup; the node keeps working on its fallback and retries in the background. Reload the browser page to refresh the list.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| model | COMBO | hunyuan-video-1-5 | Video model from the EmpirioLabs AI catalog. Prices and details: https://empiriolabs.ai/models |
| prompt | STRING | Description of the video to create. | |
| duration | INT | 00–120 | Video length in seconds. 0 uses the model's default. Supported lengths depend on the model. |
| resolution | COMBO | default | Output resolution. default uses the model's default. Supported values depend on the model. |
| aspect_ratio | COMBO | default | Output aspect ratio. default uses the model's default. Image-to-video usually follows the image. |
| seed | INT | 00–2147483647 | Change the seed to run the node again. Models that accept a seed also receive it. |
| image_urlopt | STRING | Optional public link to a start image for image-to-video. Connect the url output of EmpirioLabs AI Generate Image here. | |
| extra_parametersopt | STRING | Optional request fields as a JSON object, for example {"negative_prompt": "blurry"}. Each model lists the fields it accepts on its page at https://empiriolabs.ai/models. Fields set here take precedence over the dropdowns above. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| url | STRING | Link to the video file. It expires, so save the video to keep it. |