Openai Sora 2 Image To Video Pro
Playground
Try it on WavespeedAI!OpenAI Sora 2 Image-to-Video Pro creates physics-aware, realistic videos with synchronized audio and greater steerability. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
Features
Notice — Service Stability
The Sora 2 family is currently unstable. Generations may fall back to alternative models without notice and the service can be temporarily unavailable. OpenAI is also expected to discontinue this model in the future.
If you need an equally capable, stable alternative, we recommend Seedance 2: bytedance/seedance-2.0/image-to-video.
OpenAI Sora 2 Image-to-Video Pro
Sora 2 Image-to-Video Pro is OpenAI’s premium image animation model. Upload an image and describe the motion — AI transforms your still photo into a cinematic video with physics-aware movement, synchronized audio, and professional-grade quality.
Why Choose This?
-
Premium quality Higher fidelity output with enhanced detail preservation and motion coherence.
-
Physics-aware motion Learns contact, inertia, and momentum so objects move and collide believably.
-
Synchronized audio Generates matching audio — ambient sounds, dialogue, and sound effects.
-
Temporal consistency Stable identities, minimal flicker/ghosting, and clean frame-to-frame transitions.
-
Resolution options Output in 720p or 1080p for high-definition results.
-
Extended duration Generate videos up to 20 seconds long.
Parameters
| Parameter | Required | Description |
|---|---|---|
| image | Yes | Source image to animate |
| prompt | Yes | Describe the motion, action, and audio cues |
| resolution | No | Output resolution: 720p or 1080p |
| duration | No | Video length: 4, 8, 12, 16, or 20 seconds |
How to Use
- Upload your image — the still photo you want to animate.
- Write your prompt — describe the action, motion, camera movement, and audio.
- Select resolution — 720p or 1080p.
- Set duration — choose 4, 8, 12, 16, or 20 seconds.
- Submit — generate, preview, and download your video.
Pricing
| Duration | 720p | 1080p |
|---|---|---|
| 4 s | $1.20 | $2.00 |
| 8 s | $2.40 | $4.00 |
| 12 s | $3.60 | $6.00 |
| 16 s | $4.80 | $8.00 |
| 20 s | $6.00 | $10.00 |
Billing Rules
- 720p rate: $0.30 per second
- 1080p rate: $0.50 per second
- Duration options: 4, 8, 12, 16, or 20 seconds
Best Use Cases
- Premium photo animation — Bring still photos to life with cinema-quality motion.
- Commercial production — High-resolution output for professional marketing.
- Art animation — Transform illustrations into broadcast-quality videos.
- Product showcases — Animate product images for premium presentations.
- Storytelling — Build cinematic narratives from key visual moments.
Pro Tips
- Be specific about motion in your prompt for better results.
- Include audio cues in your prompt for synchronized sound.
- Higher resolution source images produce better output.
- Use 1080p for final production, 720p for faster iteration.
- Start with shorter durations to test your prompt.
Notes
- Image and prompt are both required fields.
- Duration options: 4, 8, 12, 16, or 20 seconds.
- Resolution options: 720p or 1080p.
- Please follow OpenAI’s usage policies: What images are permitted and prohibited in Sora-2
Related Models
- Sora 2 Text-to-Video — Generate videos from text prompts.
- Sora 2 Image-to-Video — Standard version at lower cost.
- Sora 2 Characters — Create reusable character IDs.
Authentication
For authentication details, please refer to the Authentication Guide.
API Endpoints
Submit Task & Query Result
# Submit the task
curl --location --request POST "https://api.wavespeed.ai/api/v3/openai/sora-2/image-to-video-pro" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer ${WAVESPEED_API_KEY}" \
--data-raw '{
"resolution": "720p",
"duration": 4
}'
# Get the result
curl --location --request GET "https://api.wavespeed.ai/api/v3/predictions/${requestId}/result" \
--header "Authorization: Bearer ${WAVESPEED_API_KEY}"
Parameters
Task Submission Parameters
Request Parameters
| Parameter | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
| image | string | Yes | - | The image for generating the output. | |
| prompt | string | Yes | - | The positive prompt for the generation. | |
| resolution | string | No | 720p | 720p, 1080p | The resolution of the generated video. |
| duration | integer | No | 4 | 4, 8, 12, 16, 20 | The duration of the generated video in seconds. |
Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data.id | string | Unique identifier for the prediction, Task Id |
| data.model | string | Model ID used for the prediction |
| data.outputs | array | Array of URLs to the generated content (empty when status is not completed) |
| data.urls | object | Object containing related API endpoints |
| data.urls.get | string | URL to retrieve the prediction result |
| data.status | string | Status of the task: created, processing, completed, or failed |
| data.created_at | string | ISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”) |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |
Result Request Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| id | string | Yes | - | Task ID |
Result Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data | object | The prediction data object containing all details |
| data.id | string | Unique identifier for the prediction, the ID of the prediction to get |
| data.model | string | Model ID used for the prediction |
| data.outputs | string | Array of URLs to the generated content (empty when status is not completed). |
| data.urls | object | Object containing related API endpoints |
| data.urls.get | string | URL to retrieve the prediction result |
| data.status | string | Status of the task: created, processing, completed, or failed |
| data.created_at | string | ISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”) |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |