Claude Opus 5 is now live on CometAPI โ†’
V

Vidu Q3

Per Second:$0.056
Released:May 31, 2026

Vidu Q3 is a video generation model designed for high-quality content creation with strong visual realism and prompt adherence. It is suitable for creative video production and storytelling applications.

New
Commercial Use

Technical Specifications of Vidu Q3

ItemVidu Q3 (viduq3-pro)
Model IDviduq3-pro
ProviderVidu
Model FamilyVidu Q3 Series
Model TypeAI Video Generation
Input TypesText, Image, Start Image + End Image
Output TypeVideo with native synchronized audio
Resolution540p, 720p, 1080p
Duration1โ€“16 seconds
Frame Rate24 FPS
Audio GenerationNative audio-video generation
Text-to-VideoSupported
Image-to-VideoSupported
Start-End-to-VideoSupported
Intelligent Shot SwitchingSupported
Primary FocusNarrative storytelling and cinematic video creation

What is Vidu Q3?

Vidu Q3 is Vidu's flagship third-generation video model built specifically for story-driven video generation. Unlike traditional AI video systems that generate visuals first and audio later, Vidu Q3 creates dialogue, narration, sound effects, music, and video simultaneously, enabling synchronized storytelling directly from a single generation workflow. The model is designed for short dramas, cinematic sequences, advertising content, and character-driven narratives.

Main Features of Vidu Q3

  • Native audio-video synchronization: Generates dialogue, narration, sound effects, and music directly alongside video.
  • 16-second continuous generation: Produces complete narrative clips in a single generation run.
  • Frame-accurate camera control: Supports detailed control over camera movement, pacing, and scene composition.
  • Multi-speaker dialogue support: Designed for conversations and character interactions.
  • Multilingual generation: Supports English, Japanese, and Chinese content generation.
  • Cinematic storytelling optimization: Tuned specifically for drama, film-style content, comics, and narrative advertising.

Benchmark Performance of Vidu Q3

Unlike language models, Vidu Q3 does not publish standardized benchmark scores such as MMLU or SWE-Bench. Publicly disclosed performance indicators include:

MetricPublic Information
Maximum Duration16 seconds
Maximum Resolution1080p
Native Audio GenerationYes
Multi-Speaker DialogueYes
Multilingual SupportEnglish, Japanese, Chinese
Frame-Level Camera ControlYes

Artificial Analysis score of 1241 and ranking among leading global video-generation systems, although independent benchmark validation remains limited.

Vidu Q3 vs Vidu Q3 Turbo vs Kling 2.1

FeatureVidu Q3Vidu Q3 TurboKling 2.1
PositioningPremium qualitySpeed optimizedGeneral video generation
Native AudioYesYesWorkflow dependent
Max Duration16s16sVaries
ResolutionUp to 1080pUp to 1080pUp to 1080p
Camera ControlAdvancedAdvancedStrong
Narrative FocusHighestModerateStrong
Generation SpeedStandardFasterCompetitive

Known Limitations

  • Individual clips remain limited to 16 seconds.
  • Long-form productions require combining multiple generations.
  • Public benchmark transparency remains limited compared with leading LLM providers.
  • Narrative quality depends heavily on prompt design and scene planning.

Representative Use Cases

AI Short Films

Generate cinematic scenes with synchronized speech, ambient sound, and music.

Short Drama Production

Create serialized drama content without separate audio-production workflows.

Advertising and Brand Storytelling

Produce narrative commercials with integrated voiceover and sound design.

Comic and Manga Adaptation

Transform storyboards and illustrations into animated narrative clips.

Social Media Video Creation

Generate TikTok, Shorts, and Reels content with ready-to-publish synchronized audio.

Model Version Notes

Vidu Q3 represents the premium version of the Q3 family. Compared with Vidu Q3 Turbo, the standard Q3 model prioritizes output quality, narrative consistency, and cinematic storytelling rather than generation speed. Both models support native audio-video output and up to 16-second video generation.

