{
  "aboutHtml": "<p>S1 on Fish Audion edellisen sukupolven tekstistä puheeksi -malli ilmaisulliseen kerrontaan ja yhden puhujan äänitulosteeseen. Se lukee annetun käsikirjoituksen ja palauttaa ääntä valitulla tai viitteellä ehdollistetulla äänellä. Täysi S1-malli on erillinen pienemmästä tislatusta S1-mini-mallista; valmistaja esittelee ne vastaavasti 4 miljardin ja 0.5 miljardin parametrin muunnelmina. Tämä profiili kattaa nimetyn S1-mallin.</p><p>Valmistele kerrontaan sanat, jotka on todella tarkoitus puhua, ja merkitse kohdat, joissa esityksen tulee muuttua. Hyödyllinen selityskäsikirjoitus kertoo pääasian ensin, kehittää yhtä ajatusta kerrallaan ja erottaa luontevaa taukoa tarvitsevat ilmaukset välimerkeillä. Pidä lyhyt ohje sanamuodoltaan selkeänä ilman näyttöä kuultunakin. Säilytä nimien, lyhenteiden ja yksiköiden tarkoitettu lukutapa ja tarkista luvut puhutusta tuloksesta sen sijaan, että olettaisit silmin luettavalla merkkijonolla olevan vain yhden ääntämistavan.</p><p>S1 käyttää sulkeissa olevia tunne- ja esitysvihjeitä, kuten (angry), (sad), (in a hurry) tai (chuckling). Sijoita vihje ennen lausetta tai ilmausta, johon sen tulee vaikuttaa, ja varsinainen puhe sen jälkeen. Esitystapa kuuluu seuraavaan tekstiin, joten mielialan muutoksen tulee olla siinä kohdassa, jossa esityksen on muututtava. Syntaksi eroaa S2:n hakasulkeissa olevista ohjeista; pidä käsikirjoitus valitulle sukupolvelle kirjoitettuna sen sijaan, että olettaisit merkintätapojen olevan vaihdettavissa keskenään.</p><p>Ääni voidaan valita tallennetulla äänitunnisteella tai ehdollistaa viitetallenteella ja sen puhetekstillä. Välitöntä viitetyönkulkua varten yleinen puheopas suosittelee puhdasta 10–30 sekunnin näytettä. Valitse näyte, jonka puhetyyli ja tallennuslaatu sopivat tavoitteeseen, ja varmista tekstin vastaavan näytteen sanoja. Käytä toistuvalle kertojalle samaa ääniviitettä katkelmien välillä, jotta aiheen vaihtuminen ei muutu tahattomasti hahmon vaihtumiseksi.</p><p>S1-julkaisu nimeää tuetuiksi kieliksi muun muassa englannin, kiinan, japanin, saksan, ranskan, espanjan, korean, arabian, venäjän, hollannin, italian, puolan ja portugalin sekä kuvaa kielten sekoittamista käsikirjoituksen sisällä. Anna kohdekielinen sanamuoto sen sijaan, että käsittelisit puhesynteesiä käännösvaiheena. Pidä lainatun nimen tai kielenvaihdon sisältävässä katkelmassa kirjoitusasu ja ympäröivä lausekonteksti selkeinä ja tarkista, miten valittu ääni käsittelee siirtymän.</p><p>S1:n valmistajarajapinta tukee yhtä puhujaa synteesipyyntöä kohden. Vuoropuhelu voidaan valmistella erillisinä segmentteinä omine ääniviitteineen ja koota sitten sovelluksessa; S2-perheen natiivi monipuhujasynteesi on erillinen kyky. Säilytä jokaisen segmentin roolin, äänen ja tekstin yhteys hahmorepliikkejä valmistellessa. Synteesitulos on käsikirjoituksen ääniesitys, kun taas keskustelun ajoitus tai yhdistäminen musiikkiin ja videoon on myöhempi editointivaihe.</p><p>Tulostevaihtoehdot ovat MP3, WAV, raaka PCM ja Opus, joista MP3 on oletus. Dokumentoitu tulos on mono; WAV ja PCM käyttävät 16-bittisiä näytteitä, ja muotokohtaiset näytteenottotaajuusvalinnat eroavat. MP3 tukee 64, 128 ja 192 kbps:n nopeuksia, kun taas Opus käyttää 48 kHz:ä. Nopeutta voi säätää alueella 0.5–2.0, ja mukana ovat äänenvoimakkuuden säätimet. Valitse taustakerrontatuotokseen koodattu tiedosto tai toistoon sopiva virta ja säilytä valittu ääni sekä käsikirjoitus tuloksen yhteydessä.</p><p>Valmistaja käsittelee pitkän tekstin osissa, joiden dokumentoitu pituusalue on 100–300, ja käyttää osakohtaista äänitokenbudjettia taatun kokonaistallenteen keston sijaan. Tekstin normalisointi voi avata englannin- ja kiinankieliset luvut luontevaan lukumuotoon, ja S1:n toistorangaistus voi vähentää toistuvia äänikuvioita. Tulosteen äänekkyyden normalisointi on eri asetus, eikä se vaikuta S1:een. Tarkista ääntäminen, ilmausten rajat, toistuvat äänet ja tarkoitettu tunnemuutos ennen valmiin katkelman kokoamista ja korjaa sitten juuri huomiota vaativa repliikki tai viite.</p>",
  "aboutText": "S1 on Fish Audion edellisen sukupolven tekstistä puheeksi -malli ilmaisulliseen kerrontaan ja yhden puhujan äänitulosteeseen. Se lukee annetun käsikirjoituksen ja palauttaa ääntä valitulla tai viitteellä ehdollistetulla äänellä. Täysi S1-malli on erillinen pienemmästä tislatusta S1-mini-mallista; valmistaja esittelee ne vastaavasti 4 miljardin ja 0.5 miljardin parametrin muunnelmina. Tämä profiili kattaa nimetyn S1-mallin.\n\nValmistele kerrontaan sanat, jotka on todella tarkoitus puhua, ja merkitse kohdat, joissa esityksen tulee muuttua. Hyödyllinen selityskäsikirjoitus kertoo pääasian ensin, kehittää yhtä ajatusta kerrallaan ja erottaa luontevaa taukoa tarvitsevat ilmaukset välimerkeillä. Pidä lyhyt ohje sanamuodoltaan selkeänä ilman näyttöä kuultunakin. Säilytä nimien, lyhenteiden ja yksiköiden tarkoitettu lukutapa ja tarkista luvut puhutusta tuloksesta sen sijaan, että olettaisit silmin luettavalla merkkijonolla olevan vain yhden ääntämistavan.\n\nS1 käyttää sulkeissa olevia tunne- ja esitysvihjeitä, kuten (angry), (sad), (in a hurry) tai (chuckling). Sijoita vihje ennen lausetta tai ilmausta, johon sen tulee vaikuttaa, ja varsinainen puhe sen jälkeen. Esitystapa kuuluu seuraavaan tekstiin, joten mielialan muutoksen tulee olla siinä kohdassa, jossa esityksen on muututtava. Syntaksi eroaa S2:n hakasulkeissa olevista ohjeista; pidä käsikirjoitus valitulle sukupolvelle kirjoitettuna sen sijaan, että olettaisit merkintätapojen olevan vaihdettavissa keskenään.\n\nÄäni voidaan valita tallennetulla äänitunnisteella tai ehdollistaa viitetallenteella ja sen puhetekstillä. Välitöntä viitetyönkulkua varten yleinen puheopas suosittelee puhdasta 10–30 sekunnin näytettä. Valitse näyte, jonka puhetyyli ja tallennuslaatu sopivat tavoitteeseen, ja varmista tekstin vastaavan näytteen sanoja. Käytä toistuvalle kertojalle samaa ääniviitettä katkelmien välillä, jotta aiheen vaihtuminen ei muutu tahattomasti hahmon vaihtumiseksi.\n\nS1-julkaisu nimeää tuetuiksi kieliksi muun muassa englannin, kiinan, japanin, saksan, ranskan, espanjan, korean, arabian, venäjän, hollannin, italian, puolan ja portugalin sekä kuvaa kielten sekoittamista käsikirjoituksen sisällä. Anna kohdekielinen sanamuoto sen sijaan, että käsittelisit puhesynteesiä käännösvaiheena. Pidä lainatun nimen tai kielenvaihdon sisältävässä katkelmassa kirjoitusasu ja ympäröivä lausekonteksti selkeinä ja tarkista, miten valittu ääni käsittelee siirtymän.\n\nS1:n valmistajarajapinta tukee yhtä puhujaa synteesipyyntöä kohden. Vuoropuhelu voidaan valmistella erillisinä segmentteinä omine ääniviitteineen ja koota sitten sovelluksessa; S2-perheen natiivi monipuhujasynteesi on erillinen kyky. Säilytä jokaisen segmentin roolin, äänen ja tekstin yhteys hahmorepliikkejä valmistellessa. Synteesitulos on käsikirjoituksen ääniesitys, kun taas keskustelun ajoitus tai yhdistäminen musiikkiin ja videoon on myöhempi editointivaihe.\n\nTulostevaihtoehdot ovat MP3, WAV, raaka PCM ja Opus, joista MP3 on oletus. Dokumentoitu tulos on mono; WAV ja PCM käyttävät 16-bittisiä näytteitä, ja muotokohtaiset näytteenottotaajuusvalinnat eroavat. MP3 tukee 64, 128 ja 192 kbps:n nopeuksia, kun taas Opus käyttää 48 kHz:ä. Nopeutta voi säätää alueella 0.5–2.0, ja mukana ovat äänenvoimakkuuden säätimet. Valitse taustakerrontatuotokseen koodattu tiedosto tai toistoon sopiva virta ja säilytä valittu ääni sekä käsikirjoitus tuloksen yhteydessä.\n\nValmistaja käsittelee pitkän tekstin osissa, joiden dokumentoitu pituusalue on 100–300, ja käyttää osakohtaista äänitokenbudjettia taatun kokonaistallenteen keston sijaan. Tekstin normalisointi voi avata englannin- ja kiinankieliset luvut luontevaan lukumuotoon, ja S1:n toistorangaistus voi vähentää toistuvia äänikuvioita. Tulosteen äänekkyyden normalisointi on eri asetus, eikä se vaikuta S1:een. Tarkista ääntäminen, ilmausten rajat, toistuvat äänet ja tarkoitettu tunnemuutos ennen valmiin katkelman kokoamista ja korjaa sitten juuri huomiota vaativa repliikki tai viite.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "3e8cafe9559c35f4dbaf180e125542cba98c7660229b9c311b572080fa249be8",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "fi",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">Fish Audio: S1</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Sulje\">×</button></div><div class=\"idline\"><span>Fish Audio /</span><code>fish-audio/s1</code><button type=\"button\" id=\"copy-id\">Kopioi ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Mallikortin osiot\"><button type=\"button\" data-card-jump=\"overview\">Aloitus</button><button type=\"button\" data-card-jump=\"methods\">Syötteet &amp; menetelmät</button><button type=\"button\" data-card-jump=\"pricing\">Hinnoittelu</button><button type=\"button\" data-card-jump=\"examples\">Esimerkit</button><button type=\"button\" data-card-jump=\"results\">Tulokset</button><button type=\"button\" data-card-jump=\"aliases\">Aliakset</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"API-menetelmät\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Ultra|speech|/v1/audio/speech|fish-audio%2Fs1\">Puhesynteesi</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">Aloitus</h3><p class=\"mdesc-full\">Fish Audio S1 muuntaa monikieliset käsikirjoitukset ilmaisulliseksi yhden puhujan ääneksi ääniviitteiden ja sulkeissa olevien tunnevihjeiden avulla. Käytä sitä kerrontaan, lyhyisiin puhuttuihin ohjeisiin tai hahmorepliikkeihin; valmiille äänelle on muoto- ja prosodiasäätimet.</p><dl class=\"card-io\" data-card-io><div><dt>Hyväksytyt syötteet</dt><dd>Teksti</dd></div><div><dt>Tulokset</dt><dd>Ääni</dd></div></dl><details class=\"card-about\"><summary>Tietoa mallista</summary><p class=\"note-s\" data-model-method-boundary>Tämä kuvaus kattaa mallin ominaisuudet. Ailootissa saatavilla olevat syötteet, tulosteet ja asetukset luetellaan alla valitulle menetelmälle.</p><div class=\"mabout\" id=\"m-about\"><p>S1 on Fish Audion edellisen sukupolven tekstistä puheeksi -malli ilmaisulliseen kerrontaan ja yhden puhujan äänitulosteeseen. Se lukee annetun käsikirjoituksen ja palauttaa ääntä valitulla tai viitteellä ehdollistetulla äänellä. Täysi S1-malli on erillinen pienemmästä tislatusta S1-mini-mallista; valmistaja esittelee ne vastaavasti 4 miljardin ja 0.5 miljardin parametrin muunnelmina. Tämä profiili kattaa nimetyn S1-mallin.</p><p>Valmistele kerrontaan sanat, jotka on todella tarkoitus puhua, ja merkitse kohdat, joissa esityksen tulee muuttua. Hyödyllinen selityskäsikirjoitus kertoo pääasian ensin, kehittää yhtä ajatusta kerrallaan ja erottaa luontevaa taukoa tarvitsevat ilmaukset välimerkeillä. Pidä lyhyt ohje sanamuodoltaan selkeänä ilman näyttöä kuultunakin. Säilytä nimien, lyhenteiden ja yksiköiden tarkoitettu lukutapa ja tarkista luvut puhutusta tuloksesta sen sijaan, että olettaisit silmin luettavalla merkkijonolla olevan vain yhden ääntämistavan.</p><p>S1 käyttää sulkeissa olevia tunne- ja esitysvihjeitä, kuten (angry), (sad), (in a hurry) tai (chuckling). Sijoita vihje ennen lausetta tai ilmausta, johon sen tulee vaikuttaa, ja varsinainen puhe sen jälkeen. Esitystapa kuuluu seuraavaan tekstiin, joten mielialan muutoksen tulee olla siinä kohdassa, jossa esityksen on muututtava. Syntaksi eroaa S2:n hakasulkeissa olevista ohjeista; pidä käsikirjoitus valitulle sukupolvelle kirjoitettuna sen sijaan, että olettaisit merkintätapojen olevan vaihdettavissa keskenään.</p><p>Ääni voidaan valita tallennetulla äänitunnisteella tai ehdollistaa viitetallenteella ja sen puhetekstillä. Välitöntä viitetyönkulkua varten yleinen puheopas suosittelee puhdasta 10–30 sekunnin näytettä. Valitse näyte, jonka puhetyyli ja tallennuslaatu sopivat tavoitteeseen, ja varmista tekstin vastaavan näytteen sanoja. Käytä toistuvalle kertojalle samaa ääniviitettä katkelmien välillä, jotta aiheen vaihtuminen ei muutu tahattomasti hahmon vaihtumiseksi.</p><p>S1-julkaisu nimeää tuetuiksi kieliksi muun muassa englannin, kiinan, japanin, saksan, ranskan, espanjan, korean, arabian, venäjän, hollannin, italian, puolan ja portugalin sekä kuvaa kielten sekoittamista käsikirjoituksen sisällä. Anna kohdekielinen sanamuoto sen sijaan, että käsittelisit puhesynteesiä käännösvaiheena. Pidä lainatun nimen tai kielenvaihdon sisältävässä katkelmassa kirjoitusasu ja ympäröivä lausekonteksti selkeinä ja tarkista, miten valittu ääni käsittelee siirtymän.</p><p>S1:n valmistajarajapinta tukee yhtä puhujaa synteesipyyntöä kohden. Vuoropuhelu voidaan valmistella erillisinä segmentteinä omine ääniviitteineen ja koota sitten sovelluksessa; S2-perheen natiivi monipuhujasynteesi on erillinen kyky. Säilytä jokaisen segmentin roolin, äänen ja tekstin yhteys hahmorepliikkejä valmistellessa. Synteesitulos on käsikirjoituksen ääniesitys, kun taas keskustelun ajoitus tai yhdistäminen musiikkiin ja videoon on myöhempi editointivaihe.</p><p>Tulostevaihtoehdot ovat MP3, WAV, raaka PCM ja Opus, joista MP3 on oletus. Dokumentoitu tulos on mono; WAV ja PCM käyttävät 16-bittisiä näytteitä, ja muotokohtaiset näytteenottotaajuusvalinnat eroavat. MP3 tukee 64, 128 ja 192 kbps:n nopeuksia, kun taas Opus käyttää 48 kHz:ä. Nopeutta voi säätää alueella 0.5–2.0, ja mukana ovat äänenvoimakkuuden säätimet. Valitse taustakerrontatuotokseen koodattu tiedosto tai toistoon sopiva virta ja säilytä valittu ääni sekä käsikirjoitus tuloksen yhteydessä.</p><p>Valmistaja käsittelee pitkän tekstin osissa, joiden dokumentoitu pituusalue on 100–300, ja käyttää osakohtaista äänitokenbudjettia taatun kokonaistallenteen keston sijaan. Tekstin normalisointi voi avata englannin- ja kiinankieliset luvut luontevaan lukumuotoon, ja S1:n toistorangaistus voi vähentää toistuvia äänikuvioita. Tulosteen äänekkyyden normalisointi on eri asetus, eikä se vaikuta S1:een. Tarkista ääntäminen, ilmausten rajat, toistuvat äänet ja tarkoitettu tunnemuutos ennen valmiin katkelman kokoamista ja korjaa sitten juuri huomiota vaativa repliikki tai viite.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Saatavilla Ailootissa · syötteet &amp; menetelmät</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Puhesynteesi</b> <code>POST /v1/audio/speech</code></summary><dl class=\"method-capabilities\"><div><dt>Syötetyypit</dt><dd><code>text</code></dd></div><div><dt>Tulostyypit</dt><dd><code>audio</code></dd></div><div><dt>Tulosteen muoto</dt><dd>todellinen ilmoitettu binääriääni</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Kenttä</th><th>Tyyppi</th><th>Vaatimus</th><th>Arvot &amp; rajat</th><th>Oletus</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>string</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Pakollinen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span><div>fish-audio/s1</div></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">input</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>string</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Pakollinen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span><div>Vähimmäispituus: 1</div></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr><tr data-parameter-availability=\"saved_exact_supplier_example\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">voice</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>string</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Pakollinen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span><div>Esimerkit: b347db033a6549378b48d00acb0d06cd</div></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">response_format</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>string</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Valinnainen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span><div>mp3, pcm</div></td><td data-cell-label=\"Oletus\" data-default=\"known\"><span class=\"card-cell-label\">Oletus</span>pcm</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Syöteaineistojen yhdistelmät</summary><p class=\"note-s\"><b>text_to_speech</b> · Pakollinen: actual UTF-8 script, exact supported voice</p></details><details class=\"note-s\" data-method-contract><summary>Menetelmän parametrit ja elinkaari</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parametri</th><th>Sopimus</th></tr></thead><tbody><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>content_type</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>application/json</td></tr><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>required</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>model, input, voice</td></tr><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>material_types</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>text</td></tr><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>voice_ids</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>b347db033a6549378b48d00acb0d06cd</td></tr><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>voice_list_exhaustive</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>false</td></tr><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>response_format</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>mp3, pcm</td></tr><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>default_response_format</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>pcm</td></tr><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>quantity</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>Yhden dekoodatun syötemerkkijonon UTF-8-tavut; ei trimmausta eikä normalisointia</td></tr><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>native_byte_quote_controls</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>Ei-tyhjät ohjeet ja usean puhujan puheenvuoroja sisältävä syöte hylätään tällä täsmällisellä tavumäärään perustuvalla hinta-arviopolulla, kunnes lisättävä laskutettava teksti on määritelty.</td></tr></tbody></table></div><p>Elinkaari: <code>synchronous_result_then_owned_library</code></p><p class=\"note-s\"><code>GET /v1/media/tasks/{task_id}</code> · todellisuudessa palautettu task_id tai mediakirjaston tietue</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\">Käytä täsmällistä mallia ja dokumentoituja syötekenttiä.</p><p class=\"note-s\">Säilytä koko vastaus, jokainen todellinen tulos ja alkuperäiset palautetut tunnisteet.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Hinnoittelu</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Hintatiedot eivät lisää pyyntövalintoja. Tuetut parametrit on lueteltu valitulle menetelmälle.</p><dl data-price-conditions><dt>Nopea tila</dt><dd>Ei määritetty <span class=\"note-s\">Kun nopea tila on valittu</span></dd><dt>Flex-tila</dt><dd>Ei määritetty <span class=\"note-s\">Kun flex-tila on valittu</span></dd><dt>Päättelyn enimmäisteho</dt><dd>Ei määritetty <span class=\"note-s\">Kun päättelyn enimmäistehoon sovelletaan default-oletussäätöä</span></dd></dl></div><div data-declared-tariff-pricing><h4>Ailoot-hinnat</h4><h4>Hinnat asetusten mukaan</h4><p class=\"note-s\">Kohdista kukin veloitus näytettyihin ehtoihin. Käytä yhtä hintaa kutakin vaihtoehtoisten asetusten ryhmää kohden.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Asetukset</th><th>Hinnasto</th><th>Laskutusyksikkö</th><th>Veloitus</th></tr></thead><tbody><tr><th data-cell-label=\"Asetukset\" scope=\"row\"><span class=\"card-cell-label\">Asetukset</span>Tokenien perushinnat</th><td data-cell-label=\"Hinnasto\"><span class=\"card-cell-label\">Hinnasto</span>Perushinta</td><td data-cell-label=\"Laskutusyksikkö\"><span class=\"card-cell-label\">Laskutusyksikkö</span>—</td><td data-cell-label=\"Veloitus\"><span class=\"card-cell-label\">Veloitus</span><div><span>Syöte · Syötetokenit</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenia</span></div><div><span>Tuloste · Tulostokenit</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenia</span></div><div><span>Syöte · Välimuistin luku</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenia</span></div><div><span>Syöte · Välimuistiin kirjoitus</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenia</span></div><div><span>Syöte · Välimuistiin kirjoitus, 1 tunti</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenia</span></div></td></tr><tr><th data-cell-label=\"Asetukset\" scope=\"row\"><span class=\"card-cell-label\">Asetukset</span>Ultra</th><td data-cell-label=\"Hinnasto\"><span class=\"card-cell-label\">Hinnasto</span>—</td><td data-cell-label=\"Laskutusyksikkö\"><span class=\"card-cell-label\">Laskutusyksikkö</span>äänisyötteen utf8-tavua kohden</td><td data-cell-label=\"Veloitus\"><span class=\"card-cell-label\">Veloitus</span><div><span>Syöte · äänisyötteen utf8-tavu</span> <b>$0.00003</b> <span class=\"price-unit\">äänisyötteen utf8-tavua kohden</span></div></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot varaa arvioidun summan ennen pyyntöä. Tuloksen jälkeen lopullinen veloitus toteutetaan mitatun käytön perusteella. Suoratoiston veloituksessa käytetään lopullista käyttötietuetta. <a href=\"/docs/fi/billing/reserve/\">Varauksen ja lopullisen veloituksen toiminta →</a></p><div data-declared-reference-pricing><h4>Viitehinnaston tiedot</h4><p class=\"note-s\">Mallitason viitehinnastot eivät muuta menetelmän valintaa, hinta-arvioita tai veloituksia. Käytössä olevat veloitukset käyttävät valitun Ailoot-menetelmän hintoja.</p><details class=\"card-price-reference\" data-declared-reference-group data-client-selectable=\"false\"><summary>Fish Audio: S1</summary><h4>Hinnat asetusten mukaan</h4><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Asetukset</th><th>Laskutusehdot</th><th>Veloitus</th></tr></thead><tbody><tr><th data-cell-label=\"Asetukset\" scope=\"row\"><span class=\"card-cell-label\">Asetukset</span>Fish Audio: S1 · Oletusasetukset</th><td data-cell-label=\"Laskutusehdot\"><span class=\"card-cell-label\">Laskutusehdot</span>Oletuskokoonpano</td><td data-cell-label=\"Veloitus\"><span class=\"card-cell-label\">Veloitus</span><div><span>Syöte · Syötteen UTF-8-tavut</span> <b>0,00003 $</b> <span class=\"price-unit\">UTF-8-syötetavua kohden</span></div></td></tr></tbody></table></div></details></div></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Esimerkkipyynnöt</h3><h4>Ailoot Ultra · Puhesynteesi</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Koodivaihtoehdot\"><button class=\"cg-tab\" id=\"model-code-1354-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1354-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · natiivi pyyntörunko täsmälleen sellaisenaan ja koko tulos</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Kopioi koodi\"><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-1354-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1354-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\nrequest={&#39;model&#39;: &#39;fish-audio/s1&#39;, &#39;input&#39;: &#39;Hello world&#39;, &#39;voice&#39;: &#39;b347db033a6549378b48d00acb0d06cd&#39;, &#39;response_format&#39;: &#39;mp3&#39;}\nPath(&#39;request.json&#39;).write_text(json.dumps(request,ensure_ascii=False),encoding=&#39;utf-8&#39;)\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 response.bin\n# Keep the complete original response and headers. Read every returned segment, word and usage field.\n# Preserve actual operation/task/asset IDs; continue reads of the original result without resubmitting.\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Vastaanota ja tallenna tulokset</h3><h4>Ailoot Ultra · Puhesynteesi</h4><p class=\"note-s\">todellinen ilmoitettu binääriääni</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>Säilytä kaikki valmistuneet tulokset</h5><p class=\"note-s\">Säilytä jokainen kokonainen palautettu vastaus, tiedosto ja sisällön osa.</p><p class=\"note-s\">Tallenna binäärisisällön kaikki tavut ja kaikki alkuperäiset otsakkeet; säilytä koko JSON, jos se palautetaan. Todelliset operaation ja aineiston tunnisteet säilytetään.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Jos alkuperäinen vastaus on tarkistettava</h5><p class=\"note-s\">Säilytä alkuperäinen operation_id/X-Client-Request-ID ja alkuperäinen vastaus. Lue todellisia käyttäjälle kuuluvia tehtävä- ja aineistotietueita lähettämättä pyyntöä uudelleen; erillistä äänen tilakyselyn URL-osoitetta ei muodosteta.</p></div><details class=\"card-about\" data-output-fields><summary>Vastauksen kentät</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Kenttä</th><th>Tyyppi</th></tr></thead><tbody><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">binary audio</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>bytes</td></tr><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">response headers</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>headers</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Aliakset</h3><h4>Mallin aliakset</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=fish-audio%2Fs1&amp;route=Ultra&amp;caller=fish-audio%2Fs1&amp;fmt=speech\"><code>fish-audio/s1</code></a></span></p><h4>Menetelmäpolkujen aliakset</h4><p class=\"note-s\">Käytä yllä näytettyjä menetelmäpolkuja.</p><h4>Liittyvät kutsujan ID:t</h4><p class=\"note-s\"><a href=\"#m=fish-audio%2Fs1&amp;route=Ultra&amp;caller=fish-audio%2Fs1&amp;fmt=speech\"><code>fish-audio/s1</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "fish-audio/s1",
        "fmt": "speech",
        "http": "POST",
        "path": "/v1/audio/speech",
        "request_model_id": "fish-audio/s1",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|speech|/v1/audio/speech|fish-audio%2Fs1",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Save all complete binary bytes and all original headers; keep full JSON if returned. Actual operation/asset IDs are preserved.",
            "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": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Säilytä alkuperäinen operation_id/X-Client-Request-ID ja alkuperäinen vastaus. Lue todellisia käyttäjälle kuuluvia tehtävä- ja aineistotietueita lähettämättä pyyntöä uudelleen; erillistä äänen tilakyselyn URL-osoitetta ei muodosteta."
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_speech",
                "required": [
                  "actual UTF-8 script",
                  "exact supported voice"
                ]
              }
            ],
            "outputs": {
              "all_results": "Tallenna binäärisisällön kaikki tavut ja kaikki alkuperäiset otsakkeet; säilytä koko JSON, jos se palautetaan. Todelliset operaation ja aineiston tunnisteet säilytetään.",
              "family": "audio",
              "fields": [
                {
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "todellinen ilmoitettu binääriääni"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "enum": [
                  "fish-audio/s1"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "min_length": 1,
                "name": "input",
                "quantity_unit": "decoded input UTF-8 bytes",
                "required": true,
                "type": "string"
              },
              {
                "availability": "saved_exact_supplier_example",
                "enum": [
                  "b347db033a6549378b48d00acb0d06cd"
                ],
                "enum_exhaustive": false,
                "enum_known": true,
                "name": "voice",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": "pcm",
                "default_known": true,
                "enum": [
                  "mp3",
                  "pcm"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              }
            ],
            "request_schema": {
              "properties": {
                "input": {
                  "minLength": 1,
                  "type": "string"
                },
                "model": {
                  "enum": [
                    "fish-audio/s1"
                  ],
                  "type": "string"
                },
                "response_format": {
                  "default": "pcm",
                  "enum": [
                    "mp3",
                    "pcm"
                  ],
                  "type": "string"
                },
                "voice": {
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input",
                "voice"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "input": "Hello world",
                "model": "fish-audio/s1",
                "response_format": "mp3",
                "voice": "b347db033a6549378b48d00acb0d06cd"
              },
              "content_type": "application/json"
            }
          },
          "hints": [
            "Käytä täsmällistä mallia ja dokumentoituja syötekenttiä.",
            "Säilytä koko vastaus, jokainen todellinen tulos ja alkuperäiset palautetut tunnisteet."
          ],
          "input": {
            "content_type": "application/json",
            "default_response_format": "pcm",
            "material_types": [
              "text"
            ],
            "native_byte_quote_controls": "Ei-tyhjät ohjeet ja usean puhujan puheenvuoroja sisältävä syöte hylätään tällä täsmällisellä tavumäärään perustuvalla hinta-arviopolulla, kunnes lisättävä laskutettava teksti on määritelty.",
            "quantity": "Yhden dekoodatun syötemerkkijonon UTF-8-tavut; ei trimmausta eikä normalisointia",
            "required": [
              "model",
              "input",
              "voice"
            ],
            "response_format": [
              "mp3",
              "pcm"
            ],
            "voice_ids": [
              "b347db033a6549378b48d00acb0d06cd"
            ],
            "voice_list_exhaustive": false
          },
          "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": "todellisuudessa palautettu task_id tai mediakirjaston tietue",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID and original response. Read actual owned task/asset records without resubmitting; no dedicated audio poll URL is constructed."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_speech"
          ],
          "output": {
            "all_results": true,
            "family": "audio",
            "format": "actual MP3 or PCM bytes and MIME",
            "response": "complete raw audio bytes plus response headers"
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_basis": "actual physical units",
              "quoted_unit": "per audio input utf8 byte"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.00003",
                "amount_unit": "usd_per_audio_input_utf8_byte",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_utf8_byte",
                "label": "audio input utf8 byte",
                "native_amount_usd_per_unit": "0.00003",
                "native_quantity": 1,
                "public_unit_label": "per audio input utf8 byte",
                "quantity": "1",
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_utf8_byte"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nrequest={'model': 'fish-audio/s1', 'input': 'Hello world', 'voice': 'b347db033a6549378b48d00acb0d06cd', 'response_format': 'mp3'}\nPath('request.json').write_text(json.dumps(request,ensure_ascii=False),encoding='utf-8')\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 response.bin\n# Keep the complete original response and headers. Read every returned segment, word and usage field.\n# Preserve actual operation/task/asset IDs; continue reads of the original result without resubmitting.\n",
            "label": "curl · exact native body and complete result",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "hints": [
          "Use the exact model and documented input fields.",
          "Keep the complete response, every actual output and original returned IDs."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "Озвучка текста",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "audio"
        ],
        "path": "/v1/audio/speech",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "per_request",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null,
          "unit_prices": {
            "audio_input_utf8_byte": 3e-05
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_basis": "actual physical units",
              "quoted_unit": "per audio input utf8 byte"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.00003",
                "amount_unit": "usd_per_audio_input_utf8_byte",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_utf8_byte",
                "label": "audio input utf8 byte",
                "native_amount_usd_per_unit": "0.00003",
                "native_quantity": 1,
                "public_unit_label": "per audio input utf8 byte",
                "quantity": "1",
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_utf8_byte"
              }
            ]
          }
        ],
        "request_model_id": "fish-audio/s1",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}",
          "GET /v1/media/assets/{asset_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.00003",
            "amount_unit": "usd_per_audio_input_utf8_byte",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_utf8_byte",
            "label": "audio input utf8 byte",
            "native_amount_usd_per_unit": "0.00003",
            "native_quantity": 1,
            "public_unit_label": "per audio input utf8 byte",
            "quantity": "1",
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "audio_input_utf8_byte"
          }
        ]
      }
    }
  ],
  "model_id": "fish-audio/s1",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "b2d6fc9196086a5e91fece95ae2993982957124602e684b2b84ad3a48159a46b",
    "input_html_sha256": "689ca798f53e5df5ee9962e65c0a1c6b5b28d109fda243326800afdea26ad919",
    "private_audit_sha256": "45a7d67ea2c1540d5a9acc1333eda7d8b4ed9975cc28c605c56a5ac9db87bdef",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/fi/fish-audio-s1/",
    "description": "Fish Audio S1 muuntaa monikieliset käsikirjoitukset ilmaisulliseksi yhden puhujan ääneksi ääniviitteiden ja sulkeissa olevien tunnevihjeiden avulla. Käytä sitä kerrontaan, lyhyisiin puhuttuihin ohjeisiin tai hahmorepliikkeihin; valmiille äänelle on muoto- ja prosodiasäätimet.",
    "locale": "fi",
    "md_url": "https://ailoot.ai/models/fi/fish-audio-s1/index.md",
    "title": "Fish Audio: S1 — Ailoot",
    "url": "https://ailoot.ai/models/fi/fish-audio-s1/"
  },
  "rawModel": {
    "about": "S1 on Fish Audion edellisen sukupolven tekstistä puheeksi -malli ilmaisulliseen kerrontaan ja yhden puhujan äänitulosteeseen. Se lukee annetun käsikirjoituksen ja palauttaa ääntä valitulla tai viitteellä ehdollistetulla äänellä. Täysi S1-malli on erillinen pienemmästä tislatusta S1-mini-mallista; valmistaja esittelee ne vastaavasti 4 miljardin ja 0.5 miljardin parametrin muunnelmina. Tämä profiili kattaa nimetyn S1-mallin.\n\nValmistele kerrontaan sanat, jotka on todella tarkoitus puhua, ja merkitse kohdat, joissa esityksen tulee muuttua. Hyödyllinen selityskäsikirjoitus kertoo pääasian ensin, kehittää yhtä ajatusta kerrallaan ja erottaa luontevaa taukoa tarvitsevat ilmaukset välimerkeillä. Pidä lyhyt ohje sanamuodoltaan selkeänä ilman näyttöä kuultunakin. Säilytä nimien, lyhenteiden ja yksiköiden tarkoitettu lukutapa ja tarkista luvut puhutusta tuloksesta sen sijaan, että olettaisit silmin luettavalla merkkijonolla olevan vain yhden ääntämistavan.\n\nS1 käyttää sulkeissa olevia tunne- ja esitysvihjeitä, kuten (angry), (sad), (in a hurry) tai (chuckling). Sijoita vihje ennen lausetta tai ilmausta, johon sen tulee vaikuttaa, ja varsinainen puhe sen jälkeen. Esitystapa kuuluu seuraavaan tekstiin, joten mielialan muutoksen tulee olla siinä kohdassa, jossa esityksen on muututtava. Syntaksi eroaa S2:n hakasulkeissa olevista ohjeista; pidä käsikirjoitus valitulle sukupolvelle kirjoitettuna sen sijaan, että olettaisit merkintätapojen olevan vaihdettavissa keskenään.\n\nÄäni voidaan valita tallennetulla äänitunnisteella tai ehdollistaa viitetallenteella ja sen puhetekstillä. Välitöntä viitetyönkulkua varten yleinen puheopas suosittelee puhdasta 10–30 sekunnin näytettä. Valitse näyte, jonka puhetyyli ja tallennuslaatu sopivat tavoitteeseen, ja varmista tekstin vastaavan näytteen sanoja. Käytä toistuvalle kertojalle samaa ääniviitettä katkelmien välillä, jotta aiheen vaihtuminen ei muutu tahattomasti hahmon vaihtumiseksi.\n\nS1-julkaisu nimeää tuetuiksi kieliksi muun muassa englannin, kiinan, japanin, saksan, ranskan, espanjan, korean, arabian, venäjän, hollannin, italian, puolan ja portugalin sekä kuvaa kielten sekoittamista käsikirjoituksen sisällä. Anna kohdekielinen sanamuoto sen sijaan, että käsittelisit puhesynteesiä käännösvaiheena. Pidä lainatun nimen tai kielenvaihdon sisältävässä katkelmassa kirjoitusasu ja ympäröivä lausekonteksti selkeinä ja tarkista, miten valittu ääni käsittelee siirtymän.\n\nS1:n valmistajarajapinta tukee yhtä puhujaa synteesipyyntöä kohden. Vuoropuhelu voidaan valmistella erillisinä segmentteinä omine ääniviitteineen ja koota sitten sovelluksessa; S2-perheen natiivi monipuhujasynteesi on erillinen kyky. Säilytä jokaisen segmentin roolin, äänen ja tekstin yhteys hahmorepliikkejä valmistellessa. Synteesitulos on käsikirjoituksen ääniesitys, kun taas keskustelun ajoitus tai yhdistäminen musiikkiin ja videoon on myöhempi editointivaihe.\n\nTulostevaihtoehdot ovat MP3, WAV, raaka PCM ja Opus, joista MP3 on oletus. Dokumentoitu tulos on mono; WAV ja PCM käyttävät 16-bittisiä näytteitä, ja muotokohtaiset näytteenottotaajuusvalinnat eroavat. MP3 tukee 64, 128 ja 192 kbps:n nopeuksia, kun taas Opus käyttää 48 kHz:ä. Nopeutta voi säätää alueella 0.5–2.0, ja mukana ovat äänenvoimakkuuden säätimet. Valitse taustakerrontatuotokseen koodattu tiedosto tai toistoon sopiva virta ja säilytä valittu ääni sekä käsikirjoitus tuloksen yhteydessä.\n\nValmistaja käsittelee pitkän tekstin osissa, joiden dokumentoitu pituusalue on 100–300, ja käyttää osakohtaista äänitokenbudjettia taatun kokonaistallenteen keston sijaan. Tekstin normalisointi voi avata englannin- ja kiinankieliset luvut luontevaan lukumuotoon, ja S1:n toistorangaistus voi vähentää toistuvia äänikuvioita. Tulosteen äänekkyyden normalisointi on eri asetus, eikä se vaikuta S1:een. Tarkista ääntäminen, ilmausten rajat, toistuvat äänet ja tarkoitettu tunnemuutos ennen valmiin katkelman kokoamista ja korjaa sitten juuri huomiota vaativa repliikki tai viite.",
    "alias_of": null,
    "aliases": [],
    "author": "Fish Audio",
    "available": null,
    "canonical_model": "fish-audio/s1",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text"
      ],
      "manufacturer_output": [
        "speech"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.00003",
            "amount_unit": "usd_per_audio_input_utf8_byte",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_utf8_byte",
            "label": "audio input utf8 byte",
            "native_amount_usd_per_unit": "0.00003",
            "native_quantity": 1,
            "public_unit_label": "per audio input utf8 byte",
            "quantity": "1",
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "audio_input_utf8_byte"
          }
        ],
        "summary": "Konfiguraation täydet hintatiedot lisätiedoissa."
      }
    ],
    "ctx": null,
    "declared_tariff_references": [
      {
        "client_selectable": false,
        "key": "ca1892881aa6bc927745",
        "label": "Fish Audio: S1",
        "profiles": [
          {
            "basis": "",
            "dimensions": {
              "conditions": "Oletuskokoonpano"
            },
            "label": "Fish Audio: S1 · Oletusasetukset",
            "units": [
              {
                "amount": "0.000030",
                "amount_unit": "usd_per_exact_physical_unit",
                "billing_input": false,
                "key": "e7b3eb5a7636763feb8a9472",
                "label": "Input UTF-8 bytes",
                "public_unit_label": "per input UTF-8 byte",
                "quantity": "1",
                "rate_role": "declared_tariff_rate",
                "side": "in",
                "unit": "input_utf8_byte"
              }
            ]
          }
        ]
      }
    ],
    "entity_type": "model",
    "formats": [
      "speech"
    ],
    "id": "fish-audio/s1",
    "input": [
      "text"
    ],
    "kind": "speech",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Save all complete binary bytes and all original headers; keep full JSON if returned. Actual operation/asset IDs are preserved.",
            "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": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Säilytä alkuperäinen operation_id/X-Client-Request-ID ja alkuperäinen vastaus. Lue todellisia käyttäjälle kuuluvia tehtävä- ja aineistotietueita lähettämättä pyyntöä uudelleen; erillistä äänen tilakyselyn URL-osoitetta ei muodosteta."
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_speech",
                "required": [
                  "actual UTF-8 script",
                  "exact supported voice"
                ]
              }
            ],
            "outputs": {
              "all_results": "Tallenna binäärisisällön kaikki tavut ja kaikki alkuperäiset otsakkeet; säilytä koko JSON, jos se palautetaan. Todelliset operaation ja aineiston tunnisteet säilytetään.",
              "family": "audio",
              "fields": [
                {
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "todellinen ilmoitettu binääriääni"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "enum": [
                  "fish-audio/s1"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "min_length": 1,
                "name": "input",
                "quantity_unit": "decoded input UTF-8 bytes",
                "required": true,
                "type": "string"
              },
              {
                "availability": "saved_exact_supplier_example",
                "enum": [
                  "b347db033a6549378b48d00acb0d06cd"
                ],
                "enum_exhaustive": false,
                "enum_known": true,
                "name": "voice",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": "pcm",
                "default_known": true,
                "enum": [
                  "mp3",
                  "pcm"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              }
            ],
            "request_schema": {
              "properties": {
                "input": {
                  "minLength": 1,
                  "type": "string"
                },
                "model": {
                  "enum": [
                    "fish-audio/s1"
                  ],
                  "type": "string"
                },
                "response_format": {
                  "default": "pcm",
                  "enum": [
                    "mp3",
                    "pcm"
                  ],
                  "type": "string"
                },
                "voice": {
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input",
                "voice"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "input": "Hello world",
                "model": "fish-audio/s1",
                "response_format": "mp3",
                "voice": "b347db033a6549378b48d00acb0d06cd"
              },
              "content_type": "application/json"
            }
          },
          "hints": [
            "Käytä täsmällistä mallia ja dokumentoituja syötekenttiä.",
            "Säilytä koko vastaus, jokainen todellinen tulos ja alkuperäiset palautetut tunnisteet."
          ],
          "input": {
            "content_type": "application/json",
            "default_response_format": "pcm",
            "material_types": [
              "text"
            ],
            "native_byte_quote_controls": "Ei-tyhjät ohjeet ja usean puhujan puheenvuoroja sisältävä syöte hylätään tällä täsmällisellä tavumäärään perustuvalla hinta-arviopolulla, kunnes lisättävä laskutettava teksti on määritelty.",
            "quantity": "Yhden dekoodatun syötemerkkijonon UTF-8-tavut; ei trimmausta eikä normalisointia",
            "required": [
              "model",
              "input",
              "voice"
            ],
            "response_format": [
              "mp3",
              "pcm"
            ],
            "voice_ids": [
              "b347db033a6549378b48d00acb0d06cd"
            ],
            "voice_list_exhaustive": false
          },
          "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": "todellisuudessa palautettu task_id tai mediakirjaston tietue",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID and original response. Read actual owned task/asset records without resubmitting; no dedicated audio poll URL is constructed."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_speech"
          ],
          "output": {
            "all_results": true,
            "family": "audio",
            "format": "actual MP3 or PCM bytes and MIME",
            "response": "complete raw audio bytes plus response headers"
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_basis": "actual physical units",
              "quoted_unit": "per audio input utf8 byte"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.00003",
                "amount_unit": "usd_per_audio_input_utf8_byte",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_utf8_byte",
                "label": "audio input utf8 byte",
                "native_amount_usd_per_unit": "0.00003",
                "native_quantity": 1,
                "public_unit_label": "per audio input utf8 byte",
                "quantity": "1",
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_utf8_byte"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nrequest={'model': 'fish-audio/s1', 'input': 'Hello world', 'voice': 'b347db033a6549378b48d00acb0d06cd', 'response_format': 'mp3'}\nPath('request.json').write_text(json.dumps(request,ensure_ascii=False),encoding='utf-8')\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 response.bin\n# Keep the complete original response and headers. Read every returned segment, word and usage field.\n# Preserve actual operation/task/asset IDs; continue reads of the original result without resubmitting.\n",
            "label": "curl · exact native body and complete result",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "hints": [
          "Use the exact model and documented input fields.",
          "Keep the complete response, every actual output and original returned IDs."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "Озвучка текста",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "audio"
        ],
        "path": "/v1/audio/speech",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "per_request",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null,
          "unit_prices": {
            "audio_input_utf8_byte": 3e-05
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_basis": "actual physical units",
              "quoted_unit": "per audio input utf8 byte"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.00003",
                "amount_unit": "usd_per_audio_input_utf8_byte",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_utf8_byte",
                "label": "audio input utf8 byte",
                "native_amount_usd_per_unit": "0.00003",
                "native_quantity": 1,
                "public_unit_label": "per audio input utf8 byte",
                "quantity": "1",
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_utf8_byte"
              }
            ]
          }
        ],
        "request_model_id": "fish-audio/s1",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}",
          "GET /v1/media/assets/{asset_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.00003",
            "amount_unit": "usd_per_audio_input_utf8_byte",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_utf8_byte",
            "label": "audio input utf8 byte",
            "native_amount_usd_per_unit": "0.00003",
            "native_quantity": 1,
            "public_unit_label": "per audio input utf8 byte",
            "quantity": "1",
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "audio_input_utf8_byte"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "fish-audio/s1",
        "request_model_id": "fish-audio/s1",
        "route_label": "Ultra"
      }
    ],
    "name": "Fish Audio: S1",
    "price": {
      "in": null,
      "in_label": null,
      "out": null,
      "out_label": null,
      "sort_in": null,
      "sort_out": null,
      "varies": true
    },
    "pricing_profiles": [
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "not_character_or_token_count": true,
          "quoted_unit": "1000000_UTF8_bytes",
          "retirement_date": "2026-12-31"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.000030",
            "amount_unit": "usd_per_input_utf8_byte",
            "conditions": {
              "not_character_or_token_count": true,
              "quoted_unit": "1000000_UTF8_bytes",
              "retirement_date": "2026-12-31"
            },
            "key": "base",
            "label": "base",
            "profile_index": 0,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_utf8_byte"
          }
        ]
      }
    ],
    "public_id": "fish-audio/s1",
    "short": "Fish Audio S1 muuntaa monikieliset käsikirjoitukset ilmaisulliseksi yhden puhujan ääneksi ääniviitteiden ja sulkeissa olevien tunnevihjeiden avulla. Käytä sitä kerrontaan, lyhyisiin puhuttuihin ohjeisiin tai hahmorepliikkeihin; valmiille äänelle on muoto- ja prosodiasäätimet."
  },
  "renderer_schema": {
    "method_order": "Original DTO methods order; every exact route/format/path/caller survives.",
    "prices": "Original public DTO fields and original native display HTML; no flattened or normalized offers."
  },
  "representation": "exact-public-dto-and-native-renderer-html",
  "representationNotes": {
    "current_reference": {
      "about_json_pointer": "/aboutHtml",
      "methods": [
        {
          "contract_json_pointer": "/methods/0/rawMethod/contract",
          "html_json_pointer": "/methods/0/html",
          "method_ordinal": 0
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "Fish Audio S1 muuntaa monikieliset käsikirjoitukset ilmaisulliseksi yhden puhujan ääneksi ääniviitteiden ja sulkeissa olevien tunnevihjeiden avulla. Käytä sitä kerrontaan, lyhyisiin puhuttuihin ohjeisiin tai hahmorepliikkeihin; valmiille äänelle on muoto- ja prosodiasäätimet.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "6cbc8ae8c62ef120205675c245f85eefff113f3546c2c5d14ac7967f52f16a0d",
    "renderer_sha256": "303a59603e2bc29ba8fda690e95fd32cec68de223d92e26054a88babff801dd7"
  },
  "sourceRevision": "263833df520ae38c1b53415dea2cfeea43b19697ceef3eca09e86f7c2ca8cb66"
}
