• Vibekoodailua lokaaleilla malleilla

    Kuvankaappaus lokaalilla AI-mallilla koodatusta tekstieditorista

    Taustaa

    Noin viikko sitten koetin enismmäistä kertaa käyttää AI:ta eli tuttavallisemmin tekoälyä koodaamiseen. Teknisemmin ilmaistuna käytin siis koodaamiseen LLM:ää eli suurta kielimallia joka kuitenkin tavan tallaajalle on helpompi ilmaista vain ympäripyöreällä ilmaisulla tekoäly.

    Olen aikaisemmin käyttänyt kielimalleja koodamisessa apuna siten että olen pitänyt sitä Googlaamisen vaihtoehtona ongelmien ilmetessä. Esimerkiksi vaikkapa jos on ollut tarve pilkkoa merkkijono Pythonilla tietystä merkistä eteenpäin mutta en ole muistanut syntaksia, en olekaan aina Googlannut ongelmaan vastausta vaan olen käyttänyt lokaalia kielimallia ja kysynyt siltä vastausta ongelmaan. Sen jälkeen olen kopioinut vastauksesta relevantit osuudet omaan koodiin manuaalisesti.

    Olen kuitenkin nyt viime viikolla ja tällä kuluneella viikolla muutamina iltoina leikkinyt enemmänkin koodin kanssa, mutta tällä kertaa siten että en ole itse kirjoittanut koodia vaan olen pyytänyt AI-agenttia kirjoittamaan sen puolestani alusta loppuun asti.

    Työkalu jota olen käyttänyt agenttina on Pi (pi.dev) ja kielimalli jota olen käyttänyt on ollut ensin Gemma 4 E4B ja myöhemmin Qwen 3.6 35B A3B UD. Tällä hetkellä tätä kirjoittaessa testauksessa on Qwen 3.6 27B malli jonka juuri latasin koneelleni. Pitä olen ajan ajanut Ubuntu Linuxissa jota pyöritän Windowsissa WSL2:ssa.

    Viikon aikana olen koettanut koodata pienimuotoisia ohjelmia testin vuoksi että saan edes jonkinlaisen käsityksen siitä mitä kaikkea näillä voi tehdä. Tietenkin osaavissa käsissä niillä voi varmasti tehdä paljon enemmänkin etenkin jos käyttää parempia malleja, mutta omassa testailussa tärkein vaatimus on ollut lokaalien mallin käyttö.

    Lokaalin mallien käytön perustelut on käytännössä kustannukset sekä ympäristö. En halua maksaa kielimallin käytöstä jossain muualla kun voin pyörittää omiin tarpeisiini tarpeeksi hyvää mallia omalla koneellani. Lisäksi ajatuksen tasolla itselläni tökkii AI:n aiheuttamat negatiiviset ympäristövaikutukset, joten en halua että energia- ja vesisyöpöt konesalit joutuvat pyörimään 24/7 vain sen takia että voin itsekin käyttää niitä kaikkeen kivaan.

    Tietenkin lokaalit mallit on vaatineet kouluttaessa jo hillittömästi konetehoa ja niillä on negatiivinen vaikutus ympäristöön, mutta jatkossa ne ei kuluta yhtään virtaa omalla koneellani sinä aikana kun en niitä käytä, eli koneen ei tarvitse olla pyörimässä 24/7. Vähän samalla tapaa kuin CD vs. suoratoistopalvelut. Energiankulutus on tapahtunut valmistusvaiheessa, mutta ne eivät kuluta virtaa silloin kun niitä ei käytetä kun taas suoratoistopalvelut vaativat sen että konesalit pyörivät 24/7 vaikka en sattuisi sieltä mitään kuuntelemaan.

    Mitä näillä olen saanut aikaiseksi

    Olen tähän mennessä muutaman pienen koodauksen saanut näillä tehty joten laitan tähän alle lyhyesti niistä mitä kaikkea niillä olen saanut aikaiseksi näiden työkalujen opetteluvaiheessa.

    Wallhaven.cc:n kuvien lataaja

    Ensimmäinen minkä koodasin – tai tarkemmin ottaen pyysin tekoälytyökaluja tekemään sen koodauksen – oli wallhaven.cc sivustolta taustakuvien lataajan. Käyttäjä voi antaa parametrinä hakusanan jonka jälkeen skripti hakee taustakuvia sillä hakusanalla.

    Lisäksi skripti osaa lukea konfiguraatiotiedoston minne käyttäjän on pitänyt syöttää API-avain (jonka rekisteröitynyt käyttäjä saa haettua wallhaven.cc-sivustolta asetuksista). Konfiguraatiotiedostosta luetaan myös muutamia muita asetuksia, eli ainakin yksinkertaisen skriptin sain toteutettua jossa on tuki konfiguraatiotiedostoille.

    Valokuvien automaattinen siirtäjä

    Toinen skripti mitä olen tehnyt on ollut oikeasti jopa hyödyllinen itselleni. Normaalisti olen valokuvat siirtänyt muistikortilta tietokoneelle käsipelissä oikeisiin kansioihin. Tämä kuvien importoija sitä vastoin tekee sen automaattisesti. Kun laitan muistikortin tietokoneeseen kiinni ja käynnistän skriptin käy skripti läpi kaikki valokuvat joita se löytää muistikortilta.

    Skripti käyttää exiftool-nimistä ohjelmaa katsomaan kuvien metadatoista kuvan ottamisen päivämäärän ja muodostaa niistä automaattisesti oikeat polut omien tarpeideni mukaisesti. Kopioin aina kuvat YYYY\MM\DD rakenteeseen, eli 23.04.2026 otetut kuvat menisivät 2026\04\23 kansioon. Skripti listaa ensin löytämänsä kuvat ja kun kirjoitan “Yes” tai “y” ja painan enter alkaa skripti kopioimaan kuvat koneelle oikeisiin kansioihin.

    Skirpti osaa myös luoda puuttuvat kansiot automaattisesti ja lisäksi se tajuaa olla ylikirjoittamatta jo aikaisemmin kovalevyllä samalla nimellä löytyviä tiedostoja.

    Sivuston pystyssäolon tarkistaja

    Sivustojen pystyssä olon tarkastajan web-käyttöliittymä

    Yksi skripti mikä tuli vibekoodattua on sivustojen pystyssä olon tarkistaja. Skripti tarkistaa sites.txt tiedostosta onko sivusto vielä pystyssä ja löytyykö sieltä sitä sisältöä mitä sinne on määritetty.

    Esimerkiksi https://deepcontrastmedia.com sivulta skripti tarkastaa löytyykö sieltä teksti “Audiovisuaalista tuotantoa”. Mikäli sivu on pystyssä mutta palauttaa sisältöä jossa ei löydykään tuota tekstiä niin silloin skripti osaa kertoa sen käyttöliittymässä. Samoin jos sivu ei vastaa lainkaan eli se on kaatunut osaa skripti ilmoittaa siitäkin.

    Alunperin tein tämän komentorivillä ajettavaksi skriptiksi, mutta myöhemmin sitten muutin tämän toimimaan webbiselaimessa. Lisäksi web-käyttöliittymään tuli lisättyä tekstikenttä mihin voin lisätä domainin ja tekstin mitä sieltä pitää löytyä jolla voin validoida sivuston toimivuuden.

    Kuten voi arvata, tämä sivu ei ole auki julkiseen Internetiin koska muuten tuon tekstikentän kautta olisi kohta levy tungettu täyteen kaikkea tai vähintäänkin yritetty tunkeutua palvelimelle etsimällä tietoturva-aukkoja.

    Boom

    Kuvankaappaus Boom-nimisen pelin prototyypistä jonka sai tehtyä Qwen 3.6:n 35b A3B UD:llä.

    Ajatus mikä nousi mieleeni etsiessä rajoja mitä kaikkea näillä lokaaleilla malleilla oman koneen tehojen riittäessä voisi tehdä oli se, saisinko nämä tekemään yksinkertaisen raycaster-tyylillä toteutetun pelin tai ainakin edes mitenkään toimivan prototyypin. Esimerkkinä raycaster-pelistä on klassinen Wolfenstein 3D.

    Yllättävää kyllä, Qwen 3.6 35b A3B:lla (tai A3B UD:lla) tämäkin onnistui. Peli lukee “maps.txt” tiedoston ja generoi sen mukaan kartan jossa pelaajana sitten voi pyöriä W, A, S, D napeilla sekä nuolilla liikutellen. Käyttöliittymä sanoo kyllä että myös hiirellä voisi katsella ympärilleen mutta ainakaan vielä moinen ei ole mahdollista.

    Tämä oli itselleni todellinen wow että tällaisen pystyi näillä jo tekemään muutamilla promptauksilla. Kehitys on mennyt selvästi jo kovasti eteenpäin.

    NoteBad

    Viimeisin testailu oli koodata yksinkertainen tekstieditori joka on vähän kuten Microsoft Windowsin Notepad mutta simppelimpi ja vibekoodattu. Tämäkin onnistui, mutta ominaisuuksia vielä puuttuu koska en saanut niitä vibekoodaamalla vielä toimimaan. Esimerkiksi en ainakaan saanut vasempaan laitaan rivien näyttämistä oikein joten sitä en ole lisännyt lainkaan. Lisäksi ominaisuuksia puuttuu koska en ole niitä vielä koettanut edes lisätä (kuten kopioi/liitä valikot, Ctrl + S -pikanapilla tallennus yms.).

    Saapa nähdä tuleeko tätä projektia jatkettua koskaan sen enempää kuin muitakaan, kuitenkin nämä ovat enemmänkin harjoitteluprojekteja olleet jotta saan perspektiiviä mitä kaikkea voin näillä tehdä.

    Loppusanat

    Kuten yllä olevista esimerkeistä voi nähdä, lokaaleilla malleilla on mahdollista tehdä jo jotain pienimuotoista koodausta mikäli koneessa on riittävästi tehoa.

    Koneessani on näytönohjaimena NVidia RTX 4060 Ti jossa on 16 GB VRAMia ja tavallista RAM-muistia löytyy 32 GB joten tehojen puolesta kone on selvästi tehokkaampi kuin monelta kotona löytyy. Silti tämäkin on kohtalaisen tehoton jos AI-työkaluja haluaisi käyttää ammattimaisesti ja nopeudella olisi enemmän merkitystä, mutta tällaiseen omaan räpellykseen kone on vielä riittänyt moneen.

    Kokemukset ovat olleet positiiviset. Monia asioita on tullut opittua ja paljon olisi vielä opittavaa edessä, joten aika näyttää mitä tulevaisuudessa näiden kanssa keksii.

  • Leffalauantai: Tropic Thunder

    Jack Black elokuvassa Tropic Thunder.

    Tropic Thunder (IMDB) on Ben Stillerin ohjaama ja tähdittämä parodiallinen komedia vuodelta 2008. Pääosarooleissa Stillerin lisäksi nähdään Jack Black, Robert Downey Jr. ja Brandon T. Jackson.

    Amerikkalaiset ovat olleet sotimassa Vietnamissa. Osa sotilaista on palannut ja osa palanneista on kirjoittanut kirjan kokemuksistaan. Vain yksi heistä on saanut elokuvasopimuksen ja tästä elokuvan tekemisestä Tropic Thunder kertoo. Elokuvan tekeminen muuttuu merkittävästi alkuperäisestä toiminnasta kun heidän ollessaan viidakossa näyttelemässä sotaa heidän tiensä risteävät siellä majaansa pitävien todellisten huumeita salakuljettavien tahojen kanssa.

    Moni asia on toteutettu hyvin. Tarina itsessään on toimiva ja hyvää vaihtelua omaperäisellä näkökulmallaan. Se onnistuu myös heittämään mukaan sopivasti kohtauksia joista voi katsojana tunnistaa minkä elokuvan kohtausta se parodioi. Parodia ei kuitenkaan jää ainoastaan yksittäisiin elokuviin, vaan osansa siitä saa myös Hollywood, näyttelijät ja heidän ongelmansa sekä rahoittavat tahotkin.

    Huumori toimii joissain kohtauksissa, mutta toisinaan se päätyy tarpeettoman levottoman puolelle omaan makuuni. Varsinaisia naurukohtauksia se ei siis aiheuttanut, mutta sen humoristinen vire teki siitä kuitenkin lajityypissään toimivan elokuvan.

    Näyttelijäkaarti hoitaa osansa hyvin kuten näin nimekkäältä joukolta osaa odottaakin ja kaikki muutkin tavalliset perusasiat on hallussa. Kokonaisuutena tämä on viihdyttävä elokuva.

  • Ace-Step 1.5 XL turbo on suuri harppaus eteenpäin lokaalisti tekoälyllä tehtävässä musiikissa

    Olen aikaisemmin täällä blogissani kirjoittanut Ace-Step-ohjelmistosta jolla voi generoida musiikkia AI:lla (lue täältä). Kuten monet muutkin tekoälytyökalut, myös Ace-Step on ottanut harppauksia eteenpäin sen jälkeen kun olen siitä lähes vuosi sitten kirjoittanut, joten on aika kirjoittaa tämä lyhyt postaus missä jaan kappaleita joita on generoitu uudemmalla mallilla.

    Uusin malli jonka sain omalle koneelleni pyörimään on Ace-Step 1.5 XL Turbo jolla tämän blogipostauksen kappaleet on generoitu. Omaan korvaani kehitys on kehittynyt merkittävästi, sillä nyt monet tällä generoidut biisit kuulostavat omaan korvaani hyvältä.

    Ace-Step osaa generoida monia eri musiikkityylejä ja laulaa myöskin usealla eri kielillä. Käyttöliittymässä on painike millä saa kirjoitettua tyylilajin ja sanoitukset jos haluaa antaa AI:n generoida kaiken. Tämä onkin oikein kätevä ominaisuus, sillä tätä kautta löytää uudenlaisia tyylilajeja ja näkee miten niitä pitäisi promptata jotta samankaltaisella tyylillä sitten voi generoida lisää biisejä mutta erilaisilla sanoituksilla.

    Yksi akilleen kantapää tässä yhä on. Metallimusiikin generointi ei tunnu tuottavan haluttua tulosta. Kepeää metallin kaltaista musiikkia saa toisinaan ulos, mutta oikeaa eli kunnollista metallia ei kyllä tunnu saavan ulos kirveelläkään. Oikealla kunnollisella metallilla tarkoitan tietenkin sellaista mikä ei kuulosta radiopopilta.

    Alla muutamia kappaleita joita tällä generoin.

    Kultainen kääre (versio 2) – Suomeksi laulettu laulu. Sanat on generoitu Gemma 4: 31B:llä.
    Big Band Jazz tai jotain sellaista
    Venäläistä Dark Poppia
    Jonkinlaista countryä
    Mitä lie poppia
    Korea-poppia ja EDM:ää yhdisteltynä
    Shoegaze-vivahteista fiilistelyä
    Teatreelista settiä. Harmi että en ottanut prompteja talteen.
    Positiivista korealaista musiikkia

  • Leffalauantai: Get Shorty (Get Shorty – Hyvä pätkä)

    John Travolta roolissaan Chili Palmerina vuoden 1995 elokuvassa Get Shorty.

    Get Shorty (IMDB) joka suomeksi tunnetaan nimellä Get Shorty – Hyvä pätkä on Barry Sonnenfeldin ohjaama rikoskomedia vuodelta 1995. Sen pääosarooleissa nähdään John Travolta, Gene Hackman, Rene Russo ja Danny DeVito.

    Travoltan roolittama gangsteri Chili Palmer lähtee perimään velkoja. Käy ilmi että eräs lento-onnettomuudessa kuolleeksi luultu velallinen onkin yhä elossa, joten Chili lähtee hänen peräänsä toiseen kaupunkiin hakemaan saamisiaan. Velkojen perinnässä hän päätyy mutkien kautta murtautumaan erään näyttelijättären taloon missä myös elokuvaohjaaja Harry Zimm (Gene Hackman) on. Chili ja Harry päätyvät keskustelemaan elokuvista ja tarinan edetessä Chili elokuvien suurena fanina kiinnostuu etsimään uudenlaista uraa gangsterielämän sijaan.

    Get Shorty on viihdyttävä ja rennon tyylin mafiaelokuva komediallisella vivahteella missä rikolliset kiinnostuvat osallistumaan elokuvien tekemiseen ja rahoittamiseen, samalla kun elokuvien tekijä tekee itse tuttavuutta alamaailman henkilöiden kanssa. Odotetusti toisille erilaisten maailmoiden kohtaaminen onnistuu paremmin kuin toisilta, eikä kaikkia ole niin turvallista koettaa komentaa kuin mitä ensin on saattanut kuvitella.

    Elokuvat joissa sivutaan tavalla tai toisella tarinassa elokuvien tekemisen maailmaa ovat monesti mielenkiintoinen ympräristö tapahtumille, niin myös tälläkin kertaa. Kokonaisuus toimi joten tämän elokuvan katsoo helposti kerran tai vaikka useammankin.

  • Uusi Painless Destiny -albumi julkaistu!

    Vihdoin ja viimein uusi Painless Destiny -albumi on nähnyt päivänvalon. Julkaisu on jo 19 albumi jonka tällä artistinimellä julkaisen ja se kantaa nimeä Forgotten tapes – Songs from 2013.

    Vaikka julkaisu onkin uusi ja vasta tänään sen olen laittanut Bandcampiin, on levyn kappaleet kuitenkin hyvinkin vanhaa perua kuten levyn nimestäkin voi nähdä.

    Viimeisimpien levyjen tapaan myös tämän levyn on miksannut Viljami Roivas. Hänen musiikkiaan voi käydä kuuntelemassa myöskin Bandcampista artistinimellä Kirkkoisät (katso täältä).

    Alunperin nämä kappaleet on sävelletty useammassa erässä vuoden 2013 aikana. 8 ensimmäistä kappaletta on sävelletty maaliskuussa 2013 ja kappaleet 9-13 on sävelletty kesäkuussa 2013.

    Alla vielä kappalelista:

    Chapter I:

    1. Nightmares
    2. Forgotten stories of love
    3. Written in the stars
    4. Dance of dreamers
    5. Fragile hearts
    6. Stories of elders
    7. Fever dreams
    8. Jen’s freedom

    Chapter II:

    1. Marnie
    2. After all these years
    3. Fragments of sanity
    4. Before the sun is set
    5. Eternal love of Father

    Levyn voi käydä kuuntelemassa tämän linkin takaa. Kuuntelun iloja tai suruja, mitä tunteita se sitten herättääkin.