Skip to main content
wan-video avatar

Wan 2.7 Image to Video (Audio Driven) API

wan-video/wan/v2.7/image-to-video/audio-driven

Drive a still photo with your own audio clip: the track is used for lip-sync and action timing, producing a 2-15 second video at 720P or 1080P that performs in time with the sound.

Priced by resolution

Model Input

Input

The opening frame the video animates from. For lip-sync, pick a frame where the subject's face and mouth are clearly visible and unobscured. JPEG, JPG, PNG (alpha channel not supported), BMP or WEBP; width and height each between 240 and 8000 px, aspect ratio between 1:8 and 8:1, up to 20 MB. The finished clip takes its frame shape from this image.

The audio clip that drives the performance: the model uses it as the source for lip-sync and action timing, and it is the sound heard in the finished clip. WAV or MP3, 2-30 seconds, up to 15 MB. Audio longer than the requested duration is truncated to the first duration seconds; audio shorter than the requested duration leaves the rest of the clip silent, so match the two for sound throughout.

Optional description of the motion and camera movement. The scene is already fixed by the start image and the mouth movement and action timing come from the driving audio, so use the prompt for gesture, framing and camera. Chinese and English are supported.

Optional closing frame. Supply it to pin where the clip ends while the driving audio times everything in between; it cannot be used on its own, without a start frame. Same formats and size limits as the start frame, and it should share the start frame's aspect ratio.

Output video resolution. 720P bills at $0.10 per second of finished video; 1080P (default) bills at $0.15 per second.

Min: 2 - Max: 15

Length of the generated video in seconds (2-15). This is the output length, and the only length that is billed - the driving audio clip's own length never changes it.

Additional Settings

Customize your input with more control.

Describe content to avoid in the generated video.

When enabled, an LLM rewrites and enriches your prompt before generation. Disable to follow your exact wording.

Min: 0 - Max: 2147483647

Random seed for reproducible results. Omit for a random seed each run.

You need to be logged in to run this model and view results.
Log in

Model Output

Output

Loading
Generated in 30.144 seconds
Logs (1 lines)

Model Example Requests

Examples

Example output 1

Model Pricing

Pricing

Model pricing varies by the target resolution of your output video.

720P
$0.1
per second of output video
or around 10 seconds for $1
1080P
$0.15
per second of output video
or around 7 seconds for $1

Wan 2.7 Image to Video (Audio Driven) API

Wan 2.7 Image to Video (Audio Driven) is a image-to-video AI model by wan-video. On ModelRunner it runs through a REST API or via MCP from any AI assistant, at $0.15 per second of video.

POST https://queue.modelrunner.run/wan-video/wan/v2.7/image-to-video/audio-driven

cURL

# Submit a request to the queue. Input fields go at the top level of the
# body. The optional reserved "metadata" object holds your own flat string
# tags — stored on the request, never sent to the model; filter later with
# GET https://queue.modelrunner.run/requests?metadata=<url-encoded JSON>.
curl -X POST https://queue.modelrunner.run/wan-video/wan/v2.7/image-to-video/audio-driven \
  -H "Authorization: Key $MRUN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "The ceramicist speaks warmly to the camera, her hands moving gently as she talks, dust motes drifting in the window l…",
    "duration": 5,
    "resolution": "720P",
    "start_image_url": "https://media.modelrunner.ai/wCzkJnfwOMO3G6fEXkPCg.png",
    "driving_audio_url": "https://media.modelrunner.ai/N1Mq2Pphb4vCQkhIWg8HZ.mp3",
    "enable_prompt_expansion": true,
    "metadata": {
      "project": "my-project"
    }
  }'
# → { "request_id": "...", "status_url": "...", "response_url": "..." }

# Poll status_url until "COMPLETED", then fetch the result
curl "https://queue.modelrunner.run/wan-video/wan/v2.7/image-to-video/audio-driven/requests/$REQUEST_ID/status" \
  -H "Authorization: Key $MRUN_API_KEY"
curl "https://queue.modelrunner.run/wan-video/wan/v2.7/image-to-video/audio-driven/requests/$REQUEST_ID" \
  -H "Authorization: Key $MRUN_API_KEY"

JavaScript

import { modelrunner } from "@modelrunner/client";

const result = await modelrunner.subscribe("wan-video/wan/v2.7/image-to-video/audio-driven", {
  input: {
    "prompt": "The ceramicist speaks warmly to the camera, her hands moving gently as she talks, dust motes drifting in the window l…",
    "duration": 5,
    "resolution": "720P",
    "start_image_url": "https://media.modelrunner.ai/wCzkJnfwOMO3G6fEXkPCg.png",
    "driving_audio_url": "https://media.modelrunner.ai/N1Mq2Pphb4vCQkhIWg8HZ.mp3",
    "enable_prompt_expansion": true
  },
});
console.log(result);

Python

import os
import requests

headers = {"Authorization": f"Key {os.environ['MRUN_API_KEY']}"}

submitted = requests.post(
    "https://queue.modelrunner.run/wan-video/wan/v2.7/image-to-video/audio-driven",
    headers=headers,
    json={
      "prompt": "The ceramicist speaks warmly to the camera, her hands moving gently as she talks, dust motes drifting in the window l…",
      "duration": 5,
      "resolution": "720P",
      "start_image_url": "https://media.modelrunner.ai/wCzkJnfwOMO3G6fEXkPCg.png",
      "driving_audio_url": "https://media.modelrunner.ai/N1Mq2Pphb4vCQkhIWg8HZ.mp3",
      "enable_prompt_expansion": true
    },
).json()

