SimpliGen Docs
AI Agents

Control API referansı

SimpliGen'in makinenizde gösterdiği yerel HTTP API, özel entegrasyonlar oluşturmak ve nesli başsız çalıştırmak için.

SimpliGen, uygulama açıkken makinenizde küçük bir HTTP Control API çalıştırır. Bu, MCP sunucusunun konuştuğu aynı API olup, doğrudan SimpliGen'i kendi betikleri, hizmetleri veya ajanlardan yönlendirebilmeniz için sunulur, uygulama sistem tepsisine küçültülü halde bile.

MCP vs Control API

Sadece bir yapay zeka ajanının (Claude, Codex, vb.) SimpliGen'i kullanmasını istiyorsanız, bunun yerine MCP sunucusunu kurun, bu API'ı sarar. Control API'ı doğrudan herhangi bir dilde özel entegrasyon yazarken kullanın.

Base URL ve keşif

Sunucu sadece geri döngü bağlantısına bağlanır ve varsayılan olarak şu adrestir:

http://127.0.0.1:48199

Eğer o port meşgulse, SimpliGen işletim sistemi tarafından atanan bir porta geri döner. Geçerli port (ve API sürümü) her zaman uygulamanın kullanıcı veri dizinindeki bir keşif dosyasına yazılır:

# Windows
%APPDATA%\simpligen\agent-api.json
# macOS
~/Library/Application Support/simpligen/agent-api.json
# Linux
~/.config/simpligen/agent-api.json
agent-api.json
{ "port": 48199, "version": 1 }

48199 sabit kodlamak yerine canlı portu bulmak için bu dosyayı okuyun.

Gereksinimler

Control API sadece uygulama açık olduğunda ve makine ajan erişimine yetkili olduğunda çalışır (lisansınızın bir parçasıdır). İstekler sadece Host başlığı bir geri döngü takma adı olduğunda sunulur, başka hiçbir şey 403 forbidden_host alır (bir DNS yeniden bağlama koruması).

Kimlik Doğrulama

GET /health hariç her uç nokta Authorization başlığında bir eşleştirme jetonu gerektirir:

Authorization: Bearer sg-agent-xxxxxxxx...

Ayarlar → Ajan Bağla altında uygulamada bir jeton oluşturun (bkz. Ajan Bağla). Ham jeton bir kez gösterilir, sadece bir karma depolanır. Her jeton, bulut nesli için isteğe bağlı bir harcama limiti taşıyabilir. Uygulamada bir jetonu iptal etmek hemen etkili olur.

Eksik veya geçersiz jeton 401 unauthorized döndürür.

Kurallar

  • İstekler: JSON gövdeleri (Content-Type: application/json), en fazla 50 MB.
  • Yanıtlar: her zaman JSON.
  • Hatalar: 2xx olmayan yanıtların şekli { "errorCode": "...", "message": "..." }.
  • Kimlikler: ön ayarlar presetId (+ isteğe bağlı packId) ile adreslendirilir, işler jobId ile.

Minimum kimlik doğrulamalı çağrı:

TOKEN="sg-agent-..."
curl -s http://127.0.0.1:48199/status -H "Authorization: Bearer $TOKEN"

Sağlık

GET /health

Canlılık sondası. Kimlik doğrulama yok.

{ "ok": true, "name": "simpligen", "version": 1 }

Yetenekler

GET /capabilities

Oluşturabileceğiniz her ön ayarı listeler, her bir (preset, mediaType) başına bir giriş, giriş, seçenekler, yerel hazırlığı ve bulut uygunluğu/maliyeti ile.

