Dokumentation zur API zur Videogenerierung aus Bildern#
Basis-URL:
https://api.ideal.house
Version: v1
Aktualisiert: 2026-03-25
📖 Übersicht#
Die API zur Videogenerierung aus Bildern ermöglicht es Ihnen, KI-gesteuerte Videos aus einem einzelnen Ausgangsbild zu generieren, oder indem Sie sowohl ein Startbild als auch ein Abschlussbild angeben, um den Anfang und das Ende des generierten Videos zu steuern. Der Workflow ist asynchron und umfasst zwei Schritte:
- Aufgabe erstellen — Übermitteln Sie Ihre Bilder, den Modelltyp, die Dauer und die Auflösung, und erhalten Sie eine
taskId. - Ergebnisse regelmäßig abfragen — Verwenden Sie die
taskId, um den Aufgabenstatus abzufragen und das generierte Video abzurufen.
🔐 Authentifizierung#
Alle API Anfragen müssen mit einem API Key authentifiziert werden.
Fügen Sie Ihren API Key in den Anforderungsheader ein:
| Kopfzeile | Wert |
|---|---|
APIKEY | your_api_key_here |
⚠️ Bewahren Sie Ihren API Key sicher auf. Geben Sie ihn nicht in Client-seitigem Code oder öffentlichen Repositorien frei.
💰 Guthabenverbrauch#
[!WARNING] 🪙 Credits werden bei erfolgreicher Aufgaben-Erstellung basierend auf dem gewählten
modelType,resolution,durationsowie der Aktivierung vongenerateAudioabgezogen. Falls die Aufgabe abschließend fehlschlägt, werden die eingezogenen Credits automatisch zurückerstattet.
Unzureichende Guthabeneinheiten geben Fehlercode9051zurück. 📄 Siehe Referenz zum Guthabenverbrauch.
Flash-Modell (modelType: "Flash", Standard):
| Auflösung | Dauer | Abgezogene Guthabeneinheiten |
|---|---|---|
480p | 5s | 10 Guthabeneinheiten |
480p | 10s | 20 Guthabeneinheiten |
720p | 5s | 20 Guthabeneinheiten |
720p | 10s | 40 Guthabeneinheiten |
1080p | 5s | 40 Guthabeneinheiten |
1080p | 10s | 80 Guthabeneinheiten |
Base-Modell (modelType: "Base", generateAudio: false):
| Auflösung | Dauer | Abgezogene Guthabeneinheiten |
|---|---|---|
480p | 5s | 8 Guthabeneinheiten |
480p | 10s | 16 Guthabeneinheiten |
720p | 5s | 16 Guthabeneinheiten |
720p | 10s | 32 Guthabeneinheiten |
1080p | 5s | 32 Guthabeneinheiten |
1080p | 10s | 64 Guthabeneinheiten |
Base-Modell mit Audio (modelType: "Base", generateAudio: true):
| Auflösung | Dauer | Abgezogene Guthabeneinheiten |
|---|---|---|
480p | 5s | 16 Guthabeneinheiten |
480p | 10s | 32 Guthabeneinheiten |
720p | 5s | 32 Guthabeneinheiten |
720p | 10s | 64 Guthabeneinheiten |
1080p | 5s | 64 Guthabeneinheiten |
1080p | 10s | 128 Guthabeneinheiten |
📌 API Endpunkte#
1. Erstellen Sie Aufgabe zur Videogenerierung aus Bildern#
Erstellt eine neue KI-Bild-zu-Video-Generierungsaufgabe und gibt eine eindeutige taskId für Polling zurück.
Endpunkt
POST /api/v1/imageToVideo/generate
Anforderungsheader
| Kopfzeile | Erforderlich | Beschreibung |
|---|---|---|
APIKEY | ✅ Ja | Ihr API Authentifizierungsschlüssel |
Content-Type | ✅ Ja | application/json |
Anforderungskörper
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
imageUrl | string | ✅ Ja | URL des Ausgangsbilds. Im Start- und Abschlussbildmodus dient dies als Startbild |
duration | integer | ✅ Ja | Videodauer in Sekunden. Enum: 5, 10 |
resolution | string | ✅ Ja | Videoausgabeauflösung. Enum: 480p, 720p, 1080p |
modelType | string | ❌ Optional | Modelltyp zur Verwendung für die Generierung. Enum: Flash, Base. Standardmäßig Flash |
generateAudio | boolean | ❌ Optional | Gibt an, ob Hintergrundaudio für das Video generiert werden soll. Nur anwendbar, wenn modelType Base ist. Standardmäßig false |
prompt | string | ❌ Optional | Text-Prompt zur Führung des Video-Generierungsstils und der Bewegung |
lastImageUrl | string | ❌ Optional | URL des Abschlussbilds. Bei Angabe wird der Start- und Abschlussbildmodus aktiviert: Das Video wechselt dann von imageUrl (Startbild) zu lastImageUrl (Abschlussbild) |
💡 Start- und Abschlussbildmodus: Wenn
lastImageUrlangegeben wird, generiert die API ein Video, das sanft vom Startbild (imageUrl) zum Abschlussbild (lastImageUrl) übergeht und Ihnen präzise Kontrolle über Start und Ende des Videos gibt.
🖼️ Bildanforderungen: Die first-frame- und optionalen Abschlussbilder müssen JPG/JPEG, PNG oder WebP verwenden. Jedes Bild darf nicht größer als 20 MB sein, mit Abmessungen von 128 × 128 px bis zu 6,000 × 6,000 px (inklusive). Bilder, die die maximalen Pixelabmessungen überschreiten, werden vor der Verarbeitung automatisch proportional verkleinert, um innerhalb von 6,000 × 6,000 px zu passen. Bild-URLs müssen vom API-Server direkt erreichbar sein.
Modelltypen
| Wert | Beschreibung |
|---|---|
Flash | Standard. Schnellere Generierungsgeschwindigkeit bei hoher Qualität |
Base | Alternativmodell — unterstützt optionale KI-Audio-Generierung (generateAudio) |
Daueroptionen
| Wert | Beschreibung |
|---|---|
5 | 5-Sekunden-Video |
10 | 10-Sekunden-Video |
Auflösungsoptionen
| Wert | Beschreibung |
|---|---|
480p | Standardauflösung — schnellere Verarbeitung |
720p | Hochauflösend — hochwertigeres Ergebnis |
1080p | Full HD — höchstmögliche Qualität |
📥 Anfragebeispiele#
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();
📤 Antwort#
Erfolgreiche Antwort
{
"code": 0,
"message": "success",
"data": 1234567890123456789
}
| Feld | Typ | Beschreibung |
|---|---|---|
code | integer | 0 zeigt Erfolg an |
message | string | Antwortnachricht |
data | long | Die eindeutige Aufgaben-ID für die Ergebnisabfrage |
2. Aufgabenergebnis abrufen#
Ermittelt den aktuellen Status und die Ausgabe einer zuvor erstellten Aufgabe zur Videogenerierung aus Bildern.
Endpunkt
GET /api/v1/imageToVideo/result
Anforderungsheader
| Kopfzeile | Erforderlich | Beschreibung |
|---|---|---|
APIKEY | ✅ Ja | Ihr API Authentifizierungsschlüssel |
Abfrageparameter
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
taskId | long | ✅ Ja | Die vom Erstellungsendpunkt zurückgegebene Aufgaben-ID |
📥 Anfragebeispiele#
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);
📤 Antwort#
Erfolgreiche Antwort (Aufgabe abgeschlossen — Standardmodus)
{
"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
}
}
}
Erfolgreiche Antwort (Aufgabe abgeschlossen — Start- und Abschlussbildmodus)
{
"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
}
}
}
Antwort (Aufgabe in Bearbeitung / in Warteschlange)
{
"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
}
}
Antwort (Aufgabe fehlgeschlagen)
{
"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
}
}
Antwortfelder
| Feld | Typ | Beschreibung |
|---|---|---|
id | long | Eindeutiger Aufgabenbezeichner |
status | string | Aktueller Aufgabenstatus (siehe Aufgabestatus) |
waitNumber | integer | Anzahl der Aufgaben vor Ihnen in der Warteschlange (0 bedeutet aktuell in Bearbeitung) |
percentage | integer | Fortschritt der Aufgabe in Prozent (0–100) |
input | object | Die ursprünglichen Eingabeparameter der Aufgabe |
input.imageUrl | string | Ausgangsbild-URL (Startbild im Start- und Abschlussbildmodus) |
input.lastImageUrl | string | Abschlussbild-URL (nur im Start- und Abschlussbildmodus vorhanden) |
input.duration | integer | Videodauer in Sekunden (5 oder 10) |
input.resolution | string | Videoauflösung (480p, 720p oder 1080p) |
input.modelType | string | Verwendeter Modelltyp (Flash oder Base) |
input.generateAudio | boolean | Audio-Generierung aktiviert? (nur Base-Modell) |
input.prompt | string | Text-Prompt (falls angegeben) |
output | object | Generierungsergebnis (nur verfügbar, wenn status Success ist) |
output.resultUrl | string | URL zur generierten Videodatei |
output.cover | string | URL zum Titelbild / Vorschaubild des Videos |
output.width | integer | Videobreite in Pixeln |
output.height | integer | Videohöhe in Pixeln |
📊 Aufgabenstatus#
| Status | Beschreibung |
|---|---|
Unprocessed | Aufgabe wurde erstellt, aber noch nicht gestartet |
Processing | Aufgabe wird derzeit verarbeitet |
Success | Aufgabe erfolgreich abgeschlossen — Videoausgabe verfügbar |
Failed | Aufgabe aufgrund eines Fehlers fehlgeschlagen |
Alle 3-5 Sekunden abfragen. Siehe API Aufgabenlimit.
❌ Fehlerantworten#
Alle Fehlerantworten haben dieselbe JSON-Struktur:
{
"code": 5002,
"message": "Invalid API Key",
"data": null
}
Fehlercode-Referenz#
| Code | Name | Beschreibung | Empfohlene Maßnahme |
|---|---|---|---|
1001 | FAILED | Anfrage fehlgeschlagen (generischer Fehler) | Überprüfen Sie das message-Feld für spezifische Fehlerdetails |
1003 | INTERNAL_ERROR | Interner Serverfehler | Wiederholen Sie nach kurzer Verzögerung; wenden Sie sich an den Support, falls es anhält |
1011 | PARAM_ERROR | Fehler im Anfrageparameter — zum Beispiel ungültige Kombination aus modelType, resolution oder duration | Stellen Sie sicher, dass alle erforderlichen Parameter vorhanden sind und korrekt formatiert sind |
5002 | API_KEY_INVALID | Ungültiger oder fehlender API Key | Stellen Sie sicher, dass der APIKEY Header vorhanden ist und der Wert korrekt ist |
9010 | SCAN_TEXT_ERROR | Text-Prompt bestand Inhaltsüberprüfung nicht | Ändern Sie den Prompt, um sensible oder verbotene Inhalte zu entfernen |
9038 | PROHIBITED_CONTENT | Generiertes Ausgabebild enthält verbotene Inhalte | Passen Sie Prompt/Stil/Eingaben an und wiederholen Sie |
9051 | COINS_NOT_ENOUGH | Unzureichende Münzen / Credits | Laden Sie Ihre Kontocredits auf und wiederholen Sie den Vorgang |
📄 Für die vollständige Liste gemeinsamer API Fehlercodes beachten Sie die Fehlercode-Referenz.