{
  "aboutHtml": "<p>Google Gemini 3.8 Flash TTS on Googlen 3.8-sarjan luovaan ääni-ilmaisuun tarkoitettu tekstistä puheeksi -malli. Se painottaa akustista toistotarkkuutta, tunnesävyjen kirjoa, alueellisia aksentteja ja hahmon äänen yhtenäisyyttä pitkissä vuoropuheluissa. Google nostaa esiin äänikirjat, studiokerronnan, ääntämisen kannalta vaativan sisällön ja runsaasti ääninäyttelijäntyötä sisältävät kohtaukset. Tuloksena syntyy valmistellusta tekstikäsikirjoituksesta tuotettua puheääntä, joka soveltuu kertojan esityksen arviointiin tai käsikirjoitetun keskustelun sovittamiseen muiden tuotantoelementtien yhteyteen.</p><p>Aloita täsmälleen niistä sanoista, jotka kuulijan on tarkoitus kuulla. 3.8-versiossa puheteksti käsitellään sanatarkasti, kun taas puhujan tiedot ja jatkuvaa esitystapaa koskevat ohjeet kuuluvat erillisiin puheen metatietoihin. Määritä kunkin puhevuoron puhuja selkeästi ja anna tarvittaessa lyhyt tyyliohje, kuten hillitty huolestuneisuus tai iloinen uteliaisuus. Jaa repliikki erillisiksi puhevuoroiksi, jos tunne tai puhetahti muuttuu huomattavasti. Näin ohjeistusta on helpompi tarkistaa: puheteksti sisältää vuoropuhelun, ja siihen liitetty ohje kertoo, miten kyseinen osuus tulee esittää. Puhetekstiin tavallisena tekstinä kirjoitetut ohjeet saatetaan lukea ääneen.</p><p>Googlen 3.8-äänijärjestelmä sisältää valmiita ääniä, laajennetun äänikirjaston, suunniteltuja äänipersoonia ja jäljennettyjä ääni-identiteettejä. Valitse ensin äänen pohjana oleva persoona ja tee vasta sitten tilapäiset muutokset esitystapaan. Pysyvä alueellinen aksentti tai hahmon identiteetti kuuluu valittuun ääneen; style-kenttä ohjaa kulloistakin esitystapaa. Valmistaja suosittelee käyttämään samaa ääntä uudelleen lyhyiden ohjeiden kanssa sen sijaan, että toistaisit pitkiä Audio Profile -lohkoja tai Director’s Notes -lohkoja. Dokumentoidussa yhden pyynnön vuoropuhelukokoonpanossa yhdistetään enintään kaksi valmista puhujanääntä. Kun monen hahmon keskustelu kootaan suunnitelluista tai jäljennetyistä hahmoäänistä, opas neuvoo tuottamaan puhevuorot yksitellen.</p><p>Merkitse puhujan lyhyt äännähdys tai tauko asianmukaiseen kohtaan kulmasulkeisiin kirjoitetulla tunnisteella. Alkuperäinen käsikirjoitusesimerkki on ”Luulin, että olit lähtenyt. &lt;short pause&gt; &lt;sigh&gt; Pidin valon päällä.” Liitä hillittyä esitystapaa koskeva ohje koko puhevuoroon sen sijaan, että kirjoittaisit sen puhuttavien sanojen joukkoon. Välimerkit ja isojen kirjainten käyttö voivat auttaa rytmittämään epäröintiä tai painottamaan sanaa. Google dokumentoi myös pystyviivoilla erotellut kuulijan reaktiot myötäilyä ja päällekkäistä vuoropuhelua varten ja nimeää Flash TTS:n suositelluksi 3.8-versioksi tilanteisiin, joissa päällekkäistä puhetta on runsaasti. Pidä tällaiset reaktiot niin lyhyinä, että kuulija pystyy edelleen ymmärtämään päärepliikin.</p><p>Valmistaja ilmoittaa Flash TTS:n tukevan 130 kieltä ja painottaa alueellisten murteiden ja vähemmistömurteiden kattavuutta. Alueellista puhetapaa koskeva esitysohje on hyödyllinen paikallistetun äänikirjan hahmon ääntä tuotettaessa tai kerronnassa, jonka aksentti on yleisölle tärkeä. Valmistele käsikirjoitus sen lopullisella kielellä, käytä toistuvista nimistä johdonmukaisia kirjoitusasuja ja valitse lyhenteille ja luvuille harkittu lukutapa. Aloita toimituksellinen kuuntelutarkistus katkelmista, joissa esiintyy vaikeita nimiä, murteen vaihtumista tai tunnetilan muutoksia. Arvioi haluttu aksentti ja puhetahti tuotetusta puheesta sen sijaan, että olettaisit ne pelkän kielimerkinnän perusteella.</p><p>Googlen 3.8-version tuloksia käsittelevä opas erottaa kokonaiset tiedostot suoratoistoäänestä. Loppuun käsitellyn pyynnön oletustulos on RIFF-otsakkeellinen WAV-tiedosto: 24 kHz, mono, etumerkillinen 16-bittinen PCM little-endian-tavujärjestyksellä. Suoratoiston oletustulos on otsakkeeton lineaarinen raaka-PCM samoilla näyteominaisuuksilla. Lineaarinen raaka-PCM, mu-law ja A-law ovat myös dokumentoituja koodausvaihtoehtoja. Käytä todellisia koodaustietoja, kun valmistelet toistoa tai tuot tuloksen äänenkäsittelyohjelmaan. Jos vuoropuhelu koostuu erillisistä tiedostoista, pidä niiden muodot yhtenäisinä ja tarkista liitoskohdat äänenvoimakkuuden, puhetahdin tai tilan taustaäänen äkillisten muutosten varalta.</p><p>Googlen mallikohtainen sivu ilmoittaa Gemini API:n rajoiksi 8 192 syötetokenia ja 16 384 tulostokenia. Nämä ovat tokenrajoja, eivätkä ne määritä äänikirjalle kiinteää kestoa tai puheelle tarkkaa sekuntimäärää. Jaa pitkät käsikirjoitukset sisällöllisesti mielekkäistä kohdista ja säilytä valittu ääni-identiteetti osasta toiseen. Luvun mittaisessa tuotannossa kuuntele äänen yhtenäisyyttä kappaleiden ja kohtausten vaihtumiskohdissa sekä tarkista kunkin osan sanatarkkuus. Hyvä käytännön tarkistustapa on kirjata repliikit, joiden ääntämistä tai esitystapaa pitää korjata, sen sijaan, että kirjoittaisit koko äänen ohjeistuksen uudelleen jokaisen oton jälkeen.</p><p>Flash TTS:n ja Flash-Lite TTS:n valmistelu noudattaa samaa 3.8-version rakennetta, joten version voi valita työn vaatimusten mukaan. Flash TTS painottaa näyttelijäntyötä, monimutkaista vuoropuhelua, vaativaa ääntämistä ja laajempaa murteiden kattavuutta; Flash-Lite painottaa tavanomaisen puhesisällön tuotantonopeutta. Ilmaisua ohjaavat asetukset koskevat ihmispuhetta ja puhujan tuottamia äänitapahtumia. Taustatehosteet, musiikki ja valmis tuotantomiksaus voidaan suunnitella erillisiksi aineistoiksi. Käsikirjoittaminen, kääntäminen ja tallennetun puheen tunnistaminen säilyvät erillisinä työvaiheina tämän tekstistä ääneksi -mallin käytön yhteydessä.</p>",
  "aboutText": "Google Gemini 3.8 Flash TTS on Googlen 3.8-sarjan luovaan ääni-ilmaisuun tarkoitettu tekstistä puheeksi -malli. Se painottaa akustista toistotarkkuutta, tunnesävyjen kirjoa, alueellisia aksentteja ja hahmon äänen yhtenäisyyttä pitkissä vuoropuheluissa. Google nostaa esiin äänikirjat, studiokerronnan, ääntämisen kannalta vaativan sisällön ja runsaasti ääninäyttelijäntyötä sisältävät kohtaukset. Tuloksena syntyy valmistellusta tekstikäsikirjoituksesta tuotettua puheääntä, joka soveltuu kertojan esityksen arviointiin tai käsikirjoitetun keskustelun sovittamiseen muiden tuotantoelementtien yhteyteen.\n\nAloita täsmälleen niistä sanoista, jotka kuulijan on tarkoitus kuulla. 3.8-versiossa puheteksti käsitellään sanatarkasti, kun taas puhujan tiedot ja jatkuvaa esitystapaa koskevat ohjeet kuuluvat erillisiin puheen metatietoihin. Määritä kunkin puhevuoron puhuja selkeästi ja anna tarvittaessa lyhyt tyyliohje, kuten hillitty huolestuneisuus tai iloinen uteliaisuus. Jaa repliikki erillisiksi puhevuoroiksi, jos tunne tai puhetahti muuttuu huomattavasti. Näin ohjeistusta on helpompi tarkistaa: puheteksti sisältää vuoropuhelun, ja siihen liitetty ohje kertoo, miten kyseinen osuus tulee esittää. Puhetekstiin tavallisena tekstinä kirjoitetut ohjeet saatetaan lukea ääneen.\n\nGooglen 3.8-äänijärjestelmä sisältää valmiita ääniä, laajennetun äänikirjaston, suunniteltuja äänipersoonia ja jäljennettyjä ääni-identiteettejä. Valitse ensin äänen pohjana oleva persoona ja tee vasta sitten tilapäiset muutokset esitystapaan. Pysyvä alueellinen aksentti tai hahmon identiteetti kuuluu valittuun ääneen; style-kenttä ohjaa kulloistakin esitystapaa. Valmistaja suosittelee käyttämään samaa ääntä uudelleen lyhyiden ohjeiden kanssa sen sijaan, että toistaisit pitkiä Audio Profile -lohkoja tai Director’s Notes -lohkoja. Dokumentoidussa yhden pyynnön vuoropuhelukokoonpanossa yhdistetään enintään kaksi valmista puhujanääntä. Kun monen hahmon keskustelu kootaan suunnitelluista tai jäljennetyistä hahmoäänistä, opas neuvoo tuottamaan puhevuorot yksitellen.\n\nMerkitse puhujan lyhyt äännähdys tai tauko asianmukaiseen kohtaan kulmasulkeisiin kirjoitetulla tunnisteella. Alkuperäinen käsikirjoitusesimerkki on ”Luulin, että olit lähtenyt. <short pause> <sigh> Pidin valon päällä.” Liitä hillittyä esitystapaa koskeva ohje koko puhevuoroon sen sijaan, että kirjoittaisit sen puhuttavien sanojen joukkoon. Välimerkit ja isojen kirjainten käyttö voivat auttaa rytmittämään epäröintiä tai painottamaan sanaa. Google dokumentoi myös pystyviivoilla erotellut kuulijan reaktiot myötäilyä ja päällekkäistä vuoropuhelua varten ja nimeää Flash TTS:n suositelluksi 3.8-versioksi tilanteisiin, joissa päällekkäistä puhetta on runsaasti. Pidä tällaiset reaktiot niin lyhyinä, että kuulija pystyy edelleen ymmärtämään päärepliikin.\n\nValmistaja ilmoittaa Flash TTS:n tukevan 130 kieltä ja painottaa alueellisten murteiden ja vähemmistömurteiden kattavuutta. Alueellista puhetapaa koskeva esitysohje on hyödyllinen paikallistetun äänikirjan hahmon ääntä tuotettaessa tai kerronnassa, jonka aksentti on yleisölle tärkeä. Valmistele käsikirjoitus sen lopullisella kielellä, käytä toistuvista nimistä johdonmukaisia kirjoitusasuja ja valitse lyhenteille ja luvuille harkittu lukutapa. Aloita toimituksellinen kuuntelutarkistus katkelmista, joissa esiintyy vaikeita nimiä, murteen vaihtumista tai tunnetilan muutoksia. Arvioi haluttu aksentti ja puhetahti tuotetusta puheesta sen sijaan, että olettaisit ne pelkän kielimerkinnän perusteella.\n\nGooglen 3.8-version tuloksia käsittelevä opas erottaa kokonaiset tiedostot suoratoistoäänestä. Loppuun käsitellyn pyynnön oletustulos on RIFF-otsakkeellinen WAV-tiedosto: 24 kHz, mono, etumerkillinen 16-bittinen PCM little-endian-tavujärjestyksellä. Suoratoiston oletustulos on otsakkeeton lineaarinen raaka-PCM samoilla näyteominaisuuksilla. Lineaarinen raaka-PCM, mu-law ja A-law ovat myös dokumentoituja koodausvaihtoehtoja. Käytä todellisia koodaustietoja, kun valmistelet toistoa tai tuot tuloksen äänenkäsittelyohjelmaan. Jos vuoropuhelu koostuu erillisistä tiedostoista, pidä niiden muodot yhtenäisinä ja tarkista liitoskohdat äänenvoimakkuuden, puhetahdin tai tilan taustaäänen äkillisten muutosten varalta.\n\nGooglen mallikohtainen sivu ilmoittaa Gemini API:n rajoiksi 8 192 syötetokenia ja 16 384 tulostokenia. Nämä ovat tokenrajoja, eivätkä ne määritä äänikirjalle kiinteää kestoa tai puheelle tarkkaa sekuntimäärää. Jaa pitkät käsikirjoitukset sisällöllisesti mielekkäistä kohdista ja säilytä valittu ääni-identiteetti osasta toiseen. Luvun mittaisessa tuotannossa kuuntele äänen yhtenäisyyttä kappaleiden ja kohtausten vaihtumiskohdissa sekä tarkista kunkin osan sanatarkkuus. Hyvä käytännön tarkistustapa on kirjata repliikit, joiden ääntämistä tai esitystapaa pitää korjata, sen sijaan, että kirjoittaisit koko äänen ohjeistuksen uudelleen jokaisen oton jälkeen.\n\nFlash TTS:n ja Flash-Lite TTS:n valmistelu noudattaa samaa 3.8-version rakennetta, joten version voi valita työn vaatimusten mukaan. Flash TTS painottaa näyttelijäntyötä, monimutkaista vuoropuhelua, vaativaa ääntämistä ja laajempaa murteiden kattavuutta; Flash-Lite painottaa tavanomaisen puhesisällön tuotantonopeutta. Ilmaisua ohjaavat asetukset koskevat ihmispuhetta ja puhujan tuottamia äänitapahtumia. Taustatehosteet, musiikki ja valmis tuotantomiksaus voidaan suunnitella erillisiksi aineistoiksi. Käsikirjoittaminen, kääntäminen ja tallennetun puheen tunnistaminen säilyvät erillisinä työvaiheina tämän tekstistä ääneksi -mallin käytön yhteydessä.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "8e3db57e812d0732a19697fd904ae5e40cb26b8407d064fbbf0c363da1c74b79",
    "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\">G</span><h2 id=\"sheet-title\">Google: Gemini 3.8 Flash TTS</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Sulje\">×</button></div><div class=\"idline\"><span>Google /</span><code>google/gemini-3.8-flash-tts</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|google%2Fgemini-3.8-flash-tts\">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\">Google Gemini 3.8 Flash TTS luo ilmeikästä puhetta äänikirjoihin, studiossa tuotettavaan kerrontaan ja hahmojen vuoropuheluun. Se yhdistää sanatarkan käsikirjoituksen erillisiin puhujia ja näyttelijäntyötä koskeviin ohjeisiin sekä puheäänen hetkellistä ilmaisua määrittäviin tunnisteisiin. Se tukee 130 kieltä, ja painopisteenä ovat ääntäminen, alueelliset aksentit ja puheäänen yhtenäisyys.</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>Google Gemini 3.8 Flash TTS on Googlen 3.8-sarjan luovaan ääni-ilmaisuun tarkoitettu tekstistä puheeksi -malli. Se painottaa akustista toistotarkkuutta, tunnesävyjen kirjoa, alueellisia aksentteja ja hahmon äänen yhtenäisyyttä pitkissä vuoropuheluissa. Google nostaa esiin äänikirjat, studiokerronnan, ääntämisen kannalta vaativan sisällön ja runsaasti ääninäyttelijäntyötä sisältävät kohtaukset. Tuloksena syntyy valmistellusta tekstikäsikirjoituksesta tuotettua puheääntä, joka soveltuu kertojan esityksen arviointiin tai käsikirjoitetun keskustelun sovittamiseen muiden tuotantoelementtien yhteyteen.</p><p>Aloita täsmälleen niistä sanoista, jotka kuulijan on tarkoitus kuulla. 3.8-versiossa puheteksti käsitellään sanatarkasti, kun taas puhujan tiedot ja jatkuvaa esitystapaa koskevat ohjeet kuuluvat erillisiin puheen metatietoihin. Määritä kunkin puhevuoron puhuja selkeästi ja anna tarvittaessa lyhyt tyyliohje, kuten hillitty huolestuneisuus tai iloinen uteliaisuus. Jaa repliikki erillisiksi puhevuoroiksi, jos tunne tai puhetahti muuttuu huomattavasti. Näin ohjeistusta on helpompi tarkistaa: puheteksti sisältää vuoropuhelun, ja siihen liitetty ohje kertoo, miten kyseinen osuus tulee esittää. Puhetekstiin tavallisena tekstinä kirjoitetut ohjeet saatetaan lukea ääneen.</p><p>Googlen 3.8-äänijärjestelmä sisältää valmiita ääniä, laajennetun äänikirjaston, suunniteltuja äänipersoonia ja jäljennettyjä ääni-identiteettejä. Valitse ensin äänen pohjana oleva persoona ja tee vasta sitten tilapäiset muutokset esitystapaan. Pysyvä alueellinen aksentti tai hahmon identiteetti kuuluu valittuun ääneen; style-kenttä ohjaa kulloistakin esitystapaa. Valmistaja suosittelee käyttämään samaa ääntä uudelleen lyhyiden ohjeiden kanssa sen sijaan, että toistaisit pitkiä Audio Profile -lohkoja tai Director’s Notes -lohkoja. Dokumentoidussa yhden pyynnön vuoropuhelukokoonpanossa yhdistetään enintään kaksi valmista puhujanääntä. Kun monen hahmon keskustelu kootaan suunnitelluista tai jäljennetyistä hahmoäänistä, opas neuvoo tuottamaan puhevuorot yksitellen.</p><p>Merkitse puhujan lyhyt äännähdys tai tauko asianmukaiseen kohtaan kulmasulkeisiin kirjoitetulla tunnisteella. Alkuperäinen käsikirjoitusesimerkki on ”Luulin, että olit lähtenyt. &lt;short pause&gt; &lt;sigh&gt; Pidin valon päällä.” Liitä hillittyä esitystapaa koskeva ohje koko puhevuoroon sen sijaan, että kirjoittaisit sen puhuttavien sanojen joukkoon. Välimerkit ja isojen kirjainten käyttö voivat auttaa rytmittämään epäröintiä tai painottamaan sanaa. Google dokumentoi myös pystyviivoilla erotellut kuulijan reaktiot myötäilyä ja päällekkäistä vuoropuhelua varten ja nimeää Flash TTS:n suositelluksi 3.8-versioksi tilanteisiin, joissa päällekkäistä puhetta on runsaasti. Pidä tällaiset reaktiot niin lyhyinä, että kuulija pystyy edelleen ymmärtämään päärepliikin.</p><p>Valmistaja ilmoittaa Flash TTS:n tukevan 130 kieltä ja painottaa alueellisten murteiden ja vähemmistömurteiden kattavuutta. Alueellista puhetapaa koskeva esitysohje on hyödyllinen paikallistetun äänikirjan hahmon ääntä tuotettaessa tai kerronnassa, jonka aksentti on yleisölle tärkeä. Valmistele käsikirjoitus sen lopullisella kielellä, käytä toistuvista nimistä johdonmukaisia kirjoitusasuja ja valitse lyhenteille ja luvuille harkittu lukutapa. Aloita toimituksellinen kuuntelutarkistus katkelmista, joissa esiintyy vaikeita nimiä, murteen vaihtumista tai tunnetilan muutoksia. Arvioi haluttu aksentti ja puhetahti tuotetusta puheesta sen sijaan, että olettaisit ne pelkän kielimerkinnän perusteella.</p><p>Googlen 3.8-version tuloksia käsittelevä opas erottaa kokonaiset tiedostot suoratoistoäänestä. Loppuun käsitellyn pyynnön oletustulos on RIFF-otsakkeellinen WAV-tiedosto: 24 kHz, mono, etumerkillinen 16-bittinen PCM little-endian-tavujärjestyksellä. Suoratoiston oletustulos on otsakkeeton lineaarinen raaka-PCM samoilla näyteominaisuuksilla. Lineaarinen raaka-PCM, mu-law ja A-law ovat myös dokumentoituja koodausvaihtoehtoja. Käytä todellisia koodaustietoja, kun valmistelet toistoa tai tuot tuloksen äänenkäsittelyohjelmaan. Jos vuoropuhelu koostuu erillisistä tiedostoista, pidä niiden muodot yhtenäisinä ja tarkista liitoskohdat äänenvoimakkuuden, puhetahdin tai tilan taustaäänen äkillisten muutosten varalta.</p><p>Googlen mallikohtainen sivu ilmoittaa Gemini API:n rajoiksi 8 192 syötetokenia ja 16 384 tulostokenia. Nämä ovat tokenrajoja, eivätkä ne määritä äänikirjalle kiinteää kestoa tai puheelle tarkkaa sekuntimäärää. Jaa pitkät käsikirjoitukset sisällöllisesti mielekkäistä kohdista ja säilytä valittu ääni-identiteetti osasta toiseen. Luvun mittaisessa tuotannossa kuuntele äänen yhtenäisyyttä kappaleiden ja kohtausten vaihtumiskohdissa sekä tarkista kunkin osan sanatarkkuus. Hyvä käytännön tarkistustapa on kirjata repliikit, joiden ääntämistä tai esitystapaa pitää korjata, sen sijaan, että kirjoittaisit koko äänen ohjeistuksen uudelleen jokaisen oton jälkeen.</p><p>Flash TTS:n ja Flash-Lite TTS:n valmistelu noudattaa samaa 3.8-version rakennetta, joten version voi valita työn vaatimusten mukaan. Flash TTS painottaa näyttelijäntyötä, monimutkaista vuoropuhelua, vaativaa ääntämistä ja laajempaa murteiden kattavuutta; Flash-Lite painottaa tavanomaisen puhesisällön tuotantonopeutta. Ilmaisua ohjaavat asetukset koskevat ihmispuhetta ja puhujan tuottamia äänitapahtumia. Taustatehosteet, musiikki ja valmis tuotantomiksaus voidaan suunnitella erillisiksi aineistoiksi. Käsikirjoittaminen, kääntäminen ja tallennetun puheen tunnistaminen säilyvät erillisinä työvaiheina tämän tekstistä ääneksi -mallin käytön yhteydessä.</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 · Puhe</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></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><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>google/gemini-3.8-flash-tts</div></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr><tr><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><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>Zephyr, Puck, Charon, Kore, Fenrir, Leda, Orus, Aoede, Callirrhoe, Autonoe, Enceladus, Iapetus, Umbriel, Algieba, Despina, Erinome, Algenib, Rasalgethi, Laomedeia, Achernar, Alnilam, Schedar, Gacrux, Pulcherrima, Achird, Zubenelgenubi, Vindemiatrix, Sadachbia, Sadaltager, Sulafat</div><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><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><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">provider</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>object</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></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr></tbody></table></div><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></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></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>syötetoken</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>/ 1K tokenia</td><td data-cell-label=\"Veloitus\"><span class=\"card-cell-label\">Veloitus</span><div><span>Syöte</span> <b>$0.001</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>tulostetoken</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>/ 1K tokenia</td><td data-cell-label=\"Veloitus\"><span class=\"card-cell-label\">Veloitus</span><div><span>Tuloste</span> <b>$0.018</b> <span class=\"price-unit\">/ 1K tokenia</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></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Esimerkkipyynnöt</h3><h4>Ailoot Ultra · Puhe</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-1478-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1478-panel-0\" aria-selected=\"true\" tabindex=\"0\">Käytä todellista syötettä ja säilytä 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-1478-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1478-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_INPUT_TEXT:?Set the actual documented input value}&quot;\nexport AILOOT_INPUT_TEXT\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\nrequest={&#39;model&#39;: &#39;google/gemini-3.8-flash-tts&#39;, &#39;input&#39;: &#39;${ACTUAL_INPUT_TEXT}&#39;, &#39;voice&#39;: &#39;Zephyr&#39;}\nrequest[&#39;input&#39;]=os.environ[&#39;AILOOT_INPUT_TEXT&#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# Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.\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 · Puhe</h4><p class=\"note-s\">Koko binääriääni tai alkuperäinen audio_url-vastaus, otsakkeet ja jokainen käyttäjälle kuuluva aineisto.</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><details class=\"card-about\"><summary>Muut sisällön lukukerrat</summary><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Koodivaihtoehdot\"><button class=\"cg-tab\" id=\"model-code-1479-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1479-panel-0\" aria-selected=\"true\" tabindex=\"0\">Lue olemassa olevat omistamasi aineistot</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-1479-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1479-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -o owned-assets.json\n# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.\n</code></pre></div></div></div></details><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\">Säilytä koko vastaus ja otsakkeet, jokainen todellinen tuloste, alkuperäiset palautetut tunnisteet ja kaikki käyttötietokentät. Selvitä alkuperäisen operaation tila lähettämättä luontipyyntöä uudelleen.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Jos alkuperäinen vastaus on tarkistettava</h5><p class=\"note-s\">Säilytä palautettu X-Client-Request-ID täsmäytystä varten. Tee lukukyselyt vain todellisuudessa palautetuilla task_id/asset_id-arvoilla tai käytä omistamaasi mediakirjastoa; älä koskaan rakenna tehtävän URL-osoitetta operaation ID:n perusteella äläkä lähetä luontipyyntöä uudelleen.</p></div></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=google%2Fgemini-3.8-flash-tts&amp;route=Ultra&amp;caller=google%2Fgemini-3.8-flash-tts&amp;fmt=speech\"><code>google/gemini-3.8-flash-tts</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=google%2Fgemini-3.8-flash-tts&amp;route=Ultra&amp;caller=google%2Fgemini-3.8-flash-tts&amp;fmt=speech\"><code>google/gemini-3.8-flash-tts</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "google/gemini-3.8-flash-tts",
        "fmt": "speech",
        "http": "POST",
        "path": "/v1/audio/speech",
        "request_model_id": "google/gemini-3.8-flash-tts",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|speech|/v1/audio/speech|google%2Fgemini-3.8-flash-tts",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "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ä palautettu X-Client-Request-ID täsmäytystä varten. Tee lukukyselyt vain todellisuudessa palautetuilla task_id/asset_id-arvoilla tai käytä omistamaasi mediakirjastoa; älä koskaan rakenna tehtävän URL-osoitetta operaation ID:n perusteella äläkä lähetä luontipyyntöä uudelleen."
            },
            "outputs": {
              "all_results": "Säilytä koko vastaus ja otsakkeet, jokainen todellinen tuloste, alkuperäiset palautetut tunnisteet ja kaikki käyttötietokentät. Selvitä alkuperäisen operaation tila lähettämättä luontipyyntöä uudelleen.",
              "family": "audio",
              "formats": [
                "mp3",
                "pcm"
              ],
              "result": "Koko binääriääni tai alkuperäinen audio_url-vastaus, otsakkeet ja jokainen käyttäjälle kuuluva aineisto."
            },
            "parameters": [
              {
                "enum": [
                  "google/gemini-3.8-flash-tts"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string"
              },
              {
                "enum": [
                  "Zephyr",
                  "Puck",
                  "Charon",
                  "Kore",
                  "Fenrir",
                  "Leda",
                  "Orus",
                  "Aoede",
                  "Callirrhoe",
                  "Autonoe",
                  "Enceladus",
                  "Iapetus",
                  "Umbriel",
                  "Algieba",
                  "Despina",
                  "Erinome",
                  "Algenib",
                  "Rasalgethi",
                  "Laomedeia",
                  "Achernar",
                  "Alnilam",
                  "Schedar",
                  "Gacrux",
                  "Pulcherrima",
                  "Achird",
                  "Zubenelgenubi",
                  "Vindemiatrix",
                  "Sadachbia",
                  "Sadaltager",
                  "Sulafat"
                ],
                "enum_known": true,
                "min_length": 1,
                "name": "voice",
                "required": true,
                "type": "string"
              },
              {
                "default": "pcm",
                "default_known": true,
                "enum": [
                  "mp3",
                  "pcm"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              },
              {
                "name": "provider",
                "required": false,
                "type": "object"
              }
            ],
            "request_schema": {
              "properties": {
                "input": {
                  "minLength": 1,
                  "type": "string"
                },
                "model": {
                  "enum": [
                    "google/gemini-3.8-flash-tts"
                  ],
                  "type": "string"
                },
                "provider": {
                  "description": "Documented speech data policy and provider-specific options.",
                  "properties": {
                    "data_collection": {
                      "enum": [
                        "allow",
                        "deny",
                        null
                      ],
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "options": {
                      "type": "object"
                    },
                    "zdr": {
                      "type": [
                        "boolean",
                        "null"
                      ]
                    }
                  },
                  "type": "object"
                },
                "response_format": {
                  "default": "pcm",
                  "enum": [
                    "mp3",
                    "pcm"
                  ],
                  "type": "string"
                },
                "voice": {
                  "enum": [
                    "Zephyr",
                    "Puck",
                    "Charon",
                    "Kore",
                    "Fenrir",
                    "Leda",
                    "Orus",
                    "Aoede",
                    "Callirrhoe",
                    "Autonoe",
                    "Enceladus",
                    "Iapetus",
                    "Umbriel",
                    "Algieba",
                    "Despina",
                    "Erinome",
                    "Algenib",
                    "Rasalgethi",
                    "Laomedeia",
                    "Achernar",
                    "Alnilam",
                    "Schedar",
                    "Gacrux",
                    "Pulcherrima",
                    "Achird",
                    "Zubenelgenubi",
                    "Vindemiatrix",
                    "Sadachbia",
                    "Sadaltager",
                    "Sulafat"
                  ],
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input",
                "voice"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "input": "${ACTUAL_INPUT_TEXT}",
                "model": "google/gemini-3.8-flash-tts",
                "voice": "Zephyr"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "required": [
              "model",
              "input",
              "voice"
            ]
          },
          "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": "Keep the returned X-Client-Request-ID for reconciliation. Read only actual returned task_id/asset_id values or the owned media library; never build a task URL from the operation ID and never resubmit creation."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "output": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "family": "audio",
            "formats": [
              "mp3",
              "pcm"
            ],
            "result": "Complete binary audio or original audio_url response, headers and every owned asset."
          }
        },
        "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": {
              "quoted_unit": "/ 1K tokens"
            },
            "label": "input token",
            "units": [
              {
                "amount": "0.001000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_token",
                "label": "input token",
                "native_amount_usd_per_unit": "0.000001",
                "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"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "/ 1K tokens"
            },
            "label": "output token",
            "units": [
              {
                "amount": "0.018000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_token",
                "label": "output token",
                "native_amount_usd_per_unit": "0.000018",
                "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"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_INPUT_TEXT:?Set the actual documented input value}\"\nexport AILOOT_INPUT_TEXT\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nrequest={'model': 'google/gemini-3.8-flash-tts', 'input': '${ACTUAL_INPUT_TEXT}', 'voice': 'Zephyr'}\nrequest['input']=os.environ['AILOOT_INPUT_TEXT']\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# Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.\n",
            "label": "Use actual input and retain the complete result",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o owned-assets.json\n# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.\n",
            "label": "Read existing owned assets",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "hints": [
          "Use the exact caller model ID and documented input representation.",
          "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "Puhe",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "native_endpoint": "audio_speech",
        "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": {
            "input_token": 1e-06,
            "output_token": 1.8e-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": {
              "quoted_unit": "/ 1K tokens"
            },
            "label": "input token",
            "units": [
              {
                "amount": "0.001000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_token",
                "label": "input token",
                "native_amount_usd_per_unit": "0.000001",
                "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"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "/ 1K tokens"
            },
            "label": "output token",
            "units": [
              {
                "amount": "0.018000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_token",
                "label": "output token",
                "native_amount_usd_per_unit": "0.000018",
                "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"
              }
            ]
          }
        ],
        "request_model_id": "google/gemini-3.8-flash-tts",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}"
        ],
        "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.001000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_token",
            "label": "input token",
            "native_amount_usd_per_unit": "0.000001",
            "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": "0.018000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_token",
            "label": "output token",
            "native_amount_usd_per_unit": "0.000018",
            "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"
          }
        ]
      }
    }
  ],
  "model_id": "google/gemini-3.8-flash-tts",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "761c4899bc48b12959bb2306949fa4cc8aa450b173277051ec33df047e09c9c0",
    "input_html_sha256": "f9c64596bae71ac2e9e6d3385616ec3aec7ea7bee576fa9c6ac2ca2e2a13e07f",
    "private_audit_sha256": "dac5c62263f9e66cca2aa14707ea9115caa9b162a0056cb90d0e3e94409bb2ae",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/fi/google-gemini-3-8-flash-tts/",
    "description": "Google Gemini 3.8 Flash TTS luo ilmeikästä puhetta äänikirjoihin, studiossa tuotettavaan kerrontaan ja hahmojen vuoropuheluun. Se yhdistää sanatarkan käsikirjoituksen erillisiin puhujia ja näyttelijäntyötä koskeviin ohjeisiin sekä puheäänen hetkellistä ilmaisua määrittäviin tunnisteisiin. Se tukee 130 kieltä, ja painopisteenä ovat ääntäminen, alueelliset aksentit ja puheäänen yhtenäisyys.",
    "locale": "fi",
    "md_url": "https://ailoot.ai/models/fi/google-gemini-3-8-flash-tts/index.md",
    "title": "Google: Gemini 3.8 Flash TTS — Ailoot",
    "url": "https://ailoot.ai/models/fi/google-gemini-3-8-flash-tts/"
  },
  "rawModel": {
    "about": "Google Gemini 3.8 Flash TTS on Googlen 3.8-sarjan luovaan ääni-ilmaisuun tarkoitettu tekstistä puheeksi -malli. Se painottaa akustista toistotarkkuutta, tunnesävyjen kirjoa, alueellisia aksentteja ja hahmon äänen yhtenäisyyttä pitkissä vuoropuheluissa. Google nostaa esiin äänikirjat, studiokerronnan, ääntämisen kannalta vaativan sisällön ja runsaasti ääninäyttelijäntyötä sisältävät kohtaukset. Tuloksena syntyy valmistellusta tekstikäsikirjoituksesta tuotettua puheääntä, joka soveltuu kertojan esityksen arviointiin tai käsikirjoitetun keskustelun sovittamiseen muiden tuotantoelementtien yhteyteen.\n\nAloita täsmälleen niistä sanoista, jotka kuulijan on tarkoitus kuulla. 3.8-versiossa puheteksti käsitellään sanatarkasti, kun taas puhujan tiedot ja jatkuvaa esitystapaa koskevat ohjeet kuuluvat erillisiin puheen metatietoihin. Määritä kunkin puhevuoron puhuja selkeästi ja anna tarvittaessa lyhyt tyyliohje, kuten hillitty huolestuneisuus tai iloinen uteliaisuus. Jaa repliikki erillisiksi puhevuoroiksi, jos tunne tai puhetahti muuttuu huomattavasti. Näin ohjeistusta on helpompi tarkistaa: puheteksti sisältää vuoropuhelun, ja siihen liitetty ohje kertoo, miten kyseinen osuus tulee esittää. Puhetekstiin tavallisena tekstinä kirjoitetut ohjeet saatetaan lukea ääneen.\n\nGooglen 3.8-äänijärjestelmä sisältää valmiita ääniä, laajennetun äänikirjaston, suunniteltuja äänipersoonia ja jäljennettyjä ääni-identiteettejä. Valitse ensin äänen pohjana oleva persoona ja tee vasta sitten tilapäiset muutokset esitystapaan. Pysyvä alueellinen aksentti tai hahmon identiteetti kuuluu valittuun ääneen; style-kenttä ohjaa kulloistakin esitystapaa. Valmistaja suosittelee käyttämään samaa ääntä uudelleen lyhyiden ohjeiden kanssa sen sijaan, että toistaisit pitkiä Audio Profile -lohkoja tai Director’s Notes -lohkoja. Dokumentoidussa yhden pyynnön vuoropuhelukokoonpanossa yhdistetään enintään kaksi valmista puhujanääntä. Kun monen hahmon keskustelu kootaan suunnitelluista tai jäljennetyistä hahmoäänistä, opas neuvoo tuottamaan puhevuorot yksitellen.\n\nMerkitse puhujan lyhyt äännähdys tai tauko asianmukaiseen kohtaan kulmasulkeisiin kirjoitetulla tunnisteella. Alkuperäinen käsikirjoitusesimerkki on ”Luulin, että olit lähtenyt. <short pause> <sigh> Pidin valon päällä.” Liitä hillittyä esitystapaa koskeva ohje koko puhevuoroon sen sijaan, että kirjoittaisit sen puhuttavien sanojen joukkoon. Välimerkit ja isojen kirjainten käyttö voivat auttaa rytmittämään epäröintiä tai painottamaan sanaa. Google dokumentoi myös pystyviivoilla erotellut kuulijan reaktiot myötäilyä ja päällekkäistä vuoropuhelua varten ja nimeää Flash TTS:n suositelluksi 3.8-versioksi tilanteisiin, joissa päällekkäistä puhetta on runsaasti. Pidä tällaiset reaktiot niin lyhyinä, että kuulija pystyy edelleen ymmärtämään päärepliikin.\n\nValmistaja ilmoittaa Flash TTS:n tukevan 130 kieltä ja painottaa alueellisten murteiden ja vähemmistömurteiden kattavuutta. Alueellista puhetapaa koskeva esitysohje on hyödyllinen paikallistetun äänikirjan hahmon ääntä tuotettaessa tai kerronnassa, jonka aksentti on yleisölle tärkeä. Valmistele käsikirjoitus sen lopullisella kielellä, käytä toistuvista nimistä johdonmukaisia kirjoitusasuja ja valitse lyhenteille ja luvuille harkittu lukutapa. Aloita toimituksellinen kuuntelutarkistus katkelmista, joissa esiintyy vaikeita nimiä, murteen vaihtumista tai tunnetilan muutoksia. Arvioi haluttu aksentti ja puhetahti tuotetusta puheesta sen sijaan, että olettaisit ne pelkän kielimerkinnän perusteella.\n\nGooglen 3.8-version tuloksia käsittelevä opas erottaa kokonaiset tiedostot suoratoistoäänestä. Loppuun käsitellyn pyynnön oletustulos on RIFF-otsakkeellinen WAV-tiedosto: 24 kHz, mono, etumerkillinen 16-bittinen PCM little-endian-tavujärjestyksellä. Suoratoiston oletustulos on otsakkeeton lineaarinen raaka-PCM samoilla näyteominaisuuksilla. Lineaarinen raaka-PCM, mu-law ja A-law ovat myös dokumentoituja koodausvaihtoehtoja. Käytä todellisia koodaustietoja, kun valmistelet toistoa tai tuot tuloksen äänenkäsittelyohjelmaan. Jos vuoropuhelu koostuu erillisistä tiedostoista, pidä niiden muodot yhtenäisinä ja tarkista liitoskohdat äänenvoimakkuuden, puhetahdin tai tilan taustaäänen äkillisten muutosten varalta.\n\nGooglen mallikohtainen sivu ilmoittaa Gemini API:n rajoiksi 8 192 syötetokenia ja 16 384 tulostokenia. Nämä ovat tokenrajoja, eivätkä ne määritä äänikirjalle kiinteää kestoa tai puheelle tarkkaa sekuntimäärää. Jaa pitkät käsikirjoitukset sisällöllisesti mielekkäistä kohdista ja säilytä valittu ääni-identiteetti osasta toiseen. Luvun mittaisessa tuotannossa kuuntele äänen yhtenäisyyttä kappaleiden ja kohtausten vaihtumiskohdissa sekä tarkista kunkin osan sanatarkkuus. Hyvä käytännön tarkistustapa on kirjata repliikit, joiden ääntämistä tai esitystapaa pitää korjata, sen sijaan, että kirjoittaisit koko äänen ohjeistuksen uudelleen jokaisen oton jälkeen.\n\nFlash TTS:n ja Flash-Lite TTS:n valmistelu noudattaa samaa 3.8-version rakennetta, joten version voi valita työn vaatimusten mukaan. Flash TTS painottaa näyttelijäntyötä, monimutkaista vuoropuhelua, vaativaa ääntämistä ja laajempaa murteiden kattavuutta; Flash-Lite painottaa tavanomaisen puhesisällön tuotantonopeutta. Ilmaisua ohjaavat asetukset koskevat ihmispuhetta ja puhujan tuottamia äänitapahtumia. Taustatehosteet, musiikki ja valmis tuotantomiksaus voidaan suunnitella erillisiksi aineistoiksi. Käsikirjoittaminen, kääntäminen ja tallennetun puheen tunnistaminen säilyvät erillisinä työvaiheina tämän tekstistä ääneksi -mallin käytön yhteydessä.",
    "alias_of": null,
    "aliases": [],
    "author": "Google",
    "capabilities": {
      "context_length": 32768,
      "manufacturer_input": [
        "text"
      ],
      "manufacturer_output": [
        "speech"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.001000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_token",
            "label": "input token",
            "native_amount_usd_per_unit": "0.000001",
            "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": "0.018000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_token",
            "label": "output token",
            "native_amount_usd_per_unit": "0.000018",
            "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"
          }
        ],
        "summary": "Konfiguraation täydet hintatiedot lisätiedoissa."
      }
    ],
    "ctx": null,
    "formats": [
      "speech"
    ],
    "id": "google/gemini-3.8-flash-tts",
    "input": [
      "text"
    ],
    "kind": "audio",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "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ä palautettu X-Client-Request-ID täsmäytystä varten. Tee lukukyselyt vain todellisuudessa palautetuilla task_id/asset_id-arvoilla tai käytä omistamaasi mediakirjastoa; älä koskaan rakenna tehtävän URL-osoitetta operaation ID:n perusteella äläkä lähetä luontipyyntöä uudelleen."
            },
            "outputs": {
              "all_results": "Säilytä koko vastaus ja otsakkeet, jokainen todellinen tuloste, alkuperäiset palautetut tunnisteet ja kaikki käyttötietokentät. Selvitä alkuperäisen operaation tila lähettämättä luontipyyntöä uudelleen.",
              "family": "audio",
              "formats": [
                "mp3",
                "pcm"
              ],
              "result": "Koko binääriääni tai alkuperäinen audio_url-vastaus, otsakkeet ja jokainen käyttäjälle kuuluva aineisto."
            },
            "parameters": [
              {
                "enum": [
                  "google/gemini-3.8-flash-tts"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "min_length": 1,
                "name": "input",
                "required": true,
                "type": "string"
              },
              {
                "enum": [
                  "Zephyr",
                  "Puck",
                  "Charon",
                  "Kore",
                  "Fenrir",
                  "Leda",
                  "Orus",
                  "Aoede",
                  "Callirrhoe",
                  "Autonoe",
                  "Enceladus",
                  "Iapetus",
                  "Umbriel",
                  "Algieba",
                  "Despina",
                  "Erinome",
                  "Algenib",
                  "Rasalgethi",
                  "Laomedeia",
                  "Achernar",
                  "Alnilam",
                  "Schedar",
                  "Gacrux",
                  "Pulcherrima",
                  "Achird",
                  "Zubenelgenubi",
                  "Vindemiatrix",
                  "Sadachbia",
                  "Sadaltager",
                  "Sulafat"
                ],
                "enum_known": true,
                "min_length": 1,
                "name": "voice",
                "required": true,
                "type": "string"
              },
              {
                "default": "pcm",
                "default_known": true,
                "enum": [
                  "mp3",
                  "pcm"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              },
              {
                "name": "provider",
                "required": false,
                "type": "object"
              }
            ],
            "request_schema": {
              "properties": {
                "input": {
                  "minLength": 1,
                  "type": "string"
                },
                "model": {
                  "enum": [
                    "google/gemini-3.8-flash-tts"
                  ],
                  "type": "string"
                },
                "provider": {
                  "description": "Documented speech data policy and provider-specific options.",
                  "properties": {
                    "data_collection": {
                      "enum": [
                        "allow",
                        "deny",
                        null
                      ],
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "options": {
                      "type": "object"
                    },
                    "zdr": {
                      "type": [
                        "boolean",
                        "null"
                      ]
                    }
                  },
                  "type": "object"
                },
                "response_format": {
                  "default": "pcm",
                  "enum": [
                    "mp3",
                    "pcm"
                  ],
                  "type": "string"
                },
                "voice": {
                  "enum": [
                    "Zephyr",
                    "Puck",
                    "Charon",
                    "Kore",
                    "Fenrir",
                    "Leda",
                    "Orus",
                    "Aoede",
                    "Callirrhoe",
                    "Autonoe",
                    "Enceladus",
                    "Iapetus",
                    "Umbriel",
                    "Algieba",
                    "Despina",
                    "Erinome",
                    "Algenib",
                    "Rasalgethi",
                    "Laomedeia",
                    "Achernar",
                    "Alnilam",
                    "Schedar",
                    "Gacrux",
                    "Pulcherrima",
                    "Achird",
                    "Zubenelgenubi",
                    "Vindemiatrix",
                    "Sadachbia",
                    "Sadaltager",
                    "Sulafat"
                  ],
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input",
                "voice"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "input": "${ACTUAL_INPUT_TEXT}",
                "model": "google/gemini-3.8-flash-tts",
                "voice": "Zephyr"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "required": [
              "model",
              "input",
              "voice"
            ]
          },
          "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": "Keep the returned X-Client-Request-ID for reconciliation. Read only actual returned task_id/asset_id values or the owned media library; never build a task URL from the operation ID and never resubmit creation."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "output": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "family": "audio",
            "formats": [
              "mp3",
              "pcm"
            ],
            "result": "Complete binary audio or original audio_url response, headers and every owned asset."
          }
        },
        "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": {
              "quoted_unit": "/ 1K tokens"
            },
            "label": "input token",
            "units": [
              {
                "amount": "0.001000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_token",
                "label": "input token",
                "native_amount_usd_per_unit": "0.000001",
                "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"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "/ 1K tokens"
            },
            "label": "output token",
            "units": [
              {
                "amount": "0.018000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_token",
                "label": "output token",
                "native_amount_usd_per_unit": "0.000018",
                "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"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_INPUT_TEXT:?Set the actual documented input value}\"\nexport AILOOT_INPUT_TEXT\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nrequest={'model': 'google/gemini-3.8-flash-tts', 'input': '${ACTUAL_INPUT_TEXT}', 'voice': 'Zephyr'}\nrequest['input']=os.environ['AILOOT_INPUT_TEXT']\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# Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.\n",
            "label": "Use actual input and retain the complete result",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o owned-assets.json\n# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.\n",
            "label": "Read existing owned assets",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "hints": [
          "Use the exact caller model ID and documented input representation.",
          "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "Puhe",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "native_endpoint": "audio_speech",
        "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": {
            "input_token": 1e-06,
            "output_token": 1.8e-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": {
              "quoted_unit": "/ 1K tokens"
            },
            "label": "input token",
            "units": [
              {
                "amount": "0.001000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_token",
                "label": "input token",
                "native_amount_usd_per_unit": "0.000001",
                "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"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "/ 1K tokens"
            },
            "label": "output token",
            "units": [
              {
                "amount": "0.018000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_token",
                "label": "output token",
                "native_amount_usd_per_unit": "0.000018",
                "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"
              }
            ]
          }
        ],
        "request_model_id": "google/gemini-3.8-flash-tts",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}"
        ],
        "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.001000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_token",
            "label": "input token",
            "native_amount_usd_per_unit": "0.000001",
            "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": "0.018000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_token",
            "label": "output token",
            "native_amount_usd_per_unit": "0.000018",
            "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"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "google/gemini-3.8-flash-tts",
        "request_model_id": "google/gemini-3.8-flash-tts",
        "route_label": "Ultra"
      }
    ],
    "name": "Google: Gemini 3.8 Flash TTS",
    "price": {
      "in": null,
      "in_label": null,
      "out": 0.018,
      "out_label": "/ 1K tokens",
      "sort_in": null,
      "sort_out": 0.018,
      "varies": true
    },
    "short": "Google Gemini 3.8 Flash TTS luo ilmeikästä puhetta äänikirjoihin, studiossa tuotettavaan kerrontaan ja hahmojen vuoropuheluun. Se yhdistää sanatarkan käsikirjoituksen erillisiin puhujia ja näyttelijäntyötä koskeviin ohjeisiin sekä puheäänen hetkellistä ilmaisua määrittäviin tunnisteisiin. Se tukee 130 kieltä, ja painopisteenä ovat ääntäminen, alueelliset aksentit ja puheäänen yhtenäisyys."
  },
  "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": "Google Gemini 3.8 Flash TTS luo ilmeikästä puhetta äänikirjoihin, studiossa tuotettavaan kerrontaan ja hahmojen vuoropuheluun. Se yhdistää sanatarkan käsikirjoituksen erillisiin puhujia ja näyttelijäntyötä koskeviin ohjeisiin sekä puheäänen hetkellistä ilmaisua määrittäviin tunnisteisiin. Se tukee 130 kieltä, ja painopisteenä ovat ääntäminen, alueelliset aksentit ja puheäänen yhtenäisyys.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "4a738f95f53910e07961f504ecef2fe98e5216707e28754eadd72a6f2aa84dd6",
    "renderer_sha256": "303a59603e2bc29ba8fda690e95fd32cec68de223d92e26054a88babff801dd7"
  },
  "sourceRevision": "66727bab3b9eb328c1e1996c396131d05af46dfb4f7ed45470fa3e2d6577605e"
}
