Sinh video AI
Tạo video từ text hoặc ảnh. Hỗ trợ Kling, Pika, Runway, Luma — chọn theo nhu cầu hoặc để Smart Router tự chọn.
⏱ Lưu ý: Sinh video là job bất đồng bộ (async) — mất 30s-3 phút tùy model. Khuyến nghị dùng Webhook hoặc poll endpoint /v1/jobs/:id.
Endpoint
POST https://api.aigate.id.vn/v1/generate/video
Tham số đầy đủ
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
prompt | string | Có (nếu không có image) | Mô tả video cần tạo |
image | string | Có (nếu image-to-video) | URL ảnh đầu vào |
model | string | Không | auto (mặc định) hoặc model cụ thể |
duration | integer | Không | Độ dài video (giây): 3, 5, 10 — tùy model |
aspect_ratio | string | Không | 16:9, 9:16, 1:1 |
resolution | string | Không | 480p, 720p, 1080p |
motion_strength | float | Không | Mức chuyển động (0.1-1.0), mặc định 0.5 |
fps | integer | Không | Khung hình/giây (8, 16, 24, 30) |
seed | integer | Không | Tái tạo cùng kết quả |
webhook_url | string | Không | Nhận callback khi xong (khuyến nghị) |
Models hỗ trợ
| Model | Credits | Tốc độ | Tối đa | Phù hợp với |
|---|---|---|---|---|
auto | 80-200 | ~1m | 10s | Smart Router tự chọn |
kling-1.6 | 80 | ~45s | 5s 720p | Cảnh tự nhiên, người |
kling-pro | 200 | ~2m | 10s 1080p | Chất lượng cao nhất |
pika-1.5 | 60 | ~30s | 3s 720p | Nhanh, hiệu ứng nghệ thuật |
runway-gen3 | 180 | ~1.5m | 10s 1080p | Cinematic, smooth motion |
luma-dream | 150 | ~1m | 5s 720p | Realistic, depth tốt |
hailuo-01 | 100 | ~1m | 6s 720p | Image-to-video, character |
Ví dụ
1. Text-to-video
curl -X POST https://api.aigate.id.vn/v1/generate/video \
-H "Authorization: Bearer aig_xxx" \
-H "Content-Type: application/json" \
-d '{
"prompt": "một con rồng vàng cuộn quanh ngôi nhà cổ, ánh sáng hoàng hôn",
"model": "kling-pro",
"duration": 5,
"aspect_ratio": "16:9",
"resolution": "1080p",
"webhook_url": "https://your-app.com/webhook/aigate"
}'
Phản hồi ngay (job created):
{
"ok": true,
"job_id": "vid_x9k2lp",
"status": "queued",
"estimated_seconds": 90,
"credits_held": 200
}
2. Image-to-video (làm ảnh chuyển động)
{
"image": "https://cdn.aigate.id.vn/img/abc123.png",
"prompt": "camera kéo nhẹ về phía trước, lá cây rung trong gió",
"model": "hailuo-01",
"duration": 5,
"motion_strength": 0.6
}
3. Kiểm tra trạng thái job
GET https://api.aigate.id.vn/v1/jobs/vid_x9k2lp
Authorization: Bearer aig_xxx
Khi đang xử lý:
{
"id": "vid_x9k2lp",
"status": "running",
"progress": 0.45,
"started_at": "2026-04-24T16:30:00Z"
}
Khi xong:
{
"id": "vid_x9k2lp",
"status": "succeeded",
"url": "https://cdn.aigate.id.vn/vid/x9k2lp.mp4",
"thumbnail": "https://cdn.aigate.id.vn/vid/x9k2lp_thumb.jpg",
"duration": 5.0,
"resolution": "1080p",
"credits_used": 200,
"completed_at": "2026-04-24T16:31:30Z"
}
Khi lỗi:
{
"id": "vid_x9k2lp",
"status": "failed",
"error": "upstream_timeout",
"credits_refunded": 200
}
💡 Refund tự động: Nếu job thất bại do lỗi từ provider (không phải lỗi prompt), AIGate tự động hoàn lại credits. Bạn không bị mất credits cho job lỗi.
Polling vs Webhook
Cách 1: Polling (đơn giản)
// JavaScript
async function waitForVideo(jobId) {
while (true) {
const r = await fetch(`https://api.aigate.id.vn/v1/jobs/${jobId}`, {
headers: { Authorization: `Bearer ${KEY}` }
});
const job = await r.json();
if (job.status === 'succeeded') return job.url;
if (job.status === 'failed') throw new Error(job.error);
await new Promise(r => setTimeout(r, 5000)); // chờ 5s
}
}
Cách 2: Webhook (khuyến nghị)
Cung cấp webhook_url trong yêu cầu. AIGate sẽ POST tới URL đó khi xong (có chữ ký HMAC để verify).
Xem chi tiết: Webhooks.
Giới hạn & Best practices
- Concurrency: gói Free/Starter giới hạn 2 video đồng thời, Creator/Pro 5, Scale 20
- Queue position: trả về trong response để bạn báo cho user biết
- Retry: nếu nhận status
failedvớierror: "upstream_timeout", thử lại sau 30s — AIGate có thể chuyển sang model dự phòng - Storage: video lưu trên CDN AIGate trong 30 ngày (gói Free), 90 ngày (Starter+), vĩnh viễn (Pro+)
- Tải về sớm: nếu cần lưu lâu dài, hãy download về storage riêng (S3, R2)
Mẹo viết prompt video tiếng Việt
- ✓ Mô tả chuyển động cụ thể: "camera xoay tròn", "lá rơi nhẹ nhàng", "khói bốc lên chậm rãi"
- ✓ Tránh chuyển động phức tạp: model 5s không đủ thời gian cho cốt truyện — chỉ làm 1 hành động đơn giản
- ✓ Image-to-video tốt hơn text — sinh ảnh trước (hoặc dùng thư viện), sau đó animate
- ✗ Tránh nhiều người/vật chuyển động cùng lúc — dễ bị artifact
Tiếp theo
👉 Webhooks — không phải poll, nhận thông báo tự động
👉 Sinh ảnh AI — kết hợp image + video pipeline