Skip to content

Yapay Zeka Video Üretimi

Bir metin isteminden kısa videolar oluşturun. Platform, isteği üç sağlayıcıdan birine (Kling OmniVideo, Google Veo veya OpenAI Sora) yönlendirir ve isteğe bağlı yapılandırılmış kontrolleri destekler. İsteğe bağlı parametreler atlandığında seçilen model en iyi ayarları sağlar. Sağlandıklarında, her sağlayıcının yetenek sınırlarına bağlı olarak modelin çıkarımını geçersiz kılarlar.

Video oluşturma, tüm yapay zeka yetenekleri tarafından kullanılan aynı mesaj + akış hattından geçer: 'capabilityKey: "ai.video.generate" ile bir mesaj gönderirsiniz, ardından ilerlemeyi ve nihai sonucu yayınlayan bir SSE akışına abone olursunuz.

Uç noktalar

MethodPathDescriptionAuthRate Limit
POST/ai/sessions/:sessionId/messagesSend a message that triggers a video generation runJWT + Entitlement20/min
GET/ai/sessions/:sessionId/messages/:messageId/streamSSE stream of progress and completion eventsJWT + Entitlement20/min
POST/ai/sessions/:sessionId/messages/:assistantMessageId/stopCancel an in-progress runJWT + Entitlement30/min

Video oluşturmak, etkin planda "ai.video.generate" yetkisini gerektirir.


Sağlayıcı Seçimi

Providerprovider valueStrengths
Google VeoveoHigh fidelity, supported aspect ratios 16:9 and 9:16, fixed 8 s at 1080p / 4k
OpenAI SorasoraUp to 20 s, audio supported, image reference supported
Kling OmniVideoklingAspect ratios 16:9, 9:16, 1:1; supports negative prompt, image and video references

'Sağlayıcı' atlanırsa platform tarafından yapılandırılmış varsayılan sağlayıcı kullanılır. Açık ancak desteklenmeyen değerler net bir doğrulama hatası döndürüyor.


İsteğe Bağlı Parametreler

Tüm isteğe bağlı alanlar, mesaja gömülü yapılandırılmış araç girişine uygulanır. Bunları istek gövdesinin en üst düzeyine "content" ve "capabilityKey" ile birlikte gönderin, veya atlandığında modelin çıkarım yapmasına izin verin.

FieldTypeAllowed valuesNotes
providerstringkling | veo | soraDefaults to configured provider
aspectRatiostring16:9, 9:16, 1:1Provider-dependent; 1:1 only on Kling
durationnumbersecondsSora ≤ 20 s; Veo at 1080p/4k = 8 s; Kling ∈
sizestringWIDTHxHEIGHTSora only; takes priority over aspectRatio
resolutionstring480p, 720p, 1080p, 4kVeo and Sora
negativePromptstringfree-formKling only
seednumberintegerWhere supported by the provider
generateAudiobooleanSora and Kling
inputImageUrlstringimage URLReference / starting frame
inputVideoUrlstringvideo URLReference clip (Kling)
referenceImagesstring[]image URLsMultiple references
referenceVideosstring[]video URLsMultiple references (Kling)
styleTokensstring[]free-form hintsLighting, mood, cinematic adjectives
modelstringprovider model keyOverride the default model for the chosen provider
metadataobjectfree-formEchoed back in the completion event for client correlation

'4:3', '3:4' ve '21:9' en boy oranları şema tarafından ileriye dönük uyumluluk için kabul edilir, ancak henüz standart kullanıcı arayüzünde gösterilmemiştir ve seçilen sağlayıcı bunları desteklemiyorsa kaldırılacaktır.


POST /ai/sessions/:sessionId/messages

Video oluşturma çalıştırmasını tetikleyen bir kullanıcı mesajı gönderin. İstek, yardımcı mesaj kimliği ve çalıştırma kimliğiyle hemen geri döner; İlerlemeyi ve son video URL'sini almak için SSE akışına abone olun.

Rica etmek

Kimlik Doğrulama: JWT Taşıyıcı jetonu + aktif AI yetkisi (ai.video.generate). Hız limiti: 20/dak.

Talep Gövdesi

FieldTypeRequiredDescription
contentstringYesFree-text prompt describing the desired video
capabilityKeystringYesSet to ai.video.generate to skip intent detection
providerstringNoOne of kling, veo, sora
modelstringNoProvider-specific model identifier
aspectRatiostringNoOne of 16:9, 9:16, 1:1, 4:3, 3:4, 21:9
durationnumberNoVideo duration in seconds (1–60). Numeric strings are accepted and coerced (e.g. "12"12).
sizestringNoExact pixel size as WIDTHxHEIGHT (Sora)
resolutionstringNo480p, 720p, 1080p, or 4k
negativePromptstringNoWhat the video should avoid; max 4000 chars
seednumberNoRandom seed for reproducibility (integer; numeric strings coerced)
generateAudiobooleanNoGenerate an audio track alongside the video
inputImageUrlstringNohttp(s) URL of a reference / starting image
inputVideoUrlstringNohttp(s) URL of a reference / starting video
referenceImagesstring[]Nohttp(s) URLs of reference images
referenceVideosstring[]Nohttp(s) URLs of reference videos
styleTokensstring[]NoStylistic hints (max 16 items, ≤ 64 chars each)
metadataobjectNoFree-form metadata echoed in the completion event
effortModestringNobasic, thinking, or pro — routes model selection
idempotencyKeystringNoClient-generated key to dedupe retries

