SFWaveSpeedRunwayUpscale
Video upscaling with no GPU, no ffmpeg, no patience
- client
- upscaled_video_url
This is the thinnest node in the whole SF WaveSpeed family, and honestly that's its selling point. You feed it a video URL, it upscales on RunwayML's servers via the WaveSpeed API, and it hands you back a URL to the result. No model to download, no VRAM to fight over, no frame-by-frame stability tricks to babysit.
Video upscaling is a different beast from image upscaling. Every frame has to agree with its neighbors, or you get that shimmering, breathing mess that ruins an otherwise fine clip - the KB's upscaling essay calls it "more pixels over time," the category with the least settled local answer. Running it as an API call sidesteps the whole problem: RunwayML's upscale model handles temporal consistency server-side. If you mostly do local generation but have one clip that needs to be presentable, this is the node you reach for instead of renting a GPU box or installing a video-restoration stack you'll use once.
How it works
The node POSTs your video to /api/v3/runwayml/upscale-v1 and returns the first result from the API's output list. That's the entire mechanism. It comes from Stillfront/comfyui-sf-nodes ("SF ComfyUI Nodes") alongside the other WaveSpeed nodes, so the same rules apply: it needs an SF WaveSpeed Client node with a valid API key, and it bills against your WaveSpeed credits.
The inputs
There are effectively two knobs on this node:
- client - required, the shared SF WaveSpeed Client connection.
- video_url - the input video as a URL (the tooltip says connect from ComfyUI's Upload Video node). This is required too.
- enable_sync_mode - whether the node waits for the upscale to finish before returning. Leave it on for a normal workflow; flip it off and the node still blocks while polling, it just submits the job first.
Output is a single upscaled_video_url (STRING). Note what that means: you get a hosted URL, not a file in your output folder. Wire it into a download node or paste it in a browser. There's no resolution knob, no strength slider, no before/after - the node is deliberately opinionated, which is either refreshing or frustrating depending on how you like your workflows.
Install
Standard for the pack - ComfyUI Manager, search "SF ComfyUI Nodes", install, restart. Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/Stillfront/comfyui-sf-nodes.git
cd comfyui-sf-nodes
pip install -r requirements.txt
Then add an SF WaveSpeed Client node and drop your WaveSpeed key into it (or set it in config.ini under [API] api_key, or the WAVESPEED_API_KEY env var). No model downloads, no heavy dependencies - the pack's requirements are requests, pillow, numpy, torch, pydantic and the Google SDKs.
Troubleshooting
- "No output received" - usually means the input video URL isn't reachable from WaveSpeed's servers. Localhost or private-network URLs get rejected; host the file somewhere public first.
- Unauthorized (401) - the client key is wrong or missing. Check the Client node widget before suspecting the node.
- It's slow - upscaling is a long job; async mode polls for up to 600 seconds. Sync mode is fine for most cases, just don't expect it to be instant.
One honest caveat: there's no preview of what the upscaler will do to your source, and per-minute cloud upscaling is real money. Send your best source, not a draft. If you're on an RTX card and just need a quick 2x on a decent clip, the free local NVIDIA VSR nodes might be all you ever needed - this node is for when those don't cut it.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| client | WAVESPEED_AI_API_CLIENT | — | |
| video_url | STRING | URL of input video for upscaling (connect from Upload Video node) | |
| enable_sync_mode | BOOLEAN | true | Wait for upscaling to complete before returning |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| upscaled_video_url | STRING | — |