{
  "capabilities": [
    {
      "packId": "local-core-pack",
      "presetId": "z-image-turbo",
      "mediaType": "image",
      "name": "Z-Image Turbo",
      "description": "Ultra-fast, high-quality images in seconds",
      "apiProvider": null,
      "inputs": {
        "acceptsPrompt": true,
        "requiresPrompt": true,
        "requiresImage": false,
        "acceptsReferenceImages": null,
        "acceptsVideo": false,
        "acceptsAudio": false,
        "acceptsReferenceVideos": false,
        "acceptsReferenceAudios": false,
        "supportsLoras": true
      },
      "options": {
        "steps": null,
        "cfg": null,
        "duration": null,
        "resolution": null,
        "aspectRatio": ["1:1", "3:4", "4:3", "9:16", "16:9"]
      },
      "cloudAliasTo": null,
      "localReady": true,
      "cloudEligible": true,
      "cloudCost": 4
    }
  ]
}
AlanAnlam
localReadyTüm model dosyaları yüklüdür, ön ayar şimdi yerel olarak çalıştırılabilir.
cloudEligibleÖn ayar SimpliGen Cloud üzerinde çalıştırılabilir.
cloudCostBir bulut çalışması için yaklaşık kredi maliyeti (uygun değilse null).
apiProviderDış API ön ayarları için null olmayan (ör. OpenAI, Google) bu Control API dağıtamaz.
inputs / optionsÖn ayarın kabul ettiği şey ve POST /generate için iletebileceğiniz seçenek aralıkları/en boy oranları. steps/cfg sadece gelişmiş kontrolleri gösterin ön ayarlar için null olmayan değerlerdir.
promptFamilyBu ön ayar için ipucu verme rehberi ailesi (örneğin z-image), veya hiçbiri beyan edilmemiş olduğunda null. GET /prompt-guide/:presetId rehberi döndürür.
inputs.requiresPromptYerleşik talimatları olan ön ayarlar için false (kırpma, baş veya kıyafet takası, ölçeklendirme): boş prompt geçerlidir ve göndereceğiniz herhangi bir metin ekstra notlar olarak eklenir.

Durum

GET /status

{
  "engineRunning": true,
  "engineVersion": "v0.26.0",
  "cloudConnected": true,
  "creditBalance": 1280,
  "activeProject": { "id": "default", "name": "My Project" },
  "characters": { "enabled": true, "base": 1, "edit": 1, "i2v": 1, "enhancePresets": 2 }
}

POST /engine/start

Yerel motor zaten çalışmıyorken başlatır. Gövde almaz.

{ "engineRunning": true, "engineVersion": "v0.37.0", "engineStarting": false }

Soğuk bir önyükleme, isteğin beklediğinden daha uzun sürer. Bu gerçekleştiğinde yanıt 202 ile engineStarting: true ve motor önyüklemeye devam eder, bu nedenle GET /status engineRunning doğru olana kadar yoklayın.

Zaten çalışan bir motoru başlatmak 200 ile alreadyRunning: true döndürür ve hiçbir şeyi değiştirmez. Motor yüklü değilse yanıt 409 engine_not_installed: yüklemek multi gigabayt indirme olup uygulama için bir iş değil, API için değil. Motorun çalışmayı reddettiği bir makine 409 engine_unsupported_hardware yanıtı verir, bu yeniden denemek düzeltmez.

POST /engine/stop

Yerel motoru durdurur ve VRAM'ını serbest bırakır. Bulut nesli etkilenmez. Zaten kapalı olan bir motoru durdurmak bir başarıdır.

POST /engine/restart

Onu durdurur ve yeniden başlatır, kilitli bir motor için veya özel bir node yüklendikten veya kaldırıldıktan sonra. Başlatma sırasında 202 davranışı ile aynı, önyükleme istek daha uzun olduğunda.

Projeler

Projeler nesli tutan kaplarıdır.

GET /projects

{ "projects": [ { "id": "default", "name": "My Project", "slug": "my-project" } ] }

POST /projects

Request
{ "name": "Campaign assets" }

201 ile { "project": { ... } } döndürür. name gereklidir (aksi takdirde 400 invalid_options).

Yüklemeler