Kimliği doğrulanmış istek aktöre bilgi sağlar; istek gövdeleri asla "accountId", "chainerId" veya "workspaceId" içermez.

Cevap

json
{
  "data": {
    "sessionId": "550e8400-e29b-41d4-a716-446655440000",
    "userMessage": {
      "id": "550e8400-e29b-41d4-a716-446655440010",
      "role": "user",
      "content": "A serene sunset over snow-capped mountains, cinematic.",
      "createdAt": "2026-05-22T10:00:00Z",
      "toolCalls": []
    },
    "assistantMessage": {
      "id": "550e8400-e29b-41d4-a716-446655440011",
      "role": "assistant",
      "content": "",
      "createdAt": "2026-05-22T10:00:00Z",
      "runId": "550e8400-e29b-41d4-a716-446655440012",
      "status": "pending",
      "toolCalls": [],
      "modelName": "Veo",
      "providerKey": "google"
    },
    "run": {
      "id": "550e8400-e29b-41d4-a716-446655440012",
      "status": "running"
    },
    "resolvedModel": {
      "modelKey": "veo-2.0-generate-001",
      "displayName": "Google Veo",
      "provider": "google",
      "reason": "explicit",
      "requestedModelKey": null,
      "missingCapabilities": []
    }
  }
}

Hata Yanıtları

HTTPMeaning
400Schema validation failed, or an unsupported provider value was sent
401Missing or invalid JWT
402Insufficient credits to reserve the requested duration
400Capability-aware validation error — for example sending bpm with ai.video.generate returns bpm is only valid for ai.audio.generate in details.fields[0].message. See Messages: Capability Parameters.
403Plan does not include ai.video.generate
404sessionId not found
429Rate limit exceeded

Kod Örnekleri

bash
curl -X POST "$BASE_URL/ai/sessions/$SESSION_ID/messages" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "A serene sunset over snow-capped mountains, cinematic.",
    "capabilityKey": "ai.video.generate"
  }'
bash
curl -X POST "$BASE_URL/ai/sessions/$SESSION_ID/messages" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Hand-drawn animation of a fox chasing leaves through a forest.",
    "capabilityKey": "ai.video.generate",
    "provider": "sora",
    "aspectRatio": "9:16",
    "resolution": "720p",
    "duration": 12,
    "generateAudio": true
  }'
bash
curl -X POST "$BASE_URL/ai/sessions/$SESSION_ID/messages" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Extend this clip with the same style for another 5 seconds.",
    "capabilityKey": "ai.video.generate",
    "provider": "kling",
    "aspectRatio": "16:9",
    "duration": 5,
    "negativePrompt": "low quality, watermark",
    "referenceImages": ["https://cdn.example.com/style-frame.png"]
  }'
