Ideal House
İçeriğe atla

Görselden Videoya API Belgeleme#

Temel URL: https://api.ideal.house
Sürüm: v1
Güncellendi: 2026-03-25


📖 Genel Bakış#

Görselden Videoya API, tek bir kaynak görselden yapay zeka destekli videolar üretmenizi veya üretilen videonun başlangıcını ve sonunu kontrol etmek için hem bir ilk kare hem de bir son kare görseli belirlemenizi sağlar. İş akışı asenkron olup iki aşamadan oluşur:

  1. Görev oluşturma — Görsel(ler)inizi, model türünü, süresini ve çözünürlüğünü gönderin, ardından bir taskId alın.
  2. Sonuçları sorgulama — Görev durumunu sorgulamak ve üretilen videoyu almak için taskId kullanın.

🔐 Kimlik Doğrulama#

Tüm API istekleri, bir API Anahtarı kullanılarak kimlik doğrulanmalıdır.

İstek başlığına API Anahtarınızı ekleyin:

BaşlıkDeğer
APIKEYyour_api_key_here

⚠️ API Anahtarınızı güvenli tutun. İstemci tarafı kodda veya herkese açık depolarda ifşa etmeyin.


💰 Kredi Kesintisi#

[!WARNING] 🪙 Krediler, seçilen modelType, resolution, duration ve başarılı görev oluşturma sırasında generateAudio'nin etkin olup olmadığına göre düşülür. Görev nihai olarak başarısız olursa, düşülen krediler hesabınıza otomatik olarak iade edilir.
Yetersiz krediler 9051 hata kodunu döndürür. 📄 Kredi Kesintisi Referansı bölümüne bakın.

Flash modeli (modelType: "Flash", varsayılan):

ÇözünürlükSüreDüşülen Krediler
480p5s10 kredi
480p10s20 kredi
720p5s20 kredi
720p10s40 kredi
1080p5s40 kredi
1080p10s80 kredi

Base modeli (modelType: "Base", generateAudio: false):

ÇözünürlükSüreDüşülen Krediler
480p5s8 kredi
480p10s16 kredi
720p5s16 kredi
720p10s32 kredi
1080p5s32 kredi
1080p10s64 kredi

Sesli Base modeli (modelType: "Base", generateAudio: true):

ÇözünürlükSüreDüşülen Krediler
480p5s16 kredi
480p10s32 kredi
720p5s32 kredi
720p10s64 kredi
1080p5s64 kredi
1080p10s128 kredi

📌 API Uç Noktaları#


1. Görselden Videoya Görev Oluştur#

Yeni bir yapay zeka görselden videoya üretim görevi oluşturur ve sorgulama için benzersiz bir taskId döndürür.

Uç nokta

Düz metin
POST /api/v1/imageToVideo/generate

İstek Başlıkları

BaşlıkZorunluAçıklama
APIKEY✅ EvetAPI kimlik doğrulama anahtarınız
Content-Type✅ Evetapplication/json

İstek Gövdesi

AlanTürZorunluAçıklama
imageUrlstring✅ EvetKaynak görselin URL'i. İlk-son kare modunda, bu ilk kare olarak görev yapar
durationinteger✅ EvetSaniye cinsinden video süresi. Enum: 5, 10
resolutionstring✅ EvetVideo çıktı çözünürlüğü. Enum: 480p, 720p, 1080p
modelTypestring❌ İsteğe BağlıÜretim için kullanılacak model türü. Enum: Flash, Base. Varsayılan Flash
generateAudioboolean❌ İsteğe BağlıVideonun arka plan sesinin üretileceği. Yalnızca modelType Base olduğunda geçerlidir. Varsayılan false
promptstring❌ İsteğe BağlıVideo üretim stili ve hareketini yönlendirmek için metin istemi
lastImageUrlstring❌ İsteğe Bağlıson kare görselinin URL'i. Sağlandığında, ilk-son kare modu'nü etkinleştirir: video imageUrl (ilk kare)den lastImageUrl (son kare)ye geçiş yapar

