๐ Livepeer Agent Render
Cloud video from inside ComfyUI, no key, no local GPU
- image
- source_video
- end_image
- video
- url
- report
- image
The odd one out
Everything else in QwenVL-Mod runs locally - a VLM on your card, writing prompts for a diffusion model on your card. This node doesn't. It sends a prompt to the Livepeer Agent network, waits for someone else's GPU to render it, and drops the result into your output/ folder.
The name sounds like it should need an API key and a billing account. It doesn't, by default: the node talks to Livepeer's raw MCP endpoint as plain JSON-RPC over HTTPS, and an empty api_key runs on the hackathon demo balance. There's an optional api_key for a Daydream sk_... key when you want your own quota. So no key to start - but don't mistake that for free. duration is billed per second on someone's meter, and the demo balance is a demo balance.
It's also brand new. This landed in v2.8.0 on 2026/09/21, and there's basically no community signal on it yet - you're early. Treat the output quality as whatever those hosted models do, not as a reflection of your workflow.
What you get
The capability dropdown is the whole product: 46 models, split between video (minimax-h3, kling-o3, kling-v3-turbo, seedance, ltx, veo, pixverse, flux-3, cosmos-3, grok-imagine-video, animatediff) and text-to-image (flux-schnell/dev/pro/flex, qwen-image-3-t2i, gemini-image, gpt-image, grok-image-2, mai-image-2.5, cosmos-3-image). auto resolves to minimax-h3-i2v when you've connected an image and minimax-h3-t2v when you haven't.
custom_capability overrides the dropdown with any exact name the network reports, so when a model gets added you don't have to wait for a pack update.
Then the render settings: duration (3โ15s, billed per second), resolution (MiniMax H3 offers 768P and 2K), aspect_ratio, seed (-1 for a fresh take; fix it and you can re-render the same take for A/B comparison), filename_prefix (default Livepeer/), and timeout_s at 480.
Inputs and outputs
Optional media inputs: image is your reference or first frame and turns a t2v model into an i2v one; source_video takes a VIDEO object and beats image when both are connected, with source_frame choosing which frame becomes the reference (0 for first, -1 for last); end_image is a last keyframe for models that support transitions. extra_params is a JSON string merged straight into the capability's inputs - {"guidance_scale": 7} - which is how you reach anything the node doesn't expose.
Four outputs: video, url, report and image. The report is a JSON string with the job id, resolved capability, elapsed seconds, byte count and cost - log it, because that's how you find out what a take actually billed. video is only populated for video capabilities; image is only populated for stills. Both outputs always exist, so you can wire image into your next render's reference even on a graph that mostly makes clips.
How it works under the hood
The sequence is worth knowing, because the failure messages map onto it. Your reference frame is JPEG-encoded and downscaled under 2.5 MB, then uploaded to Livepeer storage - if that fails it falls back to an inline base64 data URL. Then the node calls describe_capability to ask what the model outputs and drops video-only parameters for image capabilities, so duration never gets sent to a Flux still. The job is submitted async, polled every 6 seconds, then downloaded and saved under your filename_prefix. No extra Python dependencies - it's all urllib.
It's an output node, so no Save node required; the result previews in the node itself.
Install
Ships with the pack and needs nothing extra:
cd ComfyUI/custom_nodes
git clone https://github.com/huchukato/ComfyUI-QwenVL-Mod
cd ComfyUI-QwenVL-Mod && pip install -r requirements.txt
Or Manager โ QwenVL-Mod: Enhanced Vision-Language. Restart. The author's demo workflow lives in the separate ComfyUI-Garage repo under workflows/livepeer/Livepeer-Agent-Demo.json - it's just Load Media โ Livepeer Render, so it's a five-minute build by hand too.
Where it breaks
Timeouts. The default 480 s exists because MiniMax H3's p95 is around 300 s and the server aborts near 450 s. Raising timeout_s to 1800 doesn't buy you a 20-minute render; it buys an error message a few minutes later. If you're timing out, go down a duration or up a tier, don't raise the ceiling.
Empty prompt. The node refuses to send a blank prompt outright. That's not a bug - the prompt is the product, and the pack's Qwen Chat sidebar can write a shot-native one (camera movement, framing, subject action, lighting, pacing) straight into the field for you.
A parameter seems ignored. If resolution or aspect_ratio does nothing, that capability probably doesn't accept it - the node passes those through rather than translating them.
It's remote, and remote models are filtered. Don't expect the uncensored behaviour you get from this pack's local abliterated presets to carry over to a hosted model behind a company's API. The local path exists precisely so that isn't a compromise you have to make; this node is for when you want a result your own card can't render. And since this is the one node here that talks to a third party, know that it does: your prompt, and your reference frame, leave the machine for agent.livepeer.org. Nothing sinister - that's the deal you're making - but it's not a local render, so don't send it anything you wouldn't upload.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Shot-native English video prompt: camera movement, framing, subject action, lighting, pacing. The chat writes this automatically. | |
| capability | COMBO | auto | Model on the Livepeer network. Video models return a clip; image models (flux-*, *-t2i, *-image) return a still on the image output. 'auto' picks minimax-h3-i2v with an image input, minimax-h3-t2v without. |
| custom_capability | STRING | Optional exact capability name overriding the dropdown (from list_capabilities). | |
| duration | INT | 53โ15 | Video duration in seconds. Billed per second. |
| resolution | COMBO | default | Resolution tier when the model supports it (MiniMax H3: 768P/2K). |
| aspect_ratio | COMBO | auto | Passed through when the capability accepts it. |
| seed | INT | -1-1โ2147483647 | -1 = random take. A fixed seed re-renders the same take for A/B iterations. |
| timeout_s | INT | 48060โ1800 | Max seconds to wait for the render. MiniMax H3 p95 is ~300s; the server aborts at ~450s. |
| filename_prefix | STRING | Livepeer/ | Output filename prefix in the ComfyUI output folder. |
| imageopt | IMAGE | Reference/first frame. Enables i2v (animate). Uploaded to Livepeer storage first. | |
| source_videoopt | VIDEO | Video clip whose frame becomes the i2v reference (see source_frame). Takes precedence over image. | |
| end_imageopt | IMAGE | Optional last keyframe for transition-capable models. | |
| api_keyopt | STRING | Optional Daydream sk_... key. Empty uses the hackathon demo balance. | |
| extra_paramsopt | STRING | Optional JSON object merged into the capability inputs (e.g. {"guidance_scale": 7}). | |
| source_frameopt | INT | 0-1โ10000 | Which frame of source_video to use as the reference: 0 = first, -1 = last. Only used when source_video is connected. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | โ |
| url | STRING | โ |
| report | STRING | โ |
| image | IMAGE | โ |