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:
- Görev oluşturma — Görsel(ler)inizi, model türünü, süresini ve çözünürlüğünü gönderin, ardından bir
taskIdalın. - Sonuçları sorgulama — Görev durumunu sorgulamak ve üretilen videoyu almak için
taskIdkullanı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ık | Değer |
|---|---|
APIKEY | your_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,durationve başarılı görev oluşturma sırasındagenerateAudio'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 krediler9051hata kodunu döndürür. 📄 Kredi Kesintisi Referansı bölümüne bakın.
Flash modeli (modelType: "Flash", varsayılan):
| Çözünürlük | Süre | Düşülen Krediler |
|---|---|---|
480p | 5s | 10 kredi |
480p | 10s | 20 kredi |
720p | 5s | 20 kredi |
720p | 10s | 40 kredi |
1080p | 5s | 40 kredi |
1080p | 10s | 80 kredi |
Base modeli (modelType: "Base", generateAudio: false):
| Çözünürlük | Süre | Düşülen Krediler |
|---|---|---|
480p | 5s | 8 kredi |
480p | 10s | 16 kredi |
720p | 5s | 16 kredi |
720p | 10s | 32 kredi |
1080p | 5s | 32 kredi |
1080p | 10s | 64 kredi |
Sesli Base modeli (modelType: "Base", generateAudio: true):
| Çözünürlük | Süre | Düşülen Krediler |
|---|---|---|
480p | 5s | 16 kredi |
480p | 10s | 32 kredi |
720p | 5s | 32 kredi |
720p | 10s | 64 kredi |
1080p | 5s | 64 kredi |
1080p | 10s | 128 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
POST /api/v1/imageToVideo/generate
İstek Başlıkları
| Başlık | Zorunlu | Açıklama |
|---|---|---|
APIKEY | ✅ Evet | API kimlik doğrulama anahtarınız |
Content-Type | ✅ Evet | application/json |
İstek Gövdesi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
imageUrl | string | ✅ Evet | Kaynak görselin URL'i. İlk-son kare modunda, bu ilk kare olarak görev yapar |
duration | integer | ✅ Evet | Saniye cinsinden video süresi. Enum: 5, 10 |
resolution | string | ✅ Evet | Video çıktı çözünürlüğü. Enum: 480p, 720p, 1080p |
modelType | string | ❌ İsteğe Bağlı | Üretim için kullanılacak model türü. Enum: Flash, Base. Varsayılan Flash |
generateAudio | boolean | ❌ İsteğe Bağlı | Videonun arka plan sesinin üretileceği. Yalnızca modelType Base olduğunda geçerlidir. Varsayılan false |
prompt | string | ❌ İsteğe Bağlı | Video üretim stili ve hareketini yönlendirmek için metin istemi |
lastImageUrl | string | ❌ İ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:
lastImageUrlsağ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ğer | Açıklama |
|---|---|
Flash | Varsayılan. Yüksek kaliteli çıktı ile daha hızlı üretim hızı |
Base | Alternatif model — isteğe bağlı yapay zeka ses üretimi destekler (generateAudio) |
Süre Seçenekleri
| Değer | Açıklama |
|---|---|
5 | 5 saniyelik video |
10 | 10 saniyelik video |
Çözünürlük Seçenekleri
| Değer | Açıklama |
|---|---|
480p | Standart tanımlı — daha hızlı işleme |
720p | Yüksek tanımlı — daha yüksek kaliteli çıktı |
1080p | Full HD — en yüksek kaliteli çıktı |
📥 İstek Örnekleri#
cURL
# 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)
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)
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)
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
{
"code": 0,
"message": "success",
"data": 1234567890123456789
}
| Alan | Tür | Açıklama |
|---|---|---|
code | integer | 0 başarıyı gösterir |
message | string | Yanıt mesajı |
data | long | Sonuç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
GET /api/v1/imageToVideo/result
İstek Başlıkları
| Başlık | Zorunlu | Açıklama |
|---|---|---|
APIKEY | ✅ Evet | API kimlik doğrulama anahtarınız |
Sorgu Parametreleri
| Parametre | Tür | Zorunlu | Açıklama |
|---|---|---|---|
taskId | long | ✅ Evet | Görev oluşturma uç noktasından döndürülen görev kimliği |
📥 İstek Örnekleri#
cURL
curl -X GET "https://api.ideal.house/api/v1/imageToVideo/result?taskId=1234567890123456789" \
-H "APIKEY: your_api_key_here"
Java (OkHttp)
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)
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)
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)
{
"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)
{
"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)
{
"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)
{
"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ı
| Alan | Tür | Açıklama |
|---|---|---|
id | long | Görev benzersiz tanımlayıcısı |
status | string | Mevcut görev durumu (Görev Durumu bölümüne bakın) |
waitNumber | integer | Kuyrukta öndeki görev sayısı (0 şu anda işleniyor demektir) |
percentage | integer | Görev tamamlanma yüzdesi (0–100) |
input | object | Görevin orijinal girdi parametreleri |
input.imageUrl | string | Kaynak görsel URL (ilk-son modda ilk kare) |
input.lastImageUrl | string | Son kare görsel URL (yalnızca ilk-son kare modunda mevcuttur) |
input.duration | integer | Saniye cinsinden video süresi (5 veya 10) |
input.resolution | string | Video çözünürlüğü (480p, 720p veya 1080p) |
input.modelType | string | Kullanılan model türü (Flash veya Base) |
input.generateAudio | boolean | Ses üretiminin etkinleştirilip etkinleştirilmediği (yalnızca Base modeli) |
input.prompt | string | Metin istemi (sağlandıysa) |
output | object | Üretim sonucu (yalnızca status Success olduğunda kullanılabilir) |
output.resultUrl | string | Üretilen video dosyasına URL |
output.cover | string | Video kapağı / küçük resim görseline URL |
output.width | integer | Piksel cinsinden video genişliği |
output.height | integer | Piksel cinsinden video yüksekliği |
📊 Görev Durumu#
| Durum | Açıklama |
|---|---|
Unprocessed | Görev oluşturuldu ancak henüz başlamadı |
Processing | Görev şu anda işleniyor |
Success | Görev başarıyla tamamlandı — video çıktısı mevcut |
Failed | Gö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:
{
"code": 5002,
"message": "Invalid API Key",
"data": null
}
Hata Kodu Referansı#
| Kod | Ad | Açıklama | Önerilen Eylem |
|---|---|---|---|
1001 | FAILED | İstek başarısız oldu (genel hata) | Ayrıntılı hata bilgileri için message alanını kontrol edin |
1003 | INTERNAL_ERROR | Dahili sunucu hatası | Kısa bir gecikme sonrası yeniden deneyin; devam ederse destek ekibiyle iletişime geçin |
1011 | PARAM_ERROR | İstek parametresi hatası — e.g., geçersiz modelType, resolution veya duration kombinasyonu | Tüm zorunlu parametrelerin sağlandığını ve doğru biçimlendirildiğini doğrulayın |
5002 | API_KEY_INVALID | Geçersiz veya eksik API Anahtarı | APIKEY başlığının mevcut olduğundan ve değerinin doğru olduğundan emin olun |
9010 | SCAN_TEXT_ERROR | Metin ifadesi içerik incelemesinden geçemedi | Hassas veya yasaklı içeriği kaldırmak için ifadeyi değiştirin |
9038 | PROHIBITED_CONTENT | Üretilen çıktı görüntüsü yasaklı içerik barındırıyor | İfadeyi/stili/girdileri ayarlayın ve yeniden deneyin |
9051 | COINS_NOT_ENOUGH | Yetersiz coin / kredi | Hesap 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.