💡 İlk-Son Kare Modu: lastImageUrl sağlanırsa, API ilk kare görselinden (imageUrl) son kare görseline (lastImageUrl) pürüzsüz bir geçiş yapan bir video üretir; bu da videonun başlangıcını ve sonunu hassas bir şekilde kontrol etmenizi sağlar.

🖼️ Görsel gereksinimleri: İlk kare ve isteğe bağlı son kare görselleri JPG/JPEG, PNG veya WebP kullanmalıdır. Her görsel en fazla 20 MB boyutunda olmalı, boyutları 128 × 128 px ile 6,000 × 6,000 px (dahil) arasında olmalıdır. Maksimum piksel boyutlarını aşan görseller, işlemden önce 6,000 × 6,000 px sınırlarına sığacak şekilde orantılı olarak otomatik olarak küçültülür. Görsel URLs'leri, API sunucusu tarafından doğrudan erişilebilir olmalıdır.


Model Türleri

DeğerAçıklama
FlashVarsayılan. Yüksek kaliteli çıktı ile daha hızlı üretim hızı
BaseAlternatif model — isteğe bağlı yapay zeka ses üretimi destekler (generateAudio)

Süre Seçenekleri

DeğerAçıklama
55 saniyelik video
1010 saniyelik video

Çözünürlük Seçenekleri

DeğerAçıklama
480pStandart tanımlı — daha hızlı işleme
720pYüksek tanımlı — daha yüksek kaliteli çıktı
1080pFull HD — en yüksek kaliteli çıktı

📥 İstek Örnekleri#

cURL
bash
# Flash model (default) — single source image
curl -X POST "https://api.ideal.house/api/v1/imageToVideo/generate" \
  -H "APIKEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "imageUrl": "https://example.com/room.jpg",
    "duration": 5,
    "resolution": "720p",
    "modelType": "Flash",
    "prompt": "Gentle camera zoom in with soft lighting"
  }'

# Base model with audio — single source image
curl -X POST "https://api.ideal.house/api/v1/imageToVideo/generate" \
  -H "APIKEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "imageUrl": "https://example.com/room.jpg",
    "duration": 5,
    "resolution": "1080p",
    "modelType": "Base",
    "generateAudio": true,
    "prompt": "Peaceful living room ambiance"
  }'

# First-last frame mode — specify both first and last frame
curl -X POST "https://api.ideal.house/api/v1/imageToVideo/generate" \
  -H "APIKEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "imageUrl": "https://example.com/room-day.jpg",
    "lastImageUrl": "https://example.com/room-night.jpg",
    "duration": 10,
    "resolution": "720p",
    "modelType": "Flash",
    "prompt": "Smooth day to night transition"
  }'
Java (OkHttp)
java
import okhttp3.*;
import java.io.IOException;

public class ImageToVideoApiExample {

    private static final String BASE_URL = "https://api.ideal.house";
    private static final String API_KEY  = "your_api_key_here";

    public static void main(String[] args) throws IOException {
        OkHttpClient client = new OkHttpClient();

        // Flash model — standard mode
        String requestBody = """
            {
                "imageUrl": "https://example.com/room.jpg",
                "duration": 5,
                "resolution": "720p",
                "modelType": "Flash",
                "prompt": "Gentle camera zoom in with soft lighting"
            }
            """;

        // Base model with audio
        // String requestBody = """
        //     {
        //         "imageUrl": "https://example.com/room.jpg",
        //         "duration": 5,
        //         "resolution": "1080p",
        //         "modelType": "Base",
        //         "generateAudio": true,
        //         "prompt": "Peaceful living room ambiance"
        //     }
        //     """;

        // First-last frame mode
        // String requestBody = """
        //     {
        //         "imageUrl": "https://example.com/room-day.jpg",
        //         "lastImageUrl": "https://example.com/room-night.jpg",
        //         "duration": 10,
        //         "resolution": "720p",
        //         "modelType": "Flash",
        //         "prompt": "Smooth day to night transition"
        //     }
        //     """;

        Request request = new Request.Builder()
            .url(BASE_URL + "/api/v1/imageToVideo/generate")
            .addHeader("APIKEY", API_KEY)
            .addHeader("Content-Type", "application/json")
            .post(RequestBody.create(requestBody, MediaType.parse("application/json")))
            .build();

        try (Response response = client.newCall(request).execute()) {
            System.out.println("Response: " + response.body().string());
        }
    }
}
Python (requests)
python
import requests