How to Access and Deploy the viduq3 API on CometAPI

Step 1: Register or Sign in to CometAPI and Obtain Your viduq3 API Key

Create your CometAPI account or sign in to an existing account to access the API once it becomes available . After release, you will be able to obtain a HappyHorse-1.0 API key from the platform and be ready for testing or integration.

Step 2: Test the viduq3 API for Free in the Playground

Before deployment, you can try out the viduq3 API directly in the CometAPI playground. This provides an easy way to explore output quality, test hints, or image inputs, and gain a clearer understanding of the API's performance before using it in production.

Step 3: Deploy the viduq3 API in Production

After testing, the next step is to deploy the viduq3 API to your own application, product, or internal environment. This allows you to use the viduq3 API in real-world video generation scenarios where stable access and practical integration are crucial.

FAQ

Pricing for Vidu Q3

Explore competitive pricing for Vidu Q3, designed to fit various budgets and usage needs. Our flexible plans ensure you only pay for what you use, making it easy to scale as your requirements grow. Discover how Vidu Q3 can enhance your projects while keeping costs manageable.

Vidu Video Generation Pricing

Pricing (Per Second)

Model360p540p720p1080p
viduq3$0.056$0.056$0.1232$0.1232
viduq3-turbo$0.028$0.028$0.0616$0.0616

๐Ÿ’ก Billed per second. Total cost = price per second ร— video duration (seconds).

Sample code and API for Vidu Q3

Access comprehensive sample code and API resources for Vidu Q3 to streamline your integration process. Our detailed documentation provides step-by-step guidance, helping you leverage the full potential of Vidu Q3 in your projects.

# Create a video with viduq3
# Step 1: Submit the video generation request
echo "Submitting video generation request..."
response=$(curl -s https://api.cometapi.com/v1/videos \
  -H "Authorization: Bearer $COMETAPI_KEY" \
  -F "model=viduq3" \
  -F "prompt=Ultra-realistic cinematic shot of an astronaut walking slowly through soft fog, volumetric light in light blue and pale amber tones, shallow depth of field, 35mm film texture, graceful camera movement." \
  -F "seconds=1" \
  -F "size=960x528")

echo "Response: $response"