javascript
const res = await fetch(
  `${BASE_URL}/ai/sessions/${sessionId}/messages`,
  {
    method: "POST",
    headers: {
      Authorization: `Bearer ${TOKEN}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      content: "A timelapse of a city skyline at golden hour.",
      capabilityKey: "ai.video.generate",
      provider: "veo",
      aspectRatio: "16:9",
      resolution: "1080p",
      duration: 8,
    }),
  },
);
const { data } = await res.json();
const { assistantMessage, run } = data;
console.log("Run id:", run.id, "stream:", assistantMessage.id);
python
import requests

res = requests.post(
    f"{BASE_URL}/ai/sessions/{session_id}/messages",
    headers={
        "Authorization": f"Bearer {TOKEN}",
        "Content-Type": "application/json",
    },
    json={
        "content": "A drone shot of waves crashing on a rocky shore.",
        "capabilityKey": "ai.video.generate",
        "provider": "sora",
        "resolution": "720p",
        "aspectRatio": "16:9",
        "duration": 10,
    },
)
body = res.json()["data"]
assistant_id = body["assistantMessage"]["id"]
run_id = body["run"]["id"]

GET /ai/sessions/:sessionId/messages/:messageId/stream

Devam eden bir yardımcı mesajı için Sunucu Tarafından Gönderilen Etkinlikler akışını açın. Akış, çalıştırmanın ömrü boyunca açık kalır ve terminal olayından kısa bir süre sonra kapanır.

Rica etmek

Kimlik Doğrulama: JWT Taşıyıcı jetonu + aktif AI yetkisi. Hız limiti: 20/dak.

Cevap

Olay dizisi — video oluşturma

text
event: run.started
event: tool.started        toolKey=media.video.generate
event: tool.progress       message="Queued video generation..."
event: tool.progress       message="Generating video..."
event: tool.progress       message="Saving generated video..."
event: tool.completed      toolKey=media.video.generate  data={ videoUrl, ... }
event: message.delta       (assistant prose summarising the result)
event: message.completed
event: run.settlement.completed

"tool.progress" olaylarının sayısı ve zamanlaması sağlayıcıya bağlıdır; aşama etiketleri sabittir, yüzdeler değildir.

Etkinlik yükü — tool.completed

json
{
  "eventId": 6,
  "type": "tool.completed",
  "runId": "550e8400-e29b-41d4-a716-446655440012",
  "stepId": "tc_abc123",
  "timestamp": "2026-05-22T10:00:14Z",
  "payload": {
    "toolKey": "media.video.generate",
    "callId": "tc_abc123",
    "executionMs": 12480,
    "success": true,
    "data": {
      "success": true,
      "provider": "veo",
      "model": "veo-2.0-generate-001",
      "videoUrl": "https://media.chainabit.com/ai-generated/...mp4",
      "thumbnailUrl": null,
      "duration": 8,
      "aspectRatio": "16:9",
      "size": null,
      "resolution": "1080p",
      "storageKey": "ai/generated/video/...",
      "externalJobId": "veo-op-1234",
      "status": "completed"
    }
  }
}

Sağlayıcı status: "pending" döndürdüğünde (oylama penceresini aşan uzun süredir devam eden işler için tipiktir), mevcut olduğunda nihai URL'yi almak için GET /ai/sessions/:sessionId/messages/:messageId yoluyla mesajı yoklayın.

Kod Örnekleri

javascript
const stream = new EventSource(
  `${BASE_URL}/ai/sessions/${sessionId}/messages/${assistantId}/stream`,
  { withCredentials: true },
);

stream.addEventListener("tool.progress", (event) => {
  const { payload } = JSON.parse(event.data);
  if (payload.activityType === "video_generation") {
    console.log("progress:", payload.message);
  }
});

stream.addEventListener("tool.completed", (event) => {
  const { payload } = JSON.parse(event.data);
  if (payload.toolKey === "media.video.generate") {
    console.log("Video ready:", payload.data.videoUrl);
  }
});

stream.addEventListener("run.settlement.completed", () => stream.close());
python
import sseclient
import requests, json

response = requests.get(
    f"{BASE_URL}/ai/sessions/{session_id}/messages/{assistant_id}/stream",
    headers={"Authorization": f"Bearer {TOKEN}"},
    stream=True,
)
client = sseclient.SSEClient(response)
for event in client.events():
    if event.event == "tool.completed":
        payload = json.loads(event.data)["payload"]
        if payload["toolKey"] == "media.video.generate":
            print("video:", payload["data"]["videoUrl"])
            break

POST /ai/sessions/:sessionId/messages/:assistantMessageId/stop

Devam eden bir video oluşturma çalışmasını iptal edin. Kısmi durum "durduruldu" durumuyla sonlandırılır. Henüz tamamlanmayan çalıştırmalar için ayrılan krediler serbest bırakılır; Halihazırda bir çıktı üreten çalışmalar normal şekilde tutulur ve şarj edilir.

Rica etmek

Kimlik Doğrulama: JWT Taşıyıcı jetonu + aktif AI yetkisi. Hız limiti: 30/dak.

Cevap

json
{
  "data": {
    "id": "550e8400-e29b-41d4-a716-446655440011",
    "status": "stopped"
  }
}

Kod Örneği

bash
curl -X POST "$BASE_URL/ai/sessions/$SESSION_ID/messages/$ASSISTANT_ID/stop" \
  -H "Authorization: Bearer $TOKEN"

Davranış Notları

  • Geriye dönük uyumluluk: Yalnızca { content, capabilityKey: "ai.video.generate" } gönderimi hala çalışıyor. Tüm yapılandırılmış parametreler isteğe bağlıdır.
  • Çakışmalar: "size"yi destekleyen bir sağlayıcıya hem "size" hem de "aspectRatio" sağlandığında "size" kazanır; çakışma, çalıştırmanın meta verilerine kaydedilir.
  • Kenetleme: Aralık dışı süreler ve desteklenmeyen boyutlar, mümkün olduğunda sağlayıcının güvenli değerlerine sabitlenir, aksi takdirde açık bir hatayla reddedilir.
  • Depolama: Oluşturulan videolar çalışma alanının medya grubuna yüklenir ve zaman sınırlı bir URL olarak döndürülür. URL'nin süresi dolduktan sonra yenilemek için ilgili oluşturma kaydını mesaj kaynağı aracılığıyla getirin.
  • "16:9", "9:16", "1:1" dışındaki en boy oranları şema tarafından ileri uyumluluk açısından kabul edilir ancak henüz varsayılan kullanıcı arayüzü yüzeylerinde gösterilmemiştir.

İlgili

  • AI Mesajları — tüm AI yetenekleri tarafından kullanılan genel mesaj / akış hattı.
  • AI Oturumları — video çalışmasını barındıran oturumu oluşturun.
  • Generative Media API — kaynak başına izinle yönlendirilen alternatif, bağlama duyarlı medya hattı.

Built with purpose.