BASE_URL = "https://api.ideal.house"
API_KEY  = "your_api_key_here"

headers = {
    "APIKEY": API_KEY,
    "Content-Type": "application/json"
}

# Flash model — single source image
payload = {
    "imageUrl": "https://example.com/room.jpg",
    "duration": 5,
    "resolution": "720p",
    "modelType": "Flash",
    "prompt": "Gentle camera zoom in with soft lighting"
}

# Base model with audio
# payload = {
#     "imageUrl": "https://example.com/room.jpg",
#     "duration": 5,
#     "resolution": "1080p",
#     "modelType": "Base",
#     "generateAudio": True,
#     "prompt": "Peaceful living room ambiance"
# }

# First-last frame mode
# payload = {
#     "imageUrl": "https://example.com/room-day.jpg",
#     "lastImageUrl": "https://example.com/room-night.jpg",
#     "duration": 10,
#     "resolution": "720p",
#     "modelType": "Flash",
#     "prompt": "Smooth day to night transition"
# }

response = requests.post(
    f"{BASE_URL}/api/v1/imageToVideo/generate",
    headers=headers,
    json=payload
)

data = response.json()
task_id = data.get("data")
print(f"Task ID: {task_id}")
Node.js (axios)
javascript
const axios = require('axios');

const BASE_URL = 'https://api.ideal.house';
const API_KEY  = 'your_api_key_here';

async function createVideoTask() {
  try {
    // Flash model — standard mode
    const payload = {
      imageUrl: 'https://example.com/room.jpg',
      duration: 5,
      resolution: '720p',
      modelType: 'Flash',
      prompt: 'Gentle camera zoom in with soft lighting'
    };

    // Base model with audio:
    // const payload = {
    //   imageUrl: 'https://example.com/room.jpg',
    //   duration: 5,
    //   resolution: '1080p',
    //   modelType: 'Base',
    //   generateAudio: true,
    //   prompt: 'Peaceful living room ambiance'
    // };

    // First-last frame mode:
    // const payload = {
    //   imageUrl: 'https://example.com/room-day.jpg',
    //   lastImageUrl: 'https://example.com/room-night.jpg',
    //   duration: 10,
    //   resolution: '720p',
    //   modelType: 'Flash',
    //   prompt: 'Smooth day to night transition'
    // };

    const response = await axios.post(
      `${BASE_URL}/api/v1/imageToVideo/generate`,
      payload,
      {
        headers: {
          'APIKEY': API_KEY,
          'Content-Type': 'application/json'
        }
      }
    );

    const taskId = response.data.data;
    console.log('Task ID:', taskId);
    return taskId;
  } catch (error) {
    console.error('Error:', error.response?.data || error.message);
  }
}

createVideoTask();

📤 Yanıt#

Başarılı Yanıt

json
{
  "code": 0,
  "message": "success",
  "data": 1234567890123456789
}
AlanTürAçıklama
codeinteger0 başarıyı gösterir
messagestringYanıt mesajı
datalongSonuçları sorgulamak için benzersiz görev kimliği

2. Görev Sonucunu Al#

Daha önce oluşturulmuş bir görselden videoya görevinin mevcut durumunu ve çıktısını alır.

Uç nokta

Düz metin
GET /api/v1/imageToVideo/result

İstek Başlıkları

BaşlıkZorunluAçıklama
APIKEY✅ EvetAPI kimlik doğrulama anahtarınız

Sorgu Parametreleri

ParametreTürZorunluAçıklama
taskIdlong✅ EvetGörev oluşturma uç noktasından döndürülen görev kimliği

📥 İstek Örnekleri#

