Seedance 2.5 Now Live | Try in Video Generator →

wavespeed-ai/

daVinci MagiHuman Image-to-Video API — a 15B parameter omni video generation model, the new open-source king on par with WAN 2.5. Generates high-quality AI videos from reference images with optional audio input. Supports digital humans, talking heads, and general video generation. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

image-to-video
Input

Idle

$0.1per run·~10 / $1

Next:

ExamplesView all

A man sits at a modern, minimalist podcast studio desk, calmly recording a show. He gestures gently with his right hand while speaking, saying, “Welcome to my show — truly, thank you so much for joining me on WaveSpeed.” The camera captures a medium shot from eye level, focusing on his face and upper body, with a shallow depth of field blurring the background slightly. Natural, warm tones and cinematic lighting style.

Related Models

README

DaVinci MagiHuman Image-to-Video

DaVinci MagiHuman Image-to-Video animates a reference image into a cinematic, human-centered video clip. Upload a photo, describe the motion and scene, and optionally provide an audio track to synchronize — the model generates natural human movement, expressive storytelling, and a cinematic atmosphere across multiple resolution and duration options.

Why Choose This?

  • Image-grounded generation Start from a reference photo for precise visual control over character appearance, environment, and composition.

  • Human-focused motion Optimized for realistic human motion, expressions, and interactions — ideal for portrait-style and character-driven video content.

  • Audio input support Upload an audio track to guide the rhythm, mood, and pacing of the generated video for synchronized results.

  • Multiple resolution tiers Generate at 256p, 720p, or 1080p to match your delivery requirements and budget.

  • Flexible aspect ratio Supports 16:9 landscape and 9:16 portrait orientations for both cinematic and social media formats.

  • Adjustable duration Generate clips from 5 to 10 seconds with per-second granularity.

  • Reproducible results Use the seed parameter to lock in a specific output for exact reproduction.

Parameters

ParameterRequiredDescription
imageYesReference image to animate (URL or file upload).
promptYesText description of the motion, camera style, and scene atmosphere.
audioNoOptional audio track to synchronize with the generated video.
aspect_ratioNoOutput aspect ratio: 16:9 (default) or 9:16.
resolutionNoOutput resolution: 256p, 720p (default), or 1080p.
durationNoClip length in seconds. Options: 5, 6, 7, 8, 9, 10. Default: 5.
seedNoRandom seed for reproducible results. Use -1 for a random seed.

How to Use

  1. Upload your image — provide the reference photo to animate via URL or drag-and-drop.
  2. Write your prompt — describe the motion, camera movement, and scene atmosphere. Use the Prompt Enhancer for better results.
  3. Upload audio (optional) — provide an audio file or URL to synchronize the video to a specific track.
  4. Select aspect ratio — 16:9 for landscape/cinematic, 9:16 for portrait/social.
  5. Select resolution — 256p for drafts, 720p for standard output, 1080p for final production.
  6. Set duration — choose between 5 and 10 seconds.
  7. Set seed (optional) — fix the seed to reproduce a specific result in future runs.
  8. Submit — generate, preview, and download your video.

Pricing

Duration256p720p1080p
5s$0.10$0.20$0.30
6s$0.12$0.24$0.36
7s$0.14$0.28$0.42
8s$0.16$0.32$0.48
9s$0.18$0.36$0.54
10s$0.20$0.40$0.60

Billing Rules

  • 256p: $0.02 per second
  • 720p: $0.04 per second
  • 1080p: $0.06 per second
  • Duration options: 5–10 seconds

Best Use Cases

  • Photo Animation — Bring portraits and human-centered photos to life with natural, cinematic motion.
  • Social Media Content — Produce portrait-format clips from reference photos for Reels, TikTok, and Shorts.
  • Music Video & Audio-Visual — Synchronize animated portraits to a music track or voiceover.
  • Marketing & Brand Video — Animate spokesperson or product model images for promotional content.
  • Concept Visualization — Turn still reference images into moving scene previews for pitching and storyboarding.

Pro Tips

  • Use a high-quality, well-lit reference image with a clearly visible subject for the most natural animation.
  • Include specific camera style references in your prompt (handheld, dolly, cinematic lighting) for more expressive results.
  • Use 256p at shorter durations to rapidly test prompts before committing to a 1080p final render.
  • Providing an audio track significantly improves rhythm and pacing alignment in the output.
  • Fix the seed once you find a result you like to iterate on it consistently.

Notes

  • Both image and prompt are required fields; all other parameters are optional.
  • Duration is selectable in 1-second increments from 5 to 10 seconds.
  • Ensure image and audio URLs are publicly accessible if using links rather than direct uploads.

Related Models

Note:This website uses AI models provided by third parties. Documentation prices are for reference and may be outdated. The Generate button shows an estimate; the final task charge prevails.

Davinci Magihuman Image To Video API — Quick start

Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/wavespeed-ai/davinci-magihuman/image-to-video 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 Davinci Magihuman Image To Video below.

HTTP example
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",
    "aspect_ratio": "16:9",
    "resolution": "720p",
    "duration": 5,
    "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/davinci-magihuman/image-to-video" \
  -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
done
Node.js example
const submitUrl = "https://api.wavespeed.ai/api/v3/wavespeed-ai/davinci-magihuman/image-to-video";
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",
        "aspect_ratio": "16:9",
        "resolution": "720p",
        "duration": 5,
        "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));
}
Python example
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",
    "aspect_ratio": "16:9",
    "resolution": "720p",
    "duration": 5,
    "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/davinci-magihuman/image-to-video", 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)

Davinci Magihuman Image To Video API — Frequently asked questions

What is the Davinci Magihuman Image To Video API?

Davinci Magihuman Image To Video is a WaveSpeedAI model for video generation from images, exposed as a REST API on WaveSpeedAI. daVinci MagiHuman Image-to-Video API — a 15B parameter omni video generation model, the new open-source king on par with WAN 2.5. Generates high-quality AI videos from reference images with optional audio input. Supports digital humans, talking heads, and general video generation. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing. You can call it programmatically or try it from the playground above.

How do I call the Davinci Magihuman Image To Video API?

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/davinci-magihuman-image-to-video.

How much does Davinci Magihuman Image To Video cost per run?

Davinci Magihuman Image To Video starts at $0.10 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.

What inputs does Davinci Magihuman Image To Video accept?

Key inputs: `prompt`, `image`, `audio`, `aspect_ratio`, `resolution`, `duration`. 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/davinci-magihuman-image-to-video.

How long does Davinci Magihuman Image To Video take to generate?

Median end-to-end generation time on WaveSpeedAI is around 219 seconds per request, based on recent successful runs. Queue time varies with global demand; live status is visible in the prediction record.

Can I use Davinci Magihuman Image To Video outputs commercially?

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.

Davinci Magihuman Image to Video | Fast Image-to-Video API on WaveSpeedAI