{
  "aboutHtml": "<p>Qwen-Audio-3.0-TTS-Plus omsætter tekst til udtryksfuld tale. Alibaba retter den mod professionel oplæsning af indhold, lydbøger, videoer og materiale med en genkendelig stemmekarakter. Input er tekst, og output er lyd; lyden kan også leveres løbende under syntesen.</p><h4>Talemåde som en del af opgaven</h4><p>Fremførelsen kan styres med instruktioner på naturligt sprog og detaljerede styringsmarkeringer. De fastlægger følelse, tone, karakter, tempo, lydstyrke og talestil. Dermed kan fremførelsen af samme sætning styres fra rolig fortælling til en mere energisk eller følelsesladet fremførelse.</p><p>Udtrykket hænger sammen med den valgte stemme og tekstens indhold. For stabil udtale skal materialets sprog svare til de sprog, stemmen understøtter. Modellen er beregnet til oplæsning af skrevet materiale; analyse af samtalens betydning og transskription af en optagelse hører til andre lydopgaver.</p><h4>Færdig stemme og stemme ud fra en prøve</h4><p>Der er to systemstemmer: en varm kvindestemme og en munter mandestemme. De understøtter kinesisk og engelsk. Derudover findes mere end 500 basisstemmer og mulighed for at gengive en stemme ud fra en taleprøve. Producenten anbefaler systemvarianterne, når stabil lyd er vigtig.</p><p>Stemmer ud fra prøver understøtter kinesisk med regionale udtalevarianter, engelsk, fransk, tysk, japansk, koreansk, russisk, portugisisk, thai, indonesisk, vietnamesisk, italiensk, spansk, malajisk, filippinsk og arabisk. Det er en sproglig mulighed i den pågældende tilstand og gælder ikke automatisk enhver færdig stemme.</p><p>Kravene til prøven vedrører en særskilt måde at skabe en stemme hos producenten på; talesyntesen bruger en allerede forberedt stemme. Den forberedte stemme skal passe til den valgte oplæsningsmodel: en stemme fra en anden model hos producenten giver en syntesefejl. En ren taleprøve på 10–20 sekunder anbefales. Den samlede grænse er 60 sekunder og 10 MB; der kræves mindst fem sekunders sammenhængende tale. WAV med 16-bit-repræsentation, MP3 og M4A understøttes ved mindst 16 kHz. Én eller to kanaler accepteres, men ved to bruges den første.</p><p>Taleprøven skal indeholde én stemme uden samtidigt talende personer, musik eller sang. I producentens krav er korte pauser i prøven begrænset til to sekunder. Det hjælper med at udskille klang og udtaleegenskaber til den efterfølgende syntese. Styring af fremførelsen og gengivelse af en stemme ud fra en prøve beskriver forskellige sider af modellens arbejde og kan bruges til at forberede lyden til samme materiale.</p>",
  "aboutText": "Qwen-Audio-3.0-TTS-Plus omsætter tekst til udtryksfuld tale. Alibaba retter den mod professionel oplæsning af indhold, lydbøger, videoer og materiale med en genkendelig stemmekarakter. Input er tekst, og output er lyd; lyden kan også leveres løbende under syntesen.\n\n### Talemåde som en del af opgaven\n\nFremførelsen kan styres med instruktioner på naturligt sprog og detaljerede styringsmarkeringer. De fastlægger følelse, tone, karakter, tempo, lydstyrke og talestil. Dermed kan fremførelsen af samme sætning styres fra rolig fortælling til en mere energisk eller følelsesladet fremførelse.\n\nUdtrykket hænger sammen med den valgte stemme og tekstens indhold. For stabil udtale skal materialets sprog svare til de sprog, stemmen understøtter. Modellen er beregnet til oplæsning af skrevet materiale; analyse af samtalens betydning og transskription af en optagelse hører til andre lydopgaver.\n\n### Færdig stemme og stemme ud fra en prøve\n\nDer er to systemstemmer: en varm kvindestemme og en munter mandestemme. De understøtter kinesisk og engelsk. Derudover findes mere end 500 basisstemmer og mulighed for at gengive en stemme ud fra en taleprøve. Producenten anbefaler systemvarianterne, når stabil lyd er vigtig.\n\nStemmer ud fra prøver understøtter kinesisk med regionale udtalevarianter, engelsk, fransk, tysk, japansk, koreansk, russisk, portugisisk, thai, indonesisk, vietnamesisk, italiensk, spansk, malajisk, filippinsk og arabisk. Det er en sproglig mulighed i den pågældende tilstand og gælder ikke automatisk enhver færdig stemme.\n\nKravene til prøven vedrører en særskilt måde at skabe en stemme hos producenten på; talesyntesen bruger en allerede forberedt stemme. Den forberedte stemme skal passe til den valgte oplæsningsmodel: en stemme fra en anden model hos producenten giver en syntesefejl. En ren taleprøve på 10–20 sekunder anbefales. Den samlede grænse er 60 sekunder og 10 MB; der kræves mindst fem sekunders sammenhængende tale. WAV med 16-bit-repræsentation, MP3 og M4A understøttes ved mindst 16 kHz. Én eller to kanaler accepteres, men ved to bruges den første.\n\nTaleprøven skal indeholde én stemme uden samtidigt talende personer, musik eller sang. I producentens krav er korte pauser i prøven begrænset til to sekunder. Det hjælper med at udskille klang og udtaleegenskaber til den efterfølgende syntese. Styring af fremførelsen og gengivelse af en stemme ud fra en prøve beskriver forskellige sider af modellens arbejde og kan bruges til at forberede lyden til samme materiale.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "056251d76eb82bfc32033337a407a3bdf294f973b9b2d6d9422db81294c35dc8",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "da",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">Al</span><h2 id=\"sheet-title\">qwen-audio-3.0-tts-plus</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Luk\">×</button></div><div class=\"idline\"><span>Alibaba /</span><code>qwen-audio-3.0-tts-plus</code><button type=\"button\" id=\"copy-id\">Kopiér ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Modelkortets afsnit\"><button type=\"button\" data-card-jump=\"overview\">Start</button><button type=\"button\" data-card-jump=\"methods\">Input og metoder</button><button type=\"button\" data-card-jump=\"pricing\">Priser</button><button type=\"button\" data-card-jump=\"examples\">Eksempler</button><button type=\"button\" data-card-jump=\"results\">Resultater</button><button type=\"button\" data-card-jump=\"aliases\">Aliaser</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"API-metoder\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Core|speech|/v1/audio/speech|qwen-audio-3.0-tts-plus\">Oplæsning</button></div><div class=\"idline\"><label for=\"card-model-id\">Model-ID</label><select class=\"sel\" id=\"card-model-id\" style=\"min-width:0;max-width:100%\"><option value=\"Core|speech|/v1/audio/speech|qwen-audio-3.0-tts-plus\" selected>qwen-audio-3.0-tts-plus</option><option value=\"Core|speech|/v1/audio/speech|qwen-tts\">qwen-tts</option><option value=\"Core|speech|/v1/audio/speech|qwen-tts-latest\">qwen-tts-latest</option></select></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\">Start</h3><p class=\"mdesc-full\">Model til udtryksfuld oplæsning af tekst til videoer, lydbøger og stemmemateriale. Understøtter styring af talemåden og valg af en færdig stemme eller en stemme skabt ud fra en prøve.</p><dl class=\"card-io\" data-card-io><div><dt>Accepterede input</dt><dd>Tekst</dd></div><div><dt>Resultater</dt><dd>speech</dd></div></dl><details class=\"card-about\"><summary>Om modellen</summary><p class=\"note-s\" data-model-method-boundary>Denne beskrivelse dækker modellens funktioner. Tilgængelige input, output og indstillinger i Ailoot står nedenfor for den valgte metode.</p><div class=\"mabout\" id=\"m-about\"><p>Qwen-Audio-3.0-TTS-Plus omsætter tekst til udtryksfuld tale. Alibaba retter den mod professionel oplæsning af indhold, lydbøger, videoer og materiale med en genkendelig stemmekarakter. Input er tekst, og output er lyd; lyden kan også leveres løbende under syntesen.</p><h4>Talemåde som en del af opgaven</h4><p>Fremførelsen kan styres med instruktioner på naturligt sprog og detaljerede styringsmarkeringer. De fastlægger følelse, tone, karakter, tempo, lydstyrke og talestil. Dermed kan fremførelsen af samme sætning styres fra rolig fortælling til en mere energisk eller følelsesladet fremførelse.</p><p>Udtrykket hænger sammen med den valgte stemme og tekstens indhold. For stabil udtale skal materialets sprog svare til de sprog, stemmen understøtter. Modellen er beregnet til oplæsning af skrevet materiale; analyse af samtalens betydning og transskription af en optagelse hører til andre lydopgaver.</p><h4>Færdig stemme og stemme ud fra en prøve</h4><p>Der er to systemstemmer: en varm kvindestemme og en munter mandestemme. De understøtter kinesisk og engelsk. Derudover findes mere end 500 basisstemmer og mulighed for at gengive en stemme ud fra en taleprøve. Producenten anbefaler systemvarianterne, når stabil lyd er vigtig.</p><p>Stemmer ud fra prøver understøtter kinesisk med regionale udtalevarianter, engelsk, fransk, tysk, japansk, koreansk, russisk, portugisisk, thai, indonesisk, vietnamesisk, italiensk, spansk, malajisk, filippinsk og arabisk. Det er en sproglig mulighed i den pågældende tilstand og gælder ikke automatisk enhver færdig stemme.</p><p>Kravene til prøven vedrører en særskilt måde at skabe en stemme hos producenten på; talesyntesen bruger en allerede forberedt stemme. Den forberedte stemme skal passe til den valgte oplæsningsmodel: en stemme fra en anden model hos producenten giver en syntesefejl. En ren taleprøve på 10–20 sekunder anbefales. Den samlede grænse er 60 sekunder og 10 MB; der kræves mindst fem sekunders sammenhængende tale. WAV med 16-bit-repræsentation, MP3 og M4A understøttes ved mindst 16 kHz. Én eller to kanaler accepteres, men ved to bruges den første.</p><p>Taleprøven skal indeholde én stemme uden samtidigt talende personer, musik eller sang. I producentens krav er korte pauser i prøven begrænset til to sekunder. Det hjælper med at udskille klang og udtaleegenskaber til den efterfølgende syntese. Styring af fremførelsen og gengivelse af en stemme ud fra en prøve beskriver forskellige sider af modellens arbejde og kan bruges til at forberede lyden til samme materiale.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Tilgængelig i Ailoot · input og metoder</h3><details class=\"card-method\" open><summary><b>Ailoot · Oplæsning</b> <code>POST /v1/audio/speech</code></summary><dl class=\"method-capabilities\"><div><dt>Inputtyper</dt><dd><code>text</code></dd></div><div><dt>Outputtyper</dt><dd><code>speech</code></dd></div><div><dt>Outputformat</dt><dd>valgt mp3/wav/pcm</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Felt</th><th>Type</th><th>Krav</th><th>Værdier og grænser</th><th>Standard</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Påkrævet</td><td data-cell-label=\"Værdier og grænser\"><span class=\"card-cell-label\">Værdier og grænser</span><div>qwen-audio-3.0-tts-plus</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">input</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Påkrævet</td><td data-cell-label=\"Værdier og grænser\"><span class=\"card-cell-label\">Værdier og grænser</span><div>Minimumslængde: 1</div><div>Maksimal længde: 600</div><div>Enhed: Unicode-tegn</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">voice</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Valgfrit</td><td data-cell-label=\"Værdier og grænser\"><span class=\"card-cell-label\">Værdier og grænser</span><div>Eksempler: longanlingxin, longanlufeng</div><div>Accepteret brugerdefineret mønster: ^qwen-audio-3\\.0-tts-plus-</div><div>Betingelser: Faktiske brugerdefinerede stemme-ID’er med det præcise præfiks qwen-audio-3.0-tts-plus- accepteres.</div></td><td data-cell-label=\"Standard\" data-default=\"known\"><span class=\"card-cell-label\">Standard</span>longanlingxin</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">response_format</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Valgfrit</td><td data-cell-label=\"Værdier og grænser\"><span class=\"card-cell-label\">Værdier og grænser</span><div>mp3, wav, pcm</div></td><td data-cell-label=\"Standard\" data-default=\"known\"><span class=\"card-cell-label\">Standard</span>mp3</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">sample_rate</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Valgfrit</td><td data-cell-label=\"Værdier og grænser\"><span class=\"card-cell-label\">Værdier og grænser</span><div>16.000, 24.000, 48.000</div><div>Enhed: Hz</div></td><td data-cell-label=\"Standard\" data-default=\"known\"><span class=\"card-cell-label\">Standard</span>24.000</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Kombinationer af inputmaterialer</summary><p class=\"note-s\"><b>text_to_speech</b> · Påkrævet: input</p></details><details class=\"note-s\" data-method-contract><summary>Metodeparametre og livscyklus</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parameter</th><th>Kontrakt</th></tr></thead><tbody><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>material_types</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>text</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=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>null</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>optional_controls</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>null</td></tr></tbody></table></div><p>Livscyklus: <code>synchronous_result_then_owned_library</code></p><p class=\"note-s\"><code>GET /v1/media/tasks/{task_id}</code> · det faktisk returnerede task_id eller posten i mediebiblioteket</p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}/content</code></p><p class=\"note-s\"><code>GET /v1/media/assets</code></p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}</code></p><p class=\"note-s\">Metodernes strukturer og ID’er er præcise; leverandørens muligheder er adskilt fra adgangstilladelse.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Priser</h3><h4>Ailoot-metodetakster</h4><section class=\"meth\" data-route=\"Core\"><header><b><span class=\"alias\">Ailoot</span> Oplæsning</b><code>POST /v1/audio/speech</code></header><dl><div><dt>Input</dt><dd>20,00 US$ <em>pr. 1 million tegn</em></dd></div><div><dt>Output</dt><dd>0,00 US$ <em>pr. anmodning</em></dd></div></dl><p class=\"note-s\">20,00 US$ pr. 1 mio. optalte tegn. Et CJK-ideogram tæller som 2 optalte tegn: 40,00 US$ pr. 1 mio. ideogrammer. Vægt for øvrige Unicode-tegn: 1. Outputlyd: 0,00 US$. </p><details class=\"note-s\"><summary>Præcis betinget optælling fra kataloget</summary><pre><code>{\n  &quot;cjk_ideograph_weight&quot;: 2,\n  &quot;input_usd_per_10000_counted_characters&quot;: 0.2,\n  &quot;other_unicode_character_weight&quot;: 1,\n  &quot;output_audio_usd&quot;: 0,\n  &quot;unit&quot;: &quot;counted_unicode_characters&quot;\n}</code></pre></details></section><p class=\"note-s\">Ailoot reserverer et estimeret beløb før en anmodning. Efter resultatet afregnes det endelige beløb ud fra det målte forbrug. Ved streaming bruges den endelige forbrugsregistrering til afregningen. <a href=\"/docs/da/billing/reserve/\">Sådan fungerer reservation og afregning →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Eksempelanmodninger</h3><h4>Ailoot · Oplæsning</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Kodevarianter\"><button class=\"cg-tab\" id=\"model-code-41-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-41-panel-0\" aria-selected=\"true\" tabindex=\"0\">Taleeksempel</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Kopiér kode\"><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-41-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-41-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_TEXT_FILE:?Set your actual UTF-8 narration script}&quot;\nexport AILOOT_TEXT_FILE\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;: &quot;qwen-audio-3.0-tts-plus&quot;, &quot;input&quot;: &quot;&quot;}&#39;)\nf=Path(os.environ[&quot;AILOOT_TEXT_FILE&quot;])\nif not f.is_file():raise SystemExit(&quot;Choose your actual UTF-8 source material&quot;)\ntext=f.read_text(encoding=&quot;utf-8&quot;)\nif not text.strip():raise SystemExit(&quot;Source material must contain text&quot;)\np[&quot;input&quot;]=text\nPath(&quot;request.json&quot;).write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\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 speech.mp3\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Hent og gem resultater</h3><h4>Ailoot · Oplæsning</h4><p class=\"note-s\">valgt mp3/wav/pcm</p><ul class=\"card-result-paths\"><li><code>GET /v1/media/tasks/{task_id}</code></li><li><code>GET /v1/media/assets/{asset_id}/content</code></li><li><code>GET /v1/media/assets</code></li><li><code>GET /v1/media/assets/{asset_id}</code></li></ul><div class=\"card-result-process\" data-all-results><h5>Behold alle færdige resultater</h5><p class=\"note-s\">Gem hvert fuldstændigt returneret svar, hver fil og hver indholdsdel.</p><p class=\"note-s\">Gem hele det binære resultat og alle headere. Hvis der returneres JSON eller flere output, skal du gemme hvert dataelement og hente alle de faktiske signerede asset-URL&#39;er.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Hvis det oprindelige svar skal kontrolleres</h5><p class=\"note-s\">Gem det oprindelige operation_id/X-Client-Request-ID til afstemning uden genindsendelse; der er ingen særskilt rute til polling af lyd.</p></div><details class=\"card-about\" data-output-fields><summary>Svarfelter</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Felt</th><th>Type</th></tr></thead><tbody><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">binary audio</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>bytes</td></tr><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">response headers</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>headers</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Fejl og næste trin</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Svar</th><th>Betingelse</th><th>Næste trin</th></tr></thead><tbody><tr><th data-cell-label=\"Svar\" scope=\"row\"><span class=\"card-cell-label\">Svar</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Betingelse\"><span class=\"card-cell-label\">Betingelse</span>Ugyldige obligatoriske felter, materialerepræsentation eller parameterværdi</td><td data-cell-label=\"Næste trin\"><span class=\"card-cell-label\">Næste trin</span>Ret de angivne felter før en ny oprettelsesanmodning.</td></tr><tr><th data-cell-label=\"Svar\" scope=\"row\"><span class=\"card-cell-label\">Svar</span><code>server_error</code></th><td data-cell-label=\"Betingelse\"><span class=\"card-cell-label\">Betingelse</span>Det returnerede svar angiver, at operationen eller resultatet skal kontrolleres</td><td data-cell-label=\"Næste trin\"><span class=\"card-cell-label\">Næste trin</span>Gem det oprindeligt returnerede operations-/opgave-ID, anmodningens headere og svaret; fortsæt med de understøttede læseanmodninger for den oprindelige operation. Send ikke oprettelsesanmodningen igen.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Aliaser</h3><h4>Modelaliaser</h4><p class=\"note-s\"><span data-model-alias-route=\"Core\"><b>Ailoot</b> <a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-audio-3.0-tts-plus&amp;fmt=speech\"><code>qwen-audio-3.0-tts-plus</code></a>, <a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-tts&amp;fmt=speech\"><code>qwen-tts</code></a>, <a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-tts-latest&amp;fmt=speech\"><code>qwen-tts-latest</code></a></span></p><h4>Aliaser for metodestier</h4><p class=\"note-s\">Brug metodestierne vist ovenfor.</p><h4>Relaterede kalder-ID’er</h4><p class=\"note-s\"><a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-audio-3.0-tts-plus&amp;fmt=speech\"><code>qwen-audio-3.0-tts-plus</code></a>, <a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-tts&amp;fmt=speech\"><code>qwen-tts</code></a>, <a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-tts-latest&amp;fmt=speech\"><code>qwen-tts-latest</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "qwen-audio-3.0-tts-plus",
        "fmt": "speech",
        "http": "POST",
        "path": "/v1/audio/speech",
        "request_model_id": "qwen-audio-3.0-tts-plus",
        "route_label": "Core"
      },
      "method_key": "Core|speech|/v1/audio/speech|qwen-audio-3.0-tts-plus",
      "ordinal": 0,
      "rawMethod": {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": {
          "cjk_ideograph_weight": 2,
          "input_usd_per_10000_counted_characters": 0.2,
          "other_unicode_character_weight": 1,
          "output_audio_usd": 0,
          "unit": "counted_unicode_characters"
        },
        "contract": {
          "data": {
            "all_results": "Keep the complete binary result and headers. If JSON/multiple outputs are returned, retain every data item and fetch each actual signed asset URL.",
            "errors": [
              {
                "code": null,
                "condition": "Ugyldige obligatoriske felter, materialerepræsentation eller parameterværdi",
                "http_status": 400,
                "recovery": "Ret de angivne felter før en ny oprettelsesanmodning.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Det returnerede svar angiver, at operationen eller resultatet skal kontrolleres",
                "http_status": null,
                "recovery": "Gem det oprindeligt returnerede operations-/opgave-ID, anmodningens headere og svaret; fortsæt med de understøttede læseanmodninger for den oprindelige operation. Send ikke oprettelsesanmodningen igen.",
                "type": "server_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Gem det oprindelige operation_id/X-Client-Request-ID til afstemning uden genindsendelse; der er ingen særskilt rute til polling af lyd."
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_speech",
                "required": [
                  "input"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "actual returned task_id or media library record; operation_id is not task_id",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "text_to_speech"
            ],
            "outputs": {
              "all_results": "Gem hele det binære resultat og alle headere. Hvis der returneres JSON eller flere output, skal du gemme hvert dataelement og hente alle de faktiske signerede asset-URL'er.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "valgt mp3/wav/pcm"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "qwen-audio-3.0-tts-plus"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum_length": 600,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "Unicode-tegn"
              },
              {
                "accepted_custom_pattern": "^qwen-audio-3\\.0-tts-plus-",
                "availability": "source_interface",
                "conditions": "Faktiske brugerdefinerede stemme-ID’er med det præcise præfiks qwen-audio-3.0-tts-plus- accepteres.",
                "default": "longanlingxin",
                "default_known": true,
                "enum": [
                  "longanlingxin",
                  "longanlufeng"
                ],
                "enum_exhaustive": false,
                "enum_known": true,
                "name": "voice",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": "mp3",
                "default_known": true,
                "enum": [
                  "mp3",
                  "wav",
                  "pcm"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": 24000,
                "default_known": true,
                "enum": [
                  16000,
                  24000,
                  48000
                ],
                "enum_known": true,
                "name": "sample_rate",
                "required": false,
                "type": "integer",
                "unit": "Hz"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": []
          },
          "hints": [
            "Metodernes strukturer og ID’er er præcise; leverandørens muligheder er adskilt fra adgangstilladelse."
          ],
          "input": {
            "material_types": [
              "text"
            ],
            "optional_controls": null,
            "required": null
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "det faktisk returnerede task_id eller posten i mediebiblioteket",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "operation_modes": [
            "audio_speech"
          ],
          "output": {
            "family": [
              "speech"
            ],
            "format": null,
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": null,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 narration script}\"\nexport AILOOT_TEXT_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"qwen-audio-3.0-tts-plus\", \"input\": \"\"}')\nf=Path(os.environ[\"AILOOT_TEXT_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose your actual UTF-8 source material\")\ntext=f.read_text(encoding=\"utf-8\")\nif not text.strip():raise SystemExit(\"Source material must contain text\")\np[\"input\"]=text\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o speech.mp3\n",
            "label": "Synthesize your actual script",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": null,
        "input": [
          "text"
        ],
        "label": "Oplæsning",
        "max_out": null,
        "max_tool_calls": null,
        "out": null,
        "output": [
          "speech"
        ],
        "path": "/v1/audio/speech",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 20,
                "amount_unit": "usd_per_display_unit",
                "key": "audio_input_character",
                "label": "per 1 million characters",
                "side": "in"
              },
              {
                "amount": 0,
                "amount_unit": "usd_per_display_unit",
                "key": "per_request",
                "label": "per request",
                "side": "out"
              }
            ]
          }
        ],
        "request_model_id": "qwen-audio-3.0-tts-plus",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "audio_input_character",
        "units": [
          {
            "key": "audio_input_character",
            "label": "per 1 million characters",
            "side": "in",
            "usd": 20
          },
          {
            "key": "per_request",
            "label": "per request",
            "side": "out",
            "usd": 0
          }
        ]
      }
    },
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">Al</span><h2 id=\"sheet-title\">qwen-audio-3.0-tts-plus</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Luk\">×</button></div><div class=\"idline\"><span>Alibaba /</span><code>qwen-tts</code><button type=\"button\" id=\"copy-id\">Kopiér ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Modelkortets afsnit\"><button type=\"button\" data-card-jump=\"overview\">Start</button><button type=\"button\" data-card-jump=\"methods\">Input og metoder</button><button type=\"button\" data-card-jump=\"pricing\">Priser</button><button type=\"button\" data-card-jump=\"examples\">Eksempler</button><button type=\"button\" data-card-jump=\"results\">Resultater</button><button type=\"button\" data-card-jump=\"aliases\">Aliaser</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"API-metoder\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Core|speech|/v1/audio/speech|qwen-tts\">Oplæsning</button></div><div class=\"idline\"><label for=\"card-model-id\">Model-ID</label><select class=\"sel\" id=\"card-model-id\" style=\"min-width:0;max-width:100%\"><option value=\"Core|speech|/v1/audio/speech|qwen-audio-3.0-tts-plus\">qwen-audio-3.0-tts-plus</option><option value=\"Core|speech|/v1/audio/speech|qwen-tts\" selected>qwen-tts</option><option value=\"Core|speech|/v1/audio/speech|qwen-tts-latest\">qwen-tts-latest</option></select></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\">Start</h3><p class=\"mdesc-full\">Model til udtryksfuld oplæsning af tekst til videoer, lydbøger og stemmemateriale. Understøtter styring af talemåden og valg af en færdig stemme eller en stemme skabt ud fra en prøve.</p><dl class=\"card-io\" data-card-io><div><dt>Accepterede input</dt><dd>Tekst</dd></div><div><dt>Resultater</dt><dd>speech</dd></div></dl><details class=\"card-about\"><summary>Om modellen</summary><p class=\"note-s\" data-model-method-boundary>Denne beskrivelse dækker modellens funktioner. Tilgængelige input, output og indstillinger i Ailoot står nedenfor for den valgte metode.</p><div class=\"mabout\" id=\"m-about\"><p>Qwen-Audio-3.0-TTS-Plus omsætter tekst til udtryksfuld tale. Alibaba retter den mod professionel oplæsning af indhold, lydbøger, videoer og materiale med en genkendelig stemmekarakter. Input er tekst, og output er lyd; lyden kan også leveres løbende under syntesen.</p><h4>Talemåde som en del af opgaven</h4><p>Fremførelsen kan styres med instruktioner på naturligt sprog og detaljerede styringsmarkeringer. De fastlægger følelse, tone, karakter, tempo, lydstyrke og talestil. Dermed kan fremførelsen af samme sætning styres fra rolig fortælling til en mere energisk eller følelsesladet fremførelse.</p><p>Udtrykket hænger sammen med den valgte stemme og tekstens indhold. For stabil udtale skal materialets sprog svare til de sprog, stemmen understøtter. Modellen er beregnet til oplæsning af skrevet materiale; analyse af samtalens betydning og transskription af en optagelse hører til andre lydopgaver.</p><h4>Færdig stemme og stemme ud fra en prøve</h4><p>Der er to systemstemmer: en varm kvindestemme og en munter mandestemme. De understøtter kinesisk og engelsk. Derudover findes mere end 500 basisstemmer og mulighed for at gengive en stemme ud fra en taleprøve. Producenten anbefaler systemvarianterne, når stabil lyd er vigtig.</p><p>Stemmer ud fra prøver understøtter kinesisk med regionale udtalevarianter, engelsk, fransk, tysk, japansk, koreansk, russisk, portugisisk, thai, indonesisk, vietnamesisk, italiensk, spansk, malajisk, filippinsk og arabisk. Det er en sproglig mulighed i den pågældende tilstand og gælder ikke automatisk enhver færdig stemme.</p><p>Kravene til prøven vedrører en særskilt måde at skabe en stemme hos producenten på; talesyntesen bruger en allerede forberedt stemme. Den forberedte stemme skal passe til den valgte oplæsningsmodel: en stemme fra en anden model hos producenten giver en syntesefejl. En ren taleprøve på 10–20 sekunder anbefales. Den samlede grænse er 60 sekunder og 10 MB; der kræves mindst fem sekunders sammenhængende tale. WAV med 16-bit-repræsentation, MP3 og M4A understøttes ved mindst 16 kHz. Én eller to kanaler accepteres, men ved to bruges den første.</p><p>Taleprøven skal indeholde én stemme uden samtidigt talende personer, musik eller sang. I producentens krav er korte pauser i prøven begrænset til to sekunder. Det hjælper med at udskille klang og udtaleegenskaber til den efterfølgende syntese. Styring af fremførelsen og gengivelse af en stemme ud fra en prøve beskriver forskellige sider af modellens arbejde og kan bruges til at forberede lyden til samme materiale.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Tilgængelig i Ailoot · input og metoder</h3><details class=\"card-method\" open><summary><b>Ailoot · Oplæsning</b> <code>POST /v1/audio/speech</code></summary><dl class=\"method-capabilities\"><div><dt>Inputtyper</dt><dd><code>text</code></dd></div><div><dt>Outputtyper</dt><dd><code>speech</code></dd></div><div><dt>Outputformat</dt><dd>valgt mp3/wav/pcm</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Felt</th><th>Type</th><th>Krav</th><th>Værdier og grænser</th><th>Standard</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Påkrævet</td><td data-cell-label=\"Værdier og grænser\"><span class=\"card-cell-label\">Værdier og grænser</span><div>qwen-tts</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">input</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Påkrævet</td><td data-cell-label=\"Værdier og grænser\"><span class=\"card-cell-label\">Værdier og grænser</span><div>Minimumslængde: 1</div><div>Maksimal længde: 600</div><div>Enhed: Unicode-tegn</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">voice</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Valgfrit</td><td data-cell-label=\"Værdier og grænser\"><span class=\"card-cell-label\">Værdier og grænser</span><div>Eksempler: longanlingxin, longanlufeng</div><div>Accepteret brugerdefineret mønster: ^qwen-audio-3\\.0-tts-plus-</div><div>Betingelser: Faktiske brugerdefinerede stemme-ID’er med det præcise præfiks qwen-audio-3.0-tts-plus- accepteres.</div></td><td data-cell-label=\"Standard\" data-default=\"known\"><span class=\"card-cell-label\">Standard</span>longanlingxin</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">response_format</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Valgfrit</td><td data-cell-label=\"Værdier og grænser\"><span class=\"card-cell-label\">Værdier og grænser</span><div>mp3, wav, pcm</div></td><td data-cell-label=\"Standard\" data-default=\"known\"><span class=\"card-cell-label\">Standard</span>mp3</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">sample_rate</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Valgfrit</td><td data-cell-label=\"Værdier og grænser\"><span class=\"card-cell-label\">Værdier og grænser</span><div>16.000, 24.000, 48.000</div><div>Enhed: Hz</div></td><td data-cell-label=\"Standard\" data-default=\"known\"><span class=\"card-cell-label\">Standard</span>24.000</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Kombinationer af inputmaterialer</summary><p class=\"note-s\"><b>text_to_speech</b> · Påkrævet: input</p></details><details class=\"note-s\" data-method-contract><summary>Metodeparametre og livscyklus</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parameter</th><th>Kontrakt</th></tr></thead><tbody><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>material_types</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>text</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=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>null</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>optional_controls</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>null</td></tr></tbody></table></div><p>Livscyklus: <code>synchronous_result_then_owned_library</code></p><p class=\"note-s\"><code>GET /v1/media/tasks/{task_id}</code> · det faktisk returnerede task_id eller posten i mediebiblioteket</p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}/content</code></p><p class=\"note-s\"><code>GET /v1/media/assets</code></p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}</code></p><p class=\"note-s\">Metodernes strukturer og ID’er er præcise; leverandørens muligheder er adskilt fra adgangstilladelse.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Priser</h3><h4>Ailoot-metodetakster</h4><section class=\"meth\" data-route=\"Core\"><header><b><span class=\"alias\">Ailoot</span> Oplæsning</b><code>POST /v1/audio/speech</code></header><dl><div><dt>Input</dt><dd>20,00 US$ <em>pr. 1 million tegn</em></dd></div><div><dt>Output</dt><dd>0,00 US$ <em>pr. anmodning</em></dd></div></dl><p class=\"note-s\">20,00 US$ pr. 1 mio. optalte tegn. Et CJK-ideogram tæller som 2 optalte tegn: 40,00 US$ pr. 1 mio. ideogrammer. Vægt for øvrige Unicode-tegn: 1. Outputlyd: 0,00 US$. </p><details class=\"note-s\"><summary>Præcis betinget optælling fra kataloget</summary><pre><code>{\n  &quot;cjk_ideograph_weight&quot;: 2,\n  &quot;input_usd_per_10000_counted_characters&quot;: 0.2,\n  &quot;other_unicode_character_weight&quot;: 1,\n  &quot;output_audio_usd&quot;: 0,\n  &quot;unit&quot;: &quot;counted_unicode_characters&quot;\n}</code></pre></details></section><p class=\"note-s\">Ailoot reserverer et estimeret beløb før en anmodning. Efter resultatet afregnes det endelige beløb ud fra det målte forbrug. Ved streaming bruges den endelige forbrugsregistrering til afregningen. <a href=\"/docs/da/billing/reserve/\">Sådan fungerer reservation og afregning →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Eksempelanmodninger</h3><h4>Ailoot · Oplæsning</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Kodevarianter\"><button class=\"cg-tab\" id=\"model-code-42-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-42-panel-0\" aria-selected=\"true\" tabindex=\"0\">Taleeksempel</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Kopiér kode\"><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-42-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-42-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_TEXT_FILE:?Set your actual UTF-8 narration script}&quot;\nexport AILOOT_TEXT_FILE\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;: &quot;qwen-tts&quot;, &quot;input&quot;: &quot;&quot;}&#39;)\nf=Path(os.environ[&quot;AILOOT_TEXT_FILE&quot;])\nif not f.is_file():raise SystemExit(&quot;Choose your actual UTF-8 source material&quot;)\ntext=f.read_text(encoding=&quot;utf-8&quot;)\nif not text.strip():raise SystemExit(&quot;Source material must contain text&quot;)\np[&quot;input&quot;]=text\nPath(&quot;request.json&quot;).write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\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 speech.mp3\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Hent og gem resultater</h3><h4>Ailoot · Oplæsning</h4><p class=\"note-s\">valgt mp3/wav/pcm</p><ul class=\"card-result-paths\"><li><code>GET /v1/media/tasks/{task_id}</code></li><li><code>GET /v1/media/assets/{asset_id}/content</code></li><li><code>GET /v1/media/assets</code></li><li><code>GET /v1/media/assets/{asset_id}</code></li></ul><div class=\"card-result-process\" data-all-results><h5>Behold alle færdige resultater</h5><p class=\"note-s\">Gem hvert fuldstændigt returneret svar, hver fil og hver indholdsdel.</p><p class=\"note-s\">Gem hele det binære resultat og alle headere. Hvis der returneres JSON eller flere output, skal du gemme hvert dataelement og hente alle de faktiske signerede asset-URL&#39;er.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Hvis det oprindelige svar skal kontrolleres</h5><p class=\"note-s\">Gem det oprindelige operation_id/X-Client-Request-ID til afstemning uden genindsendelse; der er ingen særskilt rute til polling af lyd.</p></div><details class=\"card-about\" data-output-fields><summary>Svarfelter</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Felt</th><th>Type</th></tr></thead><tbody><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">binary audio</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>bytes</td></tr><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">response headers</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>headers</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Fejl og næste trin</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Svar</th><th>Betingelse</th><th>Næste trin</th></tr></thead><tbody><tr><th data-cell-label=\"Svar\" scope=\"row\"><span class=\"card-cell-label\">Svar</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Betingelse\"><span class=\"card-cell-label\">Betingelse</span>Ugyldige obligatoriske felter, materialerepræsentation eller parameterværdi</td><td data-cell-label=\"Næste trin\"><span class=\"card-cell-label\">Næste trin</span>Ret de angivne felter før en ny oprettelsesanmodning.</td></tr><tr><th data-cell-label=\"Svar\" scope=\"row\"><span class=\"card-cell-label\">Svar</span><code>server_error</code></th><td data-cell-label=\"Betingelse\"><span class=\"card-cell-label\">Betingelse</span>Det returnerede svar angiver, at operationen eller resultatet skal kontrolleres</td><td data-cell-label=\"Næste trin\"><span class=\"card-cell-label\">Næste trin</span>Gem det oprindeligt returnerede operations-/opgave-ID, anmodningens headere og svaret; fortsæt med de understøttede læseanmodninger for den oprindelige operation. Send ikke oprettelsesanmodningen igen.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Aliaser</h3><h4>Modelaliaser</h4><p class=\"note-s\"><span data-model-alias-route=\"Core\"><b>Ailoot</b> <a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-audio-3.0-tts-plus&amp;fmt=speech\"><code>qwen-audio-3.0-tts-plus</code></a>, <a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-tts&amp;fmt=speech\"><code>qwen-tts</code></a>, <a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-tts-latest&amp;fmt=speech\"><code>qwen-tts-latest</code></a></span></p><h4>Aliaser for metodestier</h4><p class=\"note-s\">Brug metodestierne vist ovenfor.</p><h4>Relaterede kalder-ID’er</h4><p class=\"note-s\"><a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-audio-3.0-tts-plus&amp;fmt=speech\"><code>qwen-audio-3.0-tts-plus</code></a>, <a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-tts&amp;fmt=speech\"><code>qwen-tts</code></a>, <a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-tts-latest&amp;fmt=speech\"><code>qwen-tts-latest</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "qwen-tts",
        "fmt": "speech",
        "http": "POST",
        "path": "/v1/audio/speech",
        "request_model_id": "qwen-tts",
        "route_label": "Core"
      },
      "method_key": "Core|speech|/v1/audio/speech|qwen-tts",
      "ordinal": 1,
      "rawMethod": {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": {
          "cjk_ideograph_weight": 2,
          "input_usd_per_10000_counted_characters": 0.2,
          "other_unicode_character_weight": 1,
          "output_audio_usd": 0,
          "unit": "counted_unicode_characters"
        },
        "contract": {
          "data": {
            "all_results": "Keep the complete binary result and headers. If JSON/multiple outputs are returned, retain every data item and fetch each actual signed asset URL.",
            "errors": [
              {
                "code": null,
                "condition": "Ugyldige obligatoriske felter, materialerepræsentation eller parameterværdi",
                "http_status": 400,
                "recovery": "Ret de angivne felter før en ny oprettelsesanmodning.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Det returnerede svar angiver, at operationen eller resultatet skal kontrolleres",
                "http_status": null,
                "recovery": "Gem det oprindeligt returnerede operations-/opgave-ID, anmodningens headere og svaret; fortsæt med de understøttede læseanmodninger for den oprindelige operation. Send ikke oprettelsesanmodningen igen.",
                "type": "server_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Gem det oprindelige operation_id/X-Client-Request-ID til afstemning uden genindsendelse; der er ingen særskilt rute til polling af lyd."
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_speech",
                "required": [
                  "input"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "actual returned task_id or media library record; operation_id is not task_id",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "text_to_speech"
            ],
            "outputs": {
              "all_results": "Gem hele det binære resultat og alle headere. Hvis der returneres JSON eller flere output, skal du gemme hvert dataelement og hente alle de faktiske signerede asset-URL'er.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "valgt mp3/wav/pcm"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "qwen-tts"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum_length": 600,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "Unicode-tegn"
              },
              {
                "accepted_custom_pattern": "^qwen-audio-3\\.0-tts-plus-",
                "availability": "source_interface",
                "conditions": "Faktiske brugerdefinerede stemme-ID’er med det præcise præfiks qwen-audio-3.0-tts-plus- accepteres.",
                "default": "longanlingxin",
                "default_known": true,
                "enum": [
                  "longanlingxin",
                  "longanlufeng"
                ],
                "enum_exhaustive": false,
                "enum_known": true,
                "name": "voice",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": "mp3",
                "default_known": true,
                "enum": [
                  "mp3",
                  "wav",
                  "pcm"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": 24000,
                "default_known": true,
                "enum": [
                  16000,
                  24000,
                  48000
                ],
                "enum_known": true,
                "name": "sample_rate",
                "required": false,
                "type": "integer",
                "unit": "Hz"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": []
          },
          "hints": [
            "Metodernes strukturer og ID’er er præcise; leverandørens muligheder er adskilt fra adgangstilladelse."
          ],
          "input": {
            "material_types": [
              "text"
            ],
            "optional_controls": null,
            "required": null
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "det faktisk returnerede task_id eller posten i mediebiblioteket",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "operation_modes": [
            "audio_speech"
          ],
          "output": {
            "family": [
              "speech"
            ],
            "format": null,
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": null,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 narration script}\"\nexport AILOOT_TEXT_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"qwen-tts\", \"input\": \"\"}')\nf=Path(os.environ[\"AILOOT_TEXT_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose your actual UTF-8 source material\")\ntext=f.read_text(encoding=\"utf-8\")\nif not text.strip():raise SystemExit(\"Source material must contain text\")\np[\"input\"]=text\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o speech.mp3\n",
            "label": "Synthesize your actual script",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": null,
        "input": [
          "text"
        ],
        "label": "Oplæsning",
        "max_out": null,
        "max_tool_calls": null,
        "out": null,
        "output": [
          "speech"
        ],
        "path": "/v1/audio/speech",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 20,
                "amount_unit": "usd_per_display_unit",
                "key": "audio_input_character",
                "label": "per 1 million characters",
                "side": "in"
              },
              {
                "amount": 0,
                "amount_unit": "usd_per_display_unit",
                "key": "per_request",
                "label": "per request",
                "side": "out"
              }
            ]
          }
        ],
        "request_model_id": "qwen-tts",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "audio_input_character",
        "units": [
          {
            "key": "audio_input_character",
            "label": "per 1 million characters",
            "side": "in",
            "usd": 20
          },
          {
            "key": "per_request",
            "label": "per request",
            "side": "out",
            "usd": 0
          }
        ]
      }
    },
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">Al</span><h2 id=\"sheet-title\">qwen-audio-3.0-tts-plus</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Luk\">×</button></div><div class=\"idline\"><span>Alibaba /</span><code>qwen-tts-latest</code><button type=\"button\" id=\"copy-id\">Kopiér ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Modelkortets afsnit\"><button type=\"button\" data-card-jump=\"overview\">Start</button><button type=\"button\" data-card-jump=\"methods\">Input og metoder</button><button type=\"button\" data-card-jump=\"pricing\">Priser</button><button type=\"button\" data-card-jump=\"examples\">Eksempler</button><button type=\"button\" data-card-jump=\"results\">Resultater</button><button type=\"button\" data-card-jump=\"aliases\">Aliaser</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"API-metoder\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Core|speech|/v1/audio/speech|qwen-tts-latest\">Oplæsning</button></div><div class=\"idline\"><label for=\"card-model-id\">Model-ID</label><select class=\"sel\" id=\"card-model-id\" style=\"min-width:0;max-width:100%\"><option value=\"Core|speech|/v1/audio/speech|qwen-audio-3.0-tts-plus\">qwen-audio-3.0-tts-plus</option><option value=\"Core|speech|/v1/audio/speech|qwen-tts\">qwen-tts</option><option value=\"Core|speech|/v1/audio/speech|qwen-tts-latest\" selected>qwen-tts-latest</option></select></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\">Start</h3><p class=\"mdesc-full\">Model til udtryksfuld oplæsning af tekst til videoer, lydbøger og stemmemateriale. Understøtter styring af talemåden og valg af en færdig stemme eller en stemme skabt ud fra en prøve.</p><dl class=\"card-io\" data-card-io><div><dt>Accepterede input</dt><dd>Tekst</dd></div><div><dt>Resultater</dt><dd>speech</dd></div></dl><details class=\"card-about\"><summary>Om modellen</summary><p class=\"note-s\" data-model-method-boundary>Denne beskrivelse dækker modellens funktioner. Tilgængelige input, output og indstillinger i Ailoot står nedenfor for den valgte metode.</p><div class=\"mabout\" id=\"m-about\"><p>Qwen-Audio-3.0-TTS-Plus omsætter tekst til udtryksfuld tale. Alibaba retter den mod professionel oplæsning af indhold, lydbøger, videoer og materiale med en genkendelig stemmekarakter. Input er tekst, og output er lyd; lyden kan også leveres løbende under syntesen.</p><h4>Talemåde som en del af opgaven</h4><p>Fremførelsen kan styres med instruktioner på naturligt sprog og detaljerede styringsmarkeringer. De fastlægger følelse, tone, karakter, tempo, lydstyrke og talestil. Dermed kan fremførelsen af samme sætning styres fra rolig fortælling til en mere energisk eller følelsesladet fremførelse.</p><p>Udtrykket hænger sammen med den valgte stemme og tekstens indhold. For stabil udtale skal materialets sprog svare til de sprog, stemmen understøtter. Modellen er beregnet til oplæsning af skrevet materiale; analyse af samtalens betydning og transskription af en optagelse hører til andre lydopgaver.</p><h4>Færdig stemme og stemme ud fra en prøve</h4><p>Der er to systemstemmer: en varm kvindestemme og en munter mandestemme. De understøtter kinesisk og engelsk. Derudover findes mere end 500 basisstemmer og mulighed for at gengive en stemme ud fra en taleprøve. Producenten anbefaler systemvarianterne, når stabil lyd er vigtig.</p><p>Stemmer ud fra prøver understøtter kinesisk med regionale udtalevarianter, engelsk, fransk, tysk, japansk, koreansk, russisk, portugisisk, thai, indonesisk, vietnamesisk, italiensk, spansk, malajisk, filippinsk og arabisk. Det er en sproglig mulighed i den pågældende tilstand og gælder ikke automatisk enhver færdig stemme.</p><p>Kravene til prøven vedrører en særskilt måde at skabe en stemme hos producenten på; talesyntesen bruger en allerede forberedt stemme. Den forberedte stemme skal passe til den valgte oplæsningsmodel: en stemme fra en anden model hos producenten giver en syntesefejl. En ren taleprøve på 10–20 sekunder anbefales. Den samlede grænse er 60 sekunder og 10 MB; der kræves mindst fem sekunders sammenhængende tale. WAV med 16-bit-repræsentation, MP3 og M4A understøttes ved mindst 16 kHz. Én eller to kanaler accepteres, men ved to bruges den første.</p><p>Taleprøven skal indeholde én stemme uden samtidigt talende personer, musik eller sang. I producentens krav er korte pauser i prøven begrænset til to sekunder. Det hjælper med at udskille klang og udtaleegenskaber til den efterfølgende syntese. Styring af fremførelsen og gengivelse af en stemme ud fra en prøve beskriver forskellige sider af modellens arbejde og kan bruges til at forberede lyden til samme materiale.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Tilgængelig i Ailoot · input og metoder</h3><details class=\"card-method\" open><summary><b>Ailoot · Oplæsning</b> <code>POST /v1/audio/speech</code></summary><dl class=\"method-capabilities\"><div><dt>Inputtyper</dt><dd><code>text</code></dd></div><div><dt>Outputtyper</dt><dd><code>speech</code></dd></div><div><dt>Outputformat</dt><dd>valgt mp3/wav/pcm</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Felt</th><th>Type</th><th>Krav</th><th>Værdier og grænser</th><th>Standard</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Påkrævet</td><td data-cell-label=\"Værdier og grænser\"><span class=\"card-cell-label\">Værdier og grænser</span><div>qwen-tts-latest</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">input</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Påkrævet</td><td data-cell-label=\"Værdier og grænser\"><span class=\"card-cell-label\">Værdier og grænser</span><div>Minimumslængde: 1</div><div>Maksimal længde: 600</div><div>Enhed: Unicode-tegn</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">voice</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Valgfrit</td><td data-cell-label=\"Værdier og grænser\"><span class=\"card-cell-label\">Værdier og grænser</span><div>Eksempler: longanlingxin, longanlufeng</div><div>Accepteret brugerdefineret mønster: ^qwen-audio-3\\.0-tts-plus-</div><div>Betingelser: Faktiske brugerdefinerede stemme-ID’er med det præcise præfiks qwen-audio-3.0-tts-plus- accepteres.</div></td><td data-cell-label=\"Standard\" data-default=\"known\"><span class=\"card-cell-label\">Standard</span>longanlingxin</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">response_format</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Valgfrit</td><td data-cell-label=\"Værdier og grænser\"><span class=\"card-cell-label\">Værdier og grænser</span><div>mp3, wav, pcm</div></td><td data-cell-label=\"Standard\" data-default=\"known\"><span class=\"card-cell-label\">Standard</span>mp3</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">sample_rate</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=\"Krav\"><span class=\"card-cell-label\">Krav</span>Valgfrit</td><td data-cell-label=\"Værdier og grænser\"><span class=\"card-cell-label\">Værdier og grænser</span><div>16.000, 24.000, 48.000</div><div>Enhed: Hz</div></td><td data-cell-label=\"Standard\" data-default=\"known\"><span class=\"card-cell-label\">Standard</span>24.000</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Kombinationer af inputmaterialer</summary><p class=\"note-s\"><b>text_to_speech</b> · Påkrævet: input</p></details><details class=\"note-s\" data-method-contract><summary>Metodeparametre og livscyklus</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parameter</th><th>Kontrakt</th></tr></thead><tbody><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>material_types</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>text</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=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>null</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>optional_controls</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>null</td></tr></tbody></table></div><p>Livscyklus: <code>synchronous_result_then_owned_library</code></p><p class=\"note-s\"><code>GET /v1/media/tasks/{task_id}</code> · det faktisk returnerede task_id eller posten i mediebiblioteket</p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}/content</code></p><p class=\"note-s\"><code>GET /v1/media/assets</code></p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}</code></p><p class=\"note-s\">Metodernes strukturer og ID’er er præcise; leverandørens muligheder er adskilt fra adgangstilladelse.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Priser</h3><h4>Ailoot-metodetakster</h4><section class=\"meth\" data-route=\"Core\"><header><b><span class=\"alias\">Ailoot</span> Oplæsning</b><code>POST /v1/audio/speech</code></header><dl><div><dt>Input</dt><dd>20,00 US$ <em>pr. 1 million tegn</em></dd></div><div><dt>Output</dt><dd>0,00 US$ <em>pr. anmodning</em></dd></div></dl><p class=\"note-s\">20,00 US$ pr. 1 mio. optalte tegn. Et CJK-ideogram tæller som 2 optalte tegn: 40,00 US$ pr. 1 mio. ideogrammer. Vægt for øvrige Unicode-tegn: 1. Outputlyd: 0,00 US$. </p><details class=\"note-s\"><summary>Præcis betinget optælling fra kataloget</summary><pre><code>{\n  &quot;cjk_ideograph_weight&quot;: 2,\n  &quot;input_usd_per_10000_counted_characters&quot;: 0.2,\n  &quot;other_unicode_character_weight&quot;: 1,\n  &quot;output_audio_usd&quot;: 0,\n  &quot;unit&quot;: &quot;counted_unicode_characters&quot;\n}</code></pre></details></section><p class=\"note-s\">Ailoot reserverer et estimeret beløb før en anmodning. Efter resultatet afregnes det endelige beløb ud fra det målte forbrug. Ved streaming bruges den endelige forbrugsregistrering til afregningen. <a href=\"/docs/da/billing/reserve/\">Sådan fungerer reservation og afregning →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Eksempelanmodninger</h3><h4>Ailoot · Oplæsning</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Kodevarianter\"><button class=\"cg-tab\" id=\"model-code-43-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-43-panel-0\" aria-selected=\"true\" tabindex=\"0\">Taleeksempel</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Kopiér kode\"><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-43-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-43-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_TEXT_FILE:?Set your actual UTF-8 narration script}&quot;\nexport AILOOT_TEXT_FILE\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;: &quot;qwen-tts-latest&quot;, &quot;input&quot;: &quot;&quot;}&#39;)\nf=Path(os.environ[&quot;AILOOT_TEXT_FILE&quot;])\nif not f.is_file():raise SystemExit(&quot;Choose your actual UTF-8 source material&quot;)\ntext=f.read_text(encoding=&quot;utf-8&quot;)\nif not text.strip():raise SystemExit(&quot;Source material must contain text&quot;)\np[&quot;input&quot;]=text\nPath(&quot;request.json&quot;).write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\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 speech.mp3\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Hent og gem resultater</h3><h4>Ailoot · Oplæsning</h4><p class=\"note-s\">valgt mp3/wav/pcm</p><ul class=\"card-result-paths\"><li><code>GET /v1/media/tasks/{task_id}</code></li><li><code>GET /v1/media/assets/{asset_id}/content</code></li><li><code>GET /v1/media/assets</code></li><li><code>GET /v1/media/assets/{asset_id}</code></li></ul><div class=\"card-result-process\" data-all-results><h5>Behold alle færdige resultater</h5><p class=\"note-s\">Gem hvert fuldstændigt returneret svar, hver fil og hver indholdsdel.</p><p class=\"note-s\">Gem hele det binære resultat og alle headere. Hvis der returneres JSON eller flere output, skal du gemme hvert dataelement og hente alle de faktiske signerede asset-URL&#39;er.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Hvis det oprindelige svar skal kontrolleres</h5><p class=\"note-s\">Gem det oprindelige operation_id/X-Client-Request-ID til afstemning uden genindsendelse; der er ingen særskilt rute til polling af lyd.</p></div><details class=\"card-about\" data-output-fields><summary>Svarfelter</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Felt</th><th>Type</th></tr></thead><tbody><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">binary audio</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>bytes</td></tr><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">response headers</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>headers</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Fejl og næste trin</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Svar</th><th>Betingelse</th><th>Næste trin</th></tr></thead><tbody><tr><th data-cell-label=\"Svar\" scope=\"row\"><span class=\"card-cell-label\">Svar</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Betingelse\"><span class=\"card-cell-label\">Betingelse</span>Ugyldige obligatoriske felter, materialerepræsentation eller parameterværdi</td><td data-cell-label=\"Næste trin\"><span class=\"card-cell-label\">Næste trin</span>Ret de angivne felter før en ny oprettelsesanmodning.</td></tr><tr><th data-cell-label=\"Svar\" scope=\"row\"><span class=\"card-cell-label\">Svar</span><code>server_error</code></th><td data-cell-label=\"Betingelse\"><span class=\"card-cell-label\">Betingelse</span>Det returnerede svar angiver, at operationen eller resultatet skal kontrolleres</td><td data-cell-label=\"Næste trin\"><span class=\"card-cell-label\">Næste trin</span>Gem det oprindeligt returnerede operations-/opgave-ID, anmodningens headere og svaret; fortsæt med de understøttede læseanmodninger for den oprindelige operation. Send ikke oprettelsesanmodningen igen.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Aliaser</h3><h4>Modelaliaser</h4><p class=\"note-s\"><span data-model-alias-route=\"Core\"><b>Ailoot</b> <a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-audio-3.0-tts-plus&amp;fmt=speech\"><code>qwen-audio-3.0-tts-plus</code></a>, <a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-tts&amp;fmt=speech\"><code>qwen-tts</code></a>, <a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-tts-latest&amp;fmt=speech\"><code>qwen-tts-latest</code></a></span></p><h4>Aliaser for metodestier</h4><p class=\"note-s\">Brug metodestierne vist ovenfor.</p><h4>Relaterede kalder-ID’er</h4><p class=\"note-s\"><a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-audio-3.0-tts-plus&amp;fmt=speech\"><code>qwen-audio-3.0-tts-plus</code></a>, <a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-tts&amp;fmt=speech\"><code>qwen-tts</code></a>, <a href=\"#m=qwen-audio-3.0-tts-plus&amp;route=Core&amp;caller=qwen-tts-latest&amp;fmt=speech\"><code>qwen-tts-latest</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "qwen-tts-latest",
        "fmt": "speech",
        "http": "POST",
        "path": "/v1/audio/speech",
        "request_model_id": "qwen-tts-latest",
        "route_label": "Core"
      },
      "method_key": "Core|speech|/v1/audio/speech|qwen-tts-latest",
      "ordinal": 2,
      "rawMethod": {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": {
          "cjk_ideograph_weight": 2,
          "input_usd_per_10000_counted_characters": 0.2,
          "other_unicode_character_weight": 1,
          "output_audio_usd": 0,
          "unit": "counted_unicode_characters"
        },
        "contract": {
          "data": {
            "all_results": "Keep the complete binary result and headers. If JSON/multiple outputs are returned, retain every data item and fetch each actual signed asset URL.",
            "errors": [
              {
                "code": null,
                "condition": "Ugyldige obligatoriske felter, materialerepræsentation eller parameterværdi",
                "http_status": 400,
                "recovery": "Ret de angivne felter før en ny oprettelsesanmodning.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Det returnerede svar angiver, at operationen eller resultatet skal kontrolleres",
                "http_status": null,
                "recovery": "Gem det oprindeligt returnerede operations-/opgave-ID, anmodningens headere og svaret; fortsæt med de understøttede læseanmodninger for den oprindelige operation. Send ikke oprettelsesanmodningen igen.",
                "type": "server_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Gem det oprindelige operation_id/X-Client-Request-ID til afstemning uden genindsendelse; der er ingen særskilt rute til polling af lyd."
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_speech",
                "required": [
                  "input"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "actual returned task_id or media library record; operation_id is not task_id",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "text_to_speech"
            ],
            "outputs": {
              "all_results": "Gem hele det binære resultat og alle headere. Hvis der returneres JSON eller flere output, skal du gemme hvert dataelement og hente alle de faktiske signerede asset-URL'er.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "valgt mp3/wav/pcm"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "qwen-tts-latest"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum_length": 600,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "Unicode-tegn"
              },
              {
                "accepted_custom_pattern": "^qwen-audio-3\\.0-tts-plus-",
                "availability": "source_interface",
                "conditions": "Faktiske brugerdefinerede stemme-ID’er med det præcise præfiks qwen-audio-3.0-tts-plus- accepteres.",
                "default": "longanlingxin",
                "default_known": true,
                "enum": [
                  "longanlingxin",
                  "longanlufeng"
                ],
                "enum_exhaustive": false,
                "enum_known": true,
                "name": "voice",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": "mp3",
                "default_known": true,
                "enum": [
                  "mp3",
                  "wav",
                  "pcm"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": 24000,
                "default_known": true,
                "enum": [
                  16000,
                  24000,
                  48000
                ],
                "enum_known": true,
                "name": "sample_rate",
                "required": false,
                "type": "integer",
                "unit": "Hz"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": []
          },
          "hints": [
            "Metodernes strukturer og ID’er er præcise; leverandørens muligheder er adskilt fra adgangstilladelse."
          ],
          "input": {
            "material_types": [
              "text"
            ],
            "optional_controls": null,
            "required": null
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "det faktisk returnerede task_id eller posten i mediebiblioteket",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "operation_modes": [
            "audio_speech"
          ],
          "output": {
            "family": [
              "speech"
            ],
            "format": null,
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": null,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 narration script}\"\nexport AILOOT_TEXT_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"qwen-tts-latest\", \"input\": \"\"}')\nf=Path(os.environ[\"AILOOT_TEXT_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose your actual UTF-8 source material\")\ntext=f.read_text(encoding=\"utf-8\")\nif not text.strip():raise SystemExit(\"Source material must contain text\")\np[\"input\"]=text\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o speech.mp3\n",
            "label": "Synthesize your actual script",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": null,
        "input": [
          "text"
        ],
        "label": "Oplæsning",
        "max_out": null,
        "max_tool_calls": null,
        "out": null,
        "output": [
          "speech"
        ],
        "path": "/v1/audio/speech",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 20,
                "amount_unit": "usd_per_display_unit",
                "key": "audio_input_character",
                "label": "per 1 million characters",
                "side": "in"
              },
              {
                "amount": 0,
                "amount_unit": "usd_per_display_unit",
                "key": "per_request",
                "label": "per request",
                "side": "out"
              }
            ]
          }
        ],
        "request_model_id": "qwen-tts-latest",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "audio_input_character",
        "units": [
          {
            "key": "audio_input_character",
            "label": "per 1 million characters",
            "side": "in",
            "usd": 20
          },
          {
            "key": "per_request",
            "label": "per request",
            "side": "out",
            "usd": 0
          }
        ]
      }
    }
  ],
  "model_id": "qwen-audio-3.0-tts-plus",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "8de14475cddc9074411b21fcda9ae91ca887ebdfc731bf59c2b97841e0afc6d2",
    "input_html_sha256": "92558dd2b888ab8223334fe1399a1b7ef37aa453058f34923453a13f2b7b1b2e",
    "private_audit_sha256": "9faa6d451273a6eedd0ff28b081fd3ecd61b2ae91554a630ade022c7def4f91a",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/da/qwen-audio-3-0-tts-plus/",
    "description": "Model til udtryksfuld oplæsning af tekst til videoer, lydbøger og stemmemateriale. Understøtter styring af talemåden og valg af en færdig stemme eller en stemme skabt ud fra en prøve.",
    "locale": "da",
    "md_url": "https://ailoot.ai/models/da/qwen-audio-3-0-tts-plus/index.md",
    "title": "qwen-audio-3.0-tts-plus — Ailoot",
    "url": "https://ailoot.ai/models/da/qwen-audio-3-0-tts-plus/"
  },
  "rawModel": {
    "about": "Qwen-Audio-3.0-TTS-Plus omsætter tekst til udtryksfuld tale. Alibaba retter den mod professionel oplæsning af indhold, lydbøger, videoer og materiale med en genkendelig stemmekarakter. Input er tekst, og output er lyd; lyden kan også leveres løbende under syntesen.\n\n### Talemåde som en del af opgaven\n\nFremførelsen kan styres med instruktioner på naturligt sprog og detaljerede styringsmarkeringer. De fastlægger følelse, tone, karakter, tempo, lydstyrke og talestil. Dermed kan fremførelsen af samme sætning styres fra rolig fortælling til en mere energisk eller følelsesladet fremførelse.\n\nUdtrykket hænger sammen med den valgte stemme og tekstens indhold. For stabil udtale skal materialets sprog svare til de sprog, stemmen understøtter. Modellen er beregnet til oplæsning af skrevet materiale; analyse af samtalens betydning og transskription af en optagelse hører til andre lydopgaver.\n\n### Færdig stemme og stemme ud fra en prøve\n\nDer er to systemstemmer: en varm kvindestemme og en munter mandestemme. De understøtter kinesisk og engelsk. Derudover findes mere end 500 basisstemmer og mulighed for at gengive en stemme ud fra en taleprøve. Producenten anbefaler systemvarianterne, når stabil lyd er vigtig.\n\nStemmer ud fra prøver understøtter kinesisk med regionale udtalevarianter, engelsk, fransk, tysk, japansk, koreansk, russisk, portugisisk, thai, indonesisk, vietnamesisk, italiensk, spansk, malajisk, filippinsk og arabisk. Det er en sproglig mulighed i den pågældende tilstand og gælder ikke automatisk enhver færdig stemme.\n\nKravene til prøven vedrører en særskilt måde at skabe en stemme hos producenten på; talesyntesen bruger en allerede forberedt stemme. Den forberedte stemme skal passe til den valgte oplæsningsmodel: en stemme fra en anden model hos producenten giver en syntesefejl. En ren taleprøve på 10–20 sekunder anbefales. Den samlede grænse er 60 sekunder og 10 MB; der kræves mindst fem sekunders sammenhængende tale. WAV med 16-bit-repræsentation, MP3 og M4A understøttes ved mindst 16 kHz. Én eller to kanaler accepteres, men ved to bruges den første.\n\nTaleprøven skal indeholde én stemme uden samtidigt talende personer, musik eller sang. I producentens krav er korte pauser i prøven begrænset til to sekunder. Det hjælper med at udskille klang og udtaleegenskaber til den efterfølgende syntese. Styring af fremførelsen og gengivelse af en stemme ud fra en prøve beskriver forskellige sider af modellens arbejde og kan bruges til at forberede lyden til samme materiale.",
    "alias_of": null,
    "aliases": [
      "qwen-tts",
      "qwen-tts-latest"
    ],
    "author": "Alibaba",
    "ctx": null,
    "formats": [
      "speech"
    ],
    "id": "qwen-audio-3.0-tts-plus",
    "input": [
      "text"
    ],
    "kind": "speech",
    "max_out": null,
    "methods": [
      {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": {
          "cjk_ideograph_weight": 2,
          "input_usd_per_10000_counted_characters": 0.2,
          "other_unicode_character_weight": 1,
          "output_audio_usd": 0,
          "unit": "counted_unicode_characters"
        },
        "contract": {
          "data": {
            "all_results": "Keep the complete binary result and headers. If JSON/multiple outputs are returned, retain every data item and fetch each actual signed asset URL.",
            "errors": [
              {
                "code": null,
                "condition": "Ugyldige obligatoriske felter, materialerepræsentation eller parameterværdi",
                "http_status": 400,
                "recovery": "Ret de angivne felter før en ny oprettelsesanmodning.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Det returnerede svar angiver, at operationen eller resultatet skal kontrolleres",
                "http_status": null,
                "recovery": "Gem det oprindeligt returnerede operations-/opgave-ID, anmodningens headere og svaret; fortsæt med de understøttede læseanmodninger for den oprindelige operation. Send ikke oprettelsesanmodningen igen.",
                "type": "server_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Gem det oprindelige operation_id/X-Client-Request-ID til afstemning uden genindsendelse; der er ingen særskilt rute til polling af lyd."
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_speech",
                "required": [
                  "input"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "actual returned task_id or media library record; operation_id is not task_id",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "text_to_speech"
            ],
            "outputs": {
              "all_results": "Gem hele det binære resultat og alle headere. Hvis der returneres JSON eller flere output, skal du gemme hvert dataelement og hente alle de faktiske signerede asset-URL'er.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "valgt mp3/wav/pcm"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "qwen-audio-3.0-tts-plus"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum_length": 600,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "Unicode-tegn"
              },
              {
                "accepted_custom_pattern": "^qwen-audio-3\\.0-tts-plus-",
                "availability": "source_interface",
                "conditions": "Faktiske brugerdefinerede stemme-ID’er med det præcise præfiks qwen-audio-3.0-tts-plus- accepteres.",
                "default": "longanlingxin",
                "default_known": true,
                "enum": [
                  "longanlingxin",
                  "longanlufeng"
                ],
                "enum_exhaustive": false,
                "enum_known": true,
                "name": "voice",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": "mp3",
                "default_known": true,
                "enum": [
                  "mp3",
                  "wav",
                  "pcm"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": 24000,
                "default_known": true,
                "enum": [
                  16000,
                  24000,
                  48000
                ],
                "enum_known": true,
                "name": "sample_rate",
                "required": false,
                "type": "integer",
                "unit": "Hz"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": []
          },
          "hints": [
            "Metodernes strukturer og ID’er er præcise; leverandørens muligheder er adskilt fra adgangstilladelse."
          ],
          "input": {
            "material_types": [
              "text"
            ],
            "optional_controls": null,
            "required": null
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "det faktisk returnerede task_id eller posten i mediebiblioteket",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "operation_modes": [
            "audio_speech"
          ],
          "output": {
            "family": [
              "speech"
            ],
            "format": null,
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": null,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 narration script}\"\nexport AILOOT_TEXT_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"qwen-audio-3.0-tts-plus\", \"input\": \"\"}')\nf=Path(os.environ[\"AILOOT_TEXT_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose your actual UTF-8 source material\")\ntext=f.read_text(encoding=\"utf-8\")\nif not text.strip():raise SystemExit(\"Source material must contain text\")\np[\"input\"]=text\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o speech.mp3\n",
            "label": "Synthesize your actual script",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": null,
        "input": [
          "text"
        ],
        "label": "Oplæsning",
        "max_out": null,
        "max_tool_calls": null,
        "out": null,
        "output": [
          "speech"
        ],
        "path": "/v1/audio/speech",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 20,
                "amount_unit": "usd_per_display_unit",
                "key": "audio_input_character",
                "label": "per 1 million characters",
                "side": "in"
              },
              {
                "amount": 0,
                "amount_unit": "usd_per_display_unit",
                "key": "per_request",
                "label": "per request",
                "side": "out"
              }
            ]
          }
        ],
        "request_model_id": "qwen-audio-3.0-tts-plus",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "audio_input_character",
        "units": [
          {
            "key": "audio_input_character",
            "label": "per 1 million characters",
            "side": "in",
            "usd": 20
          },
          {
            "key": "per_request",
            "label": "per request",
            "side": "out",
            "usd": 0
          }
        ]
      },
      {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": {
          "cjk_ideograph_weight": 2,
          "input_usd_per_10000_counted_characters": 0.2,
          "other_unicode_character_weight": 1,
          "output_audio_usd": 0,
          "unit": "counted_unicode_characters"
        },
        "contract": {
          "data": {
            "all_results": "Keep the complete binary result and headers. If JSON/multiple outputs are returned, retain every data item and fetch each actual signed asset URL.",
            "errors": [
              {
                "code": null,
                "condition": "Ugyldige obligatoriske felter, materialerepræsentation eller parameterværdi",
                "http_status": 400,
                "recovery": "Ret de angivne felter før en ny oprettelsesanmodning.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Det returnerede svar angiver, at operationen eller resultatet skal kontrolleres",
                "http_status": null,
                "recovery": "Gem det oprindeligt returnerede operations-/opgave-ID, anmodningens headere og svaret; fortsæt med de understøttede læseanmodninger for den oprindelige operation. Send ikke oprettelsesanmodningen igen.",
                "type": "server_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Gem det oprindelige operation_id/X-Client-Request-ID til afstemning uden genindsendelse; der er ingen særskilt rute til polling af lyd."
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_speech",
                "required": [
                  "input"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "actual returned task_id or media library record; operation_id is not task_id",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "text_to_speech"
            ],
            "outputs": {
              "all_results": "Gem hele det binære resultat og alle headere. Hvis der returneres JSON eller flere output, skal du gemme hvert dataelement og hente alle de faktiske signerede asset-URL'er.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "valgt mp3/wav/pcm"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "qwen-tts"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum_length": 600,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "Unicode-tegn"
              },
              {
                "accepted_custom_pattern": "^qwen-audio-3\\.0-tts-plus-",
                "availability": "source_interface",
                "conditions": "Faktiske brugerdefinerede stemme-ID’er med det præcise præfiks qwen-audio-3.0-tts-plus- accepteres.",
                "default": "longanlingxin",
                "default_known": true,
                "enum": [
                  "longanlingxin",
                  "longanlufeng"
                ],
                "enum_exhaustive": false,
                "enum_known": true,
                "name": "voice",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": "mp3",
                "default_known": true,
                "enum": [
                  "mp3",
                  "wav",
                  "pcm"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": 24000,
                "default_known": true,
                "enum": [
                  16000,
                  24000,
                  48000
                ],
                "enum_known": true,
                "name": "sample_rate",
                "required": false,
                "type": "integer",
                "unit": "Hz"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": []
          },
          "hints": [
            "Metodernes strukturer og ID’er er præcise; leverandørens muligheder er adskilt fra adgangstilladelse."
          ],
          "input": {
            "material_types": [
              "text"
            ],
            "optional_controls": null,
            "required": null
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "det faktisk returnerede task_id eller posten i mediebiblioteket",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "operation_modes": [
            "audio_speech"
          ],
          "output": {
            "family": [
              "speech"
            ],
            "format": null,
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": null,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 narration script}\"\nexport AILOOT_TEXT_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"qwen-tts\", \"input\": \"\"}')\nf=Path(os.environ[\"AILOOT_TEXT_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose your actual UTF-8 source material\")\ntext=f.read_text(encoding=\"utf-8\")\nif not text.strip():raise SystemExit(\"Source material must contain text\")\np[\"input\"]=text\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o speech.mp3\n",
            "label": "Synthesize your actual script",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": null,
        "input": [
          "text"
        ],
        "label": "Oplæsning",
        "max_out": null,
        "max_tool_calls": null,
        "out": null,
        "output": [
          "speech"
        ],
        "path": "/v1/audio/speech",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 20,
                "amount_unit": "usd_per_display_unit",
                "key": "audio_input_character",
                "label": "per 1 million characters",
                "side": "in"
              },
              {
                "amount": 0,
                "amount_unit": "usd_per_display_unit",
                "key": "per_request",
                "label": "per request",
                "side": "out"
              }
            ]
          }
        ],
        "request_model_id": "qwen-tts",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "audio_input_character",
        "units": [
          {
            "key": "audio_input_character",
            "label": "per 1 million characters",
            "side": "in",
            "usd": 20
          },
          {
            "key": "per_request",
            "label": "per request",
            "side": "out",
            "usd": 0
          }
        ]
      },
      {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": {
          "cjk_ideograph_weight": 2,
          "input_usd_per_10000_counted_characters": 0.2,
          "other_unicode_character_weight": 1,
          "output_audio_usd": 0,
          "unit": "counted_unicode_characters"
        },
        "contract": {
          "data": {
            "all_results": "Keep the complete binary result and headers. If JSON/multiple outputs are returned, retain every data item and fetch each actual signed asset URL.",
            "errors": [
              {
                "code": null,
                "condition": "Ugyldige obligatoriske felter, materialerepræsentation eller parameterværdi",
                "http_status": 400,
                "recovery": "Ret de angivne felter før en ny oprettelsesanmodning.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "Det returnerede svar angiver, at operationen eller resultatet skal kontrolleres",
                "http_status": null,
                "recovery": "Gem det oprindeligt returnerede operations-/opgave-ID, anmodningens headere og svaret; fortsæt med de understøttede læseanmodninger for den oprindelige operation. Send ikke oprettelsesanmodningen igen.",
                "type": "server_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Gem det oprindelige operation_id/X-Client-Request-ID til afstemning uden genindsendelse; der er ingen særskilt rute til polling af lyd."
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_speech",
                "required": [
                  "input"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "actual returned task_id or media library record; operation_id is not task_id",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "text_to_speech"
            ],
            "outputs": {
              "all_results": "Gem hele det binære resultat og alle headere. Hvis der returneres JSON eller flere output, skal du gemme hvert dataelement og hente alle de faktiske signerede asset-URL'er.",
              "family": "audio",
              "fields": [
                {
                  "description": null,
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "description": null,
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "valgt mp3/wav/pcm"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "qwen-tts-latest"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum_length": 600,
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string",
                "unit": "Unicode-tegn"
              },
              {
                "accepted_custom_pattern": "^qwen-audio-3\\.0-tts-plus-",
                "availability": "source_interface",
                "conditions": "Faktiske brugerdefinerede stemme-ID’er med det præcise præfiks qwen-audio-3.0-tts-plus- accepteres.",
                "default": "longanlingxin",
                "default_known": true,
                "enum": [
                  "longanlingxin",
                  "longanlufeng"
                ],
                "enum_exhaustive": false,
                "enum_known": true,
                "name": "voice",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": "mp3",
                "default_known": true,
                "enum": [
                  "mp3",
                  "wav",
                  "pcm"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": 24000,
                "default_known": true,
                "enum": [
                  16000,
                  24000,
                  48000
                ],
                "enum_known": true,
                "name": "sample_rate",
                "required": false,
                "type": "integer",
                "unit": "Hz"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": []
          },
          "hints": [
            "Metodernes strukturer og ID’er er præcise; leverandørens muligheder er adskilt fra adgangstilladelse."
          ],
          "input": {
            "material_types": [
              "text"
            ],
            "optional_controls": null,
            "required": null
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "det faktisk returnerede task_id eller posten i mediebiblioteket",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "operation_modes": [
            "audio_speech"
          ],
          "output": {
            "family": [
              "speech"
            ],
            "format": null,
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": null,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 narration script}\"\nexport AILOOT_TEXT_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"qwen-tts-latest\", \"input\": \"\"}')\nf=Path(os.environ[\"AILOOT_TEXT_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose your actual UTF-8 source material\")\ntext=f.read_text(encoding=\"utf-8\")\nif not text.strip():raise SystemExit(\"Source material must contain text\")\np[\"input\"]=text\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o speech.mp3\n",
            "label": "Synthesize your actual script",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": null,
        "input": [
          "text"
        ],
        "label": "Oplæsning",
        "max_out": null,
        "max_tool_calls": null,
        "out": null,
        "output": [
          "speech"
        ],
        "path": "/v1/audio/speech",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 20,
                "amount_unit": "usd_per_display_unit",
                "key": "audio_input_character",
                "label": "per 1 million characters",
                "side": "in"
              },
              {
                "amount": 0,
                "amount_unit": "usd_per_display_unit",
                "key": "per_request",
                "label": "per request",
                "side": "out"
              }
            ]
          }
        ],
        "request_model_id": "qwen-tts-latest",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "audio_input_character",
        "units": [
          {
            "key": "audio_input_character",
            "label": "per 1 million characters",
            "side": "in",
            "usd": 20
          },
          {
            "key": "per_request",
            "label": "per request",
            "side": "out",
            "usd": 0
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "qwen-audio-3.0-tts-plus",
        "request_model_id": "qwen-audio-3.0-tts-plus",
        "route_label": "Core"
      },
      {
        "canonical_model_id": "qwen-audio-3.0-tts-plus",
        "request_model_id": "qwen-tts",
        "route_label": "Core"
      },
      {
        "canonical_model_id": "qwen-audio-3.0-tts-plus",
        "request_model_id": "qwen-tts-latest",
        "route_label": "Core"
      }
    ],
    "name": "qwen-audio-3.0-tts-plus",
    "price": {
      "in": 20,
      "in_label": "per 1 million characters",
      "out": 0,
      "out_label": "per request",
      "sort_in": null,
      "sort_out": null,
      "varies": false
    },
    "short": "Model til udtryksfuld oplæsning af tekst til videoer, lydbøger og stemmemateriale. Understøtter styring af talemåden og valg af en færdig stemme eller en stemme skabt ud fra en prøve."
  },
  "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
        },
        {
          "contract_json_pointer": "/methods/1/rawMethod/contract",
          "html_json_pointer": "/methods/1/html",
          "method_ordinal": 1
        },
        {
          "contract_json_pointer": "/methods/2/rawMethod/contract",
          "html_json_pointer": "/methods/2/html",
          "method_ordinal": 2
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod",
        "/methods/1/rawMethod",
        "/methods/2/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "Model til udtryksfuld oplæsning af tekst til videoer, lydbøger og stemmemateriale. Understøtter styring af talemåden og valg af en færdig stemme eller en stemme skabt ud fra en prøve.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "99af44aafb4dc68a0d2b3496bd7b47e91bfb39e5101c33214aa0a28867d2ff8f",
    "renderer_sha256": "2bf9f26ea9bfd57ed53d867671d8f05b41a6ea85089f48039e3365dc2b92ec2c"
  },
  "sourceRevision": "b7355cb69d8d92f950f88e5236d3ebf067af9fea67398d20b811fef4fba7a18b"
}