cURL
bash
curl -X GET "https://api.ideal.house/api/v1/imageToVideo/result?taskId=1234567890123456789" \
  -H "APIKEY: your_api_key_here"
Java (OkHttp)
java
import okhttp3.*;
import java.io.IOException;

public class ImageToVideoResultExample {

    private static final String BASE_URL = "https://api.ideal.house";
    private static final String API_KEY  = "your_api_key_here";

    public static void main(String[] args) throws IOException {
        OkHttpClient client = new OkHttpClient();
        long taskId = 1234567890123456789L;

        Request request = new Request.Builder()
            .url(BASE_URL + "/api/v1/imageToVideo/result?taskId=" + taskId)
            .addHeader("APIKEY", API_KEY)
            .get()
            .build();

        try (Response response = client.newCall(request).execute()) {
            System.out.println("Response: " + response.body().string());
        }
    }
}
Python (requests)
python
import requests
import time

BASE_URL = "https://api.ideal.house"
API_KEY  = "your_api_key_here"

headers = {
    "APIKEY": API_KEY
}

task_id = 1234567890123456789

# Poll until task is complete
while True:
    response = requests.get(
        f"{BASE_URL}/api/v1/imageToVideo/result",
        headers=headers,
        params={"taskId": task_id}
    )

    data = response.json()
    result = data.get("data", {})
    status = result.get("status")

    print(f"Status: {status}, Progress: {result.get('percentage')}%, Queue: {result.get('waitNumber')}")

    if status in ("Success", "Failed"):
        break

    time.sleep(5)  # Poll every 5 seconds (video generation takes longer)

if status == "Success":
    output = result["output"]
    print("Video URL:", output["resultUrl"])
    print("Cover Image:", output["cover"])
else:
    print("Task failed")
Node.js (axios)
javascript
const axios = require('axios');

const BASE_URL = 'https://api.ideal.house';
const API_KEY  = 'your_api_key_here';

async function pollResult(taskId) {
  const headers = { 'APIKEY': API_KEY };

  while (true) {
    const response = await axios.get(
      `${BASE_URL}/api/v1/imageToVideo/result`,
      {
        headers,
        params: { taskId }
      }
    );

    const result = response.data.data;
    const { status, percentage, waitNumber } = result;

    console.log(`Status: ${status} | Progress: ${percentage}% | Queue: ${waitNumber}`);

    if (['Success', 'Failed'].includes(status)) {
      if (status === 'Success') {
        console.log('Video URL:', result.output.resultUrl);
        console.log('Cover Image:', result.output.cover);
        console.log('Resolution:', result.output.width, 'x', result.output.height);
      } else {
        console.log('Task failed');
      }
      break;
    }

    // Wait 5 seconds before next poll (video tasks take longer)
    await new Promise(resolve => setTimeout(resolve, 5000));
  }
}

pollResult(1234567890123456789n);

📤 Yanıt#

Başarılı Yanıt (Görev Tamamlandı — Standart Mod)

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Success",
    "waitNumber": 0,
    "percentage": 100,
    "input": {
      "imageUrl": "https://example.com/room.jpg",
      "duration": 5,
      "resolution": "720p",
      "modelType": "Flash",
      "prompt": "Gentle camera zoom in with soft lighting"
    },
    "output": {
      "resultUrl": "https://cdn.ideal.house/output/video_result.mp4",
      "cover": "https://cdn.ideal.house/output/video_cover.jpg",
      "width": 1280,
      "height": 720
    }
  }
}

Başarılı Yanıt (Görev Tamamlandı — İlk-Son Kare Modu)

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Success",
    "waitNumber": 0,
    "percentage": 100,
    "input": {
      "imageUrl": "https://example.com/room-day.jpg",
      "lastImageUrl": "https://example.com/room-night.jpg",
      "duration": 10,
      "resolution": "720p",
      "modelType": "Flash",
      "prompt": "Smooth day to night transition"
    },
    "output": {
      "resultUrl": "https://cdn.ideal.house/output/video_result.mp4",
      "cover": "https://cdn.ideal.house/output/video_cover.jpg",
      "width": 1280,
      "height": 720
    }
  }
}

