Ideal House
Zum Hauptinhalt springen

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:

  1. Aufgabe erstellen — Übermitteln Sie Ihre Bilder, den Modelltyp, die Dauer und die Auflösung, und erhalten Sie eine taskId.
  2. 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:

KopfzeileWert
APIKEYyour_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, duration sowie der Aktivierung von generateAudio abgezogen. Falls die Aufgabe abschließend fehlschlägt, werden die eingezogenen Credits automatisch zurückerstattet.
Unzureichende Guthabeneinheiten geben Fehlercode 9051 zurück. 📄 Siehe Referenz zum Guthabenverbrauch.

Flash-Modell (modelType: "Flash", Standard):

AuflösungDauerAbgezogene Guthabeneinheiten
480p5s10 Guthabeneinheiten
480p10s20 Guthabeneinheiten
720p5s20 Guthabeneinheiten
720p10s40 Guthabeneinheiten
1080p5s40 Guthabeneinheiten
1080p10s80 Guthabeneinheiten

Base-Modell (modelType: "Base", generateAudio: false):

AuflösungDauerAbgezogene Guthabeneinheiten
480p5s8 Guthabeneinheiten
480p10s16 Guthabeneinheiten
720p5s16 Guthabeneinheiten
720p10s32 Guthabeneinheiten
1080p5s32 Guthabeneinheiten
1080p10s64 Guthabeneinheiten

Base-Modell mit Audio (modelType: "Base", generateAudio: true):

AuflösungDauerAbgezogene Guthabeneinheiten
480p5s16 Guthabeneinheiten
480p10s32 Guthabeneinheiten
720p5s32 Guthabeneinheiten
720p10s64 Guthabeneinheiten
1080p5s64 Guthabeneinheiten
1080p10s128 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

Klartext
POST /api/v1/imageToVideo/generate

Anforderungsheader

KopfzeileErforderlichBeschreibung
APIKEY✅ JaIhr API Authentifizierungsschlüssel
Content-Type✅ Jaapplication/json

Anforderungskörper

FeldTypErforderlichBeschreibung
imageUrlstring✅ JaURL des Ausgangsbilds. Im Start- und Abschlussbildmodus dient dies als Startbild
durationinteger✅ JaVideodauer in Sekunden. Enum: 5, 10
resolutionstring✅ JaVideoausgabeauflösung. Enum: 480p, 720p, 1080p
modelTypestring❌ OptionalModelltyp zur Verwendung für die Generierung. Enum: Flash, Base. Standardmäßig Flash
generateAudioboolean❌ OptionalGibt an, ob Hintergrundaudio für das Video generiert werden soll. Nur anwendbar, wenn modelType Base ist. Standardmäßig false
promptstring❌ OptionalText-Prompt zur Führung des Video-Generierungsstils und der Bewegung
lastImageUrlstring❌ OptionalURL des Abschlussbilds. Bei Angabe wird der Start- und Abschlussbildmodus aktiviert: Das Video wechselt dann von imageUrl (Startbild) zu lastImageUrl (Abschlussbild)

💡 Start- und Abschlussbildmodus: Wenn lastImageUrl angegeben 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

WertBeschreibung
FlashStandard. Schnellere Generierungsgeschwindigkeit bei hoher Qualität
BaseAlternativmodell — unterstützt optionale KI-Audio-Generierung (generateAudio)

Daueroptionen

WertBeschreibung
55-Sekunden-Video
1010-Sekunden-Video

Auflösungsoptionen

WertBeschreibung
480pStandardauflösung — schnellere Verarbeitung
720pHochauflösend — hochwertigeres Ergebnis
1080pFull HD — höchstmögliche Qualität

📥 Anfragebeispiele#

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();

📤 Antwort#

Erfolgreiche Antwort

json
{
  "code": 0,
  "message": "success",
  "data": 1234567890123456789
}
FeldTypBeschreibung
codeinteger0 zeigt Erfolg an
messagestringAntwortnachricht
datalongDie 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

Klartext
GET /api/v1/imageToVideo/result

Anforderungsheader

