Unlock exclusive introductory pricing for the newly launched Gemini 3.5 Flash.
X

Grok Imagine Video

Per Detik:$0.04
Dirilis:Feb 27, 2026

Generate videos from text prompts, animate still images, or edit existing videos with natural language. The API supports configurable duration, aspect ratio, and resolution for generated videos โ€” with the SDK handling the asynchronous polling automatically.

Baru
Penggunaan komersial

Playground untuk Grok Imagine Video

Jelajahi Playground Grok Imagine Video โ€” lingkungan interaktif untuk menguji model dan menjalankan kueri secara real-time. Coba prompt, sesuaikan parameter, dan iterasi secara instan untuk mempercepat pengembangan dan memvalidasi kasus penggunaan.

๐Ÿ“˜ Technical Specifications of Grok Imagine Video

SpecificationDetails
Model IDgrok-imagine-video
ProviderxAI
TypeVideo generation & editing AI
Input TypesText (prompt); optional image or video Text prompts (natural language); optional image input (imageโ†’video); optional video_url for editing existing clips. Editing input video max durations differ by endpoint โ€” reported ~8.7s for some editing flows.
Output Types.mp4 video via temporary URL
Duration Range (generate)1โ€“15 seconds
Resolution480p, 720p (configurable)
Aspect Ratios1:1, 16:9, 9:16
Edit SupportYes โ€” animates & modifies videos up to 8.7s
ModerationContent moderation included
PricingCharged per second, varies by resolution

๐Ÿš€ What is Grok Imagine Video?

Grok Imagine Video is xAIโ€™s advanced video generation and editing AI model exposed through CometAPI. It lets developers generate short, custom videos from natural language prompts and optionally animate still images or edit existing clips. The model supports configurable output length, resolution, and aspect ratio, with built-in content moderation to ensure policy compliance.

๐Ÿง Main features (what differentiates Grok Imagine)

  • Native audio + lip-sync: Generates synchronized ambient audio, effects, and short speech / narration with approximate lip synchronization.
  • Imageโ†’Video / prompt editing: Animate a still or edit existing footage via text prompts (remove/replace objects, retime, restyle).
  • Fast iteration & low latency: Designed for quick feedback loops suitable for creative workflows and product prototyping.
  • Production API: Imagine API exposes programmatic endpoints for batch generation, integration into editing pipelines, and enterprise controls.
  • Multiple โ€œmodesโ€ / styles: User-facing modes (reported examples: Normal / Fun / Spicy or similar presets) to bias outputs for style or permissiveness (note: โ€œSpicyโ€ mode historically enabled NSFW).
Model (company)Max res (public)Max clip len (public)Native audio?StrengthsCaveats
Grok Imagine (xAI)720p6โ€“15sYesFast iteration, strong cost/latency, integrated editing, native audio720p cap; moderation concerns; varying real-world fidelity
Sora (OpenAI)720pโ€“1080p (depends on tier)short (6โ€“15s)YesHigh visual fidelity; strong integration with OpenAI stackMore expensive; constrained moderation/controls
Veo (Google DeepMind)Up to 1080p+short (varies)YesStrong photorealism, stable motionHigher cost; less public experimentation
Runway Gen-4.51080p+short (varies)YesIndustry adoption for creative workflows, high fidelityCostlier; focused on creative tooling
Vidu / Kling / Pika (various specialists)up to 1080pshort (varies)MixedSome offer niche features (Smart Cuts, multi-shot chaining)Varied audio support; differing API maturity

โš ๏ธ Limitations

  • Maximum video length is capped at 15 seconds.
  • Editing retains input video length (โ‰ค 8.7s).
  • Generated URLs are ephemeral โ€” download promptly.

How to access and integrate Grok Imagine Video

Step 1: Sign Up for API Key

Log in toย cometapi.com. If you are not our user yet, please register first. Sign into yourย CometAPI console. Get the access credential API key of the interface. Click โ€œAdd Tokenโ€ at the API token in the personal center, get the token key: sk-xxxxx and submit.

Step 2: Send Requests toย Grok Imagine Videoย API

Select the โ€œgrok-imagine-videoโ€ endpoint to send the API request and set the request body. The request method and request body are obtained from our website API doc. Our website also provides Apifox test for your convenience. Replace <YOUR_API_KEY> with your actual CometAPI key from your account.ย Where to call it: GROKVideo Generation and Video Edit.

Step 3: Send Requests toย Grok Imagine Videoย API

Enter text or upload an image(You can optionally provide a source image to animate.). The Grok Imagine AI API analyzes your input and prepares the content for url. Both text-to-video and image-to-video conversion are supported.

The source image can be provided as:

  • A public URL pointing to an image
  • A base64-encoded data URI(ย e.g.,ย data:image/jpeg;base64,<YOUR_BASE64_IMAGE>)

Step 4: Retrieve and Verify Results

Process the API response to get the generated answer. After processing, the API responds with the task status and output data. It returns a request_id immediately upon submission; use the GET endpoint to check status and retrieve the generated video. Video editing is asynchronous, you may need to poll this endpoint multiple times until the task is complete. Please download promptly.