Yanıt (Görev İşleniyor / Sırada)

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Processing",
    "waitNumber": 2,
    "percentage": 30,
    "input": {
      "imageUrl": "https://example.com/room.jpg",
      "duration": 5,
      "resolution": "720p",
      "modelType": "Flash"
    },
    "output": null
  }
}

Yanıt (Görev Başarısız)

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Failed",
    "waitNumber": 0,
    "percentage": 0,
    "input": {
      "imageUrl": "https://example.com/room.jpg",
      "duration": 5,
      "resolution": "720p",
      "modelType": "Flash"
    },
    "output": null
  }
}

Yanıt Alanları

AlanTürAçıklama
idlongGörev benzersiz tanımlayıcısı
statusstringMevcut görev durumu (Görev Durumu bölümüne bakın)
waitNumberintegerKuyrukta öndeki görev sayısı (0 şu anda işleniyor demektir)
percentageintegerGörev tamamlanma yüzdesi (0–100)
inputobjectGörevin orijinal girdi parametreleri
input.imageUrlstringKaynak görsel URL (ilk-son modda ilk kare)
input.lastImageUrlstringSon kare görsel URL (yalnızca ilk-son kare modunda mevcuttur)
input.durationintegerSaniye cinsinden video süresi (5 veya 10)
input.resolutionstringVideo çözünürlüğü (480p, 720p veya 1080p)
input.modelTypestringKullanılan model türü (Flash veya Base)
input.generateAudiobooleanSes üretiminin etkinleştirilip etkinleştirilmediği (yalnızca Base modeli)
input.promptstringMetin istemi (sağlandıysa)
outputobjectÜretim sonucu (yalnızca status Success olduğunda kullanılabilir)
output.resultUrlstringÜretilen video dosyasına URL
output.coverstringVideo kapağı / küçük resim görseline URL
output.widthintegerPiksel cinsinden video genişliği
output.heightintegerPiksel cinsinden video yüksekliği

📊 Görev Durumu#

DurumAçıklama
UnprocessedGörev oluşturuldu ancak henüz başlamadı
ProcessingGörev şu anda işleniyor
SuccessGörev başarıyla tamamlandı — video çıktısı mevcut
FailedGörev bir hata nedeniyle başarısız oldu

Her 3-5 saniyede sorgulayın. API Görev Sınırı bölümüne bakın.


❌ Hata Yanıtları#

Tüm hata yanıtları aynı JSON yapısını paylaşır:

json
{
  "code": 5002,
  "message": "Invalid API Key",
  "data": null
}

Hata Kodu Referansı#

KodAdAçıklamaÖnerilen Eylem
1001FAILEDİstek başarısız oldu (genel hata)Ayrıntılı hata bilgileri için message alanını kontrol edin
1003INTERNAL_ERRORDahili sunucu hatasıKısa bir gecikme sonrası yeniden deneyin; devam ederse destek ekibiyle iletişime geçin
1011PARAM_ERRORİstek parametresi hatası — e.g., geçersiz modelType, resolution veya duration kombinasyonuTüm zorunlu parametrelerin sağlandığını ve doğru biçimlendirildiğini doğrulayın
5002API_KEY_INVALIDGeçersiz veya eksik API AnahtarıAPIKEY başlığının mevcut olduğundan ve değerinin doğru olduğundan emin olun
9010SCAN_TEXT_ERRORMetin ifadesi içerik incelemesinden geçemediHassas veya yasaklı içeriği kaldırmak için ifadeyi değiştirin
9038PROHIBITED_CONTENTÜretilen çıktı görüntüsü yasaklı içerik barındırıyorİfadeyi/stili/girdileri ayarlayın ve yeniden deneyin
9051COINS_NOT_ENOUGHYetersiz coin / krediHesap kredilerinizi yükleyin ve yeniden deneyin

📄 Yaygın API hata kodlarının tam listesi için Hata Kodu Referansı bölümüne başvurun.