WAN 3.0 is LIVE — 30s in one shot | Try in Video Generator →

wavespeed-ai/

AI Video Ads generates product advertisement videos. Provide a person photo, product name, and optional product image or script, and AI creates a professional ad video. Ready-to-use REST inference API, no coldstarts, affordable pricing.

image-to-video
Input

Idle

$0.4per run·~25 / $10

Next:

ExamplesView all

Related Models

README

AI Video Ads

AI Video Ads generates professional product advertisement videos from a portrait photo and a product name. Upload a person photo, provide the product details, and AI creates a polished spokesperson-style ad video — complete with script, voiceover, and lip-sync.

Why Choose This?

  • Spokesperson ad generation Turns any portrait into a professional talking-head product advertisement without filming or scripting.

  • AI-generated script Provide a product name and optional selling points — the model writes and delivers the ad script automatically.

  • Product image compositing Upload a product photo for more accurate visual integration of the product into the ad.

  • Multilingual output Generate ads in English, Chinese, Spanish, French, or Portuguese to reach global audiences.

  • Flexible duration Generate ads from 5 to 15 seconds to fit different ad formats and platforms.

Parameters

ParameterRequiredDescription
imageYesPortrait photo of the spokesperson (URL or file upload).
product_nameYesName of the product being advertised.
product_imageNoProduct photo for more accurate visual compositing in the ad.
textNoScript reference or selling points for the AI to use when generating the ad.
languageNoOutput language: en, zh, es, fr, or pt.
durationNoVideo length in seconds. Range: 5–15. Default: 5.

How to Use

  1. Upload your person photo — a clear, front-facing portrait works best.
  2. Enter the product name — the AI will generate an appropriate ad script around it.
  3. Upload a product image (optional) — improves visual compositing accuracy.
  4. Add text (optional) — provide key selling points or a rough script for the AI to reference.
  5. Select language (optional) — choose en, zh, es, fr, or pt for the output language.
  6. Set duration — choose between 5 and 15 seconds.
  7. Submit — generate, preview, and download your ad video.

Pricing

DurationCost
5s$0.40
10s$0.80
15s$1.20

Billing Rules

  • Rate: $0.08 per second
  • Duration range: 5–15 seconds

Best Use Cases

  • E-commerce advertising — Generate quick spokesperson ads for product listings and social media campaigns.
  • Social media content — Create short-form ad videos for Instagram Reels, TikTok, and YouTube Shorts.
  • Multilingual campaigns — Produce the same ad in multiple languages without additional filming.
  • Small business marketing — Professional ad quality without a production crew or studio.
  • Product launches — Rapidly generate ad variations for A/B testing across different platforms.

Pro Tips

  • Use a clean, well-lit front-facing portrait with a neutral background for the most professional result.
  • Provide key selling points in the text field to guide the AI script toward your actual marketing message.
  • Upload a product image whenever possible — it significantly improves how the product is visually integrated.
  • Match duration to your target platform: 5s for social ads, 10–15s for more detailed product explanations.

Notes

  • image and product_name are required fields; all other parameters are optional.
  • Providing product_image improves compositing accuracy.
  • text is used as reference for the AI-generated script — it does not need to be a finished script.
  • Ensure image URLs are publicly accessible if using links rather than direct uploads.
  • Please ensure your content complies with WaveSpeed AI's usage policies.
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.

Ai Video Ads API — Quick start

Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/wavespeed-ai/ai-video-ads 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 Ai Video Ads below.

HTTP example
set -euo pipefail

: "${WAVESPEED_API_KEY:?Set WAVESPEED_API_KEY}"

REQUEST_BODY=$(cat <<'JSON'
{
    "image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
    "product_name": "example",
    "language": "en",
    "duration": 5
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/wavespeed-ai/ai-video-ads" \
  -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/ai-video-ads";
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({
        "image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
        "product_name": "example",
        "language": "en",
        "duration": 5
}),
});
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 = {
    "image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
    "product_name": "example",
    "language": "en",
    "duration": 5
}

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/ai-video-ads", 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)

Ai Video Ads API — Frequently asked questions

What is the Ai Video Ads API?

Ai Video Ads is a WaveSpeedAI model for video generation from images, exposed as a REST API on WaveSpeedAI. AI Video Ads generates product advertisement videos. Provide a person photo, product name, and optional product image or script, and AI creates a professional ad video. Ready-to-use REST inference API, no coldstarts, affordable pricing. You can call it programmatically or try it from the playground above.

How do I call the Ai Video Ads 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/ai-video-ads.

How much does Ai Video Ads cost per run?

Ai Video Ads starts at $0.40 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 Ai Video Ads accept?

Key inputs: `image`, `duration`, `language`, `product_image`, `product_name`, `text`. 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/ai-video-ads.

How long does Ai Video Ads take to generate?

Median end-to-end generation time on WaveSpeedAI is around 81 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 Ai Video Ads 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.

AI Video Ads | Fast Image-to-Video API on WaveSpeedAI