FAQ

Harga untuk Grok Imagine Video

Jelajahi harga kompetitif untuk Grok Imagine Video, dirancang untuk berbagai anggaran dan kebutuhan penggunaan. Paket fleksibel kami memastikan Anda hanya membayar untuk apa yang Anda gunakan, memudahkan untuk meningkatkan skala seiring berkembangnya kebutuhan Anda. Temukan bagaimana Grok Imagine Video dapat meningkatkan proyek Anda sambil menjaga biaya tetap terkendali.

Pricing Overview

CategoryItemPrice
Input PricingTextN/A (Free)
Image$0.0016
Video per second$0.008
Output Pricing480p$0.04
(Per second by resolution)720p$0.056

Note: When generating video via API, you are charged per second. You will also be charged when using video or images as input.

Kode contoh dan API untuk Grok Imagine Video

Akses kode sampel komprehensif dan sumber daya API untuk Grok Imagine Video guna mempermudah proses integrasi Anda. Dokumentasi terperinci kami menyediakan panduan langkah demi langkah, membantu Anda memanfaatkan potensi penuh Grok Imagine Video dalam proyek Anda.

#!/bin/bash

# Get your CometAPI key from https://api.cometapi.com/console/token
# Export it as: export COMETAPI_KEY="your-key-here"

BASE_URL="https://api.cometapi.com/grok/v1"

# ============================================================
# Step 1: Create Video Generation Task
# ============================================================
echo "Step 1: Creating video generation task..."

CREATE_RESPONSE=$(curl -s --location --request POST "${BASE_URL}/videos/generations" \
  --header "Authorization: Bearer $COMETAPI_KEY" \
  --header "Content-Type: application/json" \
  --data-raw '{
    "model": "grok-imagine-video",
    "prompt": "A glowing crystal-powered rocket launching from the red dunes of Mars, ancient alien ruins lighting up in the background as it soars into a sky full of unfamiliar constellations",
    "duration": 10,
    "aspect_ratio": "16:9",
    "resolution": "720p"
  }')

echo "Create response: $CREATE_RESPONSE"

# Extract task ID using jq (install with: brew install jq)
TASK_ID=$(echo "$CREATE_RESPONSE" | jq -r '.request_id // .id')

if [ "$TASK_ID" == "null" ] || [ -z "$TASK_ID" ]; then
  echo "Error: Failed to get task ID from response"
  exit 1
fi

echo "Task ID: $TASK_ID"

# ============================================================
# Step 2: Poll for Task Status
# ============================================================
echo ""
echo "Step 2: Polling task status..."

while true; do
  QUERY_RESPONSE=$(curl -s --location --request GET "${BASE_URL}/videos/${TASK_ID}" \
    --header "Authorization: Bearer $COMETAPI_KEY")

  STATUS=$(echo "$QUERY_RESPONSE" | jq -r '.data.status')
  PROGRESS=$(echo "$QUERY_RESPONSE" | jq -r '.data.progress')
  echo "Status: $STATUS, Progress: $PROGRESS"

  if [ "$STATUS" == "FAILURE" ] || [ "$STATUS" == "failed" ]; then
    echo "Video generation failed!"
    echo "$QUERY_RESPONSE" | jq -r '.data.fail_reason'
    exit 1
  fi

  if [ "$STATUS" == "SUCCESS" ]; then
    VIDEO_URL=$(echo "$QUERY_RESPONSE" | jq -r '.data.data.video.url')
    echo "Video generation completed!"
    echo "Video URL: $VIDEO_URL"
    break
  fi

  sleep 10
done

cURL Code Example

#!/bin/bash

# Get your CometAPI key from https://api.cometapi.com/console/token
# Export it as: export COMETAPI_KEY="your-key-here"

BASE_URL="https://api.cometapi.com/grok/v1"

# ============================================================
# Step 1: Create Video Generation Task
# ============================================================
echo "Step 1: Creating video generation task..."

CREATE_RESPONSE=$(curl -s --location --request POST "${BASE_URL}/videos/generations" \
  --header "Authorization: Bearer $COMETAPI_KEY" \
  --header "Content-Type: application/json" \
  --data-raw '{
    "model": "grok-imagine-video",
    "prompt": "A glowing crystal-powered rocket launching from the red dunes of Mars, ancient alien ruins lighting up in the background as it soars into a sky full of unfamiliar constellations",
    "duration": 10,
    "aspect_ratio": "16:9",
    "resolution": "720p"
  }')

echo "Create response: $CREATE_RESPONSE"

# Extract task ID using jq (install with: brew install jq)
TASK_ID=$(echo "$CREATE_RESPONSE" | jq -r '.request_id // .id')

if [ "$TASK_ID" == "null" ] || [ -z "$TASK_ID" ]; then
  echo "Error: Failed to get task ID from response"
  exit 1
fi

echo "Task ID: $TASK_ID"

# ============================================================
# Step 2: Poll for Task Status
# ============================================================
echo ""
echo "Step 2: Polling task status..."

