Nodes/ComfyUI Razv WaveSpeed Nodes/WaveSpeedAI OpenAI Sora 2 Image-to-Video
ComfyUI Node

WaveSpeedAI OpenAI Sora 2 Image-to-Video

Animate a still image with Sora 2 for $0.40 — from inside ComfyUI

By razvanmatei-sf·Created 12 months ago·Updated 9 months ago· 0
WaveSpeedAI OpenAI Sora 2 Image-to-Video
  • client
  • video_url
image
prompt
duration4
enable_sync_modefalse

Sora's a closed model - no weights, no local version, no way around the API. So if you want that distinctive physics-aware motion without leaving ComfyUI, you either use a wrapper like this or you don't get Sora at all. This is the entry-level one: give it a still image and a sentence about how it should move, and it returns a short video clip, billed at $0.10 a second. A 4-second test costs less than a bus fare, which is exactly the right way to find out whether Sora's look is worth the hassle for your workflow.

What it is

The base Sora 2 image-to-video node from the razv-wavespeed pack. It's the cheaper sibling of the Pro version - same endpoint family, same idea, but no resolution control: you get whatever the API's default output is, and you pay $0.40 / $0.80 / $1.20 for 4 / 8 / 12 seconds. For mood tests, style explorations, and anything where the final resolution doesn't matter, this is the one to reach for. Pay for 1080p only when you know you need it.

How it works

Like everything in this pack, it's a thin HTTP client in disguise. The client input comes from the WaveSpeedAI Client node (your API key lives there), the image input is a public URL - the tooltip explicitly says to connect it from the Upload Image node - and the prompt is a multiline box for describing motion and camera. The node POSTs to the Sora 2 image-to-video endpoint and returns a video_url string.

enable_sync_mode is the one behavioral switch: false (default) submits the job, then polls until the video is done - up to a 30-minute ceiling. true tells the API to hold the response until generation completes. Either way the node blocks until it has a URL for you, so don't expect this to be instant; Sora takes a couple of minutes per clip.

Inputs at a glance

  • prompt - describe motion, not content. "Slow dolly out, rain on the window, shallow focus" beats "a city street."
  • duration - 4, 8, or 12 seconds. Longer = linearly more money.
  • enable_sync_mode - wait for completion or not; default off.

Output is video_url (STRING). It's a URL, not a video file - you'll want a download node or a manual fetch to keep the clip.

Install & setup

It's one pack for all of these nodes:

cd ComfyUI/custom_nodes
git clone https://github.com/razvanmatei-sf/razv-wavespeed.git
cd razv-wavespeed
pip install -r requirements.txt

ComfyUI Manager works too - search "razv-wavespeed". Then grab an API key from wavespeed.ai and set it in config.ini (copy config.ini.tmp), in the WaveSpeedAI Client node, or via WAVESPEED_API_KEY. Restart ComfyUI after installing. No model files, no GPU requirements beyond what ComfyUI already needs.

Common issues

  • 401 / "Invalid API key" - key missing, mistyped, or out of credit. Check config.ini and the Client node.
  • Long hangs then "No output received" - the job timed out or the source image URL wasn't publicly reachable. Upload the image somewhere with a real URL first.
  • Confusing it with the "WaveSpeed" speedup plugin - the fast local-inference WaveSpeed project and this WaveSpeed AI API are unrelated. If you installed the plugin thinking it was this, different thing.

Start with 4 seconds and a single seed. If Sora's motion is what your project needs, scale from there; if not, you spent forty cents to learn that.

CategoryWaveSpeedAI/OpenAI Sora 2

Inputs (5)

NameTypeDefaultDescription
clientWAVESPEED_AI_API_CLIENT
imageSTRINGSource image URL for video generation (connect from Upload Image node)
promptSTRINGPositive prompt guiding video generation - describe desired motion and characteristics
durationCOMBO4Video duration in seconds (4s=$0.40, 8s=$0.80, 12s=$1.20)
enable_sync_modeoptBOOLEANfalseWait for generation to complete before returning

Outputs (1)

NameTypeDescription
video_urlSTRING