Text to video
Elo with audio · AA-Video-T2V v2.1
Turn a scene description into a short video with synchronized sound. Set the framing, resolution and duration before bringing your shot to life.
Veo 3.1 is Google DeepMind’s video model for short clips with generated sound. This page covers its text-to-video endpoint, google/veo-3.1-t2v: describe the scene, then choose 4, 6 or 8 seconds, 16:9 or 9:16, 720p or 1080p, and whether to generate audio.
Write the prompt the way you would brief a camera operator: the subject, the action, how the camera moves and what the scene sounds like. With audio on, which is the default, dialogue, ambience and effects come from the same prompt. Use negative_prompt for elements to avoid and a fixed seed to compare prompt changes. The API enhances prompts by default and may rewrite one that fails validation; set enhance_prompt and auto_fix to false when the exact wording matters.
Google’s launch evaluation in October 2025 reported Veo 3.1 as the most preferred model overall on 1,003 MovieGenBench prompts. The field has moved since. On Artificial Analysis’ text-to-video arena with audio, Veo 3.1 now scores 962 Elo, 22nd of 31 models. Its best category rank is audio synchronization (18th). Its weakest results are dialogue and lip sync (29th) and live-action film (28th). Google also notes that natural spoken audio, especially in short speech segments, is still being improved.
Veo 3.1 Fast scores 958 on the same board, and AA places both models in the same 22nd–25th rank range. On AI/ML API an 8-second clip with audio costs $1.56 with Fast and $4.16 with Veo 3.1. Test both on your own prompts before committing. Image-to-video, reference images, first and last frames, and clip extension are separate Veo 3.1 model IDs, each with its own documentation.
Compare Veo 3.1 on human-preference video quality and creator API price.
Elo with audio · AA-Video-T2V v2.1
Elo · AA-Video-T2V-Silent v2.1
USD per minute of video with audio
Cost on each model creator’s API at AA’s benchmark settings, not the AI/ML API rate. Our rates are in Pricing
Compare five models available on AI/ML API across three video leaderboards.
Blind pairwise human votes on video with audio generated from a text prompt.
The same text-to-video task, judged as silent video.
Votes on clips animated from a start image. On AI/ML API this mode is a separate Veo 3.1 model ID.
Category slices of AA-Video-T2V v2.1 with audio, each ranked across 31 models.
Votes on prompts in the audio synchronization category. Veo 3.1 ranks #18 of 31.
Votes on prompts in the text rendering category. Veo 3.1 ranks #20 of 31.
Votes on prompts in the camera control category. Veo 3.1 ranks #27 of 31.
Votes on prompts in the dialogue & lip sync category. Veo 3.1 ranks #29 of 31.
| Usage | Price | Unit |
|---|---|---|
| Video without audio | $0.26 | second |
| Video with audio | $0.52 | second · default |
Cost of one 8-second clip on AI/ML API.
| Model | Audio off | Audio on |
|---|---|---|
| $2.08 | $4.16 | |
| $1.04 | $1.56 | |
| $0.52 | $0.832 |
Give your agent the model details, code and documentation.
export AIMLAPI_KEY="8f2b4c7d9a1e6b3f…"curl 'https://api.aimlapi.com/v2/video/generations' \
-H "Authorization: Bearer $AIMLAPI_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "google/veo-3.1-t2v",
"prompt": "Two person street interview in New York City.",
"duration": 8,
"aspect_ratio": "16:9",
"resolution": "720p",
"generate_audio": true
}'import os
import time
import requests
headers = {"Authorization": "Bearer " + os.environ["AIMLAPI_KEY"]}
payload = {
"model": "google/veo-3.1-t2v",
"prompt": "Two person street interview in New York City.",
"duration": 8,
"aspect_ratio": "16:9",
"resolution": "720p",
"generate_audio": True
}
response = requests.post(
"https://api.aimlapi.com/v2/video/generations",
headers=headers,
json=payload,
timeout=120,
)
response.raise_for_status()
data = response.json()
generation_id = data["id"]
for attempt in range(60):
if data["status"] in ("completed", "error"):
break
time.sleep(10)
result = requests.get(
"https://api.aimlapi.com/v2/video/generations",
headers=headers,
params={"generation_id": generation_id},
timeout=120,
)
result.raise_for_status()
data = result.json()
if data["status"] == "error":
raise RuntimeError(data.get("error"))
if data["status"] != "completed":
raise TimeoutError("Generation is still running: " + generation_id)
print(data["video"]["url"])async function main() {
const headers = {
Authorization: "Bearer " + process.env.AIMLAPI_KEY,
"Content-Type": "application/json",
};
const response = await fetch(
"https://api.aimlapi.com/v2/video/generations",
{
method: "POST",
headers,
body: JSON.stringify({
"model": "google/veo-3.1-t2v",
"prompt": "Two person street interview in New York City.",
"duration": 8,
"aspect_ratio": "16:9",
"resolution": "720p",
"generate_audio": true
}),
},
);
if (!response.ok) throw new Error(await response.text());
let data = await response.json();
const generationId = data.id;
for (let attempt = 0; attempt < 60; attempt++) {
if (["completed", "error"].includes(data.status)) break;
await new Promise(resolve => setTimeout(resolve, 10000));
const result = await fetch(
"https://api.aimlapi.com/v2/video/generations?generation_id=" + encodeURIComponent(generationId),
{ headers },
);
if (!result.ok) throw new Error(await result.text());
data = await result.json();
}
if (data.status === "error") throw new Error(JSON.stringify(data.error));
if (data.status !== "completed") throw new Error("Still running: " + generationId);
console.log(data.video.url);
}
main().catch(error => {
console.error(error);
process.exitCode = 1;
});Save the returned id, then poll this endpoint while the status is queued or generating. A completed task includes video.url.
GET /v2/video/generations?generation_id=…Veo 3.1 is billed per second of generated video: $0.26 without audio and $0.52 with audio. An 8-second clip costs $2.08 silent or $4.16 with audio. Audio is on by default.
Clips are 4, 6 or 8 seconds long (8 by default), at 720p or 1080p (1080p by default), in 16:9 landscape or 9:16 portrait.
Yes. Set generate_audio to false. A silent clip is billed at $0.26 per second instead of $0.52.
Not on this endpoint. Veo 3.1 image-to-video, reference-to-video, first-last-frame and extend-video are separate model IDs on AI/ML API, each with its own documentation.
Send the request to POST /v2/video/generations and keep the returned id. Poll GET /v2/video/generations?generation_id=… until status is completed, then read video.url.
On Artificial Analysis’ text-to-video arena (captured October 30, 2026), Veo 3.1 scores 962 Elo with audio, 22nd of 31 models, and 960 as silent video, 23rd of 36. Scores come from blind pairwise human votes.
On the same text-to-video board with audio, Fast scores 958 against 962 and the two share a 22nd–25th rank range. With audio, Fast costs $0.195 per second against $0.52. Compare both on your own prompts.