while true; do
  QUERY_RESPONSE=$(curl -s --location --request GET "${BASE_URL}/videos/${TASK_ID}" \
    --header "Authorization: Bearer $COMETAPI_KEY")

  STATUS=$(echo "$QUERY_RESPONSE" | jq -r '.data.status')
  PROGRESS=$(echo "$QUERY_RESPONSE" | jq -r '.data.progress')
  echo "Status: $STATUS, Progress: $PROGRESS"

  if [ "$STATUS" == "FAILURE" ] || [ "$STATUS" == "failed" ]; then
    echo "Video generation failed!"
    echo "$QUERY_RESPONSE" | jq -r '.data.fail_reason'
    exit 1
  fi

  if [ "$STATUS" == "SUCCESS" ]; then
    VIDEO_URL=$(echo "$QUERY_RESPONSE" | jq -r '.data.data.video.url')
    echo "Video generation completed!"
    echo "Video URL: $VIDEO_URL"
    break
  fi

  sleep 10
done

Python Code Example

import os
import time
import requests

# Get your CometAPI key from https://api.cometapi.com/console/token, and paste it here
COMETAPI_KEY = os.environ.get("COMETAPI_KEY") or "<YOUR_COMETAPI_KEY>"
BASE_URL = "https://api.cometapi.com/grok/v1"

headers = {
    "Authorization": f"Bearer {COMETAPI_KEY}",
    "Content-Type": "application/json",
}

# ============================================================
# Step 1: Create Video Generation Task
# ============================================================
print("Step 1: Creating video generation task...")

create_payload = {
    "model": "grok-imagine-video",
    "prompt": "A glowing crystal-powered rocket launching from the red dunes of Mars, ancient alien ruins lighting up in the background as it soars into a sky full of unfamiliar constellations",
    "duration": 10,
    "aspect_ratio": "16:9",
    "resolution": "720p",
}

create_response = requests.post(
    f"{BASE_URL}/videos/generations", headers=headers, json=create_payload
)

create_result = create_response.json()
print(f"Create response: {create_result}")

# Extract task ID from the response
task_id = create_result.get("request_id") or create_result.get("id")
if not task_id:
    print("Error: Failed to get task ID from response")
    exit(1)

print(f"Task ID: {task_id}")

# ============================================================
# Step 2: Poll for Task Status
# ============================================================
print("\nStep 2: Polling task status...")

while True:
    query_response = requests.get(
        f"{BASE_URL}/videos/{task_id}", headers=headers
    )
    query_result = query_response.json()

    data = query_result.get("data", {})
    status = data.get("status", "unknown")
    progress = data.get("progress", "0%")
    print(f"Status: {status}, Progress: {progress}")

    if status in ["FAILURE", "failed"]:
        print("Video generation failed!")
        print(f"Reason: {data.get('fail_reason')}")
        exit(1)

    if status == "SUCCESS":
        video_url = data.get("data", {}).get("video", {}).get("url")
        print(f"Video generation completed!")
        print(f"Video URL: {video_url}")
        break

    time.sleep(10)

JavaScript Code Example

// Get your CometAPI key from https://api.cometapi.com/console/token, and paste it here
const api_key = process.env.COMETAPI_KEY || "<YOUR_COMETAPI_KEY>";
const base_url = "https://api.cometapi.com/grok/v1";

const headers = {
  "Authorization": `Bearer ${api_key}`,
  "Content-Type": "application/json",
};

// ============================================================
// Step 1: Create Video Generation Task
// ============================================================
console.log("Step 1: Creating video generation task...");

const createPayload = {
  model: "grok-imagine-video",
  prompt: "A glowing crystal-powered rocket launching from the red dunes of Mars, ancient alien ruins lighting up in the background as it soars into a sky full of unfamiliar constellations",
  duration: 10,
  aspect_ratio: "16:9",
  resolution: "720p",
};

const createResponse = await fetch(`${base_url}/videos/generations`, {
  method: "POST",
  headers: headers,
  body: JSON.stringify(createPayload),
});

const createResult = await createResponse.json();
console.log("Create response:", JSON.stringify(createResult, null, 2));

const taskId = createResult?.request_id || createResult?.id;
if (!taskId) {
  console.log("Error: Failed to get task ID from response");
  process.exit(1);
}

console.log(`Task ID: ${taskId}`);

// ============================================================
// Step 2: Poll for Task Status
// ============================================================
console.log("\nStep 2: Polling task status...");

const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));

while (true) {
  const queryResponse = await fetch(`${base_url}/videos/${taskId}`, {
    method: "GET",
    headers: headers,
  });

  const queryResult = await queryResponse.json();
  const data = queryResult?.data || {};
  const status = data?.status || "unknown";
  const progress = data?.progress || "0%";
  console.log(`Status: ${status}, Progress: ${progress}`);

  if (["FAILURE", "failed"].includes(status)) {
    console.log("Video generation failed!");
    console.log(`Reason: ${data?.fail_reason}`);
    process.exit(1);
  }

  if (status === "SUCCESS") {
    const videoUrl = data?.data?.video?.url;
    console.log("Video generation completed!");
    console.log(`Video URL: ${videoUrl}`);
    break;
  }

  await sleep(10000);
}