{
  "aboutHtml": "<h4>Ilmeikäs kuvitus ja vakaa luova kehitys</h4><p>Krea 2 Medium on alusta asti koulutettu Krea 2 -kuvamalli ilmeikkääseen kuvitukseen. Krea kuvaa sitä Largea pienemmäksi ja laajemmin jälkikoulutetuksi, luonteeltaan vakaammaksi malliksi, joka toimii erityisen hyvin kuvituksessa, animessa ja maalauksessa. Medium ja Large jakavat dokumentoidun ohjausjärjestelmän; versioiden ero koskee mallirakennetta ja visuaalisia taipumuksia, ei erilaista tulostyyppiä.</p><p>Käytä Mediumia toimituksellisten kuvitusten, tarinakohtausten, maalattujen konseptien ja yhtenäisten visuaalisten suuntien kehittämiseen. Aloita ohjeesta, joka yksilöi kohteen, toiminnan, ympäristön, sommittelun, paletin ja tekniikan. Esimerkiksi: ”Pyöräilijä ylittää hiljaisen joenrantasillan aamunkoitteessa, leveä toimituksellinen kuvitus, kerrokselliset guassimuodot, pehmeät siniset varjot ja yksi korallinvärinen korostus, avointa tilaa joen yllä otsikolle.” Käsittele tyhjää tilaa sommittelupyyntönä ja sijoita lopullinen typografia sitten valmiiseen asetteluun.</p><h4>Valmistele teksti- ja kuvasyötteet</h4><p>Generointirajapinta vaatii kehotteen, kuvasuhteen ja tarkkuuden. Teksti antaa kohtauksen ja luovan suunnan. Valinnainen lähdekuva mahdollistaa kuvasta kuvaksi -generoinnin, joka alkaa siitä kuvasta puhtaan kohinan sijaan. Kohinanpoiston voimakkuus on 0–1: 0 säilyttää syötekuvan, 1 korvaa sen kokonaan ja dokumentoitu oletus on 0.99. Käytä lähdekuvaa aloitussommittelun ollessa tärkeä, kuvaile uusi käsittely ja valitse sallittavan muutoksen määrä.</p><p>Kuvatyyliviitteet vaikuttavat visuaaliseen käsittelyyn erillään lähdekuvasta. Mallikohtainen skeema rajaa lähdekuvan ja tyyliviitteen URI-merkkijonot 1 024 merkkiin. Mediumin mallikohtainen skeema hyväksyy enintään kymmenen viitettä; kunkin vaikutus on 0–1 ja oletus 0.5. Valmistele pieni tarkoituksenmukainen viitejoukko: yksi kuva voi määritellä sivellintyön ja toinen paletin tai valaistuksen. Kerro haluttu suhde ohjeessa sen sijaan, että luottaisit sekalaisen kokoelman viestivän yhtenäistä suuntaa.</p><p>Tunnelmataulu ryhmittelee toisiinsa liittyvät viitteet yhteisen tyylin, paletin, tekstuurin tai sommittelun ympärille. Dokumentoitu työnkulku luo tunnelmataulun ensin ja käyttää sitten sen olemassa olevaa tunnistetta generointipyynnössä. Medium hyväksyy yhden tunnelmataulun, jonka vaikutus on 0–1 ja pyyntöskeeman oletus 0.23. Koulutetut tyylit, tavallisesti LoRAt, ovat erillinen syöte, joka valitaan tunnisteella ja voimakkuudella -2–2. Valitse työhön sopiva syöte: lähdekuva aloittaa kohtauksen, viite ehdottaa ulkonäköä ja tunnelmataulu tai koulutettu tyyli antaa uudelleenkäytettävän suunnan.</p><h4>Hallitse tulkintaa ja visuaalista tulosta</h4><p>Creativity ohjaa kehotteen laajennusta. Raw poistaa laajennuksen käytöstä; low pysyy lähempänä kirjaimellista ohjetta, medium ja high sallivat enemmän tulkintaa. Mediumin mallikohtainen pyyntöskeema käyttää oletuksena low-arvoa. Kirjoita tarkasti määriteltyyn kuvitukseen täydellinen ohje ja aloita hillityllä laajennuksella. Varhaisessa ideoinnissa vapaampi asetus voi kehittää yksinkertaisen konseptin rikkaammaksi kohtaukseksi.</p><p>Kolme erillistä liukusäädintä muotoilee kuvaa: Intensity, Complexity ja Movement. Kukin saa kokonaisluvun -100–100, ja 0 on neutraali. Intensity siirtää käsittelyä hillityn ja rohkean välillä. Complexity siirtää sitä siistien, minimaalisten sommitelmien ja tiheiden yksityiskohtien välillä. Movement muuttaa visuaalista energiaa, elettä ja liikkeen vaikutelmaa. Movement pysyy pysäytyskuvan asetuksena; se ei generoi animaatiota eikä videoleikettä. Säätimet ovat erillisiä creativityn kehotelaajennuksesta ja voidaan yhdistää viitesyötteisiin.</p><p>Käytännön kuvitustyönkulku määrittelee ensin kohtauksen, säätää sitten paletin ja käsittelyn ja hienosäätää lopuksi tiheyttä tai energiaa. Tallenna kehote, viitejoukko ja valinnainen siemen muuttaessasi yhtä asetusta kerrallaan. Joenrantakuvituksessa pienempi complexity voi yksinkertaistaa taustaa ja suurempi movement-arvo ehdottaa eloisampaa ajoasentoa. Nämä ovat valmiista tuloksesta tarkastettavia luovia suuntia, eivät tarkkoja asettelu- tai asentolukituksia.</p><h4>Muoto, generointi ja toimitus</h4><p>Mediumin dokumentoitu generointiskeema tarjoaa 1K-tarkkuustason ja yhdeksän kuvasuhdetta: 1:1, 4:3, 3:2, 16:9, 2.35:1, 4:5, 3:4, 2:3 ja 9:16. Valitse haluttu ruutu ennen generointia, jotta ohje voi kuvailla sen sommittelun vastaavasti. Neliökuvitus, leveä tarinakohtaus ja pystykansi tarvitsevat erilaista pääkohteen ja ympäröivien yksityiskohtien sijoittelua.</p><p>Dokumentoitu generointiprosessi palauttaa työn, joka voi aluksi odottaa. Seuraa sen tilaa valmistumiseen asti ja hae sitten tuloskuvien sijainnit. Säilytä valittu kuva ohjeen, syötekuvien ja ohjausasetusten mukana. Arvioi siluetti, kädet tai pienet esineet, perspektiivi, paletti ja mahdollinen näkyvä teksti ennen sisällyttämistä julkaisuun tai kampanjaan.</p><p>Mediumin kuvituspainotus on hyödyllinen versiovalinta, ei lupaus identtisistä tuloksista eri kehotteilla. Visuaalinen viite voi ohjata tyyliä kopioimatta kohdetta tai asettelua täydellisesti, ja kuvasta kuvaksi -voimakkuus muuttaa aloituskuvan säilyvää osuutta. Anna vaaditut elementit selvästi, tarkasta jokainen valmis tulos ohjetta vasten ja tee lopulliset sommittelu-, typografia- ja tuotantosäädöt editorissa.</p>",
  "aboutText": "### Ilmeikäs kuvitus ja vakaa luova kehitys\n\nKrea 2 Medium on alusta asti koulutettu Krea 2 -kuvamalli ilmeikkääseen kuvitukseen. Krea kuvaa sitä Largea pienemmäksi ja laajemmin jälkikoulutetuksi, luonteeltaan vakaammaksi malliksi, joka toimii erityisen hyvin kuvituksessa, animessa ja maalauksessa. Medium ja Large jakavat dokumentoidun ohjausjärjestelmän; versioiden ero koskee mallirakennetta ja visuaalisia taipumuksia, ei erilaista tulostyyppiä.\n\nKäytä Mediumia toimituksellisten kuvitusten, tarinakohtausten, maalattujen konseptien ja yhtenäisten visuaalisten suuntien kehittämiseen. Aloita ohjeesta, joka yksilöi kohteen, toiminnan, ympäristön, sommittelun, paletin ja tekniikan. Esimerkiksi: ”Pyöräilijä ylittää hiljaisen joenrantasillan aamunkoitteessa, leveä toimituksellinen kuvitus, kerrokselliset guassimuodot, pehmeät siniset varjot ja yksi korallinvärinen korostus, avointa tilaa joen yllä otsikolle.” Käsittele tyhjää tilaa sommittelupyyntönä ja sijoita lopullinen typografia sitten valmiiseen asetteluun.\n\n### Valmistele teksti- ja kuvasyötteet\n\nGenerointirajapinta vaatii kehotteen, kuvasuhteen ja tarkkuuden. Teksti antaa kohtauksen ja luovan suunnan. Valinnainen lähdekuva mahdollistaa kuvasta kuvaksi -generoinnin, joka alkaa siitä kuvasta puhtaan kohinan sijaan. Kohinanpoiston voimakkuus on 0–1: 0 säilyttää syötekuvan, 1 korvaa sen kokonaan ja dokumentoitu oletus on 0.99. Käytä lähdekuvaa aloitussommittelun ollessa tärkeä, kuvaile uusi käsittely ja valitse sallittavan muutoksen määrä.\n\nKuvatyyliviitteet vaikuttavat visuaaliseen käsittelyyn erillään lähdekuvasta. Mallikohtainen skeema rajaa lähdekuvan ja tyyliviitteen URI-merkkijonot 1 024 merkkiin. Mediumin mallikohtainen skeema hyväksyy enintään kymmenen viitettä; kunkin vaikutus on 0–1 ja oletus 0.5. Valmistele pieni tarkoituksenmukainen viitejoukko: yksi kuva voi määritellä sivellintyön ja toinen paletin tai valaistuksen. Kerro haluttu suhde ohjeessa sen sijaan, että luottaisit sekalaisen kokoelman viestivän yhtenäistä suuntaa.\n\nTunnelmataulu ryhmittelee toisiinsa liittyvät viitteet yhteisen tyylin, paletin, tekstuurin tai sommittelun ympärille. Dokumentoitu työnkulku luo tunnelmataulun ensin ja käyttää sitten sen olemassa olevaa tunnistetta generointipyynnössä. Medium hyväksyy yhden tunnelmataulun, jonka vaikutus on 0–1 ja pyyntöskeeman oletus 0.23. Koulutetut tyylit, tavallisesti LoRAt, ovat erillinen syöte, joka valitaan tunnisteella ja voimakkuudella -2–2. Valitse työhön sopiva syöte: lähdekuva aloittaa kohtauksen, viite ehdottaa ulkonäköä ja tunnelmataulu tai koulutettu tyyli antaa uudelleenkäytettävän suunnan.\n\n### Hallitse tulkintaa ja visuaalista tulosta\n\nCreativity ohjaa kehotteen laajennusta. Raw poistaa laajennuksen käytöstä; low pysyy lähempänä kirjaimellista ohjetta, medium ja high sallivat enemmän tulkintaa. Mediumin mallikohtainen pyyntöskeema käyttää oletuksena low-arvoa. Kirjoita tarkasti määriteltyyn kuvitukseen täydellinen ohje ja aloita hillityllä laajennuksella. Varhaisessa ideoinnissa vapaampi asetus voi kehittää yksinkertaisen konseptin rikkaammaksi kohtaukseksi.\n\nKolme erillistä liukusäädintä muotoilee kuvaa: Intensity, Complexity ja Movement. Kukin saa kokonaisluvun -100–100, ja 0 on neutraali. Intensity siirtää käsittelyä hillityn ja rohkean välillä. Complexity siirtää sitä siistien, minimaalisten sommitelmien ja tiheiden yksityiskohtien välillä. Movement muuttaa visuaalista energiaa, elettä ja liikkeen vaikutelmaa. Movement pysyy pysäytyskuvan asetuksena; se ei generoi animaatiota eikä videoleikettä. Säätimet ovat erillisiä creativityn kehotelaajennuksesta ja voidaan yhdistää viitesyötteisiin.\n\nKäytännön kuvitustyönkulku määrittelee ensin kohtauksen, säätää sitten paletin ja käsittelyn ja hienosäätää lopuksi tiheyttä tai energiaa. Tallenna kehote, viitejoukko ja valinnainen siemen muuttaessasi yhtä asetusta kerrallaan. Joenrantakuvituksessa pienempi complexity voi yksinkertaistaa taustaa ja suurempi movement-arvo ehdottaa eloisampaa ajoasentoa. Nämä ovat valmiista tuloksesta tarkastettavia luovia suuntia, eivät tarkkoja asettelu- tai asentolukituksia.\n\n### Muoto, generointi ja toimitus\n\nMediumin dokumentoitu generointiskeema tarjoaa 1K-tarkkuustason ja yhdeksän kuvasuhdetta: 1:1, 4:3, 3:2, 16:9, 2.35:1, 4:5, 3:4, 2:3 ja 9:16. Valitse haluttu ruutu ennen generointia, jotta ohje voi kuvailla sen sommittelun vastaavasti. Neliökuvitus, leveä tarinakohtaus ja pystykansi tarvitsevat erilaista pääkohteen ja ympäröivien yksityiskohtien sijoittelua.\n\nDokumentoitu generointiprosessi palauttaa työn, joka voi aluksi odottaa. Seuraa sen tilaa valmistumiseen asti ja hae sitten tuloskuvien sijainnit. Säilytä valittu kuva ohjeen, syötekuvien ja ohjausasetusten mukana. Arvioi siluetti, kädet tai pienet esineet, perspektiivi, paletti ja mahdollinen näkyvä teksti ennen sisällyttämistä julkaisuun tai kampanjaan.\n\nMediumin kuvituspainotus on hyödyllinen versiovalinta, ei lupaus identtisistä tuloksista eri kehotteilla. Visuaalinen viite voi ohjata tyyliä kopioimatta kohdetta tai asettelua täydellisesti, ja kuvasta kuvaksi -voimakkuus muuttaa aloituskuvan säilyvää osuutta. Anna vaaditut elementit selvästi, tarkasta jokainen valmis tulos ohjetta vasten ja tee lopulliset sommittelu-, typografia- ja tuotantosäädöt editorissa.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "3d6863c9c05d4275378037daa49415bb580282b48e09370fdb9d3a8240c9e263",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "fi",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">Krea: Krea 2 Medium</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Sulje\">×</button></div><div class=\"idline\"><span>Krea /</span><code>krea/krea-2-medium</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|images|/v1/images/generations|krea%2Fkrea-2-medium\">Kuvat</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\">Krea 2 Medium generoi ilmeikkäitä kuvituksia tekstistä ja valinnaisista visuaalisista syötteistä. Sen laajempi jälkikoulutus suosii vakaita tuloksia kuvituksessa, animessa ja maalauksessa, ja asetukset ohjaavat tyyliä, kehotteen tulkintaa, sommittelun tiheyttä ja visuaalista energiaa.</p><dl class=\"card-io\" data-card-io><div><dt>Hyväksytyt syötteet</dt><dd>Teksti · Kuvat</dd></div><div><dt>Tulokset</dt><dd>Kuvat</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\"><h4>Ilmeikäs kuvitus ja vakaa luova kehitys</h4><p>Krea 2 Medium on alusta asti koulutettu Krea 2 -kuvamalli ilmeikkääseen kuvitukseen. Krea kuvaa sitä Largea pienemmäksi ja laajemmin jälkikoulutetuksi, luonteeltaan vakaammaksi malliksi, joka toimii erityisen hyvin kuvituksessa, animessa ja maalauksessa. Medium ja Large jakavat dokumentoidun ohjausjärjestelmän; versioiden ero koskee mallirakennetta ja visuaalisia taipumuksia, ei erilaista tulostyyppiä.</p><p>Käytä Mediumia toimituksellisten kuvitusten, tarinakohtausten, maalattujen konseptien ja yhtenäisten visuaalisten suuntien kehittämiseen. Aloita ohjeesta, joka yksilöi kohteen, toiminnan, ympäristön, sommittelun, paletin ja tekniikan. Esimerkiksi: ”Pyöräilijä ylittää hiljaisen joenrantasillan aamunkoitteessa, leveä toimituksellinen kuvitus, kerrokselliset guassimuodot, pehmeät siniset varjot ja yksi korallinvärinen korostus, avointa tilaa joen yllä otsikolle.” Käsittele tyhjää tilaa sommittelupyyntönä ja sijoita lopullinen typografia sitten valmiiseen asetteluun.</p><h4>Valmistele teksti- ja kuvasyötteet</h4><p>Generointirajapinta vaatii kehotteen, kuvasuhteen ja tarkkuuden. Teksti antaa kohtauksen ja luovan suunnan. Valinnainen lähdekuva mahdollistaa kuvasta kuvaksi -generoinnin, joka alkaa siitä kuvasta puhtaan kohinan sijaan. Kohinanpoiston voimakkuus on 0–1: 0 säilyttää syötekuvan, 1 korvaa sen kokonaan ja dokumentoitu oletus on 0.99. Käytä lähdekuvaa aloitussommittelun ollessa tärkeä, kuvaile uusi käsittely ja valitse sallittavan muutoksen määrä.</p><p>Kuvatyyliviitteet vaikuttavat visuaaliseen käsittelyyn erillään lähdekuvasta. Mallikohtainen skeema rajaa lähdekuvan ja tyyliviitteen URI-merkkijonot 1 024 merkkiin. Mediumin mallikohtainen skeema hyväksyy enintään kymmenen viitettä; kunkin vaikutus on 0–1 ja oletus 0.5. Valmistele pieni tarkoituksenmukainen viitejoukko: yksi kuva voi määritellä sivellintyön ja toinen paletin tai valaistuksen. Kerro haluttu suhde ohjeessa sen sijaan, että luottaisit sekalaisen kokoelman viestivän yhtenäistä suuntaa.</p><p>Tunnelmataulu ryhmittelee toisiinsa liittyvät viitteet yhteisen tyylin, paletin, tekstuurin tai sommittelun ympärille. Dokumentoitu työnkulku luo tunnelmataulun ensin ja käyttää sitten sen olemassa olevaa tunnistetta generointipyynnössä. Medium hyväksyy yhden tunnelmataulun, jonka vaikutus on 0–1 ja pyyntöskeeman oletus 0.23. Koulutetut tyylit, tavallisesti LoRAt, ovat erillinen syöte, joka valitaan tunnisteella ja voimakkuudella -2–2. Valitse työhön sopiva syöte: lähdekuva aloittaa kohtauksen, viite ehdottaa ulkonäköä ja tunnelmataulu tai koulutettu tyyli antaa uudelleenkäytettävän suunnan.</p><h4>Hallitse tulkintaa ja visuaalista tulosta</h4><p>Creativity ohjaa kehotteen laajennusta. Raw poistaa laajennuksen käytöstä; low pysyy lähempänä kirjaimellista ohjetta, medium ja high sallivat enemmän tulkintaa. Mediumin mallikohtainen pyyntöskeema käyttää oletuksena low-arvoa. Kirjoita tarkasti määriteltyyn kuvitukseen täydellinen ohje ja aloita hillityllä laajennuksella. Varhaisessa ideoinnissa vapaampi asetus voi kehittää yksinkertaisen konseptin rikkaammaksi kohtaukseksi.</p><p>Kolme erillistä liukusäädintä muotoilee kuvaa: Intensity, Complexity ja Movement. Kukin saa kokonaisluvun -100–100, ja 0 on neutraali. Intensity siirtää käsittelyä hillityn ja rohkean välillä. Complexity siirtää sitä siistien, minimaalisten sommitelmien ja tiheiden yksityiskohtien välillä. Movement muuttaa visuaalista energiaa, elettä ja liikkeen vaikutelmaa. Movement pysyy pysäytyskuvan asetuksena; se ei generoi animaatiota eikä videoleikettä. Säätimet ovat erillisiä creativityn kehotelaajennuksesta ja voidaan yhdistää viitesyötteisiin.</p><p>Käytännön kuvitustyönkulku määrittelee ensin kohtauksen, säätää sitten paletin ja käsittelyn ja hienosäätää lopuksi tiheyttä tai energiaa. Tallenna kehote, viitejoukko ja valinnainen siemen muuttaessasi yhtä asetusta kerrallaan. Joenrantakuvituksessa pienempi complexity voi yksinkertaistaa taustaa ja suurempi movement-arvo ehdottaa eloisampaa ajoasentoa. Nämä ovat valmiista tuloksesta tarkastettavia luovia suuntia, eivät tarkkoja asettelu- tai asentolukituksia.</p><h4>Muoto, generointi ja toimitus</h4><p>Mediumin dokumentoitu generointiskeema tarjoaa 1K-tarkkuustason ja yhdeksän kuvasuhdetta: 1:1, 4:3, 3:2, 16:9, 2.35:1, 4:5, 3:4, 2:3 ja 9:16. Valitse haluttu ruutu ennen generointia, jotta ohje voi kuvailla sen sommittelun vastaavasti. Neliökuvitus, leveä tarinakohtaus ja pystykansi tarvitsevat erilaista pääkohteen ja ympäröivien yksityiskohtien sijoittelua.</p><p>Dokumentoitu generointiprosessi palauttaa työn, joka voi aluksi odottaa. Seuraa sen tilaa valmistumiseen asti ja hae sitten tuloskuvien sijainnit. Säilytä valittu kuva ohjeen, syötekuvien ja ohjausasetusten mukana. Arvioi siluetti, kädet tai pienet esineet, perspektiivi, paletti ja mahdollinen näkyvä teksti ennen sisällyttämistä julkaisuun tai kampanjaan.</p><p>Mediumin kuvituspainotus on hyödyllinen versiovalinta, ei lupaus identtisistä tuloksista eri kehotteilla. Visuaalinen viite voi ohjata tyyliä kopioimatta kohdetta tai asettelua täydellisesti, ja kuvasta kuvaksi -voimakkuus muuttaa aloituskuvan säilyvää osuutta. Anna vaaditut elementit selvästi, tarkasta jokainen valmis tulos ohjetta vasten ja tee lopulliset sommittelu-, typografia- ja tuotantosäädöt editorissa.</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 · Kuvat</b> <code>POST /v1/images/generations</code></summary><dl class=\"method-capabilities\"><div><dt>Syötetyypit</dt><dd><code>text</code>, <code>image</code></dd></div><div><dt>Tulostyypit</dt><dd><code>image</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>krea/krea-2-medium</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\">prompt</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\">resolution</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>1K</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\">aspect_ratio</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>1:1, 4:3, 3:2, 16:9, 4:5, 2:3, 9:16</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_references</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>array</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>Kohteiden vähimmäismäärä: 0</div><div>Kohteiden enimmäismäärä: 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\">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, prompt</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, image</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 class=\"card-result-process\" data-billing-basis><h5>Lopullisen veloituksen laskenta</h5><p class=\"note-s\">Näytettyjen hintojen avulla arvioidaan kustannukset ennen generointia. Lopullinen veloitus lasketaan alkuperäiselle generoinnille kirjatun kustannuksen perusteella. Lopullisena laskutettavana määränä ei käytetä tulosteen mitattua kestoa eikä ennustettuja määriä.</p></div><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>Arvioidut vertailuhinnat</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>Ennustettu määrä</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=\"Ennustettu määrä\"><span class=\"card-cell-label\">Ennustettu määrä</span>—</td><td data-cell-label=\"Veloitus\"><span class=\"card-cell-label\">Veloitus</span><div><span>Syöte · Syötetokenit · Arvio vain vertailua varten</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenia</span></div><div><span>Tuloste · Tulostokenit · Arvio vain vertailua varten</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenia</span></div><div><span>Syöte · Välimuistin luku · Arvio vain vertailua varten</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenia</span></div><div><span>Syöte · Välimuistiin kirjoitus · Arvio vain vertailua varten</span> <b>—</b> <span class=\"price-unit\">/ 1K tokenia</span></div><div><span>Syöte · Välimuistiin kirjoitus, 1 tunti · Arvio vain vertailua varten</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>Arvioitu luontikustannus</th><td data-cell-label=\"Hinnasto\"><span class=\"card-cell-label\">Hinnasto</span>—</td><td data-cell-label=\"Ennustettu määrä\"><span class=\"card-cell-label\">Ennustettu määrä</span>yhden generoinnin arvio</td><td data-cell-label=\"Veloitus\"><span class=\"card-cell-label\">Veloitus</span><div><span>Tuloste · Arvioidut generointikustannukset · Arvio vain vertailua varten</span> <b>$0.06</b> <span class=\"price-unit\">arvio ennen generointia</span></div><p class=\"note-s\">Tämä arvio ei ole lisämaksu eikä valmistuneen generoinnin kiinteä hinta.</p></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 · Kuvat</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-1775-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1775-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl</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-1775-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1775-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\nexport AILOOT_API_KEY\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np={&#39;model&#39;: &#39;krea/krea-2-medium&#39;, &#39;prompt&#39;: &#39;a red panda astronaut floating in space, studio lighting&#39;}\n\nPath(&quot;request.json&quot;).write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport base64, json, os, subprocess\nfrom pathlib import Path\nfrom urllib.parse import urlsplit, urljoin\n\ndef save_images(items):\n    if not items: raise SystemExit(&quot;No completed images; retain the full response&quot;)\n    for index, item in enumerate(items):\n        encoded=item.get(&quot;b64_json&quot;)\n        uri=item.get(&quot;url&quot;, &quot;&quot;)\n        if not encoded and uri.startswith(&quot;data:image/&quot;):\n            header, separator, encoded=uri.partition(&quot;,&quot;)\n            if not separator or &quot;;base64&quot; not in header: raise SystemExit(&quot;Unsupported image data URI&quot;)\n        if encoded:\n            raw=base64.b64decode(encoded,validate=True)\n        elif uri:\n            uri=urljoin(&quot;https://api.ailoot.ai&quot;,uri)\n            parsed=urlsplit(uri)\n            if parsed.scheme!=&quot;https&quot; or not parsed.netloc or parsed.username or parsed.password:\n                raise SystemExit(&quot;Invalid returned image URL&quot;)\n            owned=parsed.netloc==&quot;api.ailoot.ai&quot; and parsed.path.startswith(&quot;/v1/media/assets/&quot;) and parsed.path.endswith(&quot;/content&quot;)\n            args=[&quot;curl&quot;,&quot;--fail-with-body&quot;,&quot;--silent&quot;,&quot;--show-error&quot;,uri]\n            if owned: args += [&quot;-H&quot;,&quot;Authorization: Bearer &quot;+os.environ[&quot;AILOOT_API_KEY&quot;]]\n            temporary=Path(f&quot;image-{index}.bin&quot;)\n            subprocess.run(args+[&quot;-o&quot;,str(temporary)],check=True)\n            raw=temporary.read_bytes()\n            temporary.unlink()\n        else: raise SystemExit(&quot;Image has neither bytes nor URL&quot;)\n        if not raw: raise SystemExit(&quot;Empty image result&quot;)\n        ext=&quot;png&quot; if raw.startswith(b&quot;\\x89PNG&quot;) else &quot;jpg&quot; if raw.startswith(b&quot;\\xff\\xd8&quot;) else &quot;webp&quot; if raw[:4]==b&quot;RIFF&quot; and raw[8:12]==b&quot;WEBP&quot; else &quot;svg&quot; if raw.lstrip().startswith((b&quot;&lt;svg&quot;,b&quot;&lt;?xml&quot;)) else &quot;bin&quot;\n        Path(f&quot;image-{index}.{ext}&quot;).write_bytes(raw)\n    print(&quot;Every returned image saved; complete response metadata retained&quot;)\nsave_images(json.loads(Path(&quot;result.json&quot;).read_text())[&quot;data&quot;])\nPY_RESULT\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 · Kuvat</h4><p class=\"note-s\">Lataa jokainen palautettu kuva tai tallenna sen Base64-sisältö</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-1776-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1776-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-1776-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1776-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\">Tallenna jokainen valmistunut kuva; nouda jokainen palautettu URL tai pura sen Base64-sisältö.</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><details class=\"card-about\" data-output-fields><summary>Vastauksen kentät</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Kenttä</th><th>Tyyppi</th></tr></thead><tbody><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">created</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span></td></tr><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">data[].url</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span></td></tr><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">data[].b64_json</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span></td></tr><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">usage</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span></td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Aliakset</h3><h4>Mallin aliakset</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=krea%2Fkrea-2-medium&amp;route=Ultra&amp;caller=krea%2Fkrea-2-medium&amp;fmt=images\"><code>krea/krea-2-medium</code></a></span></p><h4>Menetelmäpolkujen aliakset</h4><p class=\"note-s\"><code>/v1/images</code></p><h4>Liittyvät kutsujan ID:t</h4><p class=\"note-s\"><a href=\"#m=krea%2Fkrea-2-medium&amp;route=Ultra&amp;caller=krea%2Fkrea-2-medium&amp;fmt=images\"><code>krea/krea-2-medium</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "krea/krea-2-medium",
        "fmt": "images",
        "http": "POST",
        "path": "/v1/images/generations",
        "request_model_id": "krea/krea-2-medium",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|images|/v1/images/generations|krea%2Fkrea-2-medium",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "Näytettyjen hintojen avulla arvioidaan kustannukset ennen generointia. Lopullinen veloitus lasketaan alkuperäiselle generoinnille kirjatun kustannuksen perusteella. Lopullisena laskutettavana määränä ei käytetä tulosteen mitattua kestoa eikä ennustettuja määriä.",
          "forecast_quantity_is_estimate": true,
          "physical_output_is_billable_quantity": false,
          "version": "original_invoice_usd_v1"
        },
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "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": "image",
              "fields": [
                {
                  "description": null,
                  "name": "created",
                  "type": null
                },
                {
                  "description": null,
                  "name": "data[].url",
                  "type": null
                },
                {
                  "description": null,
                  "name": "data[].b64_json",
                  "type": null
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": null
                }
              ]
            },
            "parameters": [
              {
                "enum": [
                  "krea/krea-2-medium"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "min_length": 1,
                "name": "prompt",
                "required": true,
                "type": "string"
              },
              {
                "enum": [
                  "1K"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "type": "string"
              },
              {
                "enum": [
                  "1:1",
                  "4:3",
                  "3:2",
                  "16:9",
                  "4:5",
                  "2:3",
                  "9:16"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "type": "string"
              },
              {
                "items": {
                  "properties": {
                    "image_url": {
                      "properties": {
                        "url": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "url"
                      ],
                      "type": "object"
                    },
                    "type": {
                      "const": "image_url"
                    }
                  },
                  "required": [
                    "type",
                    "image_url"
                  ],
                  "type": "object"
                },
                "maximum_items": 1,
                "minimum_items": 0,
                "name": "input_references",
                "required": false,
                "type": "array"
              },
              {
                "name": "provider",
                "required": false,
                "type": "object"
              }
            ],
            "request_schema": {
              "properties": {
                "aspect_ratio": {
                  "enum": [
                    "1:1",
                    "4:3",
                    "3:2",
                    "16:9",
                    "4:5",
                    "2:3",
                    "9:16"
                  ],
                  "type": "string"
                },
                "input_references": {
                  "items": {
                    "properties": {
                      "image_url": {
                        "properties": {
                          "url": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url"
                    ],
                    "type": "object"
                  },
                  "maxItems": 1,
                  "minItems": 0,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "krea/krea-2-medium"
                  ],
                  "type": "string"
                },
                "prompt": {
                  "minLength": 1,
                  "type": "string"
                },
                "provider": {
                  "description": "Exact image provider preferences from the documented image request schema.",
                  "type": "object"
                },
                "resolution": {
                  "enum": [
                    "1K"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "model",
                "prompt"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "model": "krea/krea-2-medium",
                "prompt": "a red panda astronaut floating in space, studio lighting"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text",
              "image"
            ],
            "required": [
              "model",
              "prompt"
            ]
          },
          "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/images/generations"
          },
          "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": "image",
            "fields": [
              {
                "description": null,
                "name": "created",
                "type": null
              },
              {
                "description": null,
                "name": "data[].url",
                "type": null
              },
              {
                "description": null,
                "name": "data[].b64_json",
                "type": null
              },
              {
                "description": null,
                "name": "usage",
                "type": null
              }
            ]
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "basis": "Tämä arvio ei ole lisämaksu eikä valmistuneen generoinnin kiinteä hinta.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Arvioitu luontikustannus",
            "units": [
              {
                "amount": "0.06",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.06",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\nexport AILOOT_API_KEY\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np={'model': 'krea/krea-2-medium', 'prompt': 'a red panda astronaut floating in space, studio lighting'}\n\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport base64, json, os, subprocess\nfrom pathlib import Path\nfrom urllib.parse import urlsplit, urljoin\n\ndef save_images(items):\n    if not items: raise SystemExit(\"No completed images; retain the full response\")\n    for index, item in enumerate(items):\n        encoded=item.get(\"b64_json\")\n        uri=item.get(\"url\", \"\")\n        if not encoded and uri.startswith(\"data:image/\"):\n            header, separator, encoded=uri.partition(\",\")\n            if not separator or \";base64\" not in header: raise SystemExit(\"Unsupported image data URI\")\n        if encoded:\n            raw=base64.b64decode(encoded,validate=True)\n        elif uri:\n            uri=urljoin(\"https://api.ailoot.ai\",uri)\n            parsed=urlsplit(uri)\n            if parsed.scheme!=\"https\" or not parsed.netloc or parsed.username or parsed.password:\n                raise SystemExit(\"Invalid returned image URL\")\n            owned=parsed.netloc==\"api.ailoot.ai\" and parsed.path.startswith(\"/v1/media/assets/\") and parsed.path.endswith(\"/content\")\n            args=[\"curl\",\"--fail-with-body\",\"--silent\",\"--show-error\",uri]\n            if owned: args += [\"-H\",\"Authorization: Bearer \"+os.environ[\"AILOOT_API_KEY\"]]\n            temporary=Path(f\"image-{index}.bin\")\n            subprocess.run(args+[\"-o\",str(temporary)],check=True)\n            raw=temporary.read_bytes()\n            temporary.unlink()\n        else: raise SystemExit(\"Image has neither bytes nor URL\")\n        if not raw: raise SystemExit(\"Empty image result\")\n        ext=\"png\" if raw.startswith(b\"\\x89PNG\") else \"jpg\" if raw.startswith(b\"\\xff\\xd8\") else \"webp\" if raw[:4]==b\"RIFF\" and raw[8:12]==b\"WEBP\" else \"svg\" if raw.lstrip().startswith((b\"<svg\",b\"<?xml\")) else \"bin\"\n        Path(f\"image-{index}.{ext}\").write_bytes(raw)\n    print(\"Every returned image saved; complete response metadata retained\")\nsave_images(json.loads(Path(\"result.json\").read_text())[\"data\"])\nPY_RESULT\n",
            "label": "curl · exact creation/save all outputs",
            "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": "images",
        "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",
          "image"
        ],
        "label": "Kuvat",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [
          "/v1/images"
        ],
        "native_endpoint": "images",
        "out": null,
        "output": [
          "image"
        ],
        "path": "/v1/images/generations",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "basis": "This estimate is not an additional charge or a fixed rate for the completed generation.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Estimated generation cost",
            "units": [
              {
                "amount": "0.06",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.06",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "request_model_id": "krea/krea-2-medium",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.06",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.06",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ]
      }
    }
  ],
  "model_id": "krea/krea-2-medium",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "027ca5954a192cadd204d81f5d3ee1a469e8b39da7c8f98de2c5c7566dfd8cb0",
    "input_html_sha256": "5c09b8cc83c5717dfc8003162662d9ed36b861e678d6d60703e25d194a85aaec",
    "private_audit_sha256": "7f24046227af12086229d118fcd4e720ef0c5b4f3e2c15d567f41a3693318ccb",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/fi/krea-krea-2-medium/",
    "description": "Krea 2 Medium generoi ilmeikkäitä kuvituksia tekstistä ja valinnaisista visuaalisista syötteistä. Sen laajempi jälkikoulutus suosii vakaita tuloksia kuvituksessa, animessa ja maalauksessa, ja asetukset ohjaavat tyyliä, kehotteen tulkintaa, sommittelun tiheyttä ja visuaalista energiaa.",
    "locale": "fi",
    "md_url": "https://ailoot.ai/models/fi/krea-krea-2-medium/index.md",
    "title": "Krea: Krea 2 Medium — Ailoot",
    "url": "https://ailoot.ai/models/fi/krea-krea-2-medium/"
  },
  "rawModel": {
    "about": "### Ilmeikäs kuvitus ja vakaa luova kehitys\n\nKrea 2 Medium on alusta asti koulutettu Krea 2 -kuvamalli ilmeikkääseen kuvitukseen. Krea kuvaa sitä Largea pienemmäksi ja laajemmin jälkikoulutetuksi, luonteeltaan vakaammaksi malliksi, joka toimii erityisen hyvin kuvituksessa, animessa ja maalauksessa. Medium ja Large jakavat dokumentoidun ohjausjärjestelmän; versioiden ero koskee mallirakennetta ja visuaalisia taipumuksia, ei erilaista tulostyyppiä.\n\nKäytä Mediumia toimituksellisten kuvitusten, tarinakohtausten, maalattujen konseptien ja yhtenäisten visuaalisten suuntien kehittämiseen. Aloita ohjeesta, joka yksilöi kohteen, toiminnan, ympäristön, sommittelun, paletin ja tekniikan. Esimerkiksi: ”Pyöräilijä ylittää hiljaisen joenrantasillan aamunkoitteessa, leveä toimituksellinen kuvitus, kerrokselliset guassimuodot, pehmeät siniset varjot ja yksi korallinvärinen korostus, avointa tilaa joen yllä otsikolle.” Käsittele tyhjää tilaa sommittelupyyntönä ja sijoita lopullinen typografia sitten valmiiseen asetteluun.\n\n### Valmistele teksti- ja kuvasyötteet\n\nGenerointirajapinta vaatii kehotteen, kuvasuhteen ja tarkkuuden. Teksti antaa kohtauksen ja luovan suunnan. Valinnainen lähdekuva mahdollistaa kuvasta kuvaksi -generoinnin, joka alkaa siitä kuvasta puhtaan kohinan sijaan. Kohinanpoiston voimakkuus on 0–1: 0 säilyttää syötekuvan, 1 korvaa sen kokonaan ja dokumentoitu oletus on 0.99. Käytä lähdekuvaa aloitussommittelun ollessa tärkeä, kuvaile uusi käsittely ja valitse sallittavan muutoksen määrä.\n\nKuvatyyliviitteet vaikuttavat visuaaliseen käsittelyyn erillään lähdekuvasta. Mallikohtainen skeema rajaa lähdekuvan ja tyyliviitteen URI-merkkijonot 1 024 merkkiin. Mediumin mallikohtainen skeema hyväksyy enintään kymmenen viitettä; kunkin vaikutus on 0–1 ja oletus 0.5. Valmistele pieni tarkoituksenmukainen viitejoukko: yksi kuva voi määritellä sivellintyön ja toinen paletin tai valaistuksen. Kerro haluttu suhde ohjeessa sen sijaan, että luottaisit sekalaisen kokoelman viestivän yhtenäistä suuntaa.\n\nTunnelmataulu ryhmittelee toisiinsa liittyvät viitteet yhteisen tyylin, paletin, tekstuurin tai sommittelun ympärille. Dokumentoitu työnkulku luo tunnelmataulun ensin ja käyttää sitten sen olemassa olevaa tunnistetta generointipyynnössä. Medium hyväksyy yhden tunnelmataulun, jonka vaikutus on 0–1 ja pyyntöskeeman oletus 0.23. Koulutetut tyylit, tavallisesti LoRAt, ovat erillinen syöte, joka valitaan tunnisteella ja voimakkuudella -2–2. Valitse työhön sopiva syöte: lähdekuva aloittaa kohtauksen, viite ehdottaa ulkonäköä ja tunnelmataulu tai koulutettu tyyli antaa uudelleenkäytettävän suunnan.\n\n### Hallitse tulkintaa ja visuaalista tulosta\n\nCreativity ohjaa kehotteen laajennusta. Raw poistaa laajennuksen käytöstä; low pysyy lähempänä kirjaimellista ohjetta, medium ja high sallivat enemmän tulkintaa. Mediumin mallikohtainen pyyntöskeema käyttää oletuksena low-arvoa. Kirjoita tarkasti määriteltyyn kuvitukseen täydellinen ohje ja aloita hillityllä laajennuksella. Varhaisessa ideoinnissa vapaampi asetus voi kehittää yksinkertaisen konseptin rikkaammaksi kohtaukseksi.\n\nKolme erillistä liukusäädintä muotoilee kuvaa: Intensity, Complexity ja Movement. Kukin saa kokonaisluvun -100–100, ja 0 on neutraali. Intensity siirtää käsittelyä hillityn ja rohkean välillä. Complexity siirtää sitä siistien, minimaalisten sommitelmien ja tiheiden yksityiskohtien välillä. Movement muuttaa visuaalista energiaa, elettä ja liikkeen vaikutelmaa. Movement pysyy pysäytyskuvan asetuksena; se ei generoi animaatiota eikä videoleikettä. Säätimet ovat erillisiä creativityn kehotelaajennuksesta ja voidaan yhdistää viitesyötteisiin.\n\nKäytännön kuvitustyönkulku määrittelee ensin kohtauksen, säätää sitten paletin ja käsittelyn ja hienosäätää lopuksi tiheyttä tai energiaa. Tallenna kehote, viitejoukko ja valinnainen siemen muuttaessasi yhtä asetusta kerrallaan. Joenrantakuvituksessa pienempi complexity voi yksinkertaistaa taustaa ja suurempi movement-arvo ehdottaa eloisampaa ajoasentoa. Nämä ovat valmiista tuloksesta tarkastettavia luovia suuntia, eivät tarkkoja asettelu- tai asentolukituksia.\n\n### Muoto, generointi ja toimitus\n\nMediumin dokumentoitu generointiskeema tarjoaa 1K-tarkkuustason ja yhdeksän kuvasuhdetta: 1:1, 4:3, 3:2, 16:9, 2.35:1, 4:5, 3:4, 2:3 ja 9:16. Valitse haluttu ruutu ennen generointia, jotta ohje voi kuvailla sen sommittelun vastaavasti. Neliökuvitus, leveä tarinakohtaus ja pystykansi tarvitsevat erilaista pääkohteen ja ympäröivien yksityiskohtien sijoittelua.\n\nDokumentoitu generointiprosessi palauttaa työn, joka voi aluksi odottaa. Seuraa sen tilaa valmistumiseen asti ja hae sitten tuloskuvien sijainnit. Säilytä valittu kuva ohjeen, syötekuvien ja ohjausasetusten mukana. Arvioi siluetti, kädet tai pienet esineet, perspektiivi, paletti ja mahdollinen näkyvä teksti ennen sisällyttämistä julkaisuun tai kampanjaan.\n\nMediumin kuvituspainotus on hyödyllinen versiovalinta, ei lupaus identtisistä tuloksista eri kehotteilla. Visuaalinen viite voi ohjata tyyliä kopioimatta kohdetta tai asettelua täydellisesti, ja kuvasta kuvaksi -voimakkuus muuttaa aloituskuvan säilyvää osuutta. Anna vaaditut elementit selvästi, tarkasta jokainen valmis tulos ohjetta vasten ja tee lopulliset sommittelu-, typografia- ja tuotantosäädöt editorissa.",
    "alias_of": null,
    "aliases": [],
    "author": "Krea",
    "capabilities": {
      "context_length": 65536,
      "manufacturer_input": [
        "text",
        "image"
      ],
      "manufacturer_output": [
        "image"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.06",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.06",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ],
        "summary": "Konfiguraation täydet hintatiedot lisätiedoissa."
      }
    ],
    "ctx": null,
    "formats": [
      "images"
    ],
    "id": "krea/krea-2-medium",
    "input": [
      "text",
      "image"
    ],
    "kind": "image",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "Näytettyjen hintojen avulla arvioidaan kustannukset ennen generointia. Lopullinen veloitus lasketaan alkuperäiselle generoinnille kirjatun kustannuksen perusteella. Lopullisena laskutettavana määränä ei käytetä tulosteen mitattua kestoa eikä ennustettuja määriä.",
          "forecast_quantity_is_estimate": true,
          "physical_output_is_billable_quantity": false,
          "version": "original_invoice_usd_v1"
        },
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "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": "image",
              "fields": [
                {
                  "description": null,
                  "name": "created",
                  "type": null
                },
                {
                  "description": null,
                  "name": "data[].url",
                  "type": null
                },
                {
                  "description": null,
                  "name": "data[].b64_json",
                  "type": null
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": null
                }
              ]
            },
            "parameters": [
              {
                "enum": [
                  "krea/krea-2-medium"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "min_length": 1,
                "name": "prompt",
                "required": true,
                "type": "string"
              },
              {
                "enum": [
                  "1K"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "type": "string"
              },
              {
                "enum": [
                  "1:1",
                  "4:3",
                  "3:2",
                  "16:9",
                  "4:5",
                  "2:3",
                  "9:16"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "type": "string"
              },
              {
                "items": {
                  "properties": {
                    "image_url": {
                      "properties": {
                        "url": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "url"
                      ],
                      "type": "object"
                    },
                    "type": {
                      "const": "image_url"
                    }
                  },
                  "required": [
                    "type",
                    "image_url"
                  ],
                  "type": "object"
                },
                "maximum_items": 1,
                "minimum_items": 0,
                "name": "input_references",
                "required": false,
                "type": "array"
              },
              {
                "name": "provider",
                "required": false,
                "type": "object"
              }
            ],
            "request_schema": {
              "properties": {
                "aspect_ratio": {
                  "enum": [
                    "1:1",
                    "4:3",
                    "3:2",
                    "16:9",
                    "4:5",
                    "2:3",
                    "9:16"
                  ],
                  "type": "string"
                },
                "input_references": {
                  "items": {
                    "properties": {
                      "image_url": {
                        "properties": {
                          "url": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url"
                    ],
                    "type": "object"
                  },
                  "maxItems": 1,
                  "minItems": 0,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "krea/krea-2-medium"
                  ],
                  "type": "string"
                },
                "prompt": {
                  "minLength": 1,
                  "type": "string"
                },
                "provider": {
                  "description": "Exact image provider preferences from the documented image request schema.",
                  "type": "object"
                },
                "resolution": {
                  "enum": [
                    "1K"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "model",
                "prompt"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "model": "krea/krea-2-medium",
                "prompt": "a red panda astronaut floating in space, studio lighting"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text",
              "image"
            ],
            "required": [
              "model",
              "prompt"
            ]
          },
          "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/images/generations"
          },
          "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": "image",
            "fields": [
              {
                "description": null,
                "name": "created",
                "type": null
              },
              {
                "description": null,
                "name": "data[].url",
                "type": null
              },
              {
                "description": null,
                "name": "data[].b64_json",
                "type": null
              },
              {
                "description": null,
                "name": "usage",
                "type": null
              }
            ]
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "basis": "Tämä arvio ei ole lisämaksu eikä valmistuneen generoinnin kiinteä hinta.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Arvioitu luontikustannus",
            "units": [
              {
                "amount": "0.06",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.06",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\nexport AILOOT_API_KEY\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np={'model': 'krea/krea-2-medium', 'prompt': 'a red panda astronaut floating in space, studio lighting'}\n\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport base64, json, os, subprocess\nfrom pathlib import Path\nfrom urllib.parse import urlsplit, urljoin\n\ndef save_images(items):\n    if not items: raise SystemExit(\"No completed images; retain the full response\")\n    for index, item in enumerate(items):\n        encoded=item.get(\"b64_json\")\n        uri=item.get(\"url\", \"\")\n        if not encoded and uri.startswith(\"data:image/\"):\n            header, separator, encoded=uri.partition(\",\")\n            if not separator or \";base64\" not in header: raise SystemExit(\"Unsupported image data URI\")\n        if encoded:\n            raw=base64.b64decode(encoded,validate=True)\n        elif uri:\n            uri=urljoin(\"https://api.ailoot.ai\",uri)\n            parsed=urlsplit(uri)\n            if parsed.scheme!=\"https\" or not parsed.netloc or parsed.username or parsed.password:\n                raise SystemExit(\"Invalid returned image URL\")\n            owned=parsed.netloc==\"api.ailoot.ai\" and parsed.path.startswith(\"/v1/media/assets/\") and parsed.path.endswith(\"/content\")\n            args=[\"curl\",\"--fail-with-body\",\"--silent\",\"--show-error\",uri]\n            if owned: args += [\"-H\",\"Authorization: Bearer \"+os.environ[\"AILOOT_API_KEY\"]]\n            temporary=Path(f\"image-{index}.bin\")\n            subprocess.run(args+[\"-o\",str(temporary)],check=True)\n            raw=temporary.read_bytes()\n            temporary.unlink()\n        else: raise SystemExit(\"Image has neither bytes nor URL\")\n        if not raw: raise SystemExit(\"Empty image result\")\n        ext=\"png\" if raw.startswith(b\"\\x89PNG\") else \"jpg\" if raw.startswith(b\"\\xff\\xd8\") else \"webp\" if raw[:4]==b\"RIFF\" and raw[8:12]==b\"WEBP\" else \"svg\" if raw.lstrip().startswith((b\"<svg\",b\"<?xml\")) else \"bin\"\n        Path(f\"image-{index}.{ext}\").write_bytes(raw)\n    print(\"Every returned image saved; complete response metadata retained\")\nsave_images(json.loads(Path(\"result.json\").read_text())[\"data\"])\nPY_RESULT\n",
            "label": "curl · exact creation/save all outputs",
            "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": "images",
        "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",
          "image"
        ],
        "label": "Kuvat",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [
          "/v1/images"
        ],
        "native_endpoint": "images",
        "out": null,
        "output": [
          "image"
        ],
        "path": "/v1/images/generations",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "basis": "This estimate is not an additional charge or a fixed rate for the completed generation.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Estimated generation cost",
            "units": [
              {
                "amount": "0.06",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.06",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "request_model_id": "krea/krea-2-medium",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.06",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.06",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "krea/krea-2-medium",
        "request_model_id": "krea/krea-2-medium",
        "route_label": "Ultra"
      }
    ],
    "name": "Krea: Krea 2 Medium",
    "price": {
      "estimate_only": true,
      "in": null,
      "in_label": null,
      "out": 0.06,
      "out_label": "estimate before generation",
      "scope_label": "Estimated generation cost",
      "sort_in": null,
      "sort_out": 0.06,
      "varies": false
    },
    "short": "Krea 2 Medium generoi ilmeikkäitä kuvituksia tekstistä ja valinnaisista visuaalisista syötteistä. Sen laajempi jälkikoulutus suosii vakaita tuloksia kuvituksessa, animessa ja maalauksessa, ja asetukset ohjaavat tyyliä, kehotteen tulkintaa, sommittelun tiheyttä ja visuaalista energiaa."
  },
  "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": "Krea 2 Medium generoi ilmeikkäitä kuvituksia tekstistä ja valinnaisista visuaalisista syötteistä. Sen laajempi jälkikoulutus suosii vakaita tuloksia kuvituksessa, animessa ja maalauksessa, ja asetukset ohjaavat tyyliä, kehotteen tulkintaa, sommittelun tiheyttä ja visuaalista energiaa.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "17acfdf9ded05121ae37484fdfcf2b236fd9390fa921727691235124902fd4eb",
    "renderer_sha256": "303a59603e2bc29ba8fda690e95fd32cec68de223d92e26054a88babff801dd7"
  },
  "sourceRevision": "ad916e5a0e818c560422eb147173f5431cc9d95f301d91b7c71c3fcaa3b818a5"
}
