Source: https://ailoot.ai/models/de-at/happyhorse-1-1-r2v/
Canonical: https://ailoot.ai/models/de-at/happyhorse-1-1-r2v/
Language: de-at

# happyhorse-1.1-r2v

[Markdown](https://ailoot.ai/models/de-at/happyhorse-1-1-r2v/index.md) · [JSON](https://ailoot.ai/models/de-at/happyhorse-1-1-r2v/facts.json)

## [happyhorse-1.1-r2v](https://ailoot.ai/models/de-at/happyhorse-1-1-r2v/)

Modell zur Videogenerierung anhand von Referenzbildern und einer Textvorgabe. Hilft, das Aussehen von Figuren und Objekten sowie den visuellen Stil in einer neuen Szene beizubehalten.

- [**Ailoot · Videos** `POST /v1/videos/generations` `happyhorse-1.1-r2v`](https://ailoot.ai/models/de-at/happyhorse-1-1-r2v/#method-0)
- [**Ailoot · Videos** `POST /v1/videos/generations` `happyhorse-r2v`](https://ailoot.ai/models/de-at/happyhorse-1-1-r2v/#method-1)
- [**Ailoot · Videos** `POST /v1/videos/generations` `happyhorse-r2v-latest`](https://ailoot.ai/models/de-at/happyhorse-1-1-r2v/#method-2)

Über das Modell

Diese Beschreibung erläutert die Fähigkeiten des Modells. Die über Ailoot verfügbaren Eingaben, Ausgaben und Optionen sind unten für die ausgewählte Methode aufgeführt.

HappyHorse-1.1-R2V erzeugt anhand von Referenzbildern und einer Textvorgabe eine neue Videoszene. Alibaba richtet das Modell darauf aus, wiedererkennbare Figuren, Objekte und einen visuellen Stil bei der Generierung von Bewegung beizubehalten. Die Referenzen bestimmen Inhalt und Aussehen der Szene; der Text beschreibt, wie diese Elemente miteinander interagieren sollen.

#### Die Rollen visueller Vorlagen

Es können ein bis neun Bilder verwendet werden. Sie können eine Figur, einen Gegenstand, die Umgebung oder die künstlerische Gestaltung vorgeben. In der Beschreibung lassen sich die Nummer der Referenz und ein konkretes Objekt darin nennen, um das visuelle Material mit dem gewünschten Teil der Handlung zu verknüpfen. Das ist besonders hilfreich, wenn Elemente mehrerer Bilder in einer Komposition zusammengeführt werden sollen.

Anders als im Modus mit einem Anfangsframe dienen die Referenzen hier als Grundlage für den Inhalt einer neuen Szene. Eine Textvorgabe ist verpflichtend: Sie verknüpft das Aussehen der Objekte mit Handlung, Kamerabewegung und der gesamten Inszenierung. Der Hersteller betont visuelle Konsistenz und filmische Bewegung; das Ergebnis bleibt eine Generierung und ist keine Montage der Ausgangsbilder.

Akzeptiert werden JPEG, JPG, PNG und WEBP mit jeweils bis zu 20 MB. Die kürzere Bildseite muss mindestens 400 Pixel lang sein; empfohlen wird Material mit 720P oder höher. Die Eingabe dieses Modus besteht ausschließlich aus Bildern und Text.

#### Dauer, Bildformat und Ton

Das Ergebnis wird als MP4 mit 24 Frames pro Sekunde gespeichert. Die Dauer wird als ganze Zahl von 3 bis 15 Sekunden festgelegt. Die Auflösung kann zwischen 480P, 720P und 1080P gewählt werden; die Generierung einer Tonspur wird unterstützt.

Verfügbar sind horizontale, vertikale und quadratische Bildformate: 16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21 und 21:9. Mit dem Format lässt sich der Raum für die Komposition der neuen Szene vorab bestimmen.

Der Text kann in jeder Sprache verfasst sein. Die Grenze liegt bei 5000 nicht chinesischen oder 2500 chinesischen Zeichen; überzähliger Text wird verworfen. Die wichtigsten Rollen der Referenzen, die Handlung und die Bewegung müssen innerhalb dieses Umfangs beschrieben werden. Ein Zufalls-Seed kann die Ähnlichkeit verschiedener Varianten beeinflussen, garantiert aber keine exakte Wiederholung eines Videos.

**Ailoot · Videos** `POST /v1/videos/generations` `happyhorse-1.1-r2v`

[`happyhorse-1.1-r2v`](https://ailoot.ai/models/de-at/#m=happyhorse-1.1-r2v&route=Core&caller=happyhorse-1.1-r2v&fmt=videos)

Alibaba /`happyhorse-1.1-r2v`

Modell-ID

- `happyhorse-1.1-r2v`
- `happyhorse-r2v`
- `happyhorse-r2v-latest`

### Einstieg

Modell zur Videogenerierung anhand von Referenzbildern und einer Textvorgabe. Hilft, das Aussehen von Figuren und Objekten sowie den visuellen Stil in einer neuen Szene beizubehalten.

Zulässige Eingaben

Text · Bilder

Ergebnisse

Video

### In Ailoot verfügbar · Eingaben und Methoden

**Ailoot · Videos** `POST /v1/videos/generations`

Eingabe

`text`, `image`

Ausgabe

`video`

Ausgabeformat

mp4

| Feld | Typ | Anforderung | Werte und Limits | Standard |
| --- | --- | --- | --- | --- |
| Feld`model` | Typ`string` | AnforderungErforderlich | Werte und Limits happyhorse-1.1-r2v | Standard— |
| Feld`prompt` | Typ`string` | AnforderungErforderlich | Werte und Limits Mindestlänge: 1 | Standard— |
| Feld`duration` | Typ`integer` | AnforderungOptional | Werte und Limits Minimum: 3 Maximum: 15 Einheit: Sekunden | Standard5 |
| Feld`resolution` | Typ`string` | AnforderungOptional | Werte und Limits 480P, 720P, 1080P | Standard720P |
| Feld`ratio` | Typ`string` | AnforderungOptional | Werte und Limits 16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21, 21:9 | Standard16:9 |
| Feld`image_urls` | Typ`https_url\|data_image_url[]` | AnforderungErforderlich | Werte und Limits Mindestanzahl Elemente: 1 Maximale Anzahl Elemente: 9 Maximale Anzahl dekodierter Bytes: 20 971 520 MIME-Typen: image/jpeg, image/png, image/webp | Standard— |

Kombinationen von Eingabematerialien

**reference\_images\_to\_video** · Erforderlich: prompt, image\_urls

Methodenparameter und Lebenszyklus

| Parameter | Vertrag |
| --- | --- |
| Parameter`content_type` | Vertragapplication/json |
| Parameter`required` | Vertragmodel, prompt, image\_urls |
| Parameter`material_types` | Vertragtext, image |
| Parameter`optional` | Vertragduration, resolution, ratio |
| Parameter`duration_integer_range` | Vertrag3, 15 |
| Parameter`default_duration` | Vertrag5 |
| Parameter`resolution` | Vertrag480P, 720P, 1080P |
| Parameter`default_resolution` | Vertrag720P |
| Parameter`ratio` | Vertrag16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21, 21:9 |
| Parameter`ratio_must_omit` | Vertragfalse |
| Parameter`image_urls` | Vertrag{"min\_count":1,"max\_count":9,"schemes":\["https","Rasterdaten in base64"\],"max\_data\_image\_bytes":20971520} |

Lebenszyklus: `submit_once_poll_original`

`GET /v1/videos/{request_id}`

`GET /v1/videos/generations/{request_id}`

`GET /v1/videos/{request_id}/content`

`GET /v1/videos/generations/{request_id}/content`

Methodenstrukturen und IDs sind exakt; die Fähigkeiten des Anbieters sind von der Zulassung einer Anfrage zu unterscheiden.

### Tarife

#### Ailoot-Methodentarife

Ausgabe

$ 0,18 *pro Sekunde bei 1080p*

Ausgabe

$ 0,07 *pro Sekunde bei 480p*

Ausgabe

$ 0,14 *pro Sekunde bei 720p*

Ailoot reserviert vor einer Anfrage einen geschätzten Betrag. Nach dem Ergebnis rechnet Ailoot die endgültige Gebühr anhand des gemessenen Verbrauchs ab. Bei Streaming erfolgt die Abrechnung anhand des abschließenden Verbrauchsdatensatzes. [So funktionieren Reservierung und Abrechnung →](https://ailoot.ai/docs/de-at/billing/reserve/)

### Beispielanfragen

#### Ailoot · Videos

Bildreferenz

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_URLS_FILE:?Set a JSON file containing your actual reference-image URLs}"
export AILOOT_IMAGE_URLS_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "happyhorse-1.1-r2v", "prompt": "The subject walks slowly toward the camera.", "duration": 5, "resolution": "720P"}')
from urllib.parse import urlsplit
f=Path(os.environ["AILOOT_IMAGE_URLS_FILE"])
if not f.is_file():raise SystemExit("Choose the actual reference URL JSON file")
urls=json.loads(f.read_text())
if not isinstance(urls,list) or not 1<=len(urls)<=9:raise SystemExit("Provide one to nine reference-image URLs")
for u in urls:
    z=urlsplit(u) if isinstance(u,str) else None
    if not z or z.scheme!="https" or not z.netloc or z.username or z.password:raise SystemExit("Each reference must be an actual HTTPS image URL")
p["image_urls"]=urls
p["ratio"]="16:9"
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos/generations \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
print(json.dumps(r))
PY_RESULT
```

### Ergebnisse abrufen und speichern

#### Ailoot · Videos

mp4

- `GET /v1/videos/{request_id}`
- `GET /v1/videos/generations/{request_id}`
- `GET /v1/videos/{request_id}/content`
- `GET /v1/videos/generations/{request_id}/content`

##### Auftragsstatus prüfen

GET · Status

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_OPERATION_ID:?Set the actual Ailoot operation ID returned by creation}"
export AILOOT_OPERATION_ID
operation_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ["AILOOT_OPERATION_ID"],safe=""))')
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/videos/generations/$operation_id" \
  -H "Authorization: Bearer $AILOOT_API_KEY" -o status.json
python3 - <<'PY_STATUS'
import json
from pathlib import Path
r=json.loads(Path("status.json").read_text())
print(json.dumps(r))
if r.get("status")=="completed":
    for x in r.get("data",[]):print(x)
PY_STATUS
```

##### Alle fertiggestellten Dateien speichern

GET · Alle fertiggestellten Dateien

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_STATUS_FILE:?Set the actual completed status JSON file}"
export AILOOT_STATUS_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
from urllib.parse import urlsplit,urljoin
f=Path(os.environ["AILOOT_STATUS_FILE"])
if not f.is_file():raise SystemExit("Choose the actual completed status file")
r=json.loads(f.read_text())
if r.get("status")!="completed" or not isinstance(r.get("data"),list) or not r["data"]:raise SystemExit("Wait for a completed status with asset paths")
urls=[]
for x in r["data"]:
    if not isinstance(x,str) or "\n" in x or "\r" in x:raise SystemExit("Invalid asset path")
    u=urljoin("https://api.ailoot.ai",x)
    z=urlsplit(u)
    if z.scheme!="https" or z.netloc!="api.ailoot.ai" or z.username or z.password:raise SystemExit("Use the actual Ailoot asset paths from status")
    urls.append(u)
Path("asset-urls.txt").write_text("\n".join(urls)+"\n")
PY_REQUEST
index=0
while IFS= read -r asset_url; do
  curl --fail-with-body --silent --show-error "$asset_url" \
    -H "Authorization: Bearer $AILOOT_API_KEY" -o "video-${index}.mp4"
  index=$((index + 1))
done < asset-urls.txt
```

Abrufe anderer Inhalte

GET · Inhalt

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_OPERATION_ID:?Set the actual Ailoot operation ID returned by creation}"
export AILOOT_OPERATION_ID
operation_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ["AILOOT_OPERATION_ID"],safe=""))')
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/videos/generations/$operation_id/content" \
  -H "Authorization: Bearer $AILOOT_API_KEY" -o video.mp4
```

##### Alle fertiggestellten Ergebnisse aufbewahren

Speichern Sie jedes fertiggestellte Video oder jede zurückgegebene Datei; rufen Sie jede tatsächlich zurückgegebene Datei-URL ab.

Bewahren Sie jedes zurückgegebene Datenelement/jeden Ausgabeindex auf. content\_url bezeichnet nur die erste Ausgabe; rufen Sie jeden tatsächlichen Inhaltspfad/jedes Asset ab. GET content ohne index liefert nicht sämtliche Ausgaben.

##### Wenn die ursprüngliche Antwort geprüft werden muss

Lesen Sie den vorhandenen ursprünglichen Auftrag; übermitteln Sie eine Anfrage mit unbekanntem Übermittlungsergebnis niemals erneut.

Antwortfelder

| Feld | Typ |
| --- | --- |
| Feld`id` | Typstring |
| Feld`object` | Typstring |
| Feld`model` | Typstring |
| Feld`status` | Typstring |
| Feld`content_url` | Typsigned URL |
| Feld`data[]` | Typsigned URL |
| Feld`usage` | Typobject |
| Feld`result_pending_check` | Typboolean |

Fehler und nächste Schritte

| Antwort | Bedingung | Nächster Schritt |
| --- | --- | --- |
| Antwort400 · `invalid_request_error` | BedingungPflichtfelder, Darstellung des Eingabematerials oder Parameterwert ungültig | Nächster SchrittDie angegebenen Felder vor einer neuen Erstellungsanfrage korrigieren. |
| Antwort409 · `video_not_ready` | BedingungDer ursprüngliche Ergebnisinhalt ist noch nicht verfügbar | Nächster SchrittFragen Sie die ursprünglich zurückgegebene ID regelmäßig ab und beachten Sie Retry-After. |
| Antwort`server_error` | BedingungDie zurückgegebene Antwort gibt an, dass der Vorgang oder das Ergebnis eine Prüfung erfordert | Nächster SchrittDie ursprünglich zurückgegebene Vorgangs-/Aufgaben-ID, die Anfrageheader und die Antwort aufbewahren; mit unterstützten Leseaufrufen für diesen ursprünglichen Vorgang fortfahren. Die Erstellungsanfrage nicht erneut senden. |

### Aliasnamen

#### Modellaliasnamen

**Ailoot** [`happyhorse-1.1-r2v`](https://ailoot.ai/models/de-at/#m=happyhorse-1.1-r2v&route=Core&caller=happyhorse-1.1-r2v&fmt=videos), [`happyhorse-r2v`](https://ailoot.ai/models/de-at/#m=happyhorse-1.1-r2v&route=Core&caller=happyhorse-r2v&fmt=videos), [`happyhorse-r2v-latest`](https://ailoot.ai/models/de-at/#m=happyhorse-1.1-r2v&route=Core&caller=happyhorse-r2v-latest&fmt=videos)

#### Aliasnamen für Methodenpfade

Verwenden Sie die oben angezeigten Methodenpfade.

#### Zugehörige Aufrufer-IDs

[`happyhorse-1.1-r2v`](https://ailoot.ai/models/de-at/#m=happyhorse-1.1-r2v&route=Core&caller=happyhorse-1.1-r2v&fmt=videos), [`happyhorse-r2v`](https://ailoot.ai/models/de-at/#m=happyhorse-1.1-r2v&route=Core&caller=happyhorse-r2v&fmt=videos), [`happyhorse-r2v-latest`](https://ailoot.ai/models/de-at/#m=happyhorse-1.1-r2v&route=Core&caller=happyhorse-r2v-latest&fmt=videos)

**Ailoot · Videos** `POST /v1/videos/generations` `happyhorse-r2v`

[`happyhorse-r2v`](https://ailoot.ai/models/de-at/#m=happyhorse-1.1-r2v&route=Core&caller=happyhorse-r2v&fmt=videos)

Alibaba /`happyhorse-r2v`

Modell-ID

- `happyhorse-1.1-r2v`
- `happyhorse-r2v`
- `happyhorse-r2v-latest`

### Einstieg

Modell zur Videogenerierung anhand von Referenzbildern und einer Textvorgabe. Hilft, das Aussehen von Figuren und Objekten sowie den visuellen Stil in einer neuen Szene beizubehalten.

Zulässige Eingaben

Text · Bilder

Ergebnisse

Video

### In Ailoot verfügbar · Eingaben und Methoden

**Ailoot · Videos** `POST /v1/videos/generations`

Eingabe

`text`, `image`

Ausgabe

`video`

Ausgabeformat

mp4

| Feld | Typ | Anforderung | Werte und Limits | Standard |
| --- | --- | --- | --- | --- |
| Feld`model` | Typ`string` | AnforderungErforderlich | Werte und Limits happyhorse-r2v | Standard— |
| Feld`prompt` | Typ`string` | AnforderungErforderlich | Werte und Limits Mindestlänge: 1 | Standard— |
| Feld`duration` | Typ`integer` | AnforderungOptional | Werte und Limits Minimum: 3 Maximum: 15 Einheit: Sekunden | Standard5 |
| Feld`resolution` | Typ`string` | AnforderungOptional | Werte und Limits 480P, 720P, 1080P | Standard720P |
| Feld`ratio` | Typ`string` | AnforderungOptional | Werte und Limits 16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21, 21:9 | Standard16:9 |
| Feld`image_urls` | Typ`https_url\|data_image_url[]` | AnforderungErforderlich | Werte und Limits Mindestanzahl Elemente: 1 Maximale Anzahl Elemente: 9 Maximale Anzahl dekodierter Bytes: 20 971 520 MIME-Typen: image/jpeg, image/png, image/webp | Standard— |

Kombinationen von Eingabematerialien

**reference\_images\_to\_video** · Erforderlich: prompt, image\_urls

Methodenparameter und Lebenszyklus

| Parameter | Vertrag |
| --- | --- |
| Parameter`material_types` | Vertragtext, image |
| Parameter`required` | Vertragnull |
| Parameter`optional_controls` | Vertragnull |

Lebenszyklus: `submit_once_poll_original`

`GET /v1/videos/{request_id}`

`GET /v1/videos/generations/{request_id}`

`GET /v1/videos/{request_id}/content`

`GET /v1/videos/generations/{request_id}/content`

Methodenstrukturen und IDs sind exakt; die Fähigkeiten des Anbieters sind von der Zulassung einer Anfrage zu unterscheiden.

### Tarife

#### Ailoot-Methodentarife

Ausgabe

$ 0,18 *pro Sekunde bei 1080p*

Ausgabe

$ 0,07 *pro Sekunde bei 480p*

Ausgabe

$ 0,14 *pro Sekunde bei 720p*

Ailoot reserviert vor einer Anfrage einen geschätzten Betrag. Nach dem Ergebnis rechnet Ailoot die endgültige Gebühr anhand des gemessenen Verbrauchs ab. Bei Streaming erfolgt die Abrechnung anhand des abschließenden Verbrauchsdatensatzes. [So funktionieren Reservierung und Abrechnung →](https://ailoot.ai/docs/de-at/billing/reserve/)

### Beispielanfragen

#### Ailoot · Videos

Bildreferenz

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_URLS_FILE:?Set a JSON file containing your actual reference-image URLs}"
export AILOOT_IMAGE_URLS_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "happyhorse-r2v", "prompt": "The subject walks slowly toward the camera.", "duration": 5, "resolution": "720P"}')
from urllib.parse import urlsplit
f=Path(os.environ["AILOOT_IMAGE_URLS_FILE"])
if not f.is_file():raise SystemExit("Choose the actual reference URL JSON file")
urls=json.loads(f.read_text())
if not isinstance(urls,list) or not 1<=len(urls)<=9:raise SystemExit("Provide one to nine reference-image URLs")
for u in urls:
    z=urlsplit(u) if isinstance(u,str) else None
    if not z or z.scheme!="https" or not z.netloc or z.username or z.password:raise SystemExit("Each reference must be an actual HTTPS image URL")
p["image_urls"]=urls
p["ratio"]="16:9"
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos/generations \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
print(json.dumps(r))
PY_RESULT
```

### Ergebnisse abrufen und speichern

#### Ailoot · Videos

mp4

- `GET /v1/videos/{request_id}`
- `GET /v1/videos/generations/{request_id}`
- `GET /v1/videos/{request_id}/content`
- `GET /v1/videos/generations/{request_id}/content`

##### Auftragsstatus prüfen

GET · Status

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_OPERATION_ID:?Set the actual Ailoot operation ID returned by creation}"
export AILOOT_OPERATION_ID
operation_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ["AILOOT_OPERATION_ID"],safe=""))')
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/videos/generations/$operation_id" \
  -H "Authorization: Bearer $AILOOT_API_KEY" -o status.json
python3 - <<'PY_STATUS'
import json
from pathlib import Path
r=json.loads(Path("status.json").read_text())
print(json.dumps(r))
if r.get("status")=="completed":
    for x in r.get("data",[]):print(x)
PY_STATUS
```

##### Alle fertiggestellten Dateien speichern

GET · Alle fertiggestellten Dateien

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_STATUS_FILE:?Set the actual completed status JSON file}"
export AILOOT_STATUS_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
from urllib.parse import urlsplit,urljoin
f=Path(os.environ["AILOOT_STATUS_FILE"])
if not f.is_file():raise SystemExit("Choose the actual completed status file")
r=json.loads(f.read_text())
if r.get("status")!="completed" or not isinstance(r.get("data"),list) or not r["data"]:raise SystemExit("Wait for a completed status with asset paths")
urls=[]
for x in r["data"]:
    if not isinstance(x,str) or "\n" in x or "\r" in x:raise SystemExit("Invalid asset path")
    u=urljoin("https://api.ailoot.ai",x)
    z=urlsplit(u)
    if z.scheme!="https" or z.netloc!="api.ailoot.ai" or z.username or z.password:raise SystemExit("Use the actual Ailoot asset paths from status")
    urls.append(u)
Path("asset-urls.txt").write_text("\n".join(urls)+"\n")
PY_REQUEST
index=0
while IFS= read -r asset_url; do
  curl --fail-with-body --silent --show-error "$asset_url" \
    -H "Authorization: Bearer $AILOOT_API_KEY" -o "video-${index}.mp4"
  index=$((index + 1))
done < asset-urls.txt
```

Abrufe anderer Inhalte

GET · Inhalt

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_OPERATION_ID:?Set the actual Ailoot operation ID returned by creation}"
export AILOOT_OPERATION_ID
operation_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ["AILOOT_OPERATION_ID"],safe=""))')
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/videos/generations/$operation_id/content" \
  -H "Authorization: Bearer $AILOOT_API_KEY" -o video.mp4
```

##### Alle fertiggestellten Ergebnisse aufbewahren

Speichern Sie jedes fertiggestellte Video oder jede zurückgegebene Datei; rufen Sie jede tatsächlich zurückgegebene Datei-URL ab.

Bewahren Sie jedes zurückgegebene Datenelement/jeden Ausgabeindex auf. content\_url bezeichnet nur die erste Ausgabe; rufen Sie jeden tatsächlichen Inhaltspfad/jedes Asset ab. GET content ohne index liefert nicht sämtliche Ausgaben.

##### Wenn die ursprüngliche Antwort geprüft werden muss

Lesen Sie den vorhandenen ursprünglichen Auftrag; übermitteln Sie eine Anfrage mit unbekanntem Übermittlungsergebnis niemals erneut.

Antwortfelder

| Feld | Typ |
| --- | --- |
| Feld`id` | Typstring |
| Feld`object` | Typstring |
| Feld`model` | Typstring |
| Feld`status` | Typstring |
| Feld`content_url` | Typsigned URL |
| Feld`data[]` | Typsigned URL |
| Feld`usage` | Typobject |
| Feld`result_pending_check` | Typboolean |

Fehler und nächste Schritte

| Antwort | Bedingung | Nächster Schritt |
| --- | --- | --- |
| Antwort400 · `invalid_request_error` | BedingungPflichtfelder, Darstellung des Eingabematerials oder Parameterwert ungültig | Nächster SchrittDie angegebenen Felder vor einer neuen Erstellungsanfrage korrigieren. |
| Antwort409 · `video_not_ready` | BedingungDer ursprüngliche Ergebnisinhalt ist noch nicht verfügbar | Nächster SchrittFragen Sie die ursprünglich zurückgegebene ID regelmäßig ab und beachten Sie Retry-After. |
| Antwort`server_error` | BedingungDie zurückgegebene Antwort gibt an, dass der Vorgang oder das Ergebnis eine Prüfung erfordert | Nächster SchrittDie ursprünglich zurückgegebene Vorgangs-/Aufgaben-ID, die Anfrageheader und die Antwort aufbewahren; mit unterstützten Leseaufrufen für diesen ursprünglichen Vorgang fortfahren. Die Erstellungsanfrage nicht erneut senden. |

### Aliasnamen

#### Modellaliasnamen

**Ailoot** [`happyhorse-1.1-r2v`](https://ailoot.ai/models/de-at/#m=happyhorse-1.1-r2v&route=Core&caller=happyhorse-1.1-r2v&fmt=videos), [`happyhorse-r2v`](https://ailoot.ai/models/de-at/#m=happyhorse-1.1-r2v&route=Core&caller=happyhorse-r2v&fmt=videos), [`happyhorse-r2v-latest`](https://ailoot.ai/models/de-at/#m=happyhorse-1.1-r2v&route=Core&caller=happyhorse-r2v-latest&fmt=videos)

#### Aliasnamen für Methodenpfade

Verwenden Sie die oben angezeigten Methodenpfade.

#### Zugehörige Aufrufer-IDs

[`happyhorse-1.1-r2v`](https://ailoot.ai/models/de-at/#m=happyhorse-1.1-r2v&route=Core&caller=happyhorse-1.1-r2v&fmt=videos), [`happyhorse-r2v`](https://ailoot.ai/models/de-at/#m=happyhorse-1.1-r2v&route=Core&caller=happyhorse-r2v&fmt=videos), [`happyhorse-r2v-latest`](https://ailoot.ai/models/de-at/#m=happyhorse-1.1-r2v&route=Core&caller=happyhorse-r2v-latest&fmt=videos)

**Ailoot · Videos** `POST /v1/videos/generations` `happyhorse-r2v-latest`

[`happyhorse-r2v-latest`](https://ailoot.ai/models/de-at/#m=happyhorse-1.1-r2v&route=Core&caller=happyhorse-r2v-latest&fmt=videos)

Alibaba /`happyhorse-r2v-latest`

Modell-ID

- `happyhorse-1.1-r2v`
- `happyhorse-r2v`
- `happyhorse-r2v-latest`

### Einstieg

Modell zur Videogenerierung anhand von Referenzbildern und einer Textvorgabe. Hilft, das Aussehen von Figuren und Objekten sowie den visuellen Stil in einer neuen Szene beizubehalten.

Zulässige Eingaben

Text · Bilder

Ergebnisse

Video

### In Ailoot verfügbar · Eingaben und Methoden

**Ailoot · Videos** `POST /v1/videos/generations`

Eingabe

`text`, `image`

Ausgabe

`video`

Ausgabeformat

mp4

| Feld | Typ | Anforderung | Werte und Limits | Standard |
| --- | --- | --- | --- | --- |
| Feld`model` | Typ`string` | AnforderungErforderlich | Werte und Limits happyhorse-r2v-latest | Standard— |
| Feld`prompt` | Typ`string` | AnforderungErforderlich | Werte und Limits Mindestlänge: 1 | Standard— |
| Feld`duration` | Typ`integer` | AnforderungOptional | Werte und Limits Minimum: 3 Maximum: 15 Einheit: Sekunden | Standard5 |
| Feld`resolution` | Typ`string` | AnforderungOptional | Werte und Limits 480P, 720P, 1080P | Standard720P |
| Feld`ratio` | Typ`string` | AnforderungOptional | Werte und Limits 16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21, 21:9 | Standard16:9 |
| Feld`image_urls` | Typ`https_url\|data_image_url[]` | AnforderungErforderlich | Werte und Limits Mindestanzahl Elemente: 1 Maximale Anzahl Elemente: 9 Maximale Anzahl dekodierter Bytes: 20 971 520 MIME-Typen: image/jpeg, image/png, image/webp | Standard— |

Kombinationen von Eingabematerialien

**reference\_images\_to\_video** · Erforderlich: prompt, image\_urls

Methodenparameter und Lebenszyklus

| Parameter | Vertrag |
| --- | --- |
| Parameter`material_types` | Vertragtext, image |
| Parameter`required` | Vertragnull |
| Parameter`optional_controls` | Vertragnull |

Lebenszyklus: `submit_once_poll_original`

`GET /v1/videos/{request_id}`

`GET /v1/videos/generations/{request_id}`

`GET /v1/videos/{request_id}/content`

`GET /v1/videos/generations/{request_id}/content`

Methodenstrukturen und IDs sind exakt; die Fähigkeiten des Anbieters sind von der Zulassung einer Anfrage zu unterscheiden.

### Tarife

#### Ailoot-Methodentarife

Ausgabe

$ 0,18 *pro Sekunde bei 1080p*

Ausgabe

$ 0,07 *pro Sekunde bei 480p*

Ausgabe

$ 0,14 *pro Sekunde bei 720p*

Ailoot reserviert vor einer Anfrage einen geschätzten Betrag. Nach dem Ergebnis rechnet Ailoot die endgültige Gebühr anhand des gemessenen Verbrauchs ab. Bei Streaming erfolgt die Abrechnung anhand des abschließenden Verbrauchsdatensatzes. [So funktionieren Reservierung und Abrechnung →](https://ailoot.ai/docs/de-at/billing/reserve/)

### Beispielanfragen

#### Ailoot · Videos

Bildreferenz

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_URLS_FILE:?Set a JSON file containing your actual reference-image URLs}"
export AILOOT_IMAGE_URLS_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "happyhorse-r2v-latest", "prompt": "The subject walks slowly toward the camera.", "duration": 5, "resolution": "720P"}')
from urllib.parse import urlsplit
f=Path(os.environ["AILOOT_IMAGE_URLS_FILE"])
if not f.is_file():raise SystemExit("Choose the actual reference URL JSON file")
urls=json.loads(f.read_text())
if not isinstance(urls,list) or not 1<=len(urls)<=9:raise SystemExit("Provide one to nine reference-image URLs")
for u in urls:
    z=urlsplit(u) if isinstance(u,str) else None
    if not z or z.scheme!="https" or not z.netloc or z.username or z.password:raise SystemExit("Each reference must be an actual HTTPS image URL")
p["image_urls"]=urls
p["ratio"]="16:9"
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos/generations \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
print(json.dumps(r))
PY_RESULT
```

### Ergebnisse abrufen und speichern

#### Ailoot · Videos

mp4

- `GET /v1/videos/{request_id}`
- `GET /v1/videos/generations/{request_id}`
- `GET /v1/videos/{request_id}/content`
- `GET /v1/videos/generations/{request_id}/content`

##### Auftragsstatus prüfen

GET · Status

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_OPERATION_ID:?Set the actual Ailoot operation ID returned by creation}"
export AILOOT_OPERATION_ID
operation_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ["AILOOT_OPERATION_ID"],safe=""))')
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/videos/generations/$operation_id" \
  -H "Authorization: Bearer $AILOOT_API_KEY" -o status.json
python3 - <<'PY_STATUS'
import json
from pathlib import Path
r=json.loads(Path("status.json").read_text())
print(json.dumps(r))
if r.get("status")=="completed":
    for x in r.get("data",[]):print(x)
PY_STATUS
```

##### Alle fertiggestellten Dateien speichern

GET · Alle fertiggestellten Dateien

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_STATUS_FILE:?Set the actual completed status JSON file}"
export AILOOT_STATUS_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
from urllib.parse import urlsplit,urljoin
f=Path(os.environ["AILOOT_STATUS_FILE"])
if not f.is_file():raise SystemExit("Choose the actual completed status file")
r=json.loads(f.read_text())
if r.get("status")!="completed" or not isinstance(r.get("data"),list) or not r["data"]:raise SystemExit("Wait for a completed status with asset paths")
urls=[]
for x in r["data"]:
    if not isinstance(x,str) or "\n" in x or "\r" in x:raise SystemExit("Invalid asset path")
    u=urljoin("https://api.ailoot.ai",x)
    z=urlsplit(u)
    if z.scheme!="https" or z.netloc!="api.ailoot.ai" or z.username or z.password:raise SystemExit("Use the actual Ailoot asset paths from status")
    urls.append(u)
Path("asset-urls.txt").write_text("\n".join(urls)+"\n")
PY_REQUEST
index=0
while IFS= read -r asset_url; do
  curl --fail-with-body --silent --show-error "$asset_url" \
    -H "Authorization: Bearer $AILOOT_API_KEY" -o "video-${index}.mp4"
  index=$((index + 1))
done < asset-urls.txt
```

Abrufe anderer Inhalte

GET · Inhalt

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_OPERATION_ID:?Set the actual Ailoot operation ID returned by creation}"
export AILOOT_OPERATION_ID
operation_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ["AILOOT_OPERATION_ID"],safe=""))')
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/videos/generations/$operation_id/content" \
  -H "Authorization: Bearer $AILOOT_API_KEY" -o video.mp4
```

##### Alle fertiggestellten Ergebnisse aufbewahren

Speichern Sie jedes fertiggestellte Video oder jede zurückgegebene Datei; rufen Sie jede tatsächlich zurückgegebene Datei-URL ab.

Bewahren Sie jedes zurückgegebene Datenelement/jeden Ausgabeindex auf. content\_url bezeichnet nur die erste Ausgabe; rufen Sie jeden tatsächlichen Inhaltspfad/jedes Asset ab. GET content ohne index liefert nicht sämtliche Ausgaben.

##### Wenn die ursprüngliche Antwort geprüft werden muss

Lesen Sie den vorhandenen ursprünglichen Auftrag; übermitteln Sie eine Anfrage mit unbekanntem Übermittlungsergebnis niemals erneut.

Antwortfelder

| Feld | Typ |
| --- | --- |
| Feld`id` | Typstring |
| Feld`object` | Typstring |
| Feld`model` | Typstring |
| Feld`status` | Typstring |
| Feld`content_url` | Typsigned URL |
| Feld`data[]` | Typsigned URL |
| Feld`usage` | Typobject |
| Feld`result_pending_check` | Typboolean |

Fehler und nächste Schritte

| Antwort | Bedingung | Nächster Schritt |
| --- | --- | --- |
| Antwort400 · `invalid_request_error` | BedingungPflichtfelder, Darstellung des Eingabematerials oder Parameterwert ungültig | Nächster SchrittDie angegebenen Felder vor einer neuen Erstellungsanfrage korrigieren. |
| Antwort409 · `video_not_ready` | BedingungDer ursprüngliche Ergebnisinhalt ist noch nicht verfügbar | Nächster SchrittFragen Sie die ursprünglich zurückgegebene ID regelmäßig ab und beachten Sie Retry-After. |
| Antwort`server_error` | BedingungDie zurückgegebene Antwort gibt an, dass der Vorgang oder das Ergebnis eine Prüfung erfordert | Nächster SchrittDie ursprünglich zurückgegebene Vorgangs-/Aufgaben-ID, die Anfrageheader und die Antwort aufbewahren; mit unterstützten Leseaufrufen für diesen ursprünglichen Vorgang fortfahren. Die Erstellungsanfrage nicht erneut senden. |

### Aliasnamen

#### Modellaliasnamen

**Ailoot** [`happyhorse-1.1-r2v`](https://ailoot.ai/models/de-at/#m=happyhorse-1.1-r2v&route=Core&caller=happyhorse-1.1-r2v&fmt=videos), [`happyhorse-r2v`](https://ailoot.ai/models/de-at/#m=happyhorse-1.1-r2v&route=Core&caller=happyhorse-r2v&fmt=videos), [`happyhorse-r2v-latest`](https://ailoot.ai/models/de-at/#m=happyhorse-1.1-r2v&route=Core&caller=happyhorse-r2v-latest&fmt=videos)

#### Aliasnamen für Methodenpfade

Verwenden Sie die oben angezeigten Methodenpfade.

#### Zugehörige Aufrufer-IDs

[`happyhorse-1.1-r2v`](https://ailoot.ai/models/de-at/#m=happyhorse-1.1-r2v&route=Core&caller=happyhorse-1.1-r2v&fmt=videos), [`happyhorse-r2v`](https://ailoot.ai/models/de-at/#m=happyhorse-1.1-r2v&route=Core&caller=happyhorse-r2v&fmt=videos), [`happyhorse-r2v-latest`](https://ailoot.ai/models/de-at/#m=happyhorse-1.1-r2v&route=Core&caller=happyhorse-r2v-latest&fmt=videos)

FAQ · happyhorse-1.1-r2v

Welche Eingaben und Ergebnisse sind verfügbar?

`POST /v1/videos/generations` · `happyhorse-1.1-r2v`: `text`, `image` → `video` `POST /v1/videos/generations` · `happyhorse-r2v`: `text`, `image` → `video` `POST /v1/videos/generations` · `happyhorse-r2v-latest`: `text`, `image` → `video`

Welche Felder verwendet die Anfrage?

`POST /v1/videos/generations` · `happyhorse-1.1-r2v`: `model`, `prompt`, `duration`, `resolution`, `ratio`, `image_urls` `POST /v1/videos/generations` · `happyhorse-r2v`: `model`, `prompt`, `duration`, `resolution`, `ratio`, `image_urls` `POST /v1/videos/generations` · `happyhorse-r2v-latest`: `model`, `prompt`, `duration`, `resolution`, `ratio`, `image_urls`

Welche Grenzen gelten?

`POST /v1/videos/generations` · `happyhorse-1.1-r2v`: `duration.minimum`: `3`; `duration.maximum`: `15` `POST /v1/videos/generations` · `happyhorse-r2v`: `duration.minimum`: `3`; `duration.maximum`: `15` `POST /v1/videos/generations` · `happyhorse-r2v-latest`: `duration.minimum`: `3`; `duration.maximum`: `15`

Verbinden Sie Ailoot mit Claude Code, OpenCode, Hermes oder Ihrer eigenen Anwendung.

## Das Unternehmen und sein Projektportfolio

Das Unternehmen und sein Projektportfolio: Millionen von Kunden; monatliche Umsätze in Milliardenhöhe.

## Tokens mit Rabatt kaufen.

Aborabatt für regelmäßige Arbeit. Aktionscodes bieten bis 50% beim Tokenkauf.

Abo

Wählen Sie einen Tarif mit Rabatt für Ihre regelmäßigen Anfragen.

Aktionscode bis 50%

Geben Sie den Code beim Kauf ein. Der Preis wird nach den gültigen Aktionsbedingungen berechnet.

Ausgaben in der Historie

Modell, Tokens und Betrag werden für jede Anfrage gespeichert.

[Abo wählen](https://ailoot.ai/docs/de-at/billing/subscriptions/) · [Modellpreise ansehen](https://ailoot.ai/models/de-at/)

## Verbinden Sie die API mit dem Produkt, das Sie verkaufen.

SaaS, Anwendungen und Bots nach dem offiziellen Angebot und Lizenzvertrag von Ailoot. Fordern Sie für den Weiterverkauf eine Reseller-Lizenz an.

Kommerzielle Anwendung

Integrieren Sie Text-, Bild-, Video- und Audioerzeugung in kostenpflichtige Funktionen Ihres Dienstes.

Reseller-Lizenz

Senden Sie Projektbeschreibung und Zugangsmodell. Fordern Sie schriftliche Nutzungs- und Weiterverkaufsbedingungen an.

Dokumente auf der Website

Offizielles Angebot, Lizenzvertrag und Datenschutzerklärung sind vor der Verbindung zugänglich.

[Reseller-Lizenz anfordern](mailto:support@ailoot.ai) · [Offizielles Angebot und Lizenzvertrag](https://ailoot.ai/legal/offer?lang=de-at)

## Ailoot · Das Unternehmen und sein Projektportfolio





Ailoot baut auf bewährte Betriebserfahrung, einen großen Kundenstamm, stabilen Service und kontinuierliche KPI-Kontrolle.





Das Unternehmen und sein Projektportfolio: Millionen von Kunden; monatliche Umsätze in Milliardenhöhe.





Ailoot nutzt diese Betriebserfahrung für den API-Zugang zu KI-Funktionen in Kundenprodukten, Agenten, Anwendungen und Automatisierungen.