# Poll submitted["status_url"] until "COMPLETED", then:
result = requests.get(submitted["response_url"], headers=headers).json()

Input parameters

NameTypeRequiredDescription
start_image_urlstring (uri)yesThe opening frame the video animates from. For lip-sync, pick a frame where the subject's face and mouth are clearly visible and unobscured. JPEG, JPG, PNG (alpha channel not supported), BMP or WEBP; width and height each between 240 and 8000 px, aspect ratio between 1:8 and 8:1, up to 20 MB. The finished clip takes its frame shape from this image.
driving_audio_urlstring (uri)yesThe audio clip that drives the performance: the model uses it as the source for lip-sync and action timing, and it is the sound heard in the finished clip. WAV or MP3, 2-30 seconds, up to 15 MB. Audio longer than the requested duration is truncated to the first duration seconds; audio shorter than the requested duration leaves the rest of the clip silent, so match the two for sound throughout.
promptstringnoOptional description of the motion and camera movement. The scene is already fixed by the start image and the mouth movement and action timing come from the driving audio, so use the prompt for gesture, framing and camera. Chinese and English are supported.
end_image_urlstring (uri)noOptional closing frame. Supply it to pin where the clip ends while the driving audio times everything in between; it cannot be used on its own, without a start frame. Same formats and size limits as the start frame, and it should share the start frame's aspect ratio.
resolutionenumnoOutput video resolution. 720P bills at $0.10 per second of finished video; 1080P (default) bills at $0.15 per second. Default: "1080P".
durationintegernoLength of the generated video in seconds (2-15). This is the output length, and the only length that is billed - the driving audio clip's own length never changes it. Default: 5.
negative_promptstringnoDescribe content to avoid in the generated video.
enable_prompt_expansionbooleannoWhen enabled, an LLM rewrites and enriches your prompt before generation. Disable to follow your exact wording. Default: true.
seedintegernoRandom seed for reproducible results. Omit for a random seed each run.

Machine-readable: OpenAPI schema · llms.txt

Use Wan 2.7 Image to Video (Audio Driven) from Claude & Cursor (MCP)

Point Claude Code, Claude Desktop, Cursor, or any MCP client at the ModelRunner MCP server and Wan 2.7 Image to Video (Audio Driven) becomes a tool your assistant can call directly — it authorizes via OAuth (no API key in config) and runs this model with the run_model tool using the endpoint wan-video/wan/v2.7/image-to-video/audio-driven.

MCP client config (Claude Desktop, Cursor)

{
  "mcpServers": {
    "modelrunner": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.modelrunner.run/mcp"]
    }
  }
}

Claude Code

claude mcp add --transport http modelrunner https://mcp.modelrunner.run/mcp

Then ask your assistant, for example: “Run wan-video/wan/v2.7/image-to-video/audio-driven on ModelRunner to generate video”. MCP setup guide.

Model Details

Model Details

Wan 2.7 Image to Video (Audio Driven) turns one still photo and an audio clip into a 2-15 second video driven by that audio: the model reads the track as its source for lip-sync and action timing, so the mouth and the movement land in time with the sound instead of being invented. Supply the opening frame and the audio (WAV or MP3, 2-30 seconds), add an optional prompt for gesture and camera, and optionally pin a closing frame. The clip inherits its frame shape from the source image, so there is no aspect-ratio control; pick 720P for drafts or 1080P for delivery and set the output length from 2 to 15 seconds.

## Best for - Lip-syncing a portrait photo to a recorded line so the mouth tracks the words - Talking-head clips for ads, explainers and avatars from one still and a voiceover - Matching a performance to audio you already have — a VO take, a song hook, a recorded line - Driving an illustrated or animated character from a real recorded performance

## Choose another model when - You want the model to invent the audio instead of supplying it — the Wan 2.7 Image to Video row generates background music or sound effects when you send none - You have no starting image and want the shot built from text alone — use a text-to-video model - You need to continue an existing video clip — audio-driven generation always starts from a still frame - You need a performance longer than 15 seconds — the clip tops out there and audio past it is discarded

## Tips - Match the audio's length to `duration` — longer audio is truncated to the first `duration` seconds, shorter audio leaves the tail of the clip silent - Use a frame where the face and mouth are clearly visible; that is what the lip-sync has to work with - `end_image_url` is optional — pin a closing frame and the audio still drives everything in between - `resolution` drives cost: 720P bills $0.10 per second of finished video, 1080P (the default) $0.15

## Limitations - The output frame shape follows your source image but is not guaranteed to match it exactly - Short audio is not looped or stretched — the rest of the clip is simply silent

To run via the ModelRunner JavaScript client: ```js import { modelrunner } from "@modelrunner/client";

const result = await modelrunner.subscribe("wan-video/wan/v2.7/image-to-video/audio-driven", { input: { start_image_url: "https://media.modelrunner.ai/wCzkJnfwOMO3G6fEXkPCg.png", driving_audio_url: "https://media.modelrunner.ai/N1Mq2Pphb4vCQkhIWg8HZ.mp3", prompt: "The ceramicist speaks warmly to the camera, her hands moving gently as she talks", resolution: "720P", duration: 5, }, }); ```