Source: https://ailoot.ai/models/nl/alibaba-happyhorse-1-1/
Canonical: https://ailoot.ai/models/nl/alibaba-happyhorse-1-1/
Language: nl

# Alibaba: HappyHorse 1.1

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

## [Alibaba: HappyHorse 1.1](https://ailoot.ai/models/nl/alibaba-happyhorse-1-1/)

Alibaba HappyHorse 1.1 genereert korte video's met geluid op basis van een tekstbriefing, één afbeelding van het eerste frame of maximaal negen referentieafbeeldingen. De profielen van de maker leggen de nadruk op verbeterde beweging, huiddetails en consistentie van personages tussen clips. Uitvoer is MP4 van 3–15 seconden met 24 fps, met opties voor 480p, 720p of 1080p.

- [**Ailoot Ultra · Video** `POST /v1/videos` `alibaba/happyhorse-1.1`](https://ailoot.ai/models/nl/alibaba-happyhorse-1-1/#method-0)

Over het model

Deze beschrijving gaat over de mogelijkheden van het model. De via Ailoot beschikbare invoer, uitvoer en opties staan hieronder voor de geselecteerde methode.

Alibaba HappyHorse 1.1 is een editie voor videogeneratie met afzonderlijk benoemde profielen voor tekst naar video, afbeelding naar video vanaf het eerste frame en referentie naar video. De fabrikant benadrukt verbeterde visuele details, beweging, personage-identiteit tussen clips, tekststabiliteit en audiovisuele synchronisatie. Het resultaat is een korte video met geluid, bruikbaar voor een productshot, portretanimatie of kleine personagescène. Kies de invoermodus op basis van wat de scène moet bepalen: een geschreven concept, een exact openingsbeeld of verschillende visuele referenties.

Beschrijf voor tekst naar video het onderwerp, de locatie, de handeling, de kadrering, de camerabeweging en het gewenste geluid. Laat voor een korte actiescène een fietser stoppen naast een café aan de rivier terwijl de camera rustig naar de geparkeerde fiets beweegt. Houd de handeling passend bij een korte clip en beschrijf het slotmoment. De huidige tekstgids van de maker staat maximaal 5000 niet-Chinese of 2500 Chinese tekens toe en kapt overtollige tekst af. Orden de briefing zo dat het essentiële onderwerp en de handeling expliciet zijn en niet verscholen gaan achter herhaalde bijvoeglijke naamwoorden.

Afbeelding naar video vanaf het eerste frame gebruikt precies één afbeelding als opening. Bereid onderwerp, compositie en gewenste uitsnede in dat stilstaande beeld voor en beschrijf daarna wat moet bewegen of hoe de camera moet veranderen. De gedocumenteerde afbeeldingsformaten zijn JPEG/JPG, PNG en WEBP, maximaal 20 MB, met beide afmetingen minimaal 300 pixels en een beeldverhouding tussen 1:2,5 en 2,5:1. De uitvoer benadert de gekozen resolutieklasse en behoudt de verhoudingen van de bronafbeelding. Een portretresultaat begint daarom met een passende portretcompositie en niet met een losstaande instructie voor de beeldverhouding.

Referentie naar video accepteert één tot negen afbeeldingen. De prompt gebruikt \[Image 1\], \[Image 2\] en volgende posities om ze in invoervolgorde aan te duiden. Geef de rol van elke referentie aan en benoem het relevante object of de persoon, zodat een scèneafbeelding niet wordt verward met een personagebron. De referentiegids accepteert JPEG/JPG, PNG of WEBP tot 20 MB, vereist een kortste zijde van minimaal 400 pixels en beveelt duidelijke referenties in 720p of hoger aan. Vermijd een zwaar gecomprimeerde referentie waarin herkenningsdetails al ontbreken.

Plaats voor een scène met meerdere referenties de persoon uit één afbeelding in de kamer uit een andere en behoud daarbij een jas of product uit een derde. Beschrijf interactie en camera in dezelfde briefing. Het 1.1-referentieprofiel benadrukt stabiliteit van onderwerpen, scènestijl en filmische beweging; controleer in het daadwerkelijke resultaat de gewenste identiteit, productmarkeringen en ruimtelijke plaatsing. Meerdere afbeeldingen geven de briefing meer informatie, maar bij de beoordeling moet nog steeds worden nagegaan welke kenmerken in de video zijn overgenomen.

De maker vermeldt uitvoer in 480p, 720p en 1080p voor de 1.1-generatiemodi, met een duur in gehele seconden van drie tot vijftien en MP4 met 24 fps. Het API-antwoord beschrijft H.264-codering. Tekst- en referentiegeneratie bieden onder andere 16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21 en 21:9; generatie vanaf het eerste frame volgt de invoerafbeelding. Kies het formaat voor de bestemming en laat ruimte voor latere ondertitels of lay-outelementen. Controleer de daadwerkelijke kadrering van de geretourneerde video op het beoogde weergaveformaat.

De uitvoer van de modelfamilie bevat geluid. Geef voordracht of sfeer een duidelijke rol in de briefing en beoordeel dialoog, effecten of achtergrondmuziek samen met het beeld. Houd gesproken materiaal kort genoeg voor handeling en pauzes, in plaats van een lang script in één kort shot te persen. Controleer lipbeweging, sprekerstoewijzing en de daadwerkelijke woorden wanneer er spraak is. Acceptatie van een prompttaal bepaalt op zichzelf geen gegarandeerde uitspraak of afzonderlijke stemreferentie-invoer.

De gedocumenteerde procedure van de maker is asynchroon: een taak-ID volgt de verwerking en een geslaagd resultaat levert de videolocatie. Voor de resultaatlink en taakquery's is een geldigheid van vierentwintig uur gedocumenteerd. Bewaar de voltooide clip, referenties en prompt als revisieregistratie. De gidsen documenteren ook instellingen voor seed en watermerk. Een vaste seed kan vergelijken ondersteunen, maar de maker zegt expliciet dat deze geen identieke resultaten garandeert; beoordeel dus het geretourneerde resultaat in plaats van aan te nemen dat één instelling elk frame vastlegt.

HappyHorse 1.0 en 1.1 zijn afzonderlijke edities. De 1.1-uitvoertabel voegt 480p toe aan de 720p- en 1080p-opties van 1.0 en de 1.1-modelpagina's beschrijven verbeteringen in details, beweging en consistentie. Het afzonderlijk benoemde HappyHorse 1.0-videobewerkingsprofiel heeft eigen invoer en limieten en is geen bewerkingsmodus die ongemerkt aan 1.1 mag worden toegeschreven. Beoordeel de volledige 1.1-clip op identiteit, beweging, kadrering, tekst en geluid en maak daarna een specifieke correctie terwijl je de geslaagde delen van de briefing behoudt.

**Ailoot Ultra · Video** `POST /v1/videos` `alibaba/happyhorse-1.1`

[`alibaba/happyhorse-1.1`](https://ailoot.ai/models/nl/#m=alibaba%2Fhappyhorse-1.1&route=Ultra&caller=alibaba%2Fhappyhorse-1.1&fmt=videos)

Alibaba /`alibaba/happyhorse-1.1`

### Aan de slag

Alibaba HappyHorse 1.1 genereert korte video's met geluid op basis van een tekstbriefing, één afbeelding van het eerste frame of maximaal negen referentieafbeeldingen. De profielen van de maker leggen de nadruk op verbeterde beweging, huiddetails en consistentie van personages tussen clips. Uitvoer is MP4 van 3–15 seconden met 24 fps, met opties voor 480p, 720p of 1080p.

Toegestane invoer

Tekst

Resultaten

Video

### Beschikbaar in Ailoot · invoer en methoden

**Ailoot Ultra · Video** `POST /v1/videos`

Invoertypen

`text`

Uitvoertypen

`video`

Uitvoerformaat

mp4

Aantal uitvoerresultaten

Tot en met 4 uitvoers

| Veld | Type | Vereiste | Waarden en limieten | Standaard |
| --- | --- | --- | --- | --- |
| Veld`model` | Type`string` | VereisteVereist | Waarden en limieten alibaba/happyhorse-1.1 | Standaard— |
| Veld`prompt` | Type`string` | VereisteVereist | Waarden en limieten Minimumlengte: 1 Maximumaantal bytes: 10.000 Eenheid: UTF8-bytes | Standaard— |
| Veld`duration` | Type`integer` | VereisteVereist | Waarden en limieten Minimum: 3 Maximum: 15 Eenheid: seconden | Standaard— |
| Veld`resolution` | Type`string` | VereisteVereist | Waarden en limieten 720p | Standaard— |
| Veld`aspect_ratio` | Type`string` | VereisteVereist | Waarden en limieten 16:9 | Standaard— |

Combinaties van invoermaterialen

**Tekst naar video** · Vereist: prompt

Methodeparameters en levenscyclus

| Parameter | Contract |
| --- | --- |
| Parameter`content_type` | Contractapplication/json |
| Parameter`required` | Contractmodel, prompt, duration, resolution, aspect\_ratio |
| Parameter`other_options` | Contractfalse |
| Parameter`resolution` | Contract720p |
| Parameter`prompt_max_bytes` | Contract10000 |
| Parameter`duration_integer_range` | Contract3, 15 |
| Parameter`aspect_ratio` | Contract16:9 |
| Parameter`generate_audio` | Contractmoet worden weggelaten (niet false); AAC inbegrepen |
| Parameter`material_types` | Contracttext |
| Parameter`additional_properties` | Contractfalse |

Methodealiasnamen: `/v1/videos/generations`, `/videos`, `/videos/generations`

Levenscyclus: `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`

Maak eenmaal aan en sla de geretourneerde ID op.

Vraag de oorspronkelijke status periodiek op; bewaar elke voltooide asset en de duur.

### Tarieven

##### Zo worden de uiteindelijke kosten berekend

De weergegeven tarieven geven een schatting van de kosten vóór de generatie. Het definitieve bedrag wordt berekend op basis van de kosten die voor de oorspronkelijke generatie zijn geregistreerd. De gemeten duur van de uitvoer en de geschatte hoeveelheden zijn niet de definitieve factureerbare hoeveelheid.

Tariefverwijzingen voegen geen verzoekopties toe. Ondersteunde parameters staan bij de geselecteerde methode.

Snelle modus

Niet opgegeven Wanneer de snelle modus is geselecteerd

Flexmodus

Niet opgegeven Wanneer de modus flex is geselecteerd

Maximale redeneerinspanning

Niet opgegeven Wanneer bij maximale redeneerinspanning de default-aanpassing wordt gebruikt

#### Geschatte tarieven ter vergelijking

#### Prijzen per configuratie

Koppel elke kostenpost aan de getoonde voorwaarden. Gebruik één tarief voor elke groep alternatieve configuraties.

| Configuratie | Tariefstaffel | Verwachte hoeveelheid | Rekeneenheid | Factureringsvoorwaarden | Kosten |
| --- | --- | --- | --- | --- | --- |
| ConfiguratieBasistarieven voor tokens | TariefstaffelBasistarief | Verwachte hoeveelheid— | Rekeneenheid— | Factureringsvoorwaarden— | Kosten Invoer · Invoertokens · Schatting uitsluitend ter vergelijking **—** / 1K tokens Uitvoer · Uitvoertokens · Schatting uitsluitend ter vergelijking **—** / 1K tokens Invoer · Cache lezen · Schatting uitsluitend ter vergelijking **—** / 1K tokens Invoer · Cache schrijven · Schatting uitsluitend ter vergelijking **—** / 1K tokens Invoer · Cache schrijven, 1 uur · Schatting uitsluitend ter vergelijking **—** / 1K tokens |
| ConfiguratieVideoprijs | Tariefstaffel— | Verwachte hoeveelheid— | Rekeneenheidper videoseconde | Factureringsvoorwaardenresolution: 1080p | Kosten Uitvoer · Videoprijs · Schatting uitsluitend ter vergelijking **$0.2556** per videoseconde |
| ConfiguratieVideoprijs | Tariefstaffel— | Verwachte hoeveelheid— | Rekeneenheidper videoseconde | Factureringsvoorwaardenresolution: 720p | Kosten Uitvoer · Videoprijs · Schatting uitsluitend ter vergelijking **$0.1976** per videoseconde |
| ConfiguratieGeschatte generatiekosten | Tariefstaffel— | Verwachte hoeveelheidschatting voor één generatie | Rekeneenheid— | Factureringsvoorwaarden— | Kosten Uitvoer · Geschatte generatiekosten · Schatting uitsluitend ter vergelijking **$0.5928** schatting vóór generatie Deze schatting is geen extra bedrag of vast tarief voor de voltooide generatie. |

Ailoot reserveert vóór een verzoek een geschat bedrag. Na het resultaat worden de uiteindelijke kosten afgerekend op basis van het gemeten verbruik. Bij streaming gebeurt de afrekening op basis van de definitieve verbruiksregistratie. [Zo werken reservering en afrekening →](https://ailoot.ai/docs/nl/billing/reserve/)

#### Details van het referentietarief

Referentiestaffels op modelniveau veranderen de methodeselectie, kostenramingen of afschrijvingen niet. Voor de actieve kostenberekening gelden de tarieven van de geselecteerde Ailoot-methode.

Prijsreferenties voor videoconfiguraties

#### Prijzen per configuratie

Koppel elke kostenpost aan de getoonde voorwaarden. Gebruik één tarief voor elke groep alternatieve configuraties.

| Configuratie | Factureringsvoorwaarden | Kosten |
| --- | --- | --- |
| ConfiguratieVideoprijs | Factureringsvoorwaardenresolution: 720p | Kosten Uitvoer · Videoprijs **$0.1976** per videoseconde Gepubliceerde prijsreferentie voor de weergegeven configuratie. De definitieve kosten volgen de daadwerkelijk gefactureerde configuratie. |
| ConfiguratieVideoprijs | Factureringsvoorwaardenresolution: 1080p | Kosten Uitvoer · Videoprijs **$0.2556** per videoseconde Gepubliceerde prijsreferentie voor de weergegeven configuratie. De definitieve kosten volgen de daadwerkelijk gefactureerde configuratie. |

### Voorbeeldverzoeken

#### Ailoot Ultra · Video

curl · exact bewaard aanmaakverzoek

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "alibaba/happyhorse-1.1", "prompt": "A cat in a spacesuit walking on the Moon", "duration": 3, "resolution": "720p", "aspect_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 \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
```

### Resultaten ophalen en opslaan

#### Ailoot Ultra · Video

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`

##### Taakstatus controleren

GET · Status van de oorspronkelijke bewerking

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_STATUS_URL'
import json
from pathlib import Path
from urllib.parse import quote
r=json.loads(Path('result.json').read_text())
if not isinstance(r.get('id'),str) or not r['id']:raise SystemExit('Keep the original response and headers for reconciliation; no returned ID')
Path('status-url.txt').write_text('https://api.ailoot.ai/v1/videos/'+quote(r['id'],safe=''))
PY_STATUS_URL
curl --fail-with-body --silent --show-error "$(cat status-url.txt)" \
  -H "Authorization: Bearer $AILOOT_API_KEY" -D status-headers.txt -o status.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path('status.json').read_text())
print(json.dumps(r,ensure_ascii=False,indent=2))
print('Keep the complete JSON and response headers; do not resubmit an unknown creation.')
PY_RESULT
```

Lezen van andere inhoud

Elk voltooid eigen uitvoerresultaat opslaan

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
python3 - <<'PY_ASSETS'
import json,os,subprocess
from pathlib import Path
from urllib.parse import urljoin,urlsplit
r=json.loads(Path('status.json').read_text())
if r.get('status')!='completed':raise SystemExit('Keep the original ID and read its status; never recreate an unknown job')
if not isinstance(r.get('data'),list) or not r['data']:raise SystemExit('Keep the complete original status; no completed outputs supplied')
urls=[]
for i,u in enumerate(r.get('data',[])):
    if not isinstance(u,str):raise SystemExit('Keep the original response; unexpected asset shape')
    urls.append((str(i),u))
for label,path in urls:
    u=urljoin('https://api.ailoot.ai',path);z=urlsplit(u)
    if z.scheme!='https' or z.netloc!='api.ailoot.ai' or z.username or z.password:raise SystemExit('Use the actual returned Ailoot owned content URL')
    target=Path('owned-'+label+'.bin')
    subprocess.run(['curl','--fail-with-body','--silent','--show-error',u,'-H','Authorization: Bearer '+os.environ['AILOOT_API_KEY'],'-D',str(target)+'.headers','-o',str(target)],check=True)
print('All returned owned URLs saved; complete metadata, timing and usage remain in the JSON.')
PY_ASSETS
```

##### Alle voltooide resultaten bewaren

Sla elke voltooide video of elk teruggegeven bestand op; haal elke daadwerkelijk teruggegeven bestands-URL op.

Voltooide data\[\] bevat alle ondertekende inhouds-URLs die u bezit. Haal elke geretourneerde URL op of gebruik het inhoudsendpoint met index ingesteld op een daadwerkelijke uitvoerindex. Een mislukte oorspronkelijke taak kan charge\_pending\_check retourneren; controleer die oorspronkelijke taak in plaats van deze opnieuw aan te maken.

##### Als het oorspronkelijke antwoord moet worden gecontroleerd

Lees de bestaande oorspronkelijke taak; dien een onzekere verzending nooit opnieuw in.

Maximumaantal uitvoerresultaten: 4.

Antwoordvelden

| Veld | Type | Betekenis |
| --- | --- | --- |
| Veld`id` | Typestring | Betekenis— |
| Veld`object` | Typestring | Betekenis— |
| Veld`model` | Typestring | Betekenis— |
| Veld`status` | Typestring | Betekenis— |
| Veld`data[]` | Typesigned content URL | Betekenis— |
| Veld`charge_pending_check` | Typeboolean | Betekenis— |
| Veld`error.code` | Typestring | Betekenis— |
| Veld`error.message` | Typestring | Betekenis— |
| Veld`operation_id` | Typestring | BetekenisHTTP503 result\_pending\_check-antwoord voor oorspronkelijke status/inhoud: dezelfde oorspronkelijke openbare video-ID als id. |
| Veld`error.type` | Typestring | Betekenisserver\_error bij HTTP503 result\_pending\_check. |

Fouten en vervolgstappen

| Antwoord | Voorwaarde | Volgende stap |
| --- | --- | --- |
| Antwoord400 · `invalid_request_error` | VoorwaardeHet lezen van de ruwe verzoekbody mislukt voordat het videoprofiel wordt geparseerd | Volgende stapBewaar het geretourneerde antwoord en corrigeer de onleesbare verzoekbody. |
| Antwoord422 · `price_unavailable` | VoorwaardeHet exacte videoprofiel kan niet worden geparseerd of voor het volledig geparseerde profiel is geen exacte prijskaart gereed | Volgende stapBewaar het antwoord; gebruik het volledige exact toegelaten profiel en de gepubliceerde kaart ervan. Deze tak wordt uitgevoerd vóór verzending naar een provider. |
| Antwoord409 · `video_not_ready` | VoorwaardeOorspronkelijke resultaatinhoud nog niet beschikbaar | Volgende stapVraag de oorspronkelijke geretourneerde ID periodiek op en respecteer Retry-After. |
| Antwoord`server_error` | VoorwaardeHet geretourneerde antwoord geeft aan dat de bewerking of het resultaat moet worden gecontroleerd | Volgende stapBewaar de oorspronkelijk geretourneerde bewerkings-/taak-ID, de aanvraagheaders en het antwoord; blijf de ondersteunde leesacties voor die oorspronkelijke bewerking uitvoeren. Dien de aanmaakaanvraag niet opnieuw in. |
| Antwoord503 · `result_pending_check` | VoorwaardeGET oorspronkelijke status/inhoud: de taak is niet gepubliceerd, de oorspronkelijke taak is niet failed/cancelled/expired en de lokale status is unknown of de oorspronkelijke taakstatus is completed. | Volgende stapBewaar de oorspronkelijke id en operation\_id (dezelfde openbare video-ID), het antwoord en de headers; lees uitsluitend de oorspronkelijke status/inhoud. Dien nooit een nieuw generatieverzoek in. |

### Aliasnamen

#### Modelaliasnamen

**Ailoot Ultra** [`alibaba/happyhorse-1.1`](https://ailoot.ai/models/nl/#m=alibaba%2Fhappyhorse-1.1&route=Ultra&caller=alibaba%2Fhappyhorse-1.1&fmt=videos)

#### Aliasnamen voor methodepaden

`/v1/videos/generations`, `/videos`, `/videos/generations`

#### Gerelateerde aanroeper-ID’s

[`alibaba/happyhorse-1.1`](https://ailoot.ai/models/nl/#m=alibaba%2Fhappyhorse-1.1&route=Ultra&caller=alibaba%2Fhappyhorse-1.1&fmt=videos)

FAQ · Alibaba: HappyHorse 1.1

Welke invoer en resultaten zijn beschikbaar?

`POST /v1/videos` · `alibaba/happyhorse-1.1`: `text` → `video`

Welke velden gebruikt het verzoek?

`POST /v1/videos` · `alibaba/happyhorse-1.1`: `model`, `prompt`, `duration`, `resolution`, `aspect_ratio`

Welke limieten gelden?

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

Verbind Ailoot met Claude Code, OpenCode, Hermes of je eigen applicatie.

## Het bedrijf en zijn projectenportefeuille

Het bedrijf en zijn projectenportefeuille: miljoenen klanten; maandelijkse verkopen in de miljarden.

## Koop tokens met korting.

Abonnementsvoordeel voor regelmatig gebruik. Promotiecodes geven tot 50% korting op tokens.

Abonnement

Kies een abonnement met korting voor je terugkerende verzoeken.

Promotiecode tot 50%

Vul de code bij aankoop in. De prijs wordt volgens de lopende actie herberekend.

Kosten in de geschiedenis

Model, tokens en bedrag worden per verzoek bewaard.

[Kies een abonnement](https://ailoot.ai/docs/nl/billing/subscriptions/) · [Bekijk modelprijzen](https://ailoot.ai/models/nl/)

## Verbind de API met het product dat je verkoopt.

SaaS, apps en bots volgens de openbare aanbodvoorwaarden en licentieovereenkomst van Ailoot. Vraag voor doorverkoop een resellerlicentie aan.

Commerciële applicatie

Voeg tekst-, beeld-, video- en geluidsgeneratie aan betaalde functies van je service toe.

Resellerlicentie

Stuur een projectbeschrijving en toegangsschema. Vraag schriftelijke voorwaarden voor gebruik en doorverkoop.

Documenten op de site

Aanbodvoorwaarden, licentieovereenkomst en gegevensbeleid zijn vóór het verbinden beschikbaar.

[Vraag een resellerlicentie aan](mailto:support@ailoot.ai) · [Aanbodvoorwaarden en licentieovereenkomst](https://ailoot.ai/legal/offer?lang=nl)

## Ailoot · Het bedrijf en zijn projectenportefeuille





Ailoot bouwt op opgebouwde operationele ervaring, een groot klantenbestand, een stabiele dienst en doorlopende KPI-controle.





Het bedrijf en zijn projectenportefeuille: miljoenen klanten; maandelijkse verkopen in de miljarden.





Ailoot gebruikt die operationele ervaring voor API-toegang tot AI-functies in klantproducten, agents, applicaties en automatiseringen.