Girişler (kaynak görüntüler, referans görüntüler, kaynak videolar) asla yerel yollar olarak geçirilmez. Baytları önce yükleyin ve döndürülen tanıtıcıyı POST /generate öğesine geçirin.

POST /uploads

Request
{ "filename": "ref.png", "dataBase64": "<base64 of the file bytes>" }
Response (201)
{ "handle": "a1b2c3d4.png", "sizeBytes": 51234 }

Maksimum yükleme 100 MB'tır (413 asset_too_large). Desteklenmeyen uzantılar 400 unsupported_file_type döndürür.

Oluştur

POST /generate

Bir nesil sıraya koyar ve hemen bir jobId ile döner. İşin sonucu için GET /jobs/:id yoklayın (bkz. İşler).

Request
{
  "presetId": "z-image-turbo",
  "packId": "local-core-pack",
  "mediaType": "image",
  "prompt": "a red fox in the snow, cinematic",
  "backend": "auto",
  "project": "default",
  "image": "a1b2c3d4.png",
  "referenceImages": [{ "handle": "e5f6.png", "label": "style" }],
  "loras": [
    { "name": "RoomLora", "weight": 0.85 },
    { "name": "Mia", "weight": 0.75 }
  ],
  "options": { "aspectRatio": "16:9", "steps": 8, "negativePrompt": "blurry, watermark" }
}
AlanGerekliNotlar
presetIdevetGET /capabilities öğesinden.
mediaTypeevet"image" veya "video".
packIdhayırVerilirse, ön ayarın paketi eşleşmelidir.
promptkoşulluÖn ayar inputs.requiresPrompt: false bildirmezse gereklidir. Bu ön ayarların yerleşik talimatları vardır: olduğu gibi çalıştırmak için "" gönderin veya ekstra notlar iletmek için metin ekleyin.
backendhayır"auto" (varsayılan), "local" veya "cloud". Auto, yüklü ise yerel tercih eder, aksi takdirde bağlı ise bulut tercih eder.
imagekoşulluYükleme tutamacı. Görüntü-to-X ön ayarları için gereklidir (inputs.requiresImage).
videokoşulluVideo giriş ön ayarları için yükleme tutamacı.
referenceImageskoşulluReferans görüntü ön ayarları için tutamaçlar veya { handle, label } dizisi.
audiokoşulluSes destekli ön ayarlar için yükleme tutamacı (dudak senkronizasyonu, ses-video). Ön ayar acceptsAudio bildirdiğinde gereklidir, aksi takdirde iş needs_audio ile reddedilir.
audioStartSecondshayırParçada başlayabileceği yer, saniye cinsinden. options altında da kabul edilir.
referenceVideoskoşulluReferans klip ön ayarları için tutamaçlar, tutamaç veya { handle, soundtrackMode, durationSeconds } dizisi.
referenceAudioskoşulluReferans ses ön ayarları için tutamaçlar veya { handle, durationSeconds } dizisi.
lorashayırUygulanacak { name, weight } dizisi, inputs.supportsLoras doğru olan ön ayarlar için. name, LoRA'nın görünen adı (veya dosya adı) GET /loras ile eşleşir, weight LoRA'nın varsayılan gücü olarak varsayılır. Bilinmeyen adlar 400 unknown_lora döndürür. Şimdilik sadece yerel backend.
projecthayırProje id veya slug. Etkin projeye varsayılır.
options.aspectRatiohayırÖn ayarın desteklenen oranlarından biri olmalıdır.
options.steps / options.cfghayırÖn ayarın reklamı yapılan aralıkları içinde.
options.negativePrompthayırEkstra negatif terimler (UI'nin Gelişmiş Seçenekler negatifi). negativePrompt olarak da üst düzeyde kabul edilir. Toplamsal: ön ayarın varsayılan negatifi her zaman uygulanır ve terimleriniz bundan sonra eklenir (, ). Ön ayar varsayılanını kullanmak için hiçbir şey göndermemeyin. SimpliGen Cloud çalışmalarında ekstra terimler gönderilmez ve ön ayarın varsayılan negatifi olduğu gibi kullanılır.
options.durationSecondshayırVideo süresi.
options.resolutionhayırÇözünürlük katmanı etiketi.
Response (201)
{ "jobId": "gen_abc123", "backend": "local", "status": "queued" }

Bir bulut işi için yanıt ayrıca "cloudCost": <credits> içerir.

Arka uçlar

Dış API ön ayarları (burada apiProvider null olmayan, örneğin GPT Image 2, Veo) burada dağıtılamaz, 400 unsupported_backend alırsınız. Yerel veya SimpliGen Cloud ön ayarını kullanın. Cloud bağlı bir hesap gerektirir (400 cloud_not_connected), yerel ise modellerin yüklü olması gerekir (400 preset_not_installed, önce hazırlayın).

GET /loras

Kullanıcının yüklü LoRA'larını listeler, böylece ajanlar POST /generate öğesinin loras dizisine neyi geçireceğini keşfedebilir. name (görünen ad) üzerinde eşleştirin.

Response
{
  "loras": [
    { "name": "RoomLora", "filename": "RoomLora_000002400.safetensors", "baseModel": "flux", "triggerWords": "a room", "defaultStrength": 0.9 },
    { "name": "Mia", "filename": "mia_v2.safetensors", "baseModel": "flux", "triggerWords": "mia", "defaultStrength": 1.0 }
  ]
}

LoRA'yı ön ayarın temel modeline (baseModel) uyduğu yerde geçirin ve onu etkinleştirmek için kendi tetik sözcüklerini istemlerinizde kullanın.

İpucu Rehberleri

GET /prompt-guide/:presetId

Ön ayar için ipucu kılavuzunu döndürür: modeli bir ipucuyu nasıl okur, yapıyı ve uzunluğu tercih eder, kamera ve hareket sözcükleri, negatifler, karakterleri nasıl sözcük oluşturur ve çalışılmış örnekler. POST /generate için prompt yazılmadan önce okuyun. Kılavuzlar SimpliGen tarafından sunulur ve önbelleğe alınır, bu nedenle çevrimdışı modda da çalışırlar, açılmadan önce her kılavuzun son kopyasından itibaren.

Response (200)
{
  "presetId": "z-image-turbo",
  "family": "z-image",
  "familyName": "Z-Image",
  "version": 1,
  "generic": false,
  "text": "# Z-Image prompting guide ...\n\n## Negative prompts in SimpliGen\n...\n\n## Notes for this preset\n\n..."
}
AlanAnlam
family / familyNameÖn ayarın çözüldüğü rehber ailesi ve görünen adı (bkz. GET /capabilities öğesine promptFamily).
versionBu ailenin kılavuzunun sürümü.
genericBu ön ayar için model özel rehberi yoksa doğru. text bunun açıkça söyler ve sadece genel tavsiye verir.
textAile rehberi Markdown'da, ardından her rehberin paylaştığı ## Negative prompts in SimpliGen bölümü. Ön ayarın kendi notları varsa, bir ## Notes for this preset bölümü eklenir.
HTTPerrorCodeNe zaman
404unknown_presetO id ile ön ayar yok.
503guides_unavailableRehberler yüklenemedi ve önbelleğe alınan kopya yoktur: "Ipucu rehberleri yüklenemedi. İnternet bağlantısını kontrol edin ve yeniden deneyin."

İşler

GET /jobs/:id

{
  "job": {
    "jobId": "gen_abc123",
    "status": "completed",
    "backend": "local",
    "mediaType": "image",
    "presetId": "z-image-turbo",
    "projectId": "default",
    "resultUrl": "local-file:///C:/Users/you/.../output.png",
    "resultPath": "C:/Users/you/.../output.png",
    "errorMessage": null,
    "createdAt": "2026-06-25T20:00:00.000Z",
    "completedAt": "2026-06-25T20:00:08.000Z"
  }
}

status queued, processing, completed, failed öğesinden biridir. Başarısında, resultPath çözülen yerel dosya yoludur, başarısızlıkta errorMessage nedenini açıklar. Bilinmeyen id 404 job_not_found döndürür.

GET /jobs

En son 25 işi { "jobs": [ ...job... ] } olarak döndürür.

POST /jobs/:id/cancel

Sıraya alınan/çalışan bir işi iptal eder. { "jobId", "status", "note?" } döndürür. Sunucuda uçuştaki bir bulut işi yine de tamamlanabilir (not'ta belirtilir).

Ön Ayarlar Hazırlama

Yerel ön ayarlar ilk kullanımda model dosyalarını indirir. Bunları önceden hazırlayabilirsiniz.

POST /presets/prepare

Request
{ "presetId": "z-image-turbo", "mediaType": "image" }

200 { "status": "already_installed" } veya 202 { "status": "started" } döndürür (indirme arka planda çalışır).

GET /presets/prepare

Uçuştaki indirmeleri döndürür: { "downloads": [ ... ] }. Bu veya GET /capabilities (izle localReady), ön ayar hazır olana kadar yoklayın.

Karakterler

Character Studio da komut dosyası uygulanabilir. Karakterler sadece yereldir (bulut reddedilir). Kavramlar için Karakterler bkz.

Uç NoktaAmaç
GET /charactersKarakterleri listele.
GET /characters/:idBir karakter al.
GET /character-presetsYüklü karakter ön ayarları (temel/düzenleme/i2v).
GET /character-featuresKullanılabilir kimlik/görünüm özelliği seçenekleri.
POST /charactersKarakter oluştur (mode: "generate" açıklama veya "upload" yüklü temel görüntü tutamacından).
POST /characters/:id/generate-imageKarakterin görüntüsünü oluştur ({ prompt, aspect?, count?, presetId? }).
POST /characters/:id/generate-frameTek bir video başlangıç çerçevesi oluştur.
POST /characters/:id/animateKarakteri video içine canlandır.
POST /characters/:id/presetKarakterin varsayılan ön ayarını ayarla.
POST /characters/:id/enhanceKarakter varlığını ölçekle veya geliştir. Kaynağı tam olarak birini ile adlandır target: "base", jobId (önceki nesil) veya handle (POST /uploads öğesinden). İsteğe bağlı: mediaType, presetId, scale, keepResolution, applyAsBase.

Tüm nesil uç noktaları, POST /generate gibi GET /jobs/:id aracılığıyla yokladığınız bir jobId döndürür.

Tarifeler

Paket ve ön ayarların dışında çok adımlı tarifeler (akışlar) yazın. Yapı taşlarını keşfedin, üst düzey bir spesifikasyondan oluşturun, ardından isteğe bağlı olarak yayınlayın.

Uç NoktaAmaç
GET /recipe-blocksGiriş noktaları + bir adım olarak kullanılabilir her ön ayar, bağlantı noktası sözleşmesi ile.
POST /recipes/validateKuru çalışma spec (oluştur+doğrula) veya config, kaydetme yok. validation döndürür.
POST /recipesBir spec den oluştur ve taslak kaydet. { recipeId, valid, errors, config } döndürür.
GET /recipesBu cihazdaki her tarife listele (Store'dan yüklü veya burada yazılı) inputs (anahtar, tür, etiket, gerekli, seçenekler) ve adım sayısı ile.
GET /recipes/:idBir tarife al, tam yapılandırması, inputs ve readiness (her adım başına: hangi ön ayarı çalıştırır ve yerel olarak yüklü olup olmadığı).
POST /recipes/:id/runBir tarife çalıştır. Gövde: { inputs: { key: value }, engine?: "local" | "cloud" | "auto" }. Konu giriş karakteri veya ürün kimliği alır, görüntü/video/ses giriş yükleme tutamaçları alır, diğer her şey düz değerler alır. { runId, status: "running", engine, steps, cloudCost? } döndürür. Bulut çalışmaları önceden fiyatlandırılır ve jetonun harcama limitine karşı sayılır.
GET /recipes/:id/runsTarifenin son çalışmaları, en yenisi önce.
GET /recipe-runs/:idBir çalıştırmanın durumu: status (çalışan, tamamlanan, başarısız, iptal edildi), steps (her biri durum, iş kimliği ve sonuç yolu ile) ve resultPath son medya adımı tamamlandığında.
POST /recipe-runs/:id/cancelBir çalıştırmayı durdur. Başka adım başlamaz, yerel uçuştaki adım kesilir.
POST /recipes/:id/publishCreator Marketplace'e gönder (bağlı bir hesap gerektirir).

Ürünler ve Konular

Tarifenin subject giriş karakter veya ürün alır. Ürünler diğer konu türüdür: temel fotoğrafı olan, Product Studio ve UGC tarifeleri tarafından kullanılan adlandırılmış şey.

Uç NoktaAmaç
GET /subjectsTarifenin alabildiği her konu: karakterler ve ürünler (id, type, name, status).
GET /productsÜrünleri listele.
GET /products/:idBir ürün al.
POST /productsYüklü fotoğraftan ürün oluştur: { name, image: <upload handle>, description?, category? }. Açıklama ve kategori tarife istemlerine dokununur. { productId, product } döndürür.
DELETE /products/:idÜrünü ve fotoğrafını kaldır.

Bir spec üst düzey açıklamadır, uygulama bağlantı noktalarını, adımdan adıma medya zincirini ve adım başına bir ipucu girişini otomatik olarak güçlendirir, ardından doğrular.

POST /recipes request
{
  "spec": {
    "name": "Product to spinning video",
    "category": "product",
    "steps": [
      { "preset": "krea2-pack:krea2-turbo" },
      { "preset": "wan-2.2-video-pack:wan-2.2-i2v" }
    ]
  }
}
Response (201)
{
  "recipeId": "b1f2…",
  "valid": true,
  "errors": [],
  "config": { "blocks": [ "…" ], "inputs": [ "…" ], "output": { "from": "n2.video" } }
}

Oluşturma ve kaydetme, yaratıcı hesaba ihtiyaç duymaz. POST /recipes/:id/publish bağlı bir hesap gerektirir ve not_connected döndürür (needsConnect: true ile) kullanıcı uygulamada bir bağlanana kadar, aynı taslak daha sonra değişmez yayınlanır. Tarifenin kullandığı her ön ayar dağıtılabilir birinci taraf pakete ait olmalıdır.

Video Studio

Filmler Video Studio belgeleridir: zaman çizelgesi üzerinde klipler (işlenecek çekimler) ses parçaları üzerinde. Her düzenleme yolu { change, timeline } yanıtı verir: ne değişti ve bundan sonra filmin zaman çizelgesi (GET /films/:id yanıtlayan aynı şekil). Stüdyo'da açık film değişiklik canlı gösterir ve Ctrl+Z ile geri alır, kapalı film düzenlenir ve kaydedilir.

Klipler yolda kimliğe, ada veya numaraya (zaman çizelgesinde sıraları, en erken önce) göre adlandırılır. Zamanlar saniye veya barlar film bir temposu once: bir konum 3, { "seconds": 3 } veya { "bar": 5 } (bar 1 ilk aşağı atışıdır), uzunluk 5, { "seconds": 5 } veya { "bars": 2 }.

RotaNe yaptığı
GET /films?projectId=Projenin filmler (varsayılan: geçerli bir).
POST /filmsFilm oluştur: name, isteğe bağlı projectId, aspect (16:9, 9:16, 1:1), quality (480p, 720p, 1080p), renderOn (local, cloud), presets ({ t2v, i2v, r2v }). Zaman çizelgesini yanıtlar.
GET /films/:idZaman çizelgesi.
PATCH /films/:idFilm ayarları: aspect, quality, hires2x, renderOn, presets, subject, cast (adlar veya kimlikler), location (ad, kimlik veya null).
POST /films/:id/tracksParça ekle: upload (POST /uploads tutamacı), kind (singing, music, dialogue, effects), name, at.
PATCH /films/:id/tracks/:trackat, muted, volume (0 ila 1).
POST /films/:id/tempoEn uzun sessiz olmayan parçanın tempounu algıla veya track. { bpm, offset, track, timeline } yanıtı verir.
POST /films/:id/clipsKlip ekle: at, length, name, lane.
PATCH /films/:id/clips/:clipshots (her { prompt, seconds, line, speaker, framing }), cast, location ("none" filmi bırakır, "film" yeniden miras alır), link (fresh, continue, motion, none ve frame de kabul edilir, sırasıyla fresh ve continue olarak), hears ([{ track, on }]), preset.
POST /films/:id/clips/:clip/moveat, lane.
POST /films/:id/clips/:clip/trimlength, trimIn (klibin çekmesinin içinde başladığı yer, 0 çekmesinin başlangıcıdır).
DELETE /films/:id/clips/:clipKlibi kaldır.
POST /films/:id/planTaslak yerleş (aşağıda).
POST /films/:id/fadestarget (klip veya parça), fadeIn, fadeOut.
POST /films/:id/markersat, name.
POST /films/:id/export-rangefrom ve to (her ikisi de gerekli) veya clear: true.
POST /films/:id/rendersclips ("stale", varsayılan veya bir listesi) işle. Hemen 202 ile { started, held, credits } veya none bir şey oluşturulması gerektiğinde bir note ile 200 yanıtı verir.
GET /films/:id/clips/:clip/takesKlibin çekişleri, en yeni ilk.
POST /films/:id/clips/:clip/takegenerationId: bu çekimi klipin gösterdiğini yap.
POST /films/:id/exportFilm dik. 201 ile { path, resultUrl, blanks } yanıtı verir.

Taslak Yerleştirme

POST /films/:id/plan
{
  "mode": "append",
  "cast": ["Kai", "Mira"],
  "location": "Rooftop",
  "clips": [
    { "bars": 2, "shots": [{ "prompt": "@Kai looks over the city", "framing": "wide" }] },
    { "bars": 2, "link": "continue",
      "shots": [{ "prompt": "@Kai sings to camera", "line": "Neon rain", "speaker": "Kai", "framing": "close-up" }] },
    { "bars": 3, "location": "Neon Street", "cast": ["Mira"],
      "shots": [{ "prompt": "@Mira walks through the rain", "seconds": 4 }, { "prompt": "she turns", "seconds": 3 }] }
  ]
}

Plan bütün olarak önce denetlenir. Sorunları olan plan 400 invalid_plan ile details.problems (örneğin clip 2: ... ile ön eki her şey) ve hiçbir şeyi değiştirmez. mode: "replace" her klipi değiştirir ve klipler çekişleri olmadığı sürece reddedilir "discardTakes": true.

Oluşturur ve Harcama Limiti

Bulut işlemi önceden fiyatlandırılır ve jetonun harcama limitine karşı sayılır: üzeri sınır 402 exceeds_spend_cap yanıtı, bilinmeyen fiyat 503 cost_unknown. Önceki klipten devam eden klipler birer birer işlenir, her başladığı çekmesinden sonra, çağrı hemen yanıtı verir ve GET /films/:id her klibin take gösterir: none, rendering, current, edited, longer, unknown (henüz söylenebilir) veya imported (getirilen video, hiçbir zaman işlenmemiş).

Konumlar

RotaNe yaptığı
GET /locationsKütüphanenin konumları: id, name, description, hasPicture.
POST /locationsFotoğrafından konum oluştur: name, description ve upload (POST /uploads tutamacı) veya fromJob (tamamlanmış görüntü işi).

Harcama Sınırları

Jetonun bir harcama sınırı varsa, bulut nesli dağıtmadan önce fiyatlandırılır ve kalan ödenekle aşarsa reddedilir (402 exceeds_spend_cap). Maliyet belirlenemezse (bulut durumu kullanılabilir), sınırlı jeton kapalı 503 cost_unknown ile başarısız olur. Yerel nesli her zaman kredi maliyetinden muaftır.

Tam Bir Akış

BASE=http://127.0.0.1:48199
AUTH="Authorization: Bearer sg-agent-..."

# 1. Pick a ready preset
curl -s $BASE/capabilities -H "$AUTH"

# 2. Generate
JOB=$(curl -s $BASE/generate -H "$AUTH" -H 'Content-Type: application/json' \
  -d '{"presetId":"z-image-turbo","mediaType":"image","prompt":"a red fox in the snow","options":{"aspectRatio":"16:9"}}' \
  | jq -r .jobId)

# 3. Poll until done, then read resultPath
curl -s $BASE/jobs/$JOB -H "$AUTH" | jq '.job | {status, resultPath, errorMessage}'

Hata Kodları

HTTPerrorCodeNe zaman
400invalid_jsonGövde geçerli JSON değildir.
400invalid_optionsGerekli alan eksik veya hatalı biçimlendirilmiş.
400invalid_presetÖn ayar/paket/mediaType uyumsuzluğu.
400needs_*Gerekli giriş (ipucu, görüntü, referans) eksik.
400invalid_handleGiriş geçerli yükleme tutamacı değildi.
400unsupported_backendÖn ayar dış API üzerinde çalışır.
400preset_not_installedYerel backend seçildi ama modeller yüklü değil.
400cloud_not_connectedBulut backend seçildi ama hesap bağlı değil.
400invalid_planFilm planının sorunları vardır, details.problems tümünü listeler.
400no_tempoFilm temposu olmadan barlar zamanı. Tempoyu önce algıla.
400no_audioSes parçası olmayan filmden tempo istendi.
400no_pulseParçada sabit bir ritim işitilemedi.
401unauthorizedEksik veya geçersiz jeton.
402exceeds_spend_capBulut maliyeti jetonun harcama limitini aşıyor.
402exceeds_balanceBulut bakiyesi işlemeleri karşılamıyor.
403forbidden_hostGeri döngü olmayan Host başlığı.
403studio_not_installedVideo Studio bu bilgisayarda yüklü değil.
404not_found / invalid_preset / job_not_foundBilinmeyen rota, ön ayar veya işi.
404unknown_presetGET /prompt-guide/:presetId ön ayar olmayan kimlikle.
404film_not_foundO kimlikle film yok.
404clip_not_foundBu kimlik, ad veya numarayla klip yok.
404track_not_foundBu ad veya kimlikle parça yok.
404cast_not_foundKütüphanede bu ad veya kimlikle karakter yok.
404location_not_foundBu ad veya kimlikle konum yok veya henüz fotoğrafı yok.
409clips_not_readyKlipler henüz bir işlemeye ihtiyaç duyarken ihracat istendi, details.clips adlarını verir.
413asset_too_large100 MB üzerinde yükle.
503guides_unavailableİpucu rehberleri yüklenemedi ve hiçbiri önbelleğe alınmadı.
503cost_unknownSınırlı jeton; bulut maliyeti belirlenemedi.
503studio_busySimpliGen penceresi ulaşılamadı veya zamanında yanıt vermedi. Zaman aşımı olduysa, değişiklik yine de yapılmış olabilir: yeniden denemeden önce filmi okuyun.
500internal_errorBeklenmedik sunucu hatası.