X AI Grok Imagine Video V1.5 Image To Video API Documentation
Playground
Try it on WaveSpeedAI!xAI Grok Imagine Video v1.5 Image-to-Video turns a single input image and a natural-language prompt into short, stylized AI videos, with 480P, 720P, and 1080P output options and selectable aspect ratios for character animation, product videos, social media content, creative storytelling, and marketing workflows. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
Features
xAI Grok Imagine Video V1.5 Image-to-Video generates short videos with synchronized audio from a reference image and a natural-language prompt. It is designed for image-driven motion generation, cinematic concept clips, stylized social media content, and other prompt-based video creation workflows.
Why Choose This?
-
Image-guided video generation Start from a single reference image and animate it into a short video clip.
-
Prompt-based motion control Use text instructions to describe motion, camera behavior, atmosphere, and scene evolution.
-
Simple resolution choices Choose
480p,720p, or1080pdepending on your quality and budget needs. -
Predictable short-form generation Works well for short clips that need quick iteration and clean prompt-to-video control.
-
Production-ready API Suitable for concept visualization, creator content, ads, and lightweight motion storytelling.
Parameters
| Parameter | Required | Description |
|---|---|---|
| prompt | Yes | Text description of the desired motion, camera movement, and scene. |
| image | Yes | Input image to animate. |
| duration | No | Requested video duration in whole seconds. Range: 1–15. Default: 6. |
| resolution | No | Output video resolution. Supported values: 480p, 720p, 1080p. Default: 720p. |
How to Use
- Upload your image — provide the source image you want to animate.
- Write your prompt — describe the motion, scene, and camera behavior you want.
- Set duration (optional) — choose an integer from
1to15seconds. The default is6. - Choose resolution — use
480pfor lower cost,720pfor balance, or1080pfor higher-resolution output. - Submit — run the model and download the generated video.
Example Prompt
A cinematic push-in shot as the subject slowly turns toward the camera, soft natural motion, subtle background movement, realistic lighting, polished commercial style
Pricing
Pricing depends on the requested duration and resolution, plus a fixed $0.01 input image charge per request.
| Resolution | Price per Second | 5s Total |
|---|---|---|
| 480p | $0.08 | $0.41 |
| 720p | $0.14 | $0.71 |
| 1080p | $0.25 | $1.26 |
All example totals include the fixed $0.01 input image charge.
Example Costs
| Resolution | 1s | 5s | 10s | 15s |
|---|---|---|---|---|
| 480p | $0.09 | $0.41 | $0.81 | $1.21 |
| 720p | $0.15 | $0.71 | $1.41 | $2.11 |
| 1080p | $0.26 | $1.26 | $2.51 | $3.76 |
Best Use Cases
- Image-to-video animation — Turn a still image into a short motion clip.
- Social media content — Create lightweight animated visuals for posts and promos.
- Concept visualization — Explore motion directions from a static frame.
- Advertising mockups — Turn still campaign art into short animated demos.
- Creative prototyping — Quickly test prompt-driven motion ideas.
Pro Tips
- Use a clear, high-quality source image for better motion stability.
- Be specific in your prompt about camera movement, subject motion, and atmosphere.
- Start with shorter durations for fast iteration.
- Use
480pfor quick testing and720p/1080pfor final-quality clips. - Keep prompts focused on motion and scene evolution rather than repeating static visual details already present in the image.
Notes
promptandimageare required; all other parameters are optional.durationaccepts whole seconds from1to15and defaults to6.resolutionsupports480p,720p, and1080p, and defaults to720p.- Audio generation is enabled by default.
- Pricing depends on the requested
duration,resolution, and the fixed $0.01 input image charge per request.
Related Models
- xAI Grok Imagine Video v1.5 Text-to-Video — Generate videos directly from text without an input image.
- xAI Grok Imagine Video v1.5 Reference-to-Video — Guide generation with up to seven reference images.
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",
"image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
"duration": 6,
"resolution": "720p"
}
JSON
)
# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
-X POST "https://api.wavespeed.ai/api/v3/x-ai/grok-imagine-video-v1.5/image-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="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"
# 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|deleted) printf '%s\n' "${RESULT}" | jq . >&2; exit 1 ;;
*) sleep 2 ;;
esac
doneParameters
Task Submission Parameters
Request Parameters
| Parameter | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
| prompt | string | Yes | - | Text description of the desired motion, camera movement, and scene. | |
| image | string | Yes | - | Input image to animate. | |
| duration | integer | No | 6 | 1 ~ 15 | Output video duration in seconds. |
| resolution | string | No | 720p | 480p, 720p, 1080p | Output video resolution. |
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.status | string | Task status. completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses. |
| 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.status | string | Status: completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses |
| 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 |