KopfzeileErforderlichBeschreibung
APIKEY✅ JaIhr API Authentifizierungsschlüssel

Abfrageparameter

ParameterTypErforderlichBeschreibung
taskIdlong✅ JaDie vom Erstellungsendpunkt zurückgegebene Aufgaben-ID

📥 Anfragebeispiele#

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);

📤 Antwort#

Erfolgreiche Antwort (Aufgabe abgeschlossen — Standardmodus)

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
    }
  }
}

Erfolgreiche Antwort (Aufgabe abgeschlossen — Start- und Abschlussbildmodus)

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
    }
  }
}

Antwort (Aufgabe in Bearbeitung / in Warteschlange)

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
  }
}

Antwort (Aufgabe fehlgeschlagen)

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
  }
}

Antwortfelder

FeldTypBeschreibung
idlongEindeutiger Aufgabenbezeichner
statusstringAktueller Aufgabenstatus (siehe Aufgabestatus)
waitNumberintegerAnzahl der Aufgaben vor Ihnen in der Warteschlange (0 bedeutet aktuell in Bearbeitung)
percentageintegerFortschritt der Aufgabe in Prozent (0–100)
inputobjectDie ursprünglichen Eingabeparameter der Aufgabe
input.imageUrlstringAusgangsbild-URL (Startbild im Start- und Abschlussbildmodus)
input.lastImageUrlstringAbschlussbild-URL (nur im Start- und Abschlussbildmodus vorhanden)
input.durationintegerVideodauer in Sekunden (5 oder 10)
input.resolutionstringVideoauflösung (480p, 720p oder 1080p)
input.modelTypestringVerwendeter Modelltyp (Flash oder Base)
input.generateAudiobooleanAudio-Generierung aktiviert? (nur Base-Modell)
input.promptstringText-Prompt (falls angegeben)
outputobjectGenerierungsergebnis (nur verfügbar, wenn status Success ist)
output.resultUrlstringURL zur generierten Videodatei
output.coverstringURL zum Titelbild / Vorschaubild des Videos
output.widthintegerVideobreite in Pixeln
output.heightintegerVideohöhe in Pixeln

📊 Aufgabenstatus#

StatusBeschreibung
UnprocessedAufgabe wurde erstellt, aber noch nicht gestartet
ProcessingAufgabe wird derzeit verarbeitet
SuccessAufgabe erfolgreich abgeschlossen — Videoausgabe verfügbar
FailedAufgabe aufgrund eines Fehlers fehlgeschlagen

Alle 3-5 Sekunden abfragen. Siehe API Aufgabenlimit.


❌ Fehlerantworten#

Alle Fehlerantworten haben dieselbe JSON-Struktur:

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

Fehlercode-Referenz#

CodeNameBeschreibungEmpfohlene Maßnahme
1001FAILEDAnfrage fehlgeschlagen (generischer Fehler)Überprüfen Sie das message-Feld für spezifische Fehlerdetails
1003INTERNAL_ERRORInterner ServerfehlerWiederholen Sie nach kurzer Verzögerung; wenden Sie sich an den Support, falls es anhält
1011PARAM_ERRORFehler im Anfrageparameter — zum Beispiel ungültige Kombination aus modelType, resolution oder durationStellen Sie sicher, dass alle erforderlichen Parameter vorhanden sind und korrekt formatiert sind
5002API_KEY_INVALIDUngültiger oder fehlender API KeyStellen Sie sicher, dass der APIKEY Header vorhanden ist und der Wert korrekt ist
9010SCAN_TEXT_ERRORText-Prompt bestand Inhaltsüberprüfung nichtÄndern Sie den Prompt, um sensible oder verbotene Inhalte zu entfernen
9038PROHIBITED_CONTENTGeneriertes Ausgabebild enthält verbotene InhaltePassen Sie Prompt/Stil/Eingaben an und wiederholen Sie
9051COINS_NOT_ENOUGHUnzureichende Münzen / CreditsLaden Sie Ihre Kontocredits auf und wiederholen Sie den Vorgang

📄 Für die vollständige Liste gemeinsamer API Fehlercodes beachten Sie die Fehlercode-Referenz.