Openai Sora 2 Characters
Playground
Try it on WavespeedAI!OpenAI Sora 2 Characters creates reusable character IDs from video references for consistent character appearance across Sora 2 generations. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
Features
OpenAI Sora 2 Characters
Sora 2 Characters creates reusable character identities from short video clips. Upload a 2–4 second video of a character and assign a name — the model extracts identity features that can be referenced in Sora 2 Text-to-Video to maintain consistent character appearance across generated videos.
Why Choose This?
-
Character consistency Maintain the same character identity across multiple video generations.
-
Simple workflow Just upload a short video clip and provide a name — character ID is created instantly.
-
Reusable assets Once created, character IDs can be referenced in any Sora 2 Text-to-Video generation.
-
Ultra-low cost Only $0.001 per character creation.
Parameters
| Parameter | Required | Description |
|---|---|---|
| video | Yes | Source video of the character (2–4 seconds) |
| name | Yes | Name identifier for the character |
How to Use
- Upload a video — provide a 2–4 second video clip featuring the character.
- Enter a name — assign a memorable name for easy reference.
- Run — the model extracts character identity and creates the ID.
- Use in Sora 2 — reference the character by name in Sora 2 Text-to-Video.
Pricing
| Output | Cost |
|---|---|
| Per character ID | $0.001 |
Best Use Cases
- Consistent Storytelling — Maintain character identity across multiple video scenes.
- Series Production — Create recurring characters for episodic content.
- Brand Mascots — Generate consistent brand character appearances.
- Animation Projects — Ensure character consistency throughout a project.
Pro Tips
- Use clear, well-lit video clips with the character prominently visible.
- 2–4 seconds is optimal — shorter clips may lack sufficient identity information.
- Choose descriptive names for easy reference in prompts (e.g., “Joe” rather than “Character1”).
- Front-facing shots with visible facial features produce the best identity extraction.
Notes
- Both video and name are required fields.
- Video length: 2–4 seconds recommended.
- Created character IDs are used in Sora 2 Text-to-Video.
- Ensure your content complies with OpenAI’s usage policies.
Related Models
- OpenAI Sora 2 Text-to-Video — Generate videos using character IDs.
- OpenAI Sora 2 Pro Text-to-Video — Premium video generation.
- OpenAI Sora 2 Pro Image-to-Video — Animate images with Sora quality.
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/characters" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer ${WAVESPEED_API_KEY}" \
--data-raw '{}'
# 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 |
|---|---|---|---|---|---|
| video | string | Yes | - | URL of an MP4 video (minimum 720p, max ~2.67:1 aspect ratio) to define the character. Videos exceeding 1080p are automatically scaled down. Non-standard aspect ratios are automatically padded to 16:9 (landscape) or 9:16 (portrait). Videos longer than 4 seconds are trimmed to the first 4 seconds. | |
| name | string | Yes | - | - | Name for the character (1–80 characters). Refer to this name in prompts when using the character. |
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.has_nsfw_contents | array | Array of boolean values indicating NSFW detection for each output |
| 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 |