MediaHub Submit Video
The node that kicks off a cloud video job (then hands off to Resolve)
- request
- job
- raw_json
Video generation is not like image generation, and MediaHubSubmitVideo exists because of that difference. Images come back from a single synchronous API call in seconds. Video - Seedance, Hailuo, Wan, HappyHorse - takes minutes, so every provider does it as an async job: you submit a request, get a task ID back, and poll until the video is ready. This node is the "submit" half of that dance.
It takes your API key and a request of type MEDIAHUB_VIDEO_REQUEST (the output of any provider video config node - Seed Volcengine T2V Config, MiniMax CN I2V Config, Agnes Video 2.0 T2V Config, and so on). It returns a job object and raw_json. Crucially, it does not give you a video. That's the trap beginners hit: they run the workflow, see a job come out, and wonder where the clip went.
What the job actually is
The job is a MEDIAHUB_JOB - essentially the provider name, the operation, and the provider's task_id from the submission response, plus a bit of metadata. It's not a file and not a URL. Think of it as a receipt you hand to MediaHub Resolve Video, which is the node that actually waits for the render, downloads the MP4, and turns it into a VIDEO you can feed to ComfyUI's SaveVideo.
Like the image node, MediaHubSubmitVideo sets IS_CHANGED to NaN, so it always executes - every queue run is a real submission, which means every run is a real bill. There's no caching safety net.
Inputs and outputs that matter
- api_key - your provider key, from
MediaHub API Key. - request - a
MEDIAHUB_VIDEO_REQUESTfrom any video config node. Don't try to build one by hand; the config nodes exist to validate parameters against what each provider actually accepts. - job - wire this into
MediaHub Resolve Video. That's its only real destination. - raw_json - the full submission response, useful for checking the returned task ID and provider-specific fields.
The node's category is MediaHub/Video, and the pack's example workflows chain config → submit → resolve → SaveVideo. Follow that shape and the plumbing takes care of itself.
Installing it
It's a MediaHub pack node, so the install is the pack install:
cd ComfyUI/custom_nodes
git clone https://github.com/vantang/ComfyUI-MediaHub.git
/path/to/ComfyUI/python -m pip install -r ComfyUI-MediaHub/requirements.txt
Restart ComfyUI and it appears under MediaHub/Video. Dependencies are just requests, Pillow, and numpy - nothing to download, no models to place, because the render happens on the provider's machines.
Common gotchas
The big one is expecting a video out of this node. If you want the finished clip, you need the Resolve node after it - without it, the job just sits there and the workflow ends. A job that comes back with an error instead of a task ID usually means the config node validated something the provider disagreed with (resolution, duration, model access), and the raw_json output will tell you exactly what. Also remember each provider's key only works for that provider: a Bailian key can't submit a Seedance job, no matter how similar the request looks.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | STRING | — | |
| request | MEDIAHUB_VIDEO_REQUEST | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| job | MEDIAHUB_JOB | — |
| raw_json | STRING | — |