{
  "aboutHtml": "<p>Vidu Q2 maakt video vanuit een geschreven scène via het tekst-naar-video-profiel dat met viduq2 wordt geselecteerd. De vereiste invoer bestaat uit de exacte modelidentificator en een prompt die de scène beschrijft. Gebruik het voor een kort productconcept, een overzichtsbeeld of een handeling van een personage waarvan uiterlijk en beweging in woorden kunnen worden gespecificeerd. Deze geconfigureerde methode is tekst-naar-video; de beschrijving kent geen afzonderlijke modus voor afbeeldingsreferenties of videobewerking aan de selector toe.</p><p>Bouw de beschrijving rond een zichtbare reeks op. Benoem het onderwerp, de locatie, de handeling, de shotgrootte, de camerabeweging en de eindcompositie. Beschrijf bij een productconcept een object op een tafelblad, licht dat over het materiaal beweegt en een langzame camerabeweging ernaartoe die op een herkenbaar detail eindigt. Toon bij een locatiescène eerst de omgeving voordat u naar het aandachtspunt beweegt. Houd de handeling passend bij de gekozen cliplengte, zodat de scène ruimte heeft voor het beoogde einde.</p><p>De promptlimiet is 2.000 tekens. Zet het essentiële onderwerp en de handeling voorop en voeg daarna de details van belichting, materiaal, omgeving en camera toe die het gewenste resultaat veranderen. Specificeer de visuele stijl in de prompt. De Q2-specifieke handleiding vermeldt dat de afzonderlijke parameters style en movement_amplitude voor dit model geen effect hebben; de voorinstelling general of anime en de opties voor bewegingsamplitude vervangen dus geen duidelijke scènebeschrijving.</p><p>De modelspecifieke duurinstelling accepteert gehele seconden van één tot tien. De Q2-specifieke resolutiekeuzes zijn 540p, 720p en 1080p, met 720p als gedocumenteerde standaard. Kies duur en resolutie samen op basis van de handeling en de bestemming. Een korte onthulling en een langere beweging vereisen een andere timing; een hogere gevraagde duur moet de zichtbare reeks dienen, in plaats van alleen een ongewijzigde beschrijving uit te rekken. Controleer de werkelijke afmetingen en lengte van de teruggegeven clip bij het voorbereiden van de uiteindelijke plaatsing.</p><p>De gedocumenteerde keuzes voor aspect_ratio zijn 16:9, 9:16, 3:4, 4:3 en 1:1, met 16:9 als standaard. De handleiding neemt 3:4 en 4:3 expliciet op voor de Q2-familie. Kies het beeldformaat vóór de generatie en beschrijf een passende compositie: houd een hoofdonderwerp goed herkenbaar in een staand beeld of gebruik de breedte van een liggend beeld voor de omringende omgeving. Houd het eindbeeld duidelijk genoeg voor de beoogde pagina, presentatie of latere plaatsing van bijschriften.</p><p>Het veld seed regelt variatie. Weglaten of 0 opgeven kiest een willekeurige waarde; een niet-nulwaarde kiest de gedocumenteerde optie met een vaste seed voor herhaalbare generatie. Bewaar de teruggegeven seed bij de prompt en instellingen wanneer u versies vergelijkt. De gedeelde bewerking documenteert ook de instellingen audio en off_peak, specifiek voor Q3-modellen. Die Q3-opties zijn geen mogelijkheden die aan dit Q2-profiel zijn toegekend; plan deze aanvraag rond de gedocumenteerde tekstinvoer en video-uitvoer.</p><p>Generatie verloopt asynchroon. Indienen geeft task_id en een begintoestand terug, met created voor een nieuw aangemaakte taak. Bewaar die taakidentiteit tijdens het volgen van de verwerking. De gedocumenteerde resultaatopvraag gebruikt state=success voor een geslaagd resultaat en geeft een array creations terug. Elke vermelding bevat de video-URL in creations[].url; bewaar elke teruggegeven video in plaats van aan te nemen dat een taak altijd precies één creatie bevat.</p><p>De resultaatdocumentatie rapporteert ook de werkelijke duur, fps en resolutiebreedte en -hoogte van de video. Bewaar die gerapporteerde waarden bij de voltooide clip, in plaats van de beeldsnelheid of afmetingen uit een voorbeeld als vaste Q2-specificatie te behandelen. Het antwoord bij het aanmaken van de taak bevat naast de aanvraagconfiguratie een waarde credits. Bewaar die gerapporteerde taakmetadata en de voltooide identiteit bij het resultaat, zodat elke video verbonden blijft met de generatie-instellingen.</p><p>Controleer de volledige reeks aan de hand van de oorspronkelijke beschrijving: het uiterlijk van het onderwerp, objectvorm, bewegingsrichting, cameracontinuïteit en het beoogde eindbeeld. Benoem bij een herziening het concrete detail dat niet aan de opdracht voldeed en behoud de geslaagde delen van de scène. Bewaar de prompt, exacte selector, instellingen, taakidentiteit en voltooide video’s bij elkaar, zodat een latere vergelijking op de werkelijke resultaten berust.</p>",
  "aboutText": "Vidu Q2 maakt video vanuit een geschreven scène via het tekst-naar-video-profiel dat met viduq2 wordt geselecteerd. De vereiste invoer bestaat uit de exacte modelidentificator en een prompt die de scène beschrijft. Gebruik het voor een kort productconcept, een overzichtsbeeld of een handeling van een personage waarvan uiterlijk en beweging in woorden kunnen worden gespecificeerd. Deze geconfigureerde methode is tekst-naar-video; de beschrijving kent geen afzonderlijke modus voor afbeeldingsreferenties of videobewerking aan de selector toe.\n\nBouw de beschrijving rond een zichtbare reeks op. Benoem het onderwerp, de locatie, de handeling, de shotgrootte, de camerabeweging en de eindcompositie. Beschrijf bij een productconcept een object op een tafelblad, licht dat over het materiaal beweegt en een langzame camerabeweging ernaartoe die op een herkenbaar detail eindigt. Toon bij een locatiescène eerst de omgeving voordat u naar het aandachtspunt beweegt. Houd de handeling passend bij de gekozen cliplengte, zodat de scène ruimte heeft voor het beoogde einde.\n\nDe promptlimiet is 2.000 tekens. Zet het essentiële onderwerp en de handeling voorop en voeg daarna de details van belichting, materiaal, omgeving en camera toe die het gewenste resultaat veranderen. Specificeer de visuele stijl in de prompt. De Q2-specifieke handleiding vermeldt dat de afzonderlijke parameters style en movement_amplitude voor dit model geen effect hebben; de voorinstelling general of anime en de opties voor bewegingsamplitude vervangen dus geen duidelijke scènebeschrijving.\n\nDe modelspecifieke duurinstelling accepteert gehele seconden van één tot tien. De Q2-specifieke resolutiekeuzes zijn 540p, 720p en 1080p, met 720p als gedocumenteerde standaard. Kies duur en resolutie samen op basis van de handeling en de bestemming. Een korte onthulling en een langere beweging vereisen een andere timing; een hogere gevraagde duur moet de zichtbare reeks dienen, in plaats van alleen een ongewijzigde beschrijving uit te rekken. Controleer de werkelijke afmetingen en lengte van de teruggegeven clip bij het voorbereiden van de uiteindelijke plaatsing.\n\nDe gedocumenteerde keuzes voor aspect_ratio zijn 16:9, 9:16, 3:4, 4:3 en 1:1, met 16:9 als standaard. De handleiding neemt 3:4 en 4:3 expliciet op voor de Q2-familie. Kies het beeldformaat vóór de generatie en beschrijf een passende compositie: houd een hoofdonderwerp goed herkenbaar in een staand beeld of gebruik de breedte van een liggend beeld voor de omringende omgeving. Houd het eindbeeld duidelijk genoeg voor de beoogde pagina, presentatie of latere plaatsing van bijschriften.\n\nHet veld seed regelt variatie. Weglaten of 0 opgeven kiest een willekeurige waarde; een niet-nulwaarde kiest de gedocumenteerde optie met een vaste seed voor herhaalbare generatie. Bewaar de teruggegeven seed bij de prompt en instellingen wanneer u versies vergelijkt. De gedeelde bewerking documenteert ook de instellingen audio en off_peak, specifiek voor Q3-modellen. Die Q3-opties zijn geen mogelijkheden die aan dit Q2-profiel zijn toegekend; plan deze aanvraag rond de gedocumenteerde tekstinvoer en video-uitvoer.\n\nGeneratie verloopt asynchroon. Indienen geeft task_id en een begintoestand terug, met created voor een nieuw aangemaakte taak. Bewaar die taakidentiteit tijdens het volgen van de verwerking. De gedocumenteerde resultaatopvraag gebruikt state=success voor een geslaagd resultaat en geeft een array creations terug. Elke vermelding bevat de video-URL in creations[].url; bewaar elke teruggegeven video in plaats van aan te nemen dat een taak altijd precies één creatie bevat.\n\nDe resultaatdocumentatie rapporteert ook de werkelijke duur, fps en resolutiebreedte en -hoogte van de video. Bewaar die gerapporteerde waarden bij de voltooide clip, in plaats van de beeldsnelheid of afmetingen uit een voorbeeld als vaste Q2-specificatie te behandelen. Het antwoord bij het aanmaken van de taak bevat naast de aanvraagconfiguratie een waarde credits. Bewaar die gerapporteerde taakmetadata en de voltooide identiteit bij het resultaat, zodat elke video verbonden blijft met de generatie-instellingen.\n\nControleer de volledige reeks aan de hand van de oorspronkelijke beschrijving: het uiterlijk van het onderwerp, objectvorm, bewegingsrichting, cameracontinuïteit en het beoogde eindbeeld. Benoem bij een herziening het concrete detail dat niet aan de opdracht voldeed en behoud de geslaagde delen van de scène. Bewaar de prompt, exacte selector, instellingen, taakidentiteit en voltooide video’s bij elkaar, zodat een latere vergelijking op de werkelijke resultaten berust.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "350d29a66e95f8658b9ad3b5316e90c1be14e09721e53cc7bb1c2a7c6d286b3e",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "nl-be",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">Vidu: Q2 Text-to-Video</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Sluiten\">×</button></div><div class=\"idline\"><span>Vidu /</span><code>viduq2</code><button type=\"button\" id=\"copy-id\">ID kopiëren</button></div><nav class=\"card-jump-nav\" aria-label=\"Onderdelen van de modelkaart\"><button type=\"button\" data-card-jump=\"overview\">Aan de slag</button><button type=\"button\" data-card-jump=\"methods\">Invoer en methoden</button><button type=\"button\" data-card-jump=\"pricing\">Tarieven</button><button type=\"button\" data-card-jump=\"examples\">Voorbeelden</button><button type=\"button\" data-card-jump=\"results\">Resultaten</button><button type=\"button\" data-card-jump=\"aliases\">Aliasnamen</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"API-methoden\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Ultra|videos|/v1/videos|viduq2\">Video</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">Aan de slag</h3><p class=\"mdesc-full\">Vidu Q2 maakt video vanuit een tekstuele scènebeschrijving, met een duur van 1–10 seconden, uitvoer in 540p, 720p of 1080p en vijf beeldverhoudingen. Dit specifieke viduq2-profiel gebruikt de prompt voor stijl en beweging en geeft het resultaat via een asynchrone taak terug.</p><dl class=\"card-io\" data-card-io><div><dt>Toegestane invoer</dt><dd>Tekst</dd></div><div><dt>Resultaten</dt><dd>Video</dd></div></dl><details class=\"card-about\"><summary>Over het model</summary><p class=\"note-s\" data-model-method-boundary>Deze beschrijving gaat over de mogelijkheden van het model. De via Ailoot beschikbare invoer, uitvoer en opties staan hieronder voor de geselecteerde methode.</p><div class=\"mabout\" id=\"m-about\"><p>Vidu Q2 maakt video vanuit een geschreven scène via het tekst-naar-video-profiel dat met viduq2 wordt geselecteerd. De vereiste invoer bestaat uit de exacte modelidentificator en een prompt die de scène beschrijft. Gebruik het voor een kort productconcept, een overzichtsbeeld of een handeling van een personage waarvan uiterlijk en beweging in woorden kunnen worden gespecificeerd. Deze geconfigureerde methode is tekst-naar-video; de beschrijving kent geen afzonderlijke modus voor afbeeldingsreferenties of videobewerking aan de selector toe.</p><p>Bouw de beschrijving rond een zichtbare reeks op. Benoem het onderwerp, de locatie, de handeling, de shotgrootte, de camerabeweging en de eindcompositie. Beschrijf bij een productconcept een object op een tafelblad, licht dat over het materiaal beweegt en een langzame camerabeweging ernaartoe die op een herkenbaar detail eindigt. Toon bij een locatiescène eerst de omgeving voordat u naar het aandachtspunt beweegt. Houd de handeling passend bij de gekozen cliplengte, zodat de scène ruimte heeft voor het beoogde einde.</p><p>De promptlimiet is 2.000 tekens. Zet het essentiële onderwerp en de handeling voorop en voeg daarna de details van belichting, materiaal, omgeving en camera toe die het gewenste resultaat veranderen. Specificeer de visuele stijl in de prompt. De Q2-specifieke handleiding vermeldt dat de afzonderlijke parameters style en movement_amplitude voor dit model geen effect hebben; de voorinstelling general of anime en de opties voor bewegingsamplitude vervangen dus geen duidelijke scènebeschrijving.</p><p>De modelspecifieke duurinstelling accepteert gehele seconden van één tot tien. De Q2-specifieke resolutiekeuzes zijn 540p, 720p en 1080p, met 720p als gedocumenteerde standaard. Kies duur en resolutie samen op basis van de handeling en de bestemming. Een korte onthulling en een langere beweging vereisen een andere timing; een hogere gevraagde duur moet de zichtbare reeks dienen, in plaats van alleen een ongewijzigde beschrijving uit te rekken. Controleer de werkelijke afmetingen en lengte van de teruggegeven clip bij het voorbereiden van de uiteindelijke plaatsing.</p><p>De gedocumenteerde keuzes voor aspect_ratio zijn 16:9, 9:16, 3:4, 4:3 en 1:1, met 16:9 als standaard. De handleiding neemt 3:4 en 4:3 expliciet op voor de Q2-familie. Kies het beeldformaat vóór de generatie en beschrijf een passende compositie: houd een hoofdonderwerp goed herkenbaar in een staand beeld of gebruik de breedte van een liggend beeld voor de omringende omgeving. Houd het eindbeeld duidelijk genoeg voor de beoogde pagina, presentatie of latere plaatsing van bijschriften.</p><p>Het veld seed regelt variatie. Weglaten of 0 opgeven kiest een willekeurige waarde; een niet-nulwaarde kiest de gedocumenteerde optie met een vaste seed voor herhaalbare generatie. Bewaar de teruggegeven seed bij de prompt en instellingen wanneer u versies vergelijkt. De gedeelde bewerking documenteert ook de instellingen audio en off_peak, specifiek voor Q3-modellen. Die Q3-opties zijn geen mogelijkheden die aan dit Q2-profiel zijn toegekend; plan deze aanvraag rond de gedocumenteerde tekstinvoer en video-uitvoer.</p><p>Generatie verloopt asynchroon. Indienen geeft task_id en een begintoestand terug, met created voor een nieuw aangemaakte taak. Bewaar die taakidentiteit tijdens het volgen van de verwerking. De gedocumenteerde resultaatopvraag gebruikt state=success voor een geslaagd resultaat en geeft een array creations terug. Elke vermelding bevat de video-URL in creations[].url; bewaar elke teruggegeven video in plaats van aan te nemen dat een taak altijd precies één creatie bevat.</p><p>De resultaatdocumentatie rapporteert ook de werkelijke duur, fps en resolutiebreedte en -hoogte van de video. Bewaar die gerapporteerde waarden bij de voltooide clip, in plaats van de beeldsnelheid of afmetingen uit een voorbeeld als vaste Q2-specificatie te behandelen. Het antwoord bij het aanmaken van de taak bevat naast de aanvraagconfiguratie een waarde credits. Bewaar die gerapporteerde taakmetadata en de voltooide identiteit bij het resultaat, zodat elke video verbonden blijft met de generatie-instellingen.</p><p>Controleer de volledige reeks aan de hand van de oorspronkelijke beschrijving: het uiterlijk van het onderwerp, objectvorm, bewegingsrichting, cameracontinuïteit en het beoogde eindbeeld. Benoem bij een herziening het concrete detail dat niet aan de opdracht voldeed en behoud de geslaagde delen van de scène. Bewaar de prompt, exacte selector, instellingen, taakidentiteit en voltooide video’s bij elkaar, zodat een latere vergelijking op de werkelijke resultaten berust.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Beschikbaar in Ailoot · invoer en methoden</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Videogeneratie</b> <code>POST /v1/videos</code></summary><dl class=\"method-capabilities\"><div><dt>Invoer</dt><dd><code>text</code></dd></div><div><dt>Uitvoer</dt><dd><code>video</code></dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Veld</th><th>Type</th><th>Vereiste</th><th>Waarden en limieten</th><th>Standaard</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Vereiste\"><span class=\"card-cell-label\">Vereiste</span>Vereist</td><td data-cell-label=\"Waarden en limieten\"><span class=\"card-cell-label\">Waarden en limieten</span><div>viduq2</div></td><td data-cell-label=\"Standaard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standaard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">prompt</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Vereiste\"><span class=\"card-cell-label\">Vereiste</span>Vereist</td><td data-cell-label=\"Waarden en limieten\"><span class=\"card-cell-label\">Waarden en limieten</span><div>Voorwaarden: Beschrijf de te genereren scène. De gedocumenteerde limiet bedraagt 2000 tekens; Ailoot controleert of de tekenreeks niet leeg is en behoudt de tekst.</div></td><td data-cell-label=\"Standaard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standaard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">duration</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>integer</code></td><td data-cell-label=\"Vereiste\"><span class=\"card-cell-label\">Vereiste</span>Optioneel</td><td data-cell-label=\"Waarden en limieten\"><span class=\"card-cell-label\">Waarden en limieten</span><div>Minimum: 1</div><div>Maximum: 10</div><div>Voorwaarden: De modelspecifieke beschrijving van viduq2 vermeldt 1–10 volledige seconden. Er is geen modelspecifieke standaardduur gedocumenteerd.</div><div>Eenheid: seconden</div></td><td data-cell-label=\"Standaard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standaard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">seed</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Vereiste\"><span class=\"card-cell-label\">Vereiste</span>Optioneel</td><td data-cell-label=\"Waarden en limieten\"><span class=\"card-cell-label\">Waarden en limieten</span><div>Voorwaarden: Laat weg of verstuur de tekenreeks &quot;0&quot; voor willekeurige uitvoer. Een opgegeven seed met een waarde verschillend van nul selecteert het gedocumenteerde gedrag met een vaste seed; er is geen numeriek bereik opgegeven.</div></td><td data-cell-label=\"Standaard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standaard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">aspect_ratio</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Vereiste\"><span class=\"card-cell-label\">Vereiste</span>Optioneel</td><td data-cell-label=\"Waarden en limieten\"><span class=\"card-cell-label\">Waarden en limieten</span><div>16:9, 9:16, 3:4, 4:3, 1:1</div></td><td data-cell-label=\"Standaard\" data-default=\"known\"><span class=\"card-cell-label\">Standaard</span>16:9</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">resolution</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Vereiste\"><span class=\"card-cell-label\">Vereiste</span>Optioneel</td><td data-cell-label=\"Waarden en limieten\"><span class=\"card-cell-label\">Waarden en limieten</span><div>540p, 720p, 1080p</div><div>Voorwaarden: De modelspecifieke lijst voor viduq2 documenteert deze categorieën voor 1–10 seconden. Een gedeelde enum en tabel vermelden ook 360p; het toepassingsgebied daarvan is in tegenspraak met die lijst en wordt hier niet bevestigd.</div></td><td data-cell-label=\"Standaard\" data-default=\"known\"><span class=\"card-cell-label\">Standaard</span>720p</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">style</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Vereiste\"><span class=\"card-cell-label\">Vereiste</span>Optioneel</td><td data-cell-label=\"Waarden en limieten\"><span class=\"card-cell-label\">Waarden en limieten</span><div>general, anime</div><div>Voorwaarden: De gedeelde aanvraag accepteert dit veld, maar de documentatie vermeldt uitdrukkelijk dat het geen effect heeft voor viduq2.</div></td><td data-cell-label=\"Standaard\" data-default=\"known\"><span class=\"card-cell-label\">Standaard</span>general</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">movement_amplitude</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Vereiste\"><span class=\"card-cell-label\">Vereiste</span>Optioneel</td><td data-cell-label=\"Waarden en limieten\"><span class=\"card-cell-label\">Waarden en limieten</span><div>auto, small, medium, large</div><div>Voorwaarden: De gedeelde aanvraag accepteert dit veld, maar de documentatie vermeldt uitdrukkelijk dat het geen effect heeft voor q2-modellen.</div></td><td data-cell-label=\"Standaard\" data-default=\"known\"><span class=\"card-cell-label\">Standaard</span>auto</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Combinaties van invoermaterialen</summary><p class=\"note-s\"><b></b></p></details><details class=\"note-s\" data-method-contract><summary>Methodeparameters en levenscyclus</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parameter</th><th>Contract</th></tr></thead><tbody><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>content_type</code></th><td data-cell-label=\"Contract\"><span class=\"card-cell-label\">Contract</span>application/json</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>required</code></th><td data-cell-label=\"Contract\"><span class=\"card-cell-label\">Contract</span>model, prompt</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>optional</code></th><td data-cell-label=\"Contract\"><span class=\"card-cell-label\">Contract</span>duration, seed, aspect_ratio, resolution, style, movement_amplitude</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>material_types</code></th><td data-cell-label=\"Contract\"><span class=\"card-cell-label\">Contract</span>text</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>additional_properties</code></th><td data-cell-label=\"Contract\"><span class=\"card-cell-label\">Contract</span>true</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>validation_scope</code></th><td data-cell-label=\"Contract\"><span class=\"card-cell-label\">Contract</span>Ailoot valideert of de tekenreeksen model/prompt niet leeg zijn. De optionele types en limieten hieronder vormen het gedocumenteerde aanvraagcontract; andere aanvraagvelden blijven behouden voor het geselecteerde model.</td></tr></tbody></table></div><p>Methodealiasnamen: <code>/v1/videos/generations</code></p><p>Levenscyclus: <code>submit_once_poll_original</code></p><p class=\"note-s\"><code>GET /v1/videos/{request_id}</code></p><p class=\"note-s\"><code>GET /v1/videos/generations/{request_id}</code></p><p class=\"note-s\"><code>GET /v1/videos/{request_id}/content</code></p><p class=\"note-s\"><code>GET /v1/videos/generations/{request_id}/content</code></p><p class=\"note-s\">Maak eenmaal aan en bewaar de teruggestuurde openbare id en polling_url.</p><p class=\"note-s\">Vraag de oorspronkelijke operatie herhaaldelijk op en lees state; de voltooiing is bereikt bij success en een creations[].url-resultaat dat je toebehoort.</p><p class=\"note-s\">Download elke teruggestuurde video-URL die je toebehoort; leid uit het voorbeeld geen vast aantal uitvoerbestanden, vaste duur of vaste beeldfrequentie af.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Tarieven</h3><div class=\"card-result-process\" data-billing-basis><h5>Zo worden de uiteindelijke kosten berekend</h5><p class=\"note-s\">De getoonde tarieven ramen de kosten vóór de generatie. De definitieve kosten worden berekend op basis van de kosten die voor de oorspronkelijke generatie zijn geregistreerd. De gemeten duur van het gegenereerde resultaat en de geraamde hoeveelheden vormen niet de definitieve factureerbare hoeveelheid.</p></div><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Tariefverwijzingen voegen geen verzoekopties toe. Ondersteunde parameters staan bij de geselecteerde methode.</p><dl data-price-conditions><dt>Snelle modus</dt><dd>Niet opgegeven <span class=\"note-s\">Wanneer de snelle modus geselecteerd is</span></dd><dt>Flex-modus</dt><dd>Niet opgegeven <span class=\"note-s\">Wanneer de flex-modus geselecteerd is</span></dd><dt>Maximale redeneerinspanning</dt><dd>Niet opgegeven <span class=\"note-s\">Wanneer voor maximale redeneerinspanning de default-aanpassing wordt gebruikt</span></dd></dl></div><div data-declared-tariff-pricing><h4>Geschatte tarieven ter vergelijking</h4><h4>Prijzen per configuratie</h4><p class=\"note-s\">Koppel elke kostenpost aan de getoonde voorwaarden. Gebruik één tarief voor elke groep alternatieve configuraties.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Configuratie</th><th>Tariefstaffel</th><th>Verwachte hoeveelheid</th><th>Kosten</th></tr></thead><tbody><tr><th data-cell-label=\"Configuratie\" scope=\"row\"><span class=\"card-cell-label\">Configuratie</span>Basistarieven voor tokens</th><td data-cell-label=\"Tariefstaffel\"><span class=\"card-cell-label\">Tariefstaffel</span>Basistarief</td><td data-cell-label=\"Verwachte hoeveelheid\"><span class=\"card-cell-label\">Verwachte hoeveelheid</span>—</td><td data-cell-label=\"Kosten\"><span class=\"card-cell-label\">Kosten</span><div><span>Invoer · Invoertokens · Schatting uitsluitend ter vergelijking</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Uitvoer · Uitvoertokens · Schatting uitsluitend ter vergelijking</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Invoer · Cache lezen · Schatting uitsluitend ter vergelijking</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Invoer · Cache schrijven · Schatting uitsluitend ter vergelijking</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Invoer · Cache schrijven, 1 uur · Schatting uitsluitend ter vergelijking</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div></td></tr><tr><th data-cell-label=\"Configuratie\" scope=\"row\"><span class=\"card-cell-label\">Configuratie</span>Geschatte generatiekosten</th><td data-cell-label=\"Tariefstaffel\"><span class=\"card-cell-label\">Tariefstaffel</span>—</td><td data-cell-label=\"Verwachte hoeveelheid\"><span class=\"card-cell-label\">Verwachte hoeveelheid</span>schatting voor één generatie</td><td data-cell-label=\"Kosten\"><span class=\"card-cell-label\">Kosten</span><div><span>Uitvoer · Geschatte generatiekosten · Schatting uitsluitend ter vergelijking</span> <b>$5.12</b> <span class=\"price-unit\">schatting vóór generatie</span></div><p class=\"note-s\">Deze raming is geen extra kost of vast tarief voor de voltooide generatie.</p></td></tr></tbody></table></div></div><p class=\"note-s\">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. <a href=\"/docs/nl-be/billing/reserve/\">Zo werken reservering en afrekening →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Voorbeeldverzoeken</h3><h4>Ailoot Ultra · Videogeneratie</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Codevarianten\"><button class=\"cg-tab\" id=\"model-code-2782-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2782-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · video maken</button><button class=\"cg-tab\" id=\"model-code-2782-tab-1\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2782-panel-1\" aria-selected=\"false\" tabindex=\"-1\">curl · lees de oorspronkelijke taak</button><button class=\"cg-tab\" id=\"model-code-2782-tab-2\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2782-panel-2\" aria-selected=\"false\" tabindex=\"-1\">curl · al je eigen video&#39;s downloaden</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Code kopiëren\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-2782-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-2782-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\ncat &gt; request.json &lt;&lt;&#39;JSON_REQUEST&#39;\n{&quot;model&quot;:&quot;viduq2&quot;,&quot;prompt&quot;:&quot;In an ultra-realistic fashion photography style featuring light blue and pale amber tones, an astronaut in a spacesuit walks through the fog. The background consists of enchanting white and golden lights, creating a minimalist still life and an impressive panoramic scene.&quot;}\nJSON_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o result.json\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-2782-panel-1\" role=\"tabpanel\" aria-labelledby=\"model-code-2782-tab-1\" hidden><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_POLL&#39;\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote,urljoin,urlsplit\nr=json.loads(Path(&quot;result.json&quot;).read_text())\ni=r.get(&quot;id&quot;)\nif not isinstance(i,str) or not i:raise SystemExit(&quot;Keep original response/headers/id; do not resubmit creation.&quot;)\nu=urljoin(&quot;https://api.ailoot.ai&quot;,r.get(&quot;polling_url&quot;) or &quot;/v1/videos/&quot;+quote(i,safe=&quot;&quot;))\np=urlsplit(u)\nif p.scheme!=&quot;https&quot; or p.netloc!=&quot;api.ailoot.ai&quot; or not p.path.startswith(&quot;/v1/videos/&quot;):raise SystemExit(&quot;Use the actual Ailoot lookup path.&quot;)\nPath(&quot;poll-url.txt&quot;).write_text(u)\nPY_POLL\ncurl --fail-with-body --silent --show-error &quot;$(cat poll-url.txt)&quot; -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -D status-headers.txt -o status.json\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-2782-panel-2\" role=\"tabpanel\" aria-labelledby=\"model-code-2782-tab-2\" hidden><pre data-lang=\"bash\"><code>set -eu\npython3 - &lt;&lt;&#39;PY_ASSETS&#39;\nimport json\nfrom pathlib import Path\nfrom urllib.parse import urlsplit\nr=json.loads(Path(&quot;status.json&quot;).read_text())\nif r.get(&quot;state&quot;)!=&quot;success&quot;:raise SystemExit(&quot;Poll the same original job until its owned result is returned.&quot;)\ncreations=r.get(&quot;creations&quot;)\nif not isinstance(creations,list) or not creations:raise SystemExit(&quot;No completed video creations.&quot;)\nurls=[]\nfor item in creations:\n    value=item.get(&quot;url&quot;) if isinstance(item,dict) else None\n    values=[value] if isinstance(value,str) else value\n    if not isinstance(values,list) or not values:raise SystemExit(&quot;No completed video URL.&quot;)\n    for u in values:\n        if not isinstance(u,str):raise SystemExit(&quot;Invalid returned URL.&quot;)\n        p=urlsplit(u)\n        if p.scheme!=&quot;https&quot; or p.netloc!=&quot;api.ailoot.ai&quot; or not p.path.startswith(&quot;/v1/media/assets/&quot;) or not p.path.endswith(&quot;/content&quot;) or not p.query:raise SystemExit(&quot;Wait for the actual Ailoot-owned signed result.&quot;)\n        urls.append(u)\nPath(&quot;asset-urls.txt&quot;).write_text(&quot;\\n&quot;.join(urls)+&quot;\\n&quot;)\nPY_ASSETS\nindex=0\nwhile IFS= read -r asset_url; do\n  curl --fail-with-body --silent --show-error &quot;$asset_url&quot; -o &quot;video-${index}.bin&quot;\n  index=$((index + 1))\ndone &lt; asset-urls.txt\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Resultaten ophalen en opslaan</h3><h4>Ailoot Ultra · Videogeneratie</h4><p class=\"note-s\">JSON behoudt de natieve state en creations-array en voegt de openbare id/provider_task_id/polling_url toe. Geselecteerde video-URL&#39;s zijn leeg vóór publicatie en worden na voltooiing ondertekende URL&#39;s van Ailoot.</p><ul class=\"card-result-paths\"><li><code>GET /v1/videos/{request_id}</code></li><li><code>GET /v1/videos/generations/{request_id}</code></li><li><code>GET /v1/videos/{request_id}/content</code></li><li><code>GET /v1/videos/generations/{request_id}/content</code></li></ul><div class=\"card-result-process\" data-all-results><h5>Alle voltooide resultaten bewaren</h5><p class=\"note-s\">Sla elke voltooide video of elk teruggegeven bestand op; haal elke daadwerkelijk teruggegeven bestands-URL op.</p><p class=\"note-s\">Download elke werkelijk teruggestuurde URL in creations[].url; een inhoudsindex verwijst naar één werkelijk teruggestuurd uitvoerbestand.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Als het oorspronkelijke antwoord moet worden gecontroleerd</h5><p class=\"note-s\">De vastgezette declaratie somt geen terminale foutstatus op. Bewaar het oorspronkelijke antwoord, de headers en de id en controleer dezelfde operatie bij elke onbekende status of result_pending_check-fout; dien een aanmaakaanvraag met onbekende uitkomst nooit opnieuw in.</p></div><details class=\"card-about\" data-output-fields><summary>Antwoordvelden</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Veld</th><th>Type</th><th>Betekenis</th></tr></thead><tbody><tr><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">id</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>string</td><td data-cell-label=\"Betekenis\"><span class=\"card-cell-label\">Betekenis</span>Teruggestuurde openbare taak- of operatiecode van Ailoot.</td></tr><tr><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">provider_task_id</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>string</td><td data-cell-label=\"Betekenis\"><span class=\"card-cell-label\">Betekenis</span>Oorspronkelijke taakcode, afzonderlijk van de openbare id.</td></tr><tr><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">polling_url</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>string</td><td data-cell-label=\"Betekenis\"><span class=\"card-cell-label\">Betekenis</span>Teruggestuurd opzoekpad van Ailoot voor de oorspronkelijke taak.</td></tr><tr><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">task_id</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>string when supplied</td><td data-cell-label=\"Betekenis\"><span class=\"card-cell-label\">Betekenis</span>Oorspronkelijke identificatiecode uit het aanmaakantwoord.</td></tr><tr><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">state</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>string when supplied</td><td data-cell-label=\"Betekenis\"><span class=\"card-cell-label\">Betekenis</span>Natieve taakstatus: created voor de vastgezette wachtstatus en success bij voltooiing.</td></tr><tr><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">err_code</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>string when supplied</td><td data-cell-label=\"Betekenis\"><span class=\"card-cell-label\">Betekenis</span>Taakdiagnose; de opgeslagen specificatie declareert geen opgesomde lijst met foutcodes.</td></tr><tr><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">creations[].url</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>string|string[]</td><td data-cell-label=\"Betekenis\"><span class=\"card-cell-label\">Betekenis</span>Elke geselecteerde URL van een voltooide video wordt vervangen door een ondertekende URL van Ailoot.</td></tr><tr><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">creations[].video.duration</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>number when supplied</td><td data-cell-label=\"Betekenis\"><span class=\"card-cell-label\">Betekenis</span>Teruggestuurde videoduur; controleer het werkelijk voltooide resultaat.</td></tr><tr><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">creations[].video.fps</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>integer when supplied</td><td data-cell-label=\"Betekenis\"><span class=\"card-cell-label\">Betekenis</span>Teruggestuurde beeldfrequentie; er wordt geen vaste beeldfrequentie beloofd.</td></tr><tr><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">creations[].video.resolution.width</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>integer when supplied</td><td data-cell-label=\"Betekenis\"><span class=\"card-cell-label\">Betekenis</span>Teruggestuurde uitvoerbreedte in pixels.</td></tr><tr><th data-cell-label=\"Veld\" scope=\"row\"><span class=\"card-cell-label\">Veld</span><code class=\"card-field-name\">creations[].video.resolution.height</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>integer when supplied</td><td data-cell-label=\"Betekenis\"><span class=\"card-cell-label\">Betekenis</span>Teruggestuurde uitvoerhoogte in pixels.</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Fouten en vervolgstappen</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Antwoord</th><th>Voorwaarde</th><th>Volgende stap</th></tr></thead><tbody><tr><th data-cell-label=\"Antwoord\" scope=\"row\"><span class=\"card-cell-label\">Antwoord</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Voorwaarde\"><span class=\"card-cell-label\">Voorwaarde</span>Ongeldige JSON of ongeldig model, ontbrekende of lege verplichte tekenreeksen, of een ongeldige inhoudsindex.</td><td data-cell-label=\"Volgende stap\"><span class=\"card-cell-label\">Volgende stap</span></td></tr><tr><th data-cell-label=\"Antwoord\" scope=\"row\"><span class=\"card-cell-label\">Antwoord</span>401 · <code>authentication_error</code></th><td data-cell-label=\"Voorwaarde\"><span class=\"card-cell-label\">Voorwaarde</span>Ongeldige Ailoot API-sleutel.</td><td data-cell-label=\"Volgende stap\"><span class=\"card-cell-label\">Volgende stap</span></td></tr><tr><th data-cell-label=\"Antwoord\" scope=\"row\"><span class=\"card-cell-label\">Antwoord</span>403 · <code>permission_error</code></th><td data-cell-label=\"Voorwaarde\"><span class=\"card-cell-label\">Voorwaarde</span>De groep van de API-sleutel heeft geen toegang tot deze mediaroute.</td><td data-cell-label=\"Volgende stap\"><span class=\"card-cell-label\">Volgende stap</span></td></tr><tr><th data-cell-label=\"Antwoord\" scope=\"row\"><span class=\"card-cell-label\">Antwoord</span>404 · <code>not_found_error</code></th><td data-cell-label=\"Voorwaarde\"><span class=\"card-cell-label\">Voorwaarde</span>De oorspronkelijke taak of gevraagde uitvoer ontbreekt of behoort niet toe aan dezelfde gebruiker/API-sleutel/groep.</td><td data-cell-label=\"Volgende stap\"><span class=\"card-cell-label\">Volgende stap</span></td></tr><tr><th data-cell-label=\"Antwoord\" scope=\"row\"><span class=\"card-cell-label\">Antwoord</span>502 · <code>result_pending_check</code></th><td data-cell-label=\"Voorwaarde\"><span class=\"card-cell-label\">Voorwaarde</span>De oorspronkelijke indiening of status is onvolledig of kan niet met de gegevens worden afgestemd; bewaar de oorspronkelijke ID en dien de aanvraag niet opnieuw in.</td><td data-cell-label=\"Volgende stap\"><span class=\"card-cell-label\">Volgende stap</span></td></tr><tr><th data-cell-label=\"Antwoord\" scope=\"row\"><span class=\"card-cell-label\">Antwoord</span>503 · <code>result_pending_check</code></th><td data-cell-label=\"Voorwaarde\"><span class=\"card-cell-label\">Voorwaarde</span>De oorspronkelijke koppeling, route of media die je toebehoren worden nog gecontroleerd; blijf die oorspronkelijke operatie controleren.</td><td data-cell-label=\"Volgende stap\"><span class=\"card-cell-label\">Volgende stap</span></td></tr><tr><th data-cell-label=\"Antwoord\" scope=\"row\"><span class=\"card-cell-label\">Antwoord</span>503 · <code>server_error</code></th><td data-cell-label=\"Voorwaarde\"><span class=\"card-cell-label\">Voorwaarde</span>De mediadienst of de opslag van de oorspronkelijke taak is niet beschikbaar.</td><td data-cell-label=\"Volgende stap\"><span class=\"card-cell-label\">Volgende stap</span></td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Aliasnamen</h3><h4>Modelaliasnamen</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=viduq2&amp;route=Ultra&amp;caller=viduq2&amp;fmt=videos\"><code>viduq2</code></a></span></p><h4>Aliasnamen voor methodepaden</h4><p class=\"note-s\"><code>/v1/videos/generations</code></p><h4>Gerelateerde aanroeper-ID’s</h4><p class=\"note-s\"><a href=\"#m=viduq2&amp;route=Ultra&amp;caller=viduq2&amp;fmt=videos\"><code>viduq2</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "viduq2",
        "fmt": "videos",
        "http": "POST",
        "path": "/v1/videos",
        "request_model_id": "viduq2",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|videos|/v1/videos|viduq2",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "De getoonde tarieven ramen de kosten vóór de generatie. De definitieve kosten worden berekend op basis van de kosten die voor de oorspronkelijke generatie zijn geregistreerd. De gemeten duur van het gegenereerde resultaat en de geraamde hoeveelheden vormen niet de definitieve factureerbare hoeveelheid.",
          "forecast_quantity_is_estimate": true,
          "physical_output_is_billable_quantity": false,
          "version": "original_invoice_usd_v1"
        },
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "errors": [
              {
                "condition": "Ongeldige JSON of ongeldig model, ontbrekende of lege verplichte tekenreeksen, of een ongeldige inhoudsindex.",
                "http_status": 400,
                "type": "invalid_request_error"
              },
              {
                "condition": "Ongeldige Ailoot API-sleutel.",
                "http_status": 401,
                "type": "authentication_error"
              },
              {
                "condition": "De groep van de API-sleutel heeft geen toegang tot deze mediaroute.",
                "http_status": 403,
                "type": "permission_error"
              },
              {
                "condition": "De oorspronkelijke taak of gevraagde uitvoer ontbreekt of behoort niet toe aan dezelfde gebruiker/API-sleutel/groep.",
                "http_status": 404,
                "type": "not_found_error"
              },
              {
                "condition": "De oorspronkelijke indiening of status is onvolledig of kan niet met de gegevens worden afgestemd; bewaar de oorspronkelijke ID en dien de aanvraag niet opnieuw in.",
                "http_status": 502,
                "type": "result_pending_check"
              },
              {
                "condition": "De oorspronkelijke koppeling, route of media die je toebehoren worden nog gecontroleerd; blijf die oorspronkelijke operatie controleren.",
                "http_status": 503,
                "type": "result_pending_check"
              },
              {
                "condition": "De mediadienst of de opslag van de oorspronkelijke taak is niet beschikbaar.",
                "http_status": 503,
                "type": "server_error"
              }
            ],
            "ignored_fields": [
              "style",
              "movement_amplitude"
            ],
            "lifecycle": {
              "cancel_endpoint": null,
              "completed_states": [
                "success"
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}/content",
                  "query": {
                    "index": "actual output index; default 0"
                  }
                },
                {
                  "http": "GET",
                  "path": "/v1/videos/generations/{request_id}/content",
                  "query": {
                    "index": "actual output index; default 0"
                  }
                }
              ],
              "content_pending": "Original status JSON until publication.",
              "content_ready": {
                "http_status": 303,
                "location": "actual signed Ailoot-owned asset URL"
              },
              "create": {
                "http": "POST",
                "path": "/v1/videos"
              },
              "failed_states": [],
              "id_source": "Use the actual returned public id or X-Ailoot-Task-Id and polling_url. Keep task_id/provider_task_id separate; status lookup can retain the original task identity when the native fetch omits it.",
              "mode": "submit_once_poll_original",
              "owned_result": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              },
              "pending_states": [
                "created"
              ],
              "signed_asset_lifetime_seconds": 86400,
              "state_field": "state",
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}"
                },
                {
                  "http": "GET",
                  "path": "/v1/videos/generations/{request_id}"
                }
              ],
              "submit_status": 200,
              "unknown": "De vastgezette declaratie somt geen terminale foutstatus op. Bewaar het oorspronkelijke antwoord, de headers en de id en controleer dezelfde operatie bij elke onbekende status of result_pending_check-fout; dien een aanmaakaanvraag met onbekende uitkomst nooit opnieuw in.",
              "unknown_no_replay": true
            },
            "material_combinations": [
              [
                "text"
              ]
            ],
            "operation_modes": [
              "text_to_video"
            ],
            "outputs": {
              "additional_media_boundary": "Only creations[].url is selected for owned video delivery. No owned cover-image or callback result flow is established.",
              "all_results": "Download elke werkelijk teruggestuurde URL in creations[].url; een inhoudsindex verwijst naar één werkelijk teruggestuurd uitvoerbestand.",
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "description": "Teruggestuurde openbare taak- of operatiecode van Ailoot.",
                  "name": "id",
                  "type": "string"
                },
                {
                  "description": "Oorspronkelijke taakcode, afzonderlijk van de openbare id.",
                  "name": "provider_task_id",
                  "type": "string"
                },
                {
                  "description": "Teruggestuurd opzoekpad van Ailoot voor de oorspronkelijke taak.",
                  "name": "polling_url",
                  "type": "string"
                },
                {
                  "description": "Oorspronkelijke identificatiecode uit het aanmaakantwoord.",
                  "name": "task_id",
                  "type": "string when supplied"
                },
                {
                  "description": "Natieve taakstatus: created voor de vastgezette wachtstatus en success bij voltooiing.",
                  "name": "state",
                  "type": "string when supplied"
                },
                {
                  "description": "Taakdiagnose; de opgeslagen specificatie declareert geen opgesomde lijst met foutcodes.",
                  "name": "err_code",
                  "type": "string when supplied"
                },
                {
                  "description": "Elke geselecteerde URL van een voltooide video wordt vervangen door een ondertekende URL van Ailoot.",
                  "name": "creations[].url",
                  "type": "string|string[]"
                },
                {
                  "description": "Teruggestuurde videoduur; controleer het werkelijk voltooide resultaat.",
                  "name": "creations[].video.duration",
                  "type": "number when supplied"
                },
                {
                  "description": "Teruggestuurde beeldfrequentie; er wordt geen vaste beeldfrequentie beloofd.",
                  "name": "creations[].video.fps",
                  "type": "integer when supplied"
                },
                {
                  "description": "Teruggestuurde uitvoerbreedte in pixels.",
                  "name": "creations[].video.resolution.width",
                  "type": "integer when supplied"
                },
                {
                  "description": "Teruggestuurde uitvoerhoogte in pixels.",
                  "name": "creations[].video.resolution.height",
                  "type": "integer when supplied"
                }
              ],
              "format": null,
              "maximum_outputs": null,
              "ownership": "Selected video outputs are copied, reopened and SHA256/length/positive-duration checked before publication.",
              "result": "JSON behoudt de natieve state en creations-array en voegt de openbare id/provider_task_id/polling_url toe. Geselecteerde video-URL's zijn leeg vóór publicatie en worden na voltooiing ondertekende URL's van Ailoot."
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "viduq2"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Beschrijf de te genereren scène. De gedocumenteerde limiet bedraagt 2000 tekens; Ailoot controleert of de tekenreeks niet leeg is en behoudt de tekst.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 2000,
                "minLength": 1,
                "name": "prompt",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "De modelspecifieke beschrijving van viduq2 vermeldt 1–10 volledige seconden. Er is geen modelspecifieke standaardduur gedocumenteerd.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum": 10,
                "minimum": 1,
                "name": "duration",
                "required": false,
                "type": "integer",
                "unit": "seconden"
              },
              {
                "availability": "source_interface",
                "conditions": "Laat weg of verstuur de tekenreeks \"0\" voor willekeurige uitvoer. Een opgegeven seed met een waarde verschillend van nul selecteert het gedocumenteerde gedrag met een vaste seed; er is geen numeriek bereik opgegeven.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "seed",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": "16:9",
                "default_known": true,
                "enum": [
                  "16:9",
                  "9:16",
                  "3:4",
                  "4:3",
                  "1:1"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "De modelspecifieke lijst voor viduq2 documenteert deze categorieën voor 1–10 seconden. Een gedeelde enum en tabel vermelden ook 360p; het toepassingsgebied daarvan is in tegenspraak met die lijst en wordt hier niet bevestigd.",
                "default": "720p",
                "default_known": true,
                "enum": [
                  "540p",
                  "720p",
                  "1080p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "De gedeelde aanvraag accepteert dit veld, maar de documentatie vermeldt uitdrukkelijk dat het geen effect heeft voor viduq2.",
                "default": "general",
                "default_known": true,
                "enum": [
                  "general",
                  "anime"
                ],
                "enum_known": true,
                "name": "style",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "De gedeelde aanvraag accepteert dit veld, maar de documentatie vermeldt uitdrukkelijk dat het geen effect heeft voor q2-modellen.",
                "default": "auto",
                "default_known": true,
                "enum": [
                  "auto",
                  "small",
                  "medium",
                  "large"
                ],
                "enum_known": true,
                "name": "movement_amplitude",
                "required": false,
                "type": "string"
              }
            ],
            "profile_binding": "Literal viduq2 model with the documented Ailoot videos interface.",
            "request_schema": {
              "additionalProperties": true,
              "properties": {
                "aspect_ratio": {
                  "default": "16:9",
                  "enum": [
                    "16:9",
                    "9:16",
                    "3:4",
                    "4:3",
                    "1:1"
                  ],
                  "type": "string"
                },
                "duration": {
                  "maximum": 10,
                  "minimum": 1,
                  "type": "integer"
                },
                "model": {
                  "const": "viduq2",
                  "minLength": 1,
                  "type": "string"
                },
                "movement_amplitude": {
                  "default": "auto",
                  "enum": [
                    "auto",
                    "small",
                    "medium",
                    "large"
                  ],
                  "type": "string"
                },
                "prompt": {
                  "maxLength": 2000,
                  "minLength": 1,
                  "type": "string"
                },
                "resolution": {
                  "default": "720p",
                  "enum": [
                    "540p",
                    "720p",
                    "1080p"
                  ],
                  "type": "string"
                },
                "seed": {
                  "type": "string"
                },
                "style": {
                  "default": "general",
                  "enum": [
                    "general",
                    "anime"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "model",
                "prompt"
              ],
              "type": "object"
            },
            "source_ambiguities": [
              "The shared enum and table mention 360p, while the model-specific viduq2 resolution description lists 540p/720p/1080p. The method asserts only the explicit model-specific list.",
              "The shared duration example uses a quoted string despite an integer schema. The copyable viduq2 example omits that optional field; an explicit duration follows the documented integer type.",
              "No model-specific default duration, maximum output count, generated-file retention period, cancellation endpoint or terminal failure-state list is established by these saved documents.",
              "The documented fetch uses an id path parameter; the pinned declaration names that same substituted value task_id. The fetch example has no task_id field, which the current client accepts only by retaining the original task identity."
            ],
            "unsupported": [
              "Image-guided input, video editing and extension are not part of this text-to-video method.",
              "The audio and off_peak parameters are documented only for other model selectors, not viduq2.",
              "No live streaming, callback completion or owned cover-image result contract is established here."
            ]
          },
          "hints": [
            "Maak eenmaal aan en bewaar de teruggestuurde openbare id en polling_url.",
            "Vraag de oorspronkelijke operatie herhaaldelijk op en lees state; de voltooiing is bereikt bij success en een creations[].url-resultaat dat je toebehoort.",
            "Download elke teruggestuurde video-URL die je toebehoort; leid uit het voorbeeld geen vast aantal uitvoerbestanden, vaste duur of vaste beeldfrequentie af."
          ],
          "input": {
            "additional_properties": true,
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "optional": [
              "duration",
              "seed",
              "aspect_ratio",
              "resolution",
              "style",
              "movement_amplitude"
            ],
            "required": [
              "model",
              "prompt"
            ],
            "validation_scope": "Ailoot valideert of de tekenreeksen model/prompt niet leeg zijn. De optionele types en limieten hieronder vormen het gedocumenteerde aanvraagcontract; andere aanvraagvelden blijven behouden voor het geselecteerde model."
          },
          "lifecycle": {
            "cancel_endpoint": null,
            "completed_states": [
              "success"
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}/content",
                "query": {
                  "index": "actual output index; default 0"
                }
              },
              {
                "http": "GET",
                "path": "/v1/videos/generations/{request_id}/content",
                "query": {
                  "index": "actual output index; default 0"
                }
              }
            ],
            "content_pending": "Original status JSON until publication.",
            "content_ready": {
              "http_status": 303,
              "location": "actual signed Ailoot-owned asset URL"
            },
            "create": {
              "http": "POST",
              "path": "/v1/videos"
            },
            "failed_states": [],
            "id_source": "Use the actual returned public id or X-Ailoot-Task-Id and polling_url. Keep task_id/provider_task_id separate; status lookup can retain the original task identity when the native fetch omits it.",
            "mode": "submit_once_poll_original",
            "owned_result": {
              "http": "GET",
              "path": "/v1/media/assets/{asset_id}"
            },
            "pending_states": [
              "created"
            ],
            "signed_asset_lifetime_seconds": 86400,
            "state_field": "state",
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}"
              },
              {
                "http": "GET",
                "path": "/v1/videos/generations/{request_id}"
              }
            ],
            "submit_status": 200,
            "unknown": "The pinned declaration enumerates no terminal failure state. Preserve original response/headers/id and check that same operation for any unrecognized state or result_pending_check error; never resubmit an unknown creation.",
            "unknown_no_replay": true
          },
          "manufacturer_capability": {
            "documented_material_types": [
              "text"
            ]
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [
            "/v1/videos/generations"
          ],
          "operation_modes": [
            "text_to_video"
          ],
          "output": {
            "additional_media_boundary": "Only creations[].url is selected for owned video delivery. No owned cover-image or callback result flow is established.",
            "all_results": "Download every actual returned URL in creations[].url; a content index identifies one real returned output.",
            "every_actual_output": true,
            "family": "video",
            "fields": [
              {
                "description": "Returned public Ailoot task or operation identifier.",
                "name": "id",
                "type": "string"
              },
              {
                "description": "Original task identifier, separate from the public id.",
                "name": "provider_task_id",
                "type": "string"
              },
              {
                "description": "Returned Ailoot lookup path for the original task.",
                "name": "polling_url",
                "type": "string"
              },
              {
                "description": "Original identifier present in the creation response.",
                "name": "task_id",
                "type": "string when supplied"
              },
              {
                "description": "Native task state: created for the pinned pending state and success for completion.",
                "name": "state",
                "type": "string when supplied"
              },
              {
                "description": "Task diagnostic; the saved specification declares no enumerated error-code list.",
                "name": "err_code",
                "type": "string when supplied"
              },
              {
                "description": "Every selected completed video URL is replaced with an Ailoot-owned signed URL.",
                "name": "creations[].url",
                "type": "string|string[]"
              },
              {
                "description": "Returned video duration; inspect the actual completed result.",
                "name": "creations[].video.duration",
                "type": "number when supplied"
              },
              {
                "description": "Returned frame rate; no fixed frame rate is promised.",
                "name": "creations[].video.fps",
                "type": "integer when supplied"
              },
              {
                "description": "Returned output width in pixels.",
                "name": "creations[].video.resolution.width",
                "type": "integer when supplied"
              },
              {
                "description": "Returned output height in pixels.",
                "name": "creations[].video.resolution.height",
                "type": "integer when supplied"
              }
            ],
            "format": null,
            "maximum_outputs": null,
            "ownership": "Selected video outputs are copied, reopened and SHA256/length/positive-duration checked before publication.",
            "result": "JSON retains the native state and creations array, with public id/provider_task_id/polling_url added. Selected video URLs are blank before publication and become Ailoot-owned signed URLs after completion."
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "basis": "Deze raming is geen extra kost of vast tarief voor de voltooide generatie.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Geschatte generatiekosten",
            "units": [
              {
                "amount": "5.12",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "5.12",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncat > request.json <<'JSON_REQUEST'\n{\"model\":\"viduq2\",\"prompt\":\"In an ultra-realistic fashion photography style featuring light blue and pale amber tones, an astronaut in a spacesuit walks through the fog. The background consists of enchanting white and golden lights, creating a minimalist still life and an impressive panoramic scene.\"}\nJSON_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\n",
            "label": "curl · create video",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_POLL'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote,urljoin,urlsplit\nr=json.loads(Path(\"result.json\").read_text())\ni=r.get(\"id\")\nif not isinstance(i,str) or not i:raise SystemExit(\"Keep original response/headers/id; do not resubmit creation.\")\nu=urljoin(\"https://api.ailoot.ai\",r.get(\"polling_url\") or \"/v1/videos/\"+quote(i,safe=\"\"))\np=urlsplit(u)\nif p.scheme!=\"https\" or p.netloc!=\"api.ailoot.ai\" or not p.path.startswith(\"/v1/videos/\"):raise SystemExit(\"Use the actual Ailoot lookup path.\")\nPath(\"poll-url.txt\").write_text(u)\nPY_POLL\ncurl --fail-with-body --silent --show-error \"$(cat poll-url.txt)\" -H \"Authorization: Bearer $AILOOT_API_KEY\" -D status-headers.txt -o status.json\n",
            "label": "curl · read original task",
            "language": "bash"
          },
          {
            "code": "set -eu\npython3 - <<'PY_ASSETS'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import urlsplit\nr=json.loads(Path(\"status.json\").read_text())\nif r.get(\"state\")!=\"success\":raise SystemExit(\"Poll the same original job until its owned result is returned.\")\ncreations=r.get(\"creations\")\nif not isinstance(creations,list) or not creations:raise SystemExit(\"No completed video creations.\")\nurls=[]\nfor item in creations:\n    value=item.get(\"url\") if isinstance(item,dict) else None\n    values=[value] if isinstance(value,str) else value\n    if not isinstance(values,list) or not values:raise SystemExit(\"No completed video URL.\")\n    for u in values:\n        if not isinstance(u,str):raise SystemExit(\"Invalid returned URL.\")\n        p=urlsplit(u)\n        if p.scheme!=\"https\" or p.netloc!=\"api.ailoot.ai\" or not p.path.startswith(\"/v1/media/assets/\") or not p.path.endswith(\"/content\") or not p.query:raise SystemExit(\"Wait for the actual Ailoot-owned signed result.\")\n        urls.append(u)\nPath(\"asset-urls.txt\").write_text(\"\\n\".join(urls)+\"\\n\")\nPY_ASSETS\nindex=0\nwhile IFS= read -r asset_url; do\n  curl --fail-with-body --silent --show-error \"$asset_url\" -o \"video-${index}.bin\"\n  index=$((index + 1))\ndone < asset-urls.txt\n",
            "label": "curl · download every owned video",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [
          "Create once and retain the returned public id and polling_url.",
          "Poll the original operation and read state; success and an owned creations[].url result are the completion boundary.",
          "Download every returned owned video URL; do not infer a fixed output count, duration or frame rate from the example."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "Videogeneratie",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [
          "/v1/videos/generations"
        ],
        "out": null,
        "output": [
          "video"
        ],
        "path": "/v1/videos",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "basis": "This estimate is not an additional charge or a fixed rate for the completed generation.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Estimated generation cost",
            "units": [
              {
                "amount": "5.12",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "5.12",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "request_model_id": "viduq2",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{request_id}",
          "GET /v1/videos/generations/{request_id}",
          "GET /v1/videos/{request_id}/content",
          "GET /v1/videos/generations/{request_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "5.12",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "5.12",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ]
      }
    }
  ],
  "model_id": "viduq2",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "60752b2b248cd1bf057b68c833dcc164a18622108969483402f1e7830263f3e4",
    "input_html_sha256": "aaa1e0d8ee4c486e29d557fd98cc6b0fcc33240633089f9ee62da33beb8a3be8",
    "private_audit_sha256": "486f73ebda19c529797bd718771edb6d813670b37558a592787c27227bbe9369",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/nl-be/viduq2/",
    "description": "Vidu Q2 maakt video vanuit een tekstuele scènebeschrijving, met een duur van 1–10 seconden, uitvoer in 540p, 720p of 1080p en vijf beeldverhoudingen. Dit specifieke viduq2-profiel gebruikt de prompt voor stijl en beweging en geeft het resultaat via een asynchrone taak terug.",
    "locale": "nl-be",
    "md_url": "https://ailoot.ai/models/nl-be/viduq2/index.md",
    "title": "Vidu: Q2 Text-to-Video — Ailoot",
    "url": "https://ailoot.ai/models/nl-be/viduq2/"
  },
  "rawModel": {
    "about": "Vidu Q2 maakt video vanuit een geschreven scène via het tekst-naar-video-profiel dat met viduq2 wordt geselecteerd. De vereiste invoer bestaat uit de exacte modelidentificator en een prompt die de scène beschrijft. Gebruik het voor een kort productconcept, een overzichtsbeeld of een handeling van een personage waarvan uiterlijk en beweging in woorden kunnen worden gespecificeerd. Deze geconfigureerde methode is tekst-naar-video; de beschrijving kent geen afzonderlijke modus voor afbeeldingsreferenties of videobewerking aan de selector toe.\n\nBouw de beschrijving rond een zichtbare reeks op. Benoem het onderwerp, de locatie, de handeling, de shotgrootte, de camerabeweging en de eindcompositie. Beschrijf bij een productconcept een object op een tafelblad, licht dat over het materiaal beweegt en een langzame camerabeweging ernaartoe die op een herkenbaar detail eindigt. Toon bij een locatiescène eerst de omgeving voordat u naar het aandachtspunt beweegt. Houd de handeling passend bij de gekozen cliplengte, zodat de scène ruimte heeft voor het beoogde einde.\n\nDe promptlimiet is 2.000 tekens. Zet het essentiële onderwerp en de handeling voorop en voeg daarna de details van belichting, materiaal, omgeving en camera toe die het gewenste resultaat veranderen. Specificeer de visuele stijl in de prompt. De Q2-specifieke handleiding vermeldt dat de afzonderlijke parameters style en movement_amplitude voor dit model geen effect hebben; de voorinstelling general of anime en de opties voor bewegingsamplitude vervangen dus geen duidelijke scènebeschrijving.\n\nDe modelspecifieke duurinstelling accepteert gehele seconden van één tot tien. De Q2-specifieke resolutiekeuzes zijn 540p, 720p en 1080p, met 720p als gedocumenteerde standaard. Kies duur en resolutie samen op basis van de handeling en de bestemming. Een korte onthulling en een langere beweging vereisen een andere timing; een hogere gevraagde duur moet de zichtbare reeks dienen, in plaats van alleen een ongewijzigde beschrijving uit te rekken. Controleer de werkelijke afmetingen en lengte van de teruggegeven clip bij het voorbereiden van de uiteindelijke plaatsing.\n\nDe gedocumenteerde keuzes voor aspect_ratio zijn 16:9, 9:16, 3:4, 4:3 en 1:1, met 16:9 als standaard. De handleiding neemt 3:4 en 4:3 expliciet op voor de Q2-familie. Kies het beeldformaat vóór de generatie en beschrijf een passende compositie: houd een hoofdonderwerp goed herkenbaar in een staand beeld of gebruik de breedte van een liggend beeld voor de omringende omgeving. Houd het eindbeeld duidelijk genoeg voor de beoogde pagina, presentatie of latere plaatsing van bijschriften.\n\nHet veld seed regelt variatie. Weglaten of 0 opgeven kiest een willekeurige waarde; een niet-nulwaarde kiest de gedocumenteerde optie met een vaste seed voor herhaalbare generatie. Bewaar de teruggegeven seed bij de prompt en instellingen wanneer u versies vergelijkt. De gedeelde bewerking documenteert ook de instellingen audio en off_peak, specifiek voor Q3-modellen. Die Q3-opties zijn geen mogelijkheden die aan dit Q2-profiel zijn toegekend; plan deze aanvraag rond de gedocumenteerde tekstinvoer en video-uitvoer.\n\nGeneratie verloopt asynchroon. Indienen geeft task_id en een begintoestand terug, met created voor een nieuw aangemaakte taak. Bewaar die taakidentiteit tijdens het volgen van de verwerking. De gedocumenteerde resultaatopvraag gebruikt state=success voor een geslaagd resultaat en geeft een array creations terug. Elke vermelding bevat de video-URL in creations[].url; bewaar elke teruggegeven video in plaats van aan te nemen dat een taak altijd precies één creatie bevat.\n\nDe resultaatdocumentatie rapporteert ook de werkelijke duur, fps en resolutiebreedte en -hoogte van de video. Bewaar die gerapporteerde waarden bij de voltooide clip, in plaats van de beeldsnelheid of afmetingen uit een voorbeeld als vaste Q2-specificatie te behandelen. Het antwoord bij het aanmaken van de taak bevat naast de aanvraagconfiguratie een waarde credits. Bewaar die gerapporteerde taakmetadata en de voltooide identiteit bij het resultaat, zodat elke video verbonden blijft met de generatie-instellingen.\n\nControleer de volledige reeks aan de hand van de oorspronkelijke beschrijving: het uiterlijk van het onderwerp, objectvorm, bewegingsrichting, cameracontinuïteit en het beoogde eindbeeld. Benoem bij een herziening het concrete detail dat niet aan de opdracht voldeed en behoud de geslaagde delen van de scène. Bewaar de prompt, exacte selector, instellingen, taakidentiteit en voltooide video’s bij elkaar, zodat een latere vergelijking op de werkelijke resultaten berust.",
    "alias_of": null,
    "aliases": [],
    "author": "Vidu",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text"
      ],
      "manufacturer_output": [
        "video"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "5.12",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "5.12",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ],
        "summary": "De volledige prijsinformatie voor de configuratie vindt u bij de details."
      }
    ],
    "ctx": null,
    "display_name": "Vidu: Q2 Text-to-Video",
    "formats": [
      "videos"
    ],
    "id": "viduq2",
    "input": [
      "text"
    ],
    "kind": "video",
    "locale": "en",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "De getoonde tarieven ramen de kosten vóór de generatie. De definitieve kosten worden berekend op basis van de kosten die voor de oorspronkelijke generatie zijn geregistreerd. De gemeten duur van het gegenereerde resultaat en de geraamde hoeveelheden vormen niet de definitieve factureerbare hoeveelheid.",
          "forecast_quantity_is_estimate": true,
          "physical_output_is_billable_quantity": false,
          "version": "original_invoice_usd_v1"
        },
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "errors": [
              {
                "condition": "Ongeldige JSON of ongeldig model, ontbrekende of lege verplichte tekenreeksen, of een ongeldige inhoudsindex.",
                "http_status": 400,
                "type": "invalid_request_error"
              },
              {
                "condition": "Ongeldige Ailoot API-sleutel.",
                "http_status": 401,
                "type": "authentication_error"
              },
              {
                "condition": "De groep van de API-sleutel heeft geen toegang tot deze mediaroute.",
                "http_status": 403,
                "type": "permission_error"
              },
              {
                "condition": "De oorspronkelijke taak of gevraagde uitvoer ontbreekt of behoort niet toe aan dezelfde gebruiker/API-sleutel/groep.",
                "http_status": 404,
                "type": "not_found_error"
              },
              {
                "condition": "De oorspronkelijke indiening of status is onvolledig of kan niet met de gegevens worden afgestemd; bewaar de oorspronkelijke ID en dien de aanvraag niet opnieuw in.",
                "http_status": 502,
                "type": "result_pending_check"
              },
              {
                "condition": "De oorspronkelijke koppeling, route of media die je toebehoren worden nog gecontroleerd; blijf die oorspronkelijke operatie controleren.",
                "http_status": 503,
                "type": "result_pending_check"
              },
              {
                "condition": "De mediadienst of de opslag van de oorspronkelijke taak is niet beschikbaar.",
                "http_status": 503,
                "type": "server_error"
              }
            ],
            "ignored_fields": [
              "style",
              "movement_amplitude"
            ],
            "lifecycle": {
              "cancel_endpoint": null,
              "completed_states": [
                "success"
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}/content",
                  "query": {
                    "index": "actual output index; default 0"
                  }
                },
                {
                  "http": "GET",
                  "path": "/v1/videos/generations/{request_id}/content",
                  "query": {
                    "index": "actual output index; default 0"
                  }
                }
              ],
              "content_pending": "Original status JSON until publication.",
              "content_ready": {
                "http_status": 303,
                "location": "actual signed Ailoot-owned asset URL"
              },
              "create": {
                "http": "POST",
                "path": "/v1/videos"
              },
              "failed_states": [],
              "id_source": "Use the actual returned public id or X-Ailoot-Task-Id and polling_url. Keep task_id/provider_task_id separate; status lookup can retain the original task identity when the native fetch omits it.",
              "mode": "submit_once_poll_original",
              "owned_result": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              },
              "pending_states": [
                "created"
              ],
              "signed_asset_lifetime_seconds": 86400,
              "state_field": "state",
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}"
                },
                {
                  "http": "GET",
                  "path": "/v1/videos/generations/{request_id}"
                }
              ],
              "submit_status": 200,
              "unknown": "De vastgezette declaratie somt geen terminale foutstatus op. Bewaar het oorspronkelijke antwoord, de headers en de id en controleer dezelfde operatie bij elke onbekende status of result_pending_check-fout; dien een aanmaakaanvraag met onbekende uitkomst nooit opnieuw in.",
              "unknown_no_replay": true
            },
            "material_combinations": [
              [
                "text"
              ]
            ],
            "operation_modes": [
              "text_to_video"
            ],
            "outputs": {
              "additional_media_boundary": "Only creations[].url is selected for owned video delivery. No owned cover-image or callback result flow is established.",
              "all_results": "Download elke werkelijk teruggestuurde URL in creations[].url; een inhoudsindex verwijst naar één werkelijk teruggestuurd uitvoerbestand.",
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "description": "Teruggestuurde openbare taak- of operatiecode van Ailoot.",
                  "name": "id",
                  "type": "string"
                },
                {
                  "description": "Oorspronkelijke taakcode, afzonderlijk van de openbare id.",
                  "name": "provider_task_id",
                  "type": "string"
                },
                {
                  "description": "Teruggestuurd opzoekpad van Ailoot voor de oorspronkelijke taak.",
                  "name": "polling_url",
                  "type": "string"
                },
                {
                  "description": "Oorspronkelijke identificatiecode uit het aanmaakantwoord.",
                  "name": "task_id",
                  "type": "string when supplied"
                },
                {
                  "description": "Natieve taakstatus: created voor de vastgezette wachtstatus en success bij voltooiing.",
                  "name": "state",
                  "type": "string when supplied"
                },
                {
                  "description": "Taakdiagnose; de opgeslagen specificatie declareert geen opgesomde lijst met foutcodes.",
                  "name": "err_code",
                  "type": "string when supplied"
                },
                {
                  "description": "Elke geselecteerde URL van een voltooide video wordt vervangen door een ondertekende URL van Ailoot.",
                  "name": "creations[].url",
                  "type": "string|string[]"
                },
                {
                  "description": "Teruggestuurde videoduur; controleer het werkelijk voltooide resultaat.",
                  "name": "creations[].video.duration",
                  "type": "number when supplied"
                },
                {
                  "description": "Teruggestuurde beeldfrequentie; er wordt geen vaste beeldfrequentie beloofd.",
                  "name": "creations[].video.fps",
                  "type": "integer when supplied"
                },
                {
                  "description": "Teruggestuurde uitvoerbreedte in pixels.",
                  "name": "creations[].video.resolution.width",
                  "type": "integer when supplied"
                },
                {
                  "description": "Teruggestuurde uitvoerhoogte in pixels.",
                  "name": "creations[].video.resolution.height",
                  "type": "integer when supplied"
                }
              ],
              "format": null,
              "maximum_outputs": null,
              "ownership": "Selected video outputs are copied, reopened and SHA256/length/positive-duration checked before publication.",
              "result": "JSON behoudt de natieve state en creations-array en voegt de openbare id/provider_task_id/polling_url toe. Geselecteerde video-URL's zijn leeg vóór publicatie en worden na voltooiing ondertekende URL's van Ailoot."
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "viduq2"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Beschrijf de te genereren scène. De gedocumenteerde limiet bedraagt 2000 tekens; Ailoot controleert of de tekenreeks niet leeg is en behoudt de tekst.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 2000,
                "minLength": 1,
                "name": "prompt",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "De modelspecifieke beschrijving van viduq2 vermeldt 1–10 volledige seconden. Er is geen modelspecifieke standaardduur gedocumenteerd.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum": 10,
                "minimum": 1,
                "name": "duration",
                "required": false,
                "type": "integer",
                "unit": "seconden"
              },
              {
                "availability": "source_interface",
                "conditions": "Laat weg of verstuur de tekenreeks \"0\" voor willekeurige uitvoer. Een opgegeven seed met een waarde verschillend van nul selecteert het gedocumenteerde gedrag met een vaste seed; er is geen numeriek bereik opgegeven.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "seed",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": "16:9",
                "default_known": true,
                "enum": [
                  "16:9",
                  "9:16",
                  "3:4",
                  "4:3",
                  "1:1"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "De modelspecifieke lijst voor viduq2 documenteert deze categorieën voor 1–10 seconden. Een gedeelde enum en tabel vermelden ook 360p; het toepassingsgebied daarvan is in tegenspraak met die lijst en wordt hier niet bevestigd.",
                "default": "720p",
                "default_known": true,
                "enum": [
                  "540p",
                  "720p",
                  "1080p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "De gedeelde aanvraag accepteert dit veld, maar de documentatie vermeldt uitdrukkelijk dat het geen effect heeft voor viduq2.",
                "default": "general",
                "default_known": true,
                "enum": [
                  "general",
                  "anime"
                ],
                "enum_known": true,
                "name": "style",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "De gedeelde aanvraag accepteert dit veld, maar de documentatie vermeldt uitdrukkelijk dat het geen effect heeft voor q2-modellen.",
                "default": "auto",
                "default_known": true,
                "enum": [
                  "auto",
                  "small",
                  "medium",
                  "large"
                ],
                "enum_known": true,
                "name": "movement_amplitude",
                "required": false,
                "type": "string"
              }
            ],
            "profile_binding": "Literal viduq2 model with the documented Ailoot videos interface.",
            "request_schema": {
              "additionalProperties": true,
              "properties": {
                "aspect_ratio": {
                  "default": "16:9",
                  "enum": [
                    "16:9",
                    "9:16",
                    "3:4",
                    "4:3",
                    "1:1"
                  ],
                  "type": "string"
                },
                "duration": {
                  "maximum": 10,
                  "minimum": 1,
                  "type": "integer"
                },
                "model": {
                  "const": "viduq2",
                  "minLength": 1,
                  "type": "string"
                },
                "movement_amplitude": {
                  "default": "auto",
                  "enum": [
                    "auto",
                    "small",
                    "medium",
                    "large"
                  ],
                  "type": "string"
                },
                "prompt": {
                  "maxLength": 2000,
                  "minLength": 1,
                  "type": "string"
                },
                "resolution": {
                  "default": "720p",
                  "enum": [
                    "540p",
                    "720p",
                    "1080p"
                  ],
                  "type": "string"
                },
                "seed": {
                  "type": "string"
                },
                "style": {
                  "default": "general",
                  "enum": [
                    "general",
                    "anime"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "model",
                "prompt"
              ],
              "type": "object"
            },
            "source_ambiguities": [
              "The shared enum and table mention 360p, while the model-specific viduq2 resolution description lists 540p/720p/1080p. The method asserts only the explicit model-specific list.",
              "The shared duration example uses a quoted string despite an integer schema. The copyable viduq2 example omits that optional field; an explicit duration follows the documented integer type.",
              "No model-specific default duration, maximum output count, generated-file retention period, cancellation endpoint or terminal failure-state list is established by these saved documents.",
              "The documented fetch uses an id path parameter; the pinned declaration names that same substituted value task_id. The fetch example has no task_id field, which the current client accepts only by retaining the original task identity."
            ],
            "unsupported": [
              "Image-guided input, video editing and extension are not part of this text-to-video method.",
              "The audio and off_peak parameters are documented only for other model selectors, not viduq2.",
              "No live streaming, callback completion or owned cover-image result contract is established here."
            ]
          },
          "hints": [
            "Maak eenmaal aan en bewaar de teruggestuurde openbare id en polling_url.",
            "Vraag de oorspronkelijke operatie herhaaldelijk op en lees state; de voltooiing is bereikt bij success en een creations[].url-resultaat dat je toebehoort.",
            "Download elke teruggestuurde video-URL die je toebehoort; leid uit het voorbeeld geen vast aantal uitvoerbestanden, vaste duur of vaste beeldfrequentie af."
          ],
          "input": {
            "additional_properties": true,
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "optional": [
              "duration",
              "seed",
              "aspect_ratio",
              "resolution",
              "style",
              "movement_amplitude"
            ],
            "required": [
              "model",
              "prompt"
            ],
            "validation_scope": "Ailoot valideert of de tekenreeksen model/prompt niet leeg zijn. De optionele types en limieten hieronder vormen het gedocumenteerde aanvraagcontract; andere aanvraagvelden blijven behouden voor het geselecteerde model."
          },
          "lifecycle": {
            "cancel_endpoint": null,
            "completed_states": [
              "success"
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}/content",
                "query": {
                  "index": "actual output index; default 0"
                }
              },
              {
                "http": "GET",
                "path": "/v1/videos/generations/{request_id}/content",
                "query": {
                  "index": "actual output index; default 0"
                }
              }
            ],
            "content_pending": "Original status JSON until publication.",
            "content_ready": {
              "http_status": 303,
              "location": "actual signed Ailoot-owned asset URL"
            },
            "create": {
              "http": "POST",
              "path": "/v1/videos"
            },
            "failed_states": [],
            "id_source": "Use the actual returned public id or X-Ailoot-Task-Id and polling_url. Keep task_id/provider_task_id separate; status lookup can retain the original task identity when the native fetch omits it.",
            "mode": "submit_once_poll_original",
            "owned_result": {
              "http": "GET",
              "path": "/v1/media/assets/{asset_id}"
            },
            "pending_states": [
              "created"
            ],
            "signed_asset_lifetime_seconds": 86400,
            "state_field": "state",
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}"
              },
              {
                "http": "GET",
                "path": "/v1/videos/generations/{request_id}"
              }
            ],
            "submit_status": 200,
            "unknown": "The pinned declaration enumerates no terminal failure state. Preserve original response/headers/id and check that same operation for any unrecognized state or result_pending_check error; never resubmit an unknown creation.",
            "unknown_no_replay": true
          },
          "manufacturer_capability": {
            "documented_material_types": [
              "text"
            ]
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [
            "/v1/videos/generations"
          ],
          "operation_modes": [
            "text_to_video"
          ],
          "output": {
            "additional_media_boundary": "Only creations[].url is selected for owned video delivery. No owned cover-image or callback result flow is established.",
            "all_results": "Download every actual returned URL in creations[].url; a content index identifies one real returned output.",
            "every_actual_output": true,
            "family": "video",
            "fields": [
              {
                "description": "Returned public Ailoot task or operation identifier.",
                "name": "id",
                "type": "string"
              },
              {
                "description": "Original task identifier, separate from the public id.",
                "name": "provider_task_id",
                "type": "string"
              },
              {
                "description": "Returned Ailoot lookup path for the original task.",
                "name": "polling_url",
                "type": "string"
              },
              {
                "description": "Original identifier present in the creation response.",
                "name": "task_id",
                "type": "string when supplied"
              },
              {
                "description": "Native task state: created for the pinned pending state and success for completion.",
                "name": "state",
                "type": "string when supplied"
              },
              {
                "description": "Task diagnostic; the saved specification declares no enumerated error-code list.",
                "name": "err_code",
                "type": "string when supplied"
              },
              {
                "description": "Every selected completed video URL is replaced with an Ailoot-owned signed URL.",
                "name": "creations[].url",
                "type": "string|string[]"
              },
              {
                "description": "Returned video duration; inspect the actual completed result.",
                "name": "creations[].video.duration",
                "type": "number when supplied"
              },
              {
                "description": "Returned frame rate; no fixed frame rate is promised.",
                "name": "creations[].video.fps",
                "type": "integer when supplied"
              },
              {
                "description": "Returned output width in pixels.",
                "name": "creations[].video.resolution.width",
                "type": "integer when supplied"
              },
              {
                "description": "Returned output height in pixels.",
                "name": "creations[].video.resolution.height",
                "type": "integer when supplied"
              }
            ],
            "format": null,
            "maximum_outputs": null,
            "ownership": "Selected video outputs are copied, reopened and SHA256/length/positive-duration checked before publication.",
            "result": "JSON retains the native state and creations array, with public id/provider_task_id/polling_url added. Selected video URLs are blank before publication and become Ailoot-owned signed URLs after completion."
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "basis": "Deze raming is geen extra kost of vast tarief voor de voltooide generatie.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Geschatte generatiekosten",
            "units": [
              {
                "amount": "5.12",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "5.12",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncat > request.json <<'JSON_REQUEST'\n{\"model\":\"viduq2\",\"prompt\":\"In an ultra-realistic fashion photography style featuring light blue and pale amber tones, an astronaut in a spacesuit walks through the fog. The background consists of enchanting white and golden lights, creating a minimalist still life and an impressive panoramic scene.\"}\nJSON_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\n",
            "label": "curl · create video",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_POLL'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote,urljoin,urlsplit\nr=json.loads(Path(\"result.json\").read_text())\ni=r.get(\"id\")\nif not isinstance(i,str) or not i:raise SystemExit(\"Keep original response/headers/id; do not resubmit creation.\")\nu=urljoin(\"https://api.ailoot.ai\",r.get(\"polling_url\") or \"/v1/videos/\"+quote(i,safe=\"\"))\np=urlsplit(u)\nif p.scheme!=\"https\" or p.netloc!=\"api.ailoot.ai\" or not p.path.startswith(\"/v1/videos/\"):raise SystemExit(\"Use the actual Ailoot lookup path.\")\nPath(\"poll-url.txt\").write_text(u)\nPY_POLL\ncurl --fail-with-body --silent --show-error \"$(cat poll-url.txt)\" -H \"Authorization: Bearer $AILOOT_API_KEY\" -D status-headers.txt -o status.json\n",
            "label": "curl · read original task",
            "language": "bash"
          },
          {
            "code": "set -eu\npython3 - <<'PY_ASSETS'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import urlsplit\nr=json.loads(Path(\"status.json\").read_text())\nif r.get(\"state\")!=\"success\":raise SystemExit(\"Poll the same original job until its owned result is returned.\")\ncreations=r.get(\"creations\")\nif not isinstance(creations,list) or not creations:raise SystemExit(\"No completed video creations.\")\nurls=[]\nfor item in creations:\n    value=item.get(\"url\") if isinstance(item,dict) else None\n    values=[value] if isinstance(value,str) else value\n    if not isinstance(values,list) or not values:raise SystemExit(\"No completed video URL.\")\n    for u in values:\n        if not isinstance(u,str):raise SystemExit(\"Invalid returned URL.\")\n        p=urlsplit(u)\n        if p.scheme!=\"https\" or p.netloc!=\"api.ailoot.ai\" or not p.path.startswith(\"/v1/media/assets/\") or not p.path.endswith(\"/content\") or not p.query:raise SystemExit(\"Wait for the actual Ailoot-owned signed result.\")\n        urls.append(u)\nPath(\"asset-urls.txt\").write_text(\"\\n\".join(urls)+\"\\n\")\nPY_ASSETS\nindex=0\nwhile IFS= read -r asset_url; do\n  curl --fail-with-body --silent --show-error \"$asset_url\" -o \"video-${index}.bin\"\n  index=$((index + 1))\ndone < asset-urls.txt\n",
            "label": "curl · download every owned video",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [
          "Create once and retain the returned public id and polling_url.",
          "Poll the original operation and read state; success and an owned creations[].url result are the completion boundary.",
          "Download every returned owned video URL; do not infer a fixed output count, duration or frame rate from the example."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "Videogeneratie",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [
          "/v1/videos/generations"
        ],
        "out": null,
        "output": [
          "video"
        ],
        "path": "/v1/videos",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "basis": "This estimate is not an additional charge or a fixed rate for the completed generation.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Estimated generation cost",
            "units": [
              {
                "amount": "5.12",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "5.12",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "request_model_id": "viduq2",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{request_id}",
          "GET /v1/videos/generations/{request_id}",
          "GET /v1/videos/{request_id}/content",
          "GET /v1/videos/generations/{request_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "5.12",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "5.12",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "viduq2",
        "request_model_id": "viduq2",
        "route_label": "Ultra"
      }
    ],
    "name": "Vidu: Q2 Text-to-Video",
    "price": {
      "estimate_only": true,
      "in": null,
      "in_label": null,
      "out": 5.12,
      "out_label": "estimate before generation",
      "scope_label": "Estimated generation cost",
      "sort_in": null,
      "sort_out": 5.12,
      "varies": false
    },
    "short": "Vidu Q2 maakt video vanuit een tekstuele scènebeschrijving, met een duur van 1–10 seconden, uitvoer in 540p, 720p of 1080p en vijf beeldverhoudingen. Dit specifieke viduq2-profiel gebruikt de prompt voor stijl en beweging en geeft het resultaat via een asynchrone taak terug."
  },
  "renderer_schema": {
    "method_order": "Original DTO methods order; every exact route/format/path/caller survives.",
    "prices": "Original public DTO fields and original native display HTML; no flattened or normalized offers."
  },
  "representation": "exact-public-dto-and-native-renderer-html",
  "representationNotes": {
    "current_reference": {
      "about_json_pointer": "/aboutHtml",
      "methods": [
        {
          "contract_json_pointer": "/methods/0/rawMethod/contract",
          "html_json_pointer": "/methods/0/html",
          "method_ordinal": 0
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "Vidu Q2 maakt video vanuit een tekstuele scènebeschrijving, met een duur van 1–10 seconden, uitvoer in 540p, 720p of 1080p en vijf beeldverhoudingen. Dit specifieke viduq2-profiel gebruikt de prompt voor stijl en beweging en geeft het resultaat via een asynchrone taak terug.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "a23a48fc0f51c5041d89bef1d1379b5956d7250773cd60c7c86eb51a3603746b",
    "renderer_sha256": "a5aefc67f30427b283b8d8bf7955908a0216c6e5e4ca3cc1887842431e2b1ee6"
  },
  "sourceRevision": "5fad263dd8a2839768a5a2d16c4c31c0f593416265f71e987edd9384259acbad"
}
