NS WaveSpeed Sora 2 Text to Video
Sora 2 in your ComfyUI graph — for $0.40 per four-second clip
- client
- video_url
OpenAI's Sora is the poster child for "closed model you will never run locally" - no weights, no download, no VRAM requirement you can throw money at. NSWaveSpeedSora2TextToVideo from symbiotica-ai/comfyui-nodes is the workaround that makes sense inside ComfyUI: it calls Sora 2 through WaveSpeed's hosted API and hands you back a URL to the finished clip. If you want Sora-grade video in your workflow at all, this is the door - there isn't a local one.
How it works
Type a prompt, pick a size and a duration, hit run. The node POSTs to WaveSpeed (/api/v3/openai/sora-2/text-to-video), which runs Sora 2 on their hardware and returns a hosted mp4. With enable_sync_mode off (the default) the node submits and then polls the task endpoint every second until the video is done - video renders take a while, and the node blocks the graph meanwhile. It plays nice with Cancel: the polling loop checks ComfyUI's interrupt flag, so pressing Cancel actually stops the wait instead of burning to a timeout.
The prompt field is worth treating as a real instruction, not a caption. The tooltip asks you to describe the scene, style, camera movements, and audio cues - Sora 2 generates synchronized audio natively, so you can ask for the sound design in the same breath as the visuals.
The inputs that matter
prompt- scene, style, camera, and audio cues. This is where the quality lives.size-720*1280(portrait) or1280*720(landscape). No 1080p on the non-Pro node.duration- 4, 8, or 12 seconds, priced in the tooltip: 4s = $0.40, 8s = $0.80, 12s = $1.20. That's $0.10 a second, flat.client- theWAVESPEED_AI_API_CLIENTsocket from the NS WaveSpeed Client node.
The one output is video_url, a plain STRING - the hosted clip's address. The pack doesn't download it for you, so paste it in a browser to preview, or wire it into a download-from-URL node you already use.
Install and keys
# ComfyUI Manager: search "Symbiotica", or:
cd ComfyUI/custom_nodes
git clone https://github.com/symbiotica-ai/comfyui-nodes.git symbiotica
pip install -r symbiotica/requirements.txt
Restart ComfyUI. No model files - this node is a pure API wrapper (deps: requests, pillow). You do need a wavespeed.ai account with credit, and a key from it. Put that key in the NS WaveSpeed Client node's api_key field, or once in ComfyUI Settings → search "Symbiotica" → WAVESPEED_API_KEY, or as the WAVESPEED_API_KEY env var. Wire the client node's client output into this node's client input.
Common issues
"API_KEY is empty." Missing client node, or the key isn't on it. The key never lives on this node itself.
The cost math bites in a loop. A 12-second clip is $1.20, and a batch of five is $6 before you've looked at a frame. This is the standing objection to the whole API-node category - per-call metering adds up, and your prompt leaves your machine (external-api-nodes.md). WaveSpeed also requires a minimum top-up (community reports put it around $10), which is a weird first-dollar amount for a $0.40 experiment.
Wrong "WaveSpeed"? In ComfyUI land, "WaveSpeed" more often names the local first-block-cache speed-up for Flux/Hunyuan, not the wavespeed.ai platform. A workflow that says "WaveSpeed" might want either - check which before installing.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| client | WAVESPEED_AI_API_CLIENT | — | |
| prompt | STRING | Describe the scene, style, camera movements, and audio cues for video generation | |
| size | COMBO | 1280*720 | Video resolution - 720*1280 (portrait) or 1280*720 (landscape) |
| duration | COMBO | 4 | Video duration in seconds (4s=$0.40, 8s=$0.80, 12s=$1.20) |
| enable_sync_modeopt | BOOLEAN | false | Wait for generation to complete before returning |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video_url | STRING | — |