# Extract video_id from response (handle JSON with spaces like "id": "xxx")
video_id=$(echo "$response" | tr -d '
' | sed 's/.*"id"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/')
echo "Video ID: $video_id"

# Step 2: Poll for progress until 100%
echo ""
echo "Checking video generation progress..."
while true; do
  status_response=$(curl -s "https://api.cometapi.com/v1/videos/$video_id" \
    -H "Authorization: Bearer $COMETAPI_KEY")

  progress=$(echo "$status_response" | grep -o '"progress"[[:space:]]*:[[:space:]]*"\?[^",}]*"\?' | head -1 | sed 's/.*:[[:space:]]*"\?//;s/"$//')
  status=$(echo "$status_response" | grep -o '"status"[[:space:]]*:[[:space:]]*"[^"]*"' | head -1 | sed 's/.*"status"[[:space:]]*:[[:space:]]*"//;s/"$//')

  echo "Progress: $progress, Status: $status"

  if [ "$status" = "FAILURE" ] || [ "$status" = "failed" ] || [ "$status" = "error" ]; then
    echo "Video generation failed!"
    exit 1
  fi

  if [ "$progress" = "100%" ] || [ "$progress" = "100" ] || [ "$status" = "completed" ] || [ "$status" = "success" ]; then
    echo "Video generation completed!"
    break
  fi

  sleep 10
done

# Step 3: Download the video to output directory
echo ""
echo "Downloading video to ./output/$video_id.mp4..."
mkdir -p ./output
curl -s "https://api.cometapi.com/v1/videos/$video_id/content" \
  -H "Authorization: Bearer $COMETAPI_KEY" \
  -o "./output/$video_id.mp4"

if [ -f "./output/$video_id.mp4" ]; then
  echo "Video saved to ./output/$video_id.mp4"
  ls -la "./output/$video_id.mp4"
else
  echo "Failed to download video"
  exit 1
fi

cURL Code Example

# Create a video with viduq3
# Step 1: Submit the video generation request
echo "Submitting video generation request..."
response=$(curl -s https://api.cometapi.com/v1/videos \
  -H "Authorization: Bearer $COMETAPI_KEY" \
  -F "model=viduq3" \
  -F "prompt=Ultra-realistic cinematic shot of an astronaut walking slowly through soft fog, volumetric light in light blue and pale amber tones, shallow depth of field, 35mm film texture, graceful camera movement." \
  -F "seconds=1" \
  -F "size=960x528")

echo "Response: $response"

# Extract video_id from response (handle JSON with spaces like "id": "xxx")
video_id=$(echo "$response" | tr -d '\n' | sed 's/.*"id"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/')
echo "Video ID: $video_id"

# Step 2: Poll for progress until 100%
echo ""
echo "Checking video generation progress..."
while true; do
  status_response=$(curl -s "https://api.cometapi.com/v1/videos/$video_id" \
    -H "Authorization: Bearer $COMETAPI_KEY")
  
  progress=$(echo "$status_response" | grep -o '"progress"[[:space:]]*:[[:space:]]*"\?[^",}]*"\?' | head -1 | sed 's/.*:[[:space:]]*"\?//;s/"$//')
  status=$(echo "$status_response" | grep -o '"status"[[:space:]]*:[[:space:]]*"[^"]*"' | head -1 | sed 's/.*"status"[[:space:]]*:[[:space:]]*"//;s/"$//')
  
  echo "Progress: $progress, Status: $status"
  
  if [ "$status" = "FAILURE" ] || [ "$status" = "failed" ] || [ "$status" = "error" ]; then
    echo "Video generation failed!"
    exit 1
  fi
  
  if [ "$progress" = "100%" ] || [ "$progress" = "100" ] || [ "$status" = "completed" ] || [ "$status" = "success" ]; then
    echo "Video generation completed!"
    break
  fi
  
  sleep 10
done

# Step 3: Download the video to output directory
echo ""
echo "Downloading video to ./output/$video_id.mp4..."
mkdir -p ./output
curl -s "https://api.cometapi.com/v1/videos/$video_id/content" \
  -H "Authorization: Bearer $COMETAPI_KEY" \
  -o "./output/$video_id.mp4"

if [ -f "./output/$video_id.mp4" ]; then
  echo "Video saved to ./output/$video_id.mp4"
  ls -la "./output/$video_id.mp4"
else
  echo "Failed to download video"
  exit 1
fi

Python Code Example

# Create a video with viduq3 using raw HTTP requests
import os
import time
import requests

api_key = os.environ.get("COMETAPI_KEY")
base_url = "https://api.cometapi.com/v1"
headers = {"Authorization": f"Bearer {api_key}"}

# Step 1: Submit the video generation request
print("Submitting video generation request...")
response = requests.post(
    f"{base_url}/videos",
    headers=headers,
    files={
        "model": (None, "viduq3"),
        "prompt": (None, "Ultra-realistic cinematic shot of an astronaut walking slowly through soft fog, volumetric light in light blue and pale amber tones, shallow depth of field, 35mm film texture, graceful camera movement."),
        "seconds": (None, "1"),
        "size": (None, "960x528"),
    },
)

result = response.json()
print(f"Response: {result}")

video_id = result.get("id") or result.get("task_id")
print(f"Video ID: {video_id}")

# Step 2: Poll for progress until 100%
print("\nChecking video generation progress...")
while True:
    try:
        status_response = requests.get(f"{base_url}/videos/{video_id}", headers=headers)
        status_result = status_response.json()

        data = status_result.get("data") or status_result
        progress = data.get("progress", "0%")
        status = data.get("status", "unknown")

        print(f"Progress: {progress}, Status: {status}")

        if status in ["FAILURE", "failed", "error"]:
            print("Video generation failed!")
            print(status_result)
            exit(1)

        if progress == "100%" or progress == 100 or status in ["completed", "success"]:
            print("Video generation completed!")
            break
    except Exception as e:
        print(f"Temporary error: {e}, retrying...")

    time.sleep(10)

# Step 3: Download the video to output directory
print(f"\nDownloading video to ./output/{video_id}.mp4...")
os.makedirs("./output", exist_ok=True)

video_response = requests.get(f"{base_url}/videos/{video_id}/content", headers=headers)

output_path = f"./output/{video_id}.mp4"
with open(output_path, "wb") as f:
    f.write(video_response.content)

if os.path.exists(output_path):
    file_size = os.path.getsize(output_path)
    print(f"Video saved to {output_path}")
    print(f"File size: {file_size} bytes")
else:
    print("Failed to download video")
    exit(1)

JavaScript Code Example

// Create a video with viduq3 using raw HTTP requests
import fs from "fs";
import path from "path";

const apiKey = process.env.COMETAPI_KEY;
const baseUrl = "https://api.cometapi.com/v1";
const headers = { Authorization: `Bearer ${apiKey}` };

function sleep(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

// Step 1: Submit the video generation request
console.log("Submitting video generation request...");
const formData = new FormData();
formData.append("model", "viduq3");
formData.append("prompt", "Ultra-realistic cinematic shot of an astronaut walking slowly through soft fog, volumetric light in light blue and pale amber tones, shallow depth of field, 35mm film texture, graceful camera movement.");
formData.append("seconds", "1");
formData.append("size", "960x528");

const submitResponse = await fetch(`${baseUrl}/videos`, {
  method: "POST",
  headers,
  body: formData,
});

const result = await submitResponse.json();
console.log("Response:", JSON.stringify(result, null, 2));

const videoId = result.id || result.task_id;
console.log("Video ID:", videoId);

// Step 2: Poll for progress until 100%
console.log("\nChecking video generation progress...");
while (true) {
  try {
    const statusResponse = await fetch(`${baseUrl}/videos/${videoId}`, { headers });
    const statusResult = await statusResponse.json();
    const data = statusResult.data || statusResult;
    const progress = data.progress || "0%";
    const status = data.status || "unknown";

    console.log(`Progress: ${progress}, Status: ${status}`);

    if (status === "FAILURE" || status === "failed" || status === "error") {
      console.log("Video generation failed!");
      console.log(JSON.stringify(statusResult, null, 2));
      process.exit(1);
    }

    if (progress === "100%" || progress === 100 || status === "completed" || status === "success") {
      console.log("Video generation completed!");
      break;
    }
  } catch (e) {
    console.log(`Temporary error: ${e.message}, retrying...`);
  }

  await sleep(10000);
}

// Step 3: Download the video to output directory
console.log(`\nDownloading video to ./output/${videoId}.mp4...`);
fs.mkdirSync("./output", { recursive: true });

const videoResponse = await fetch(`${baseUrl}/videos/${videoId}/content`, { headers });
const outputPath = path.join("./output", `${videoId}.mp4`);
fs.writeFileSync(outputPath, Buffer.from(await videoResponse.arrayBuffer()));

if (fs.existsSync(outputPath)) {
  const stats = fs.statSync(outputPath);
  console.log(`Video saved to ${outputPath}`);
  console.log(`File size: ${stats.size} bytes`);
} else {
  console.log("Failed to download video");
  process.exit(1);
}

Versions of Vidu Q3

The reason Vidu Q3 has multiple snapshots may include potential factors such as variations in output after updates requiring older snapshots for consistency, providing developers a transition period for adaptation and migration, and different snapshots corresponding to global or regional endpoints to optimize user experience. For detailed differences between versions, please refer to the official documentation.

Version
viduq3
viduq3-turbo