Nano Banana 2.1 is LIVE — Google's Latest | Try Now →
Home/Explore/Google/Veo3.1/Text To Video

google/veo3.1/text-to-video

Google Veo 3.1 converts text prompts into videos with synchronized audio at native 1080p for high-quality outputs. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

Text to Video
Input
Whether to generate audio.

Idle

$3.2per run

Next:

ExamplesView all

A mother and daughter share a magical evening together while reading a Japanese folktale in a cozy Japanese living room. The scene opens with a warm medium two-shot from the front. The mother and daughter sit closely together on a sofa with an open book resting on their laps. The mother gently wraps one arm behind her daughter and looks down at the book, while soft warm light catches the waves in her hair. The daughter sits close beside her, watching the pages with curiosity and wonder. The camera glides slowly and gently toward them, creating an intimate and emotional atmosphere. The open book fills the lower part of the frame and begins to radiate a soft golden glow. Its pages subtly pulse and ripple as a miniature magical world starts unfolding from the book. Urashima Tarō appears riding a sea turtle, emerging from the illustrated pages like a living pop-up story. The camera continues its smooth movement toward the daughter and transitions into a close-up from her left side. Her profile fills the frame while her mother becomes softly blurred in the background. The daughter watches the magical scene with wide-eyed amazement and says excitedly, “Mama, look! He’s moving!” Warm cinematic lighting, gentle emotional pacing, subtle magical effects, intimate family atmosphere, realistic characters, soft depth of field, and an enchanting storybook feeling.

Related Models

README

🎥 Google Veo 3.1 — Text-to-Video (T2V) Model

Veo 3.1 T2V is the latest text-to-video model from Google DeepMind, designed to bring cinematic storytelling to life through text. It generates high-fidelity 1080p videos with synchronized, context-aware audio, realistic motion, and narrative consistency — making it one of the most advanced generative video systems ever released.

🌟 Why it stands out

  • 🎬 Cinematic Realism Produces natural lighting, smooth camera transitions, and accurate perspective for film-like motion.

  • 🔊 Native Audio Generation Generates synchronized ambient sound, dialogue, and music directly aligned with the visuals.

  • 🗣️ Dialogue & Lip-Sync Supports speaking characters and realistic facial expressions — perfect for storytelling, marketing, or short-form content.

  • 🧠 Subject Consistency (R2V) Maintains a character’s or object’s identity across frames using 1–3 reference images.

  • 🎞️ Video Interpolation Seamlessly animates transitions between two given frames — ideal for smooth start-to-end storytelling.

  • 📐 Flexible Output Supports both 720p and 1080p, at 24 FPS, duration for 4s, 6s, 8s, and in both 16:9 (landscape) and 9:16 (portrait) formats.

⚙️ Key Parameters

  • prompt — Describe your scene or story (e.g., “A drone shot flying over Las Vegas, transitioning from day to night with soft jazz in the background”).
  • durationSeconds — Choose video length (4s, 6s, or 8s).
  • resolution — 720p or 1080p.
  • aspectRatio — Landscape (16:9) or Portrait (9:16).

Pricing

Pricing depends on the requested duration, resolution, and whether audio generation is enabled.

ResolutionWithout Audio / SecondWith Audio / Second
720p$0.20$0.40
1080p$0.20$0.40
4K$0.40$0.60

Example Costs

ResolutionDurationWithout AudioWith Audio
720p8s$1.60$3.20
1080p8s$1.60$3.20
4K8s$3.20$4.80

Billing Rules

  • Total price = requested duration × the applicable per-second rate.
  • generate_audio=true uses the With Audio rate.
  • generate_audio=false uses the Without Audio rate.
  • Default configuration: 1080p, 8 seconds, audio enabled — $3.20.
  • aspect_ratio, negative_prompt, and seed do not add separate charges.

🚀 How to Use

  1. ✍️ Write a Prompt Describe the desired motion, camera style, lighting, and sound.

Example: “A cinematic sunset over the ocean, waves glimmering as seagulls fly across the horizon.”

  1. ⚙️ Adjust Parameters Select duration, resolution (720p/1080p), and aspect ratio.

  2. ▶️ Generate Submit your request — Veo 3.1 will render motion, lighting, and synchronized audio.

  3. 💾 Preview & Download Review your video, refine your prompt if needed, then download the final MP4.

💡 Pro Tips

  • Keep prompts focused on one main action or subject for better coherence.
  • Use camera verbs like “tracking,” “zoom out,” or “handheld” for cinematic control.
  • Mention lighting and mood cues (e.g., “under soft moonlight,” “golden-hour glow”).
  • Use R2V for character-based storytelling; Interpolation for smooth transitions.
  • Avoid conflicting instructions (e.g., “fast zoom” and “slow motion” together).

🧾 Notes & Limitations

  • Generation time: ~2–3 minutes for an 8-second 1080p clip.
  • Frame rate fixed at 24 FPS.
  • Advanced controls (R2V, I2V, Interpolation) are mutually exclusive — only one per generation.
  • If your prompt is blocked, rewrite it and resubmit (safety thresholds may adjust during preview).
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.

Veo3.1 Text To Video API — Quick start

Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/google/veo3.1/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 Veo3.1 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",
    "duration": 8,
    "resolution": "1080p",
    "generate_audio": true
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/google/veo3.1/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="https://api.wavespeed.ai/api/v3/predictions/$PREDICTION_ID/result"

# 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|deleted) printf '%s\n' "$RESULT" | jq . >&2; exit 1 ;;
    *) sleep 2 ;;
  esac
done
Node.js example
const submitUrl = "https://api.wavespeed.ai/api/v3/google/veo3.1/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",
        "duration": 8,
        "resolution": "1080p",
        "generate_audio": true
}),
});
const task = body.data ?? body;
if (!task.id) throw new Error("Submission response did not contain a prediction id");
const resultUrl = `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", "deleted"].includes(result.status)) throw new Error(JSON.stringify(result));
  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",
    "duration": 8,
    "resolution": "1080p",
    "generate_audio": True
}

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/google/veo3.1/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 = 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", "deleted"}:
        raise RuntimeError(result)
    time.sleep(2)

Veo3.1 Text To Video API — Frequently asked questions

What is the Veo3.1 Text To Video API?

Veo3.1 Text To Video is a Google model for video generation, exposed as a REST API on WaveSpeedAI. Google Veo 3.1 converts text prompts into videos with synchronized audio at native 1080p for high-quality outputs. 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 Veo3.1 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 Python, JavaScript, and cURL examples for submitting requests and polling results. Full request/response shape is documented at https://wavespeed.ai/docs/docs-api/google/google-veo3.1-text-to-video.

How much does Veo3.1 Text To Video cost per run?

Veo3.1 Text To Video starts at $3.2 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 Veo3.1 Text To Video accept?

Key inputs: `prompt`, `aspect_ratio`, `resolution`, `duration`, `seed`, `negative_prompt`. 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/google/google-veo3.1-text-to-video.

How long does Veo3.1 Text To Video take to generate?

Reported generation time on WaveSpeedAI is around 81 seconds per request. This is an estimate, not a latency guarantee; queue time and input settings can change the total wait. live status is visible in the prediction record.

Can I use Veo3.1 Text To Video outputs commercially?

Commercial usage rights depend on the model's license, set by its provider (Google). Check the provider's applicable terms and WaveSpeedAI's Terms of Service before commercial use.

llms.txt — google/veo3.1/text-to-video for AI agents and LLMs