Seedance 2.5 Now Live | Try in Video Generator →

wavespeed-ai/

daVinci MagiHuman Text-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 text prompts with optional audio input. Supports digital humans, talking heads, flexible aspect ratios, durations, and resolutions. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

text-to-video
Input

Idle

$0.1per run·~10 / $1

Next:

ExamplesView all

Rainy night in a neon-lit Tokyo alley, a woman in a red coat walks slowly under an umbrella. Reflections shimmer on wet cobblestones. Handheld camera follows her from behind, bokeh street lights, cinematic color grade, moody atmosphere.

A lone samurai stands at the edge of a misty cliff at golden hour, cherry blossoms falling around him in slow motion. Camera slowly pushes in on his face, wind moving his robes. anamorphic lens flare, film grain, shallow depth of field.

Close-up of a young woman's face, soft studio lighting, her eyes slowly open and she smiles gently. Hair moves in a light breeze. Shallow depth of field, warm skin tones, 35mm lens, elegant and serene mood.

Aerial drone shot gliding over a turquoise glacial lake surrounded by snow-capped mountains at dawn. Morning mist rises off the water, golden light breaks through the peaks. Smooth camera movement, ultra-wide angle, hyperrealistic, 4K.

A professional male news anchor in a navy suit, mid-30s, speaking to camera in a sleek studio environment with blurred screen backdrop. Steady frontal shot, broadcast lighting, neutral expression shifting to serious, hyper-realistic.

Related Models

README

DaVinci MagiHuman Text-to-Video

DaVinci MagiHuman Text-to-Video is a cinematic text-to-video model specialized in generating realistic human-centered scenes. Describe your scene in natural language, optionally provide an audio track to synchronize, and get a high-quality video with natural human motion, expressive storytelling, and cinematic atmosphere — at multiple resolution and duration options.

Why Choose This?

  • Human-focused generation 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.

  • Prompt Enhancer Built-in tool to automatically improve your scene descriptions for richer output.

Parameters

ParameterRequiredDescription
promptYesText description of the scene, subject, motion, camera style, and mood.
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. Write your prompt — describe the subject, scene, motion, camera movement, and atmosphere. Use the Prompt Enhancer for better results.
  2. Upload audio (optional) — provide an audio file or URL to synchronize the video to a specific track.
  3. Select aspect ratio — 16:9 for landscape/cinematic, 9:16 for portrait/social.
  4. Select resolution — 256p for drafts, 720p for standard output, 1080p for final production.
  5. Set duration — choose between 5 and 10 seconds.
  6. Set seed (optional) — fix the seed to reproduce a specific result in future runs.
  7. 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

  • Cinematic Storytelling — Generate atmospheric, character-driven scenes from detailed text descriptions.
  • Social Media Content — Produce portrait-format human-centered clips for Reels, TikTok, and Shorts.
  • Music Video & Audio-Visual — Synchronize generated video to a music track or voiceover for cohesive results.
  • Marketing & Brand Video — Quickly produce human-focused promotional content without a film crew.
  • Concept Visualization — Bring narrative ideas and moods to life for pitching and storyboarding.

Pro Tips

  • Include specific camera style references in your prompt (handheld, dolly, bokeh, cinematic color grade) 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 across resolution and duration changes.
  • 9:16 aspect ratio works best for close-up portrait and upper-body compositions.

Notes

  • Only prompt is required; all other parameters are optional.
  • Duration is selectable in 1-second increments from 5 to 10 seconds.
  • Ensure audio URLs are publicly accessible if using a link rather than a direct upload.

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 Text To Video API — Quick start

Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/wavespeed-ai/davinci-magihuman/text-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 Text 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",
    "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/text-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/text-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",
        "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",
    "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/text-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 Text To Video API — Frequently asked questions

What is the Davinci Magihuman Text To Video API?

Davinci Magihuman Text To Video is a WaveSpeedAI model for video generation, exposed as a REST API on WaveSpeedAI. daVinci MagiHuman Text-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 text prompts with optional audio input. Supports digital humans, talking heads, flexible aspect ratios, durations, and resolutions. 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 Text 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-text-to-video.

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

Davinci Magihuman Text 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 Text To Video accept?

Key inputs: `prompt`, `audio`, `aspect_ratio`, `resolution`, `duration`, `seed`. 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-text-to-video.

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

Median end-to-end generation time on WaveSpeedAI is around 163 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 Text 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 Text to Video | Powerful Text-to-Video API on WaveSpeedAI