OpenRouter Studio · Video
Hailuo, Seedance, or Veo video — with a job ledger that survives a crash
- video
- poster
- local job id
- provider job id
- metadata JSON
- estimated cost USD
- actual cost USD
Video is where a ComfyUI crash hurts most: you're sitting on a job that's been running for minutes and costs real money. The Video node is the one that made that wait survivable. It submits to OpenRouter, writes the provider's job ID into a local SQLite ledger before it even starts polling, and if you kill ComfyUI mid-wait you can pick the job back up instead of paying for a duplicate. That interruption-safe design is the thing this pack does that most one-off API nodes don't.
What you're actually generating: whatever the OpenRouter video catalogue advertises this week - MiniMax Hailuo-3, ByteDance Seedance 2.0 and its fast variant, Veo, Kling, Wan. Like the Image node it's catalogue-driven: pick the model and the panel repopulates with the controls that model truly supports, from first/last frames and duration to native audio, aspect ratio, and provider passthrough fields like watermark or request key. The catalogue snapshot ships 20 video models; refresh it from any node's right-click menu when you want the live list.
How it works
Video generation on OpenRouter is an async task, so the node runs a submit → poll → download cycle. It POSTs the job, records the provider job ID immediately, then polls (default poll_interval_seconds of 5) up to poll_timeout_seconds (default 3600) with a progress bar, then downloads the finished clip and its poster frame. Two cost outputs separate the estimate from the bill: estimated cost USD is computed up front from current catalogue SKUs (a guess, not a quote - provider billing is authoritative) and actual cost USD comes back in the response.
strict_validation checks the model's declared input modalities, so you can't feed audio to a model that doesn't advertise audio support, and it blocks a mix of frame roles with general guidance references - providers may silently ignore one of those two modes. Keep your reference images all in Auto/general-guidance roles, or use only explicit First frame / Last frame roles. One gotcha worth knowing: prompts have per-model length ceilings (Hailuo-3 is 7,000 characters, Wan 2.7 is 5,000, most others 10,000), and the node rejects an over-length prompt before you spend anything.
Outputs
- video (
VIDEO) and poster (IMAGE) - a native ComfyUI video value plus a still you can show before it plays. - local job id and provider job id - the provider ID is the one you'll want if things go sideways.
- metadata JSON, estimated cost USD, actual cost USD.
Install
Same as the rest of the pack: ComfyUI 0.28.0+, Manager → search OpenRouter Studio → Install → restart → paste your OpenRouter key on the first-run screen. No model downloads; the dependencies are light (Pillow, resvg-py, typing-extensions).
The troubleshooting that matters
- Interrupted while polling? The remote job may still be running and billing. Do not queue a second generation. Use OpenRouter Studio · Resume Video with the local or provider job ID - that's what it exists for.
- poll_timeout_seconds only stops local polling. The tooltip is explicit: stopping it does not cancel the remote job, because OpenRouter publishes no remote video-cancel endpoint. There's no remote kill switch, so plan your long jobs around that.
- Ambiguous submission: if the POST fails before a definitive response, the ledger marks the job
submission_unknownand the node does not silently retry - check OpenRouter activity before resubmitting. - Privacy: OpenRouter's own docs say video generation isn't Zero Data Retention eligible. Apply your own policy before uploading people or client material.
Worth a frank word: the community reflex against API video is understandable - video burns credits far faster than images, and "extremely expensive" is the standard first reaction to a $30/month subscription buying very few clips. But that's the real price of closed-model renders; you're paying per minute instead of owning the weights. If you want Hailuo or Seedance quality without renting a GPU farm, metered calls are the door - and the ledger-plus-resume design here is the part that feels built for production rather than for a demo.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| model | COMBO | Every video model in the current OpenRouter video catalogue. | |
| strict_validation | BOOLEAN | true | Validate catalogue capabilities and provider allowlists before submission. |
| reference_max_megapixels | FLOAT | 121–80 | — |
| callback_url | STRING | Optional HTTPS OpenRouter completion webhook. | |
| poll_interval_seconds | FLOAT | 5.01–60 | — |
| poll_timeout_seconds | INT | 360060–86400 | Stopping local polling does not cancel the remote job. |
| studio_reference_manifest | STRING | Local-only Reference Inspector metadata. OpenRouter Studio manages this automatically; it is never sent to OpenRouter. | |
| rerun_nonce | INT | 00–2147483647 | Increment intentionally to submit a fresh job with otherwise identical inputs. |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| poster | IMAGE | — |
| local job id | STRING | — |
| provider job id | STRING | — |
| metadata JSON | STRING | — |
| estimated cost USD | FLOAT | — |
| actual cost USD | FLOAT | — |