MiniMax H3 Open Weights | Try in Video Generator →

Skyreels V3 Standard Single Avatar | AI Digital Human API

skywork-ai/

SkyReels V3 Standard Single Avatar is a fast AI talking avatar video generation model that creates audio-driven avatar videos from one image, one audio file, and a motion prompt. Ready-to-use REST inference API for digital humans, virtual presenters, product explainers, social media videos, education content, marketing creatives, and professional avatar video workflows with simple integration, no coldstarts, and affordable pricing.

digital-human
Input

Idle

$0.04per run·~25 / $1

ExamplesView all

Let the woman speak.

Related Models

README

Skywork AI SkyReels V3 Standard Single Avatar

Skywork AI SkyReels V3 Standard Single Avatar generates a talking avatar video from a single reference image and an audio clip. It is designed for character-driven video generation where the image defines the avatar and the audio drives the speaking performance, making it suitable for digital presenters, short-form avatar content, narration clips, and virtual spokesperson workflows.

Why Choose This?

  • Single-image avatar generation Turn one portrait image into a speaking avatar video.

  • Audio-driven lip-sync Use an uploaded audio track to drive speech timing and performance.

  • Prompt-guided behavior Add a short prompt to influence expression, motion, or presentation style.

  • Simple avatar workflow Upload an image, upload audio, write a prompt, and generate the final clip with minimal setup.

  • Production-ready API Suitable for avatar presenters, talking portraits, announcement videos, and other character-led media workflows.

Parameters

ParameterRequiredDescription
promptYesText instruction describing the desired avatar behavior, style, or delivery.
imageYesReference image used as the avatar source.
audioYesAudio track used to drive the avatar’s speaking performance.
durationNoOutput video duration in seconds.
seedNoRandom seed for reproducibility, if supported in the workflow.

How to Use

  1. Upload your image — provide a clear portrait image of the person you want to animate.
  2. Upload your audio — use a clean audio clip to drive the avatar’s speech.
  3. Write your prompt — describe the desired speaking style, facial behavior, or overall presentation.
  4. Set duration (optional) — choose the desired output length if needed.
  5. Submit — run the model and download the generated avatar video.

Example Prompt

Let the woman speak naturally with subtle head motion, calm facial expression, and realistic lip-sync.

Pricing

Pricing is based on duration.

DurationCost
5s$0.20
10s$0.40
15s$0.60

Best Use Cases

  • Talking portrait videos — Turn a still portrait into a speaking clip.
  • Digital spokesperson content — Create short avatar-based communications or announcements.
  • Virtual presenters — Generate presenter videos for demos, explainers, or onboarding content.
  • Social media avatar clips — Produce short-form talking-head content from a single image.
  • Narration-driven character media — Pair a portrait with recorded audio for expressive delivery.

Pro Tips

  • Use a clean, front-facing portrait for better avatar stability.
  • Upload clear audio for stronger lip-sync and more natural speaking motion.
  • Keep the prompt simple and focused on expression or delivery style.
  • Start with shorter durations to validate quality before generating longer clips.
  • Use a consistent portrait and audio setup when iterating on the same avatar.

Notes

  • prompt, image, and audio are required.
  • Pricing depends on duration.
  • A clear portrait image and clean audio generally improve output quality.
  • This workflow is intended for single-avatar speaking video generation.

Related Models

Note:This website uses AI models provided by third parties.

Skyreels v3 Standard Single Avatar API — Quick start

Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/skywork-ai/skyreels-v3-standard/single-avatar 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 Skyreels v3 Standard Single Avatar 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",
    "audio": "https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3"
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/skywork-ai/skyreels-v3-standard/single-avatar" \
  -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/skywork-ai/skyreels-v3-standard/single-avatar";
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",
        "audio": "https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3"
}),
});
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",
    "audio": "https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3"
}

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/skywork-ai/skyreels-v3-standard/single-avatar", 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)

Skyreels v3 Standard Single Avatar API — Frequently asked questions

What is the Skyreels v3 Standard Single Avatar API?

Skyreels v3 Standard Single Avatar is a Skywork Ai model for talking-avatar generation, exposed as a REST API on WaveSpeedAI. SkyReels V3 Standard Single Avatar is a fast AI talking avatar video generation model that creates audio-driven avatar videos from one image, one audio file, and a motion prompt. Ready-to-use REST inference API for digital humans, virtual presenters, product explainers, social media videos, education content, marketing creatives, and professional avatar video workflows with simple integration, no coldstarts, and affordable pricing. You can call it programmatically or try it from the playground above.

How do I call the Skyreels v3 Standard Single Avatar 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/skywork-ai/skywork-ai-skyreels-v3-standard-single-avatar.

How much does Skyreels v3 Standard Single Avatar cost per run?

Skyreels v3 Standard Single Avatar starts at $0.040 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 Skyreels v3 Standard Single Avatar accept?

Key inputs: `prompt`, `image`, `audio`. 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/skywork-ai/skywork-ai-skyreels-v3-standard-single-avatar.

How do I get started with the Skyreels v3 Standard Single Avatar API?

Sign up for a free WaveSpeedAI account to claim starter credits, copy your API key from /accesskey, then call the endpoint shown in the API tab of the playground. The playground also auto-generates a code sample in Python, JavaScript, or cURL for the parameters you've set.

Can I use Skyreels v3 Standard Single Avatar outputs commercially?

Commercial usage rights depend on the model's license, set by its provider (Skywork Ai). The license summary appears on the model card above; see WaveSpeedAI's Terms of Service for platform-level conditions.