Vidu Text To Video
Playground
Try it on WaveSpeedAI!Vidu Text to Video converts text prompts into high-quality 720p videos with exceptional visual fidelity and diverse motion dynamics. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
Features
Vidu Text-to-Video transforms your text prompts into high-quality, cinematic 720p videos β complete with expressive motion, dynamic lighting, and natural camera movement. Built for creators, storytellers, and developers, Vidu delivers smooth, detailed, and visually coherent motion sequences directly from text input.
π Why it looks amazing
- Cinematic generation: produces film-like shots with realistic motion and depth of field.
- High temporal consistency: ensures clean transitions with minimal flicker or distortion.
- Motion diversity: supports subtle gestures, expressive movement, and camera motion for natural flow.
- Text-guided direction: interprets complex scene descriptions with strong semantic alignment.
- 720p output: optimized for crisp detail and creative flexibility.
βοΈ Parameters and Controls
-
prompt β describe your scene (e.g., βA cat walking through a neon-lit alley at nightβ).
-
movement_amplitude β control motion strength:
-
auto(default): model decides best motion level. -
small: subtle, gentle movements (good for portraits or still scenes). -
medium: balanced camera and subject motion. -
large: cinematic, dramatic, or action-heavy movement. -
seed β set for reproducible results (leave blank for random).
π° Pricing
| Resolution | Duration | Cost per Clip |
|---|---|---|
| 720p | 4s | $0.20 |
π How to Use
- βοΈ Write your prompt describing the scene or action.
- π₯ Choose your movement amplitude (auto, small, medium, or large).
- π² Optionally set a seed for reproducibility.
- βΆοΈ Click Run ($0.20) to generate your video.
π‘ Pro Tips
- Use vivid verbs and adjectives for better motion understanding.
- For subtle portraits, pick small amplitude; for dynamic shots, choose large.
- Keep your prompt concise but descriptive β focus on subject, setting, and style.
- Adjust seed values to explore different visual interpretations of the same prompt.
Authentication
For authentication details, please refer to the Authentication Guide.
API Endpoints
Submit Task & Query Result
set -euo pipefail
export WAVESPEED_API_KEY="your-api-key"
REQUEST_BODY=$(cat <<'JSON'
{
"prompt": "A cinematic ocean wave at sunrise, highly detailed",
"movement_amplitude": "auto"
}
JSON
)
# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
-X POST "https://api.wavespeed.ai/api/v3/vidu/text-to-video" \
-H "Authorization: Bearer ${WAVESPEED_API_KEY}" \
-H "Content-Type: application/json" \
-d "${REQUEST_BODY}")
TASK=$(printf '%s' "${SUBMIT_RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "${TASK}" | jq -r '.id // empty')
if [ -z "${PREDICTION_ID}" ]; then
printf 'Submission response did not contain a prediction id
' >&2
exit 1
fi
RESULT_URL=$(printf '%s' "${TASK}" | jq -r '.urls.get // empty')
if [ -z "${RESULT_URL}" ]; then RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"; fi
# 2. Poll until the prediction finishes.
while true; do
RESPONSE=$(curl --silent --show-error --fail-with-body \
"${RESULT_URL}" \
-H "Authorization: Bearer ${WAVESPEED_API_KEY}")
RESULT=$(printf '%s' "${RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
STATUS=$(printf '%s' "${RESULT}" | jq -r '.status // empty')
case "${STATUS}" in
completed) printf '%s\n' "${RESULT}" | jq '.outputs'; break ;;
failed|cancelled|timeout) printf '%s\n' "${RESULT}" | jq . >&2; exit 1 ;;
created|processing) sleep 2 ;;
*) printf 'Unexpected status: %s
' "${STATUS}" >&2; exit 1 ;;
esac
doneParameters
Task Submission Parameters
Request Parameters
| Parameter | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
| prompt | string | Yes | - | The positive prompt for the generation. | |
| movement_amplitude | string | No | auto | auto, small, medium, large | The movement amplitude of objects in the frame. Defaults to auto, accepted value: auto small medium large. |
| seed | integer | No | - | - | The random seed to use for the generation. -1 means a random seed will be used. |
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 | Output values, usually URL strings; some models return text strings or structured result objects (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 |
| data.model | string | Model ID used for the prediction |
| data.outputs | array<string | object> | Array of generated outputs (empty when status is not completed). Items are usually URL strings, but may be text strings or structured result objects, depending on the model. |
| data.urls | object | Object containing related API endpoints |
| data.urls.get | string | URL to poll for the prediction result |
| data.status | string | Status: created, processing, completed, or failed |
| data.created_at | string | ISO timestamp of when the request was created |
| 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 |