Wan 2.1 i2v-480p turns images into unlimited 480p AI videos with the Wan 2.1 image-to-video model, perfect for fast content creation. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
Siap
$0.2per run·~50 / $10
A confident young tech professional standing in a modern office space, talking to the camera with calm gestures. Soft daylight, clean environment, business casual outfit, focused expression. Center frame, smooth motion
gentle breeze blowing, boys hair moving due to the breeze, boy amazed by touching the star
A cinematic scene of a futuristic muscle car driving fast through a neon-lit city at night. The camera follows the car from behind, capturing vibrant reflections on the wet asphalt. Tall skyscrapers with glowing signs and holograms surround the street. Paper money floats through the air as the car speeds toward a distant glowing tower. The car's taillights leave subtle light trails. Rain-soaked road, neon reflections, cyberpunk atmosphere, dramatic sense of motion, high frame rate, 4K resolution.
A young woman walks confidently through a bustling Tokyo street at sunset, wearing a sleek, minimalist beige trench coat and dark sunglasses. Neon signs reflect off the wet pavement as crowds flow around her in slow motion. Her hair moves subtly in the breeze, and the skyline glows with golden hues. The camera pans smoothly with cinematic lighting and soft shadows, emphasizing realism and contemporary elegance.
In the early morning mist, a solo hiker in a red jacket crosses a wooden bridge over a crystal-clear mountain stream, surrounded by dense pine forests and wildflowers swaying gently. A golden retriever runs beside him playfully. The atmosphere feels crisp and immersive, as light rays cut through fog and birds flutter across the scene. Every detail—from water ripples to boot imprints—is captured in lifelike motion.
A teenage girl in a school uniform rides a bicycle through a quiet suburban street lined with cherry blossoms in full bloom. Petals drift through the air, catching sunlight as her hair bounces with each motion. Her expression is calm and reflective, the camera following closely with shallow depth of field. The scene captures the fleeting beauty of spring with dreamy realism.
A middle-aged man in a linen shirt paints on a balcony overlooking the Aegean Sea, his brush moving gently across the canvas as sunlight glimmers off the water. Olive trees sway in the warm breeze, and waves crash rhythmically in the distance. The scene breathes with slow, intentional motion—an elegant portrait of coastal simplicity, peace, and timeless artistry.
A ballet dancer twirls gracefully inside a giant abandoned greenhouse where vines have overtaken the structure. As she spins, glowing butterflies erupt from the floor and the sunlight filters in through broken glass. The environment feels like a forgotten dream—half real, half imagined—with organic motion, layered textures, and surreal but believable atmosphere.
A couple drives a vintage convertible along a winding coastal road in southern France during golden hour. The wind tousles their hair, and the sea sparkles beside them. The camera captures them in soft, grainy light—sunlight flaring over the lens like old 35mm film. Their laughter mixes with the sound of the engine and seagulls. It’s cinematic, nostalgic, effortlessly romantic.
An explorer trudges across a vast Arctic tundra in full winter gear, the wind whipping ice crystals around him. Behind, a line of huskies pulls a sled across the frostbitten landscape. The sky is pale blue, the ground textured with snowdrifts. The visual realism is intense, with each breath fogging the air, and gear shifting with weight—raw, quiet, and powerful.
A young Bedouin boy stands on the crest of a sand dune at dusk, looking over an endless desert bathed in warm twilight. His robe flows gently in the evening wind, and a camel caravan passes behind him in the distance. The atmosphere is peaceful yet grand, captured with slow pans and golden tones—conveying timeless culture, isolation, and awe.
wavespeed-ai/wan-2.1/i2v-480p animates a single image into a short, smooth 480p video clip with natural motion, stable framing, and strong prompt control—ideal for fast I2V iteration and lightweight production previews.
Write like a director’s brief:
Example prompt (talking head / business): A confident young tech professional standing in a modern office, talking to the camera with calm hand gestures. Soft daylight, clean environment, business casual outfit, focused expression. Center frame, smooth motion, natural micro-expressions.
Negative prompt suggestions: blurry, jittery, shaky camera, low quality, distorted face, warped hands, inconsistent motion
| Model | Resolution | Duration | Price per run |
|---|---|---|---|
| wavespeed-ai/wan-2.1/i2v-480p | 832×480 | 5s | $0.20 |
| wavespeed-ai/wan-2.1/i2v-480p | 832×480 | 10s | $0.30 |
Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/wavespeed-ai/wan-2.1/i2v-480p with your input as JSON. The endpoint returns a prediction id. Start polling the result endpoint around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. On completed, read output values from data.outputs. Examples for Wan 2.1 I2v 480p below.
set -euo pipefail
: "${WAVESPEED_API_KEY:?Set WAVESPEED_API_KEY}"
REQUEST_BODY=$(cat <<'JSON'
{
"prompt": "A cinematic shot of a city at sunset, soft golden light",
"image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
"size": "832*480",
"num_inference_steps": 30,
"duration": 5,
"guidance_scale": 5,
"flow_shift": 3,
"seed": -1
}
JSON
)
# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
-X POST "https://api.wavespeed.ai/api/v3/wavespeed-ai/wan-2.1/i2v-480p" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $WAVESPEED_API_KEY" \
-d "$REQUEST_BODY")
TASK=$(printf '%s' "$SUBMIT_RESPONSE" | jq 'if has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "$TASK" | jq -r '.id')
if [ -z "$PREDICTION_ID" ] || [ "$PREDICTION_ID" = "null" ]; 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 has("data") then .data else . end')
STATUS=$(printf '%s' "$RESULT" | jq -r '.status')
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
doneconst submitUrl = "https://api.wavespeed.ai/api/v3/wavespeed-ai/wan-2.1/i2v-480p";
const apiKey = process.env.WAVESPEED_API_KEY;
if (!apiKey) throw new Error('Set WAVESPEED_API_KEY');
async function requestJson(url, options = {}) {
const response = await fetch(url, options);
if (!response.ok) throw new Error(await response.text());
return response.json();
}
// 1. Submit the prediction.
const body = await requestJson(submitUrl, {
method: "POST",
headers: {
"Authorization": `Bearer ${apiKey}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"prompt": "A cinematic shot of a city at sunset, soft golden light",
"image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
"size": "832*480",
"num_inference_steps": 30,
"duration": 5,
"guidance_scale": 5,
"flow_shift": 3,
"seed": -1
}),
});
const task = body.data ?? body;
if (!task.id) throw new Error("Submission response did not contain a prediction id");
const resultUrl = task.urls?.get ||
`https://api.wavespeed.ai/api/v3/predictions/${task.id}/result`;
// 2. Poll until the prediction finishes.
while (true) {
const resultBody = await requestJson(resultUrl, {
headers: { "Authorization": `Bearer ${apiKey}` },
});
const result = resultBody.data ?? resultBody;
if (result.status === "completed") {
console.log(result.outputs);
break;
}
if (["failed", "cancelled", "timeout"].includes(result.status)) throw new Error(JSON.stringify(result));
if (!["created", "processing"].includes(result.status)) throw new Error("Unexpected status: " + result.status);
await new Promise(resolve => setTimeout(resolve, 2000));
}import json
import os
import time
from urllib.request import Request, urlopen
api_key = os.environ["WAVESPEED_API_KEY"]
headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
payload = {
"prompt": "A cinematic shot of a city at sunset, soft golden light",
"image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
"size": "832*480",
"num_inference_steps": 30,
"duration": 5,
"guidance_scale": 5,
"flow_shift": 3,
"seed": -1
}
def request_json(url, data=None):
request = Request(url, data=data, headers=headers, method="POST" if data else "GET")
with urlopen(request) as response:
return json.load(response)
# 1. Submit the prediction.
body = request_json("https://api.wavespeed.ai/api/v3/wavespeed-ai/wan-2.1/i2v-480p", json.dumps(payload).encode())
task = body.get("data", body)
if not task.get("id"):
raise RuntimeError("Submission response did not contain a prediction id")
result_url = task.get("urls", {}).get("get") or f"https://api.wavespeed.ai/api/v3/predictions/{task['id']}/result"
# 2. Poll until the prediction finishes.
while True:
result_body = request_json(result_url)
result = result_body.get("data", result_body)
status = result.get("status")
if status == "completed":
print(result.get("outputs", []))
break
if status in {"failed", "cancelled", "timeout"}:
raise RuntimeError(result)
if status not in {"created", "processing"}:
raise RuntimeError(f"Unexpected status: {status}")
time.sleep(2)Wan 2.1 I2v 480p is a WaveSpeedAI model for video generation from images, exposed as a REST API on WaveSpeedAI. Wan 2.1 i2v-480p turns images into unlimited 480p AI videos with the Wan 2.1 image-to-video model, perfect for fast content creation. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing. You can call it programmatically or try it from the playground above.
POST your input parameters to the model's REST endpoint (shown in the API tab of this playground) with your WaveSpeedAI API key in the Authorization header. Submission returns a prediction ID. Poll the result endpoint starting around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. The playground generates production-oriented Python, JavaScript, and cURL examples with timeouts, transient-error handling, and safe GET retries. Full request/response shape is documented at https://wavespeed.ai/docs/docs-api/wavespeed-ai/wan-2.1-i2v-480p.
Wan 2.1 I2v 480p starts at $0.20 per run. That figure is the base price — the final charge scales with the parameters you set in the form (output size, length, count, references, or whatever knobs this model exposes), so a higher-quality or larger output costs more than a minimal one. The exact cost for your current input is shown live next to the Generate button before you submit, and the actual per-call charge is recorded on the prediction afterwards.
Key inputs: `prompt`, `image`, `duration`, `size`, `seed`, `guidance_scale`. The full JSON schema (types, defaults, allowed values) is rendered above the Generate button and mirrored in the API reference at https://wavespeed.ai/docs/docs-api/wavespeed-ai/wan-2.1-i2v-480p.
Median end-to-end generation time on WaveSpeedAI is around 89 seconds per request, based on recent successful runs. Queue time varies with global demand; live status is visible in the prediction record.
Commercial usage rights depend on the model's license, set by its provider (WaveSpeedAI). The license summary appears on the model card above; see WaveSpeedAI's Terms of Service for platform-level conditions.