why -r- we?
Het meer technische verhaal
In overleg met de admins / mods zou ik het zwaartepunt van de post over mijn tool (site / app) why -r- we? leggen op de techniek, dus bij deze.
Zoals gezegd heb ik een vrij lange geschiedenis op het gebied van illustratie, fotografie en programmeren. In de jaren '70 ben ik met dat laatste begonnen - gewoon op een zelfgemaakte, houten computer (nee, niet zelf gemaakt) - in iets van BASIC of iets dergelijks (nog voor Microsoft er los op ging).
Strips tekende ik met Oost-Indische inkt, een penseeltje en speciaal tekenpapier op een tekentafel (je weet wel, zo'n staande plaat voor je kop). En vormgeving deed ik met loden letters waarbij je met sigarettenvloeitjes de kerning tussen de fonts bepaalde.
Photoshop? Was er niet! Ja, later op een Mac die voortdurend crashede en ik dus rond 1992 al over ging op Windows: veel stabieler, al had Photoshop toen nog niet eens layers.
De rode draad van dit alles is dat iedereen telkens riep dat nieuwe technologie niets meer te maken had met creativiteit en "de ziel" uit het product - en artiest - ging. Ik vond dat letterlijk compleet gelul.
Als je op een computer teksten schreef, was het niet zo echt als een typemachine. Maakte je in Photoshop een foto lichter, was het niet zo echt als in de donkere kamer. Gebruikte je QuarkXpress om tekst uit te vullen, kwam het niet in de buurt van de letterzetters die dat met een schaar deden.
Tekenen op een tablet? Had niets te maken met inkt en potlood! Een bepaalde berekening automatiseren? Daar hebben we rekenmachines voor, of beter: een staartdeling...
In plaats van blijven hangen in die oude gedachtengangen, beweeg ik me dus gewoon mee met de markt en heb de afgelopen veertig jaar alle nieuwe techniek meer dan omarmt. Mijn productiviteit stijgt, mijn kennis neemt toe en de kwaliteit van het werk wordt beter. Enige dat achterblijft zijn de verdiensten, lol.
Anyhow, rond 2022 maakte ik kennis met de LLM's / AI en dacht al meteen "dit kan wel eens heel handig worden als tool (niet als doel) voor alles dat ik doe". Schrijven, vormgeven, programmeren, fotografie: you name it, LMM / AI can help with it.
Ik heb toen een x-aantal test projecten gemaakt en opgestuurd naar meerdere landelijke redacties. Insteek: kan veel, kost weinig, werkt snel, perfecte aanvulling op hoe je nu werkt (let wel: 2022 / 2023 was dat).
Dus ik had allemaal leuke kant-en-klare demo's als;- Beeld. - beeldoptimalisatie en -creatie op basis van LLM's / generatieve AI
- Weekdier - elke week een leuk verhaal, met veel illustraties, over een dier
- Techtalk - Tweakers 2.0 zullen we maar zeggen, met behulp van de nieuwste techniek
De reacties op al deze ideeën was telkens hetzelfde:
geen reactie of
geen interesse.
Een jaar later dacht ik dan ook "Ja maar, ik geloof er wel in! En het kan echt handig zijn als tool binnen je bestaande workflow." Wil je rendabel blijven (of worden), dan moet je immers niet alleen kijken naar de inkomsten (je weet wel, advertenties en abonnementen) maar ook naar de uitgaven: wat kan sneller, beter en effectiever.
Lang verhaal kort: ik besloot zelf iets te bouwen. Een heel eigen tool, platform, site, app - hoe je het wil noemen. En dat werd dus
why -r- we? -
dagelijks het leukste nieuws over wetenschap, geschiedenis en ruimtevaart.
Om duidelijk te maken hoe ik te werk ga (het is
after all grotendeels handwerk) zal ik stap voor stap melden (in grote lijnen) wat ik gemaakt heb.
Het begint natuurlijk met de content (okay, het begint met een framework, maar daar kom ik later op).
Daarvoor maak ik gebruik van ChatGPT. Daar kunnen (en hebben) we allemaal een mening over, maar toen ik rond 2023 begon was dat de enige echt werkbare tool. En het belangrijkste; ze hadden iets als een
daily task. Dat is een cronjob die je via de interface van de site kan instellen met een opdracht en tijdstip naar keuze,
Die van mij is iets als "speur elke dag het web af naar leuk nieuws over wetenschap, geschiedenis en ruimtevaart". Zoek per categorie drie artikelen, meerdere bronnen ter controle en doe dat zowel om 09:00 uur als 21:00 uur.
Vervolgens krijg ik elke dag in de mailbox (of push) en site dus allemaal recent en relevant nieuws van bronnen over de hele wereld. Daaruit kies ik 's ochtends en 's avonds (ik werk in twee delen aan de tool) drie artikelen uit. Dus zes nieuw publicaties per dag.
Vervolgens ga ik alles researchen, controleren (bron, feit, etc...) en omgieten naar een eigen artikel. In de juiste
tone of voice, met alle tikfouten :-) die je maar kan maken, etc...
Dat doe ik in een zelfgemaakte editor, in een zelfgemaakt CMS in een zelfgemaakte back-end. Wel met behulp van bestaande oplossingen (ik ben niet gek), maar uiteindelijk allemaal losse tools / libraries en scripts die ik aan elkaar "plak".
Nee, geen vibecoding (dat kon niet in 2023), maar gewoon old-skool zaken als jQuery (I know), PHP en Bootstrap. Die laatste overigens versie 4... extreem oud, maar ik werk voor Android 4 (ook extreem oud) en dan moet het wel backwords compatible zijn. En aangezien site / app / CMS / framework / backend allemaal met elkaar verweven zijn (gescheiden qua platform, verweven qua code) gebruik ik dus voor alles hetzelfde. Op die manier kan ik extreem snel schalen en werken en is de site geupdate als de app geupdate is en het CMS ook, bij wijze van.
Zoals je ziet werk ik in markdown, maar dat wordt
real time omgezet in een grove HTML-preview.
Ook dat is handig want de app is gemaakt in Cordova (yes, I know). Daar kan je over lachen, maar achteraf is het feitelijk gewoon een retro-PWA die zonder code-aanpassing werkt op het web, Android en iOS (al werk ik uit principe niet voor Apple, maar dat is een ander verhaal). Ook werkt het perfect op tablet, laptop en televisie: wederom, het is heel schaalbaar en universeel inzetbaar.
Als ik klaar ben met de grove tekst, heb ik een "best wel heel complexe regex gemaakt" die alles in 1x in het juiste typografische design format giet.
Hier is het die 'sparkle' in mijn editor. Dat heeft niets te maken met AI, maar het is wel magisch :-)
Hij maakt namelijk direct de ankeilers (leuke zin die alles in één regel samenvat, boven het artikel), de oneliners (tussen de paragraven door, zodat het niet één blok wordt) en de infoblokken (met een definitie / achtergrond van een technisch begrip).
Mijn CMS werkt overigens op mobiel (Cordova) en gewoon de browser op je desktop: ik kan dus ten alle tijden artikelen schrijven, illustreren, vormgeven en op de socials cross-posten (straks meer).
Hier zie je die typografische opmaak (light mode, dark mode past hij vanzelf aan, net als het taaldomein als je buiten een Nederlandssprekend gebied kijkt). Dit is trouwens de desktop modus, niet de app. Bovenin de ankeiler (met een font dat letters lekker "samenplakt", zoals de S en de T : bewuste keuze). Dan de oneliners die overigens automatisch om en om anders vormgegeven zijn en een leuk bedoelde #hastag eronder.
Zoals gezegd: druk op de knop. Klaar. Handig. Tweetalig.
Over dat laatste: nee, dat is niet zo. Ik schrijf alles in het Nederlands, maar Engels is wel "soort van" AI. Tenminste, het gaat via een neuraal netwerk (DeepL) die een gratis API aanbieden. Die heb ik gekoppeld met mijn CMS en kan zo - letterlijk - met een druk op de knop alles naar redelijke menselijk Engels omzetten. In ieder geval beter dan mijn steenkolen Engels en sneller... iets sneller (0,5 seconde per artikel tot 1500 woorden).
Dat vertalen gaat dus zonder naar om te kijken, al krijg ik wel netjes een zelfgemaakt rapport (via PHP) binnen zodat ik kan zien wat er gedaan is, wat er is aangepast en wat het kost (aan tokens, maar dat is altijd gratis omdat ik tot 2000 artikelen per maand kan vertalen, en zo veel doe ik ook weer niet).
Als de tekst klaar is, ga ik nadenken over het beeld. En daar komt mijn achtergrond als illustrator, fotograaf en vormgever ook goed van pas. Want "ja", ik kan cartoons tekenen met de hand, ik kan naar buiten rennen en een foto schieten en krijg er nog voor betaald ook (tenminste, toen ik daar in 1992 mee begon, en de tijdschriften maar wat graag alles van me afnamen).
Maar die tijd is veranderd, en dus werk ik in Krita, Photoshop, Leonardo en wat Dies meer zei.
Oftewel: ik gebruik mijn ervaring in die werkvelden om een leuk beeld te maken via AI (sorry). En ik zal een voorbeeldje uitwerken om te laten zien hoe het ook kan (hoop ik).
Zo had ik een artikel over een
anti-aging crème die bij muizen bizar werkt: oude huid werd hersteld en ze werden 2x jonger qua celstructuur.
Dan vond ik dit wel een leuk concept. Een dame op leeftijd die wel héél gortig zichzelf met die crème insmeert. Okay, wellicht is het niet leuk - ook goed: ik vond het wel leuk (nee, dit is geen X-Y anti-semantiek met een em-dash die AI-slop verraadt).
Voor elke cartoon maak ik eerst zelf een schets en het is bizar hoe een LLM 'snapt' (het blijft immers een dom kreng) wat je bedoelt.
Ik bedoel... ik weet wat het voorstelt, maar dat iemand anders hier wat uit kan halen... Ik stuur dus zo'n schets (deze is overigens wel heel grof) naar de LLM, geef een prompt van hooguit 2 regels erbij (het onderwerp) en een specifieke stijl.
Ik heb namelijk - binnen ChatGPT - een aantal "illustratoren" klaar staan die elk een eigen, zeer herkenbare stijl hebben. Een een luie nitwit die elke stijl vreet die ik hem opgeef (escape route, lol). Van te voren weet ik welke stijl ik wil, hoe een LLM reageert op de schets en wat ik kan verwachten. Die combinatie levert dus - voor mijn doel om de jeugd er bij te betrekken - bruikbare resultaten op, die niet direct AI-achtig lijken (hoop ik toch).
Ander voorbeeld? Best.
Ik ben een fan van, het zal de leeftijd zijn, de oude comics uit de jaren '70 en '80 - en vooral de Euro-Franco (Europa / Frans-Belgische) stijl. Voor een artikel over "eeuwenoude graffiti in een kerk" vond ik het dus leuk een stijl te hanteren die deed denken aan "de Leukebroeders", een originele strip van Peco (uit de tijd van Pep / Sjors / Eppo - voor wie de klassiekers kent).
Bovenstaande prompt was snel gegeven (en redelijk in de juiste stijl, maar zonder deze te kopiëren natuurlijk). Wel zaten er veel AI-fouten en troep in. Het gezicht van die broeder is vreemd, Jezus heeft dezelfde tint als de muur en er is best veel "visuele ruis" te zien. Ook kijkt die monnik vreemd, terwijl ik wilde dat hij guitig / stiekem zou kijken.
Dit is dan "mijn" versie na wat knip-en-plak Photoshop werk. De tekst aangepast (alle tekst in mijn afbeeldingen is in de basis Engels, omdat de app / site dat ook is), Jezus meer van de muur gehaald door hem contrast te geven, de monnik zijn gezicht onder handen genomen en overbodige zooi uit beeld gehaald.
Wellicht zie je het verschil niet, maar onbewust werkt de aangepaste versie beter als plaat boven het artikel (hoop ik wederom).
Overigens heb ik deze, handmatig creatieve, workflow ook helemaal dood-geoptimaliseerd. Lang leve de optie tot scripten in Photoshop (JSX - je kan gewoon native Javascript in Photoshop draaien!).
Dus met de druk op een knop kan ik echt bizar veel automatisch door Photoshop laten optimaliseren, aanpassen en corrigeren. Zelfs het plaatsen van assets van desktop naar server gaat vanzelf (via een aangekoppeld Powershell-ding dat na biometrische identificatie alles encrypted in- en uitleest).
Als ik wat aanpas in Photoshop, en de file zou al live in de app / site staan, dan is het daar dus direct aangepast (okay, kan ook gevaarlijk zijn als je per ongeluk wat doet... been there, done that).
Dit is een ander voorbeeld van waar AI handig kan zijn. Een artikel over de Etrusken. Van een bepaald fresco is alleen het deel met die persoon bewaard gebleven. Maar ik werk met leader-images van 3:2 en dus moet ik een liggende plaat hebben.
Dan is het een kwestie van de fresco (via Wikipedia) naar een LLM sturen en aangeven dat in die stijl de boel moet worden uitgebreid. Maar ja... wat zet je er naast dan? Gelukkig toonde de Wikipedia pagina ook een bestaand, Etruskisch beeld van een mythisch wezen en dus besloot ik die er naast te plaatsen, in de stijl van de fresco natuurlijk.
Je ziet, de fresco (gebaseerd op het oude origineel die overigens veel meer aangetast en vergaand was) heeft er een leuk huisdier bijgekregen, op basis van een echte foto. En als we dan toch bezig zijn (zoals ik zei: beeld is belangrijk voor de tool);
Heb ik er een eigen versie van gemaakt. Natuurlijk netjes met bronvermelding (public domain, in dit geval) en een watermerk (linksboven) dat het "AI handmade" is. Want zaken als contra-punctische ordonnantie (spelen met voor- en achtergrond), de bokeh-balls (reflectie in de vitrine) en onscherpe artefacten + vignettering (vertekening in de lenshoek) heb ik zelf bedacht: die stijlkenmerken ken ik uit mijn leven als fotograaf en komen hier dan weer samen in het resultaat.
Als zowel tekst en beeld af is, schiet ik het hele goede trouwens nog naar een eindredacteur... een LLM
Deze vriendelijk gast, genaamd "the ediTOR" (de avatar is een tor, het diertje) kan niets, behalve stijl- en spelfouten controleren. Ook weer netjes hoe ik het wil en klinkt binnen de app / site / tool. En die spuugt weer gewoon alles in markdown uit, wat weer direct in het CMS komt (en daarmee klaar staat ter publicatie).
Dit is trouwens hoe het zenuwcentrum er uit ziet. Gewoon Bootsrap 4, maar voor mij werkt het. Ik zie wat er in de maak is, wat in de wachtrij staat (ik werk een week vooruit, handig als je dood neervalt) en wat er live staat. Elke dag draai ik een cronjob / carbage-cleaner die oude artikelen archiveert, reacties samenvoegt en een backup maakt voor offline archiveren.
O ja, via de app kan je in twee talen reageren op alles. En daarvoor heb ik in het CMS weer een moderatietool gemaakt zodat ik supersnel kan zien of de reactie okay is. En natuurlijk kunnen lezers zelf iemand "flaggen" (met een bepaalde drempelwaarde) en van moderatie voorzien. Via de mail of push kan ik zo op de achtergrond in de gaten houden wat er speelt.
Ook zie ik op die manier of er ergens nog fouten aanwezig zijn, bv. in de JSON die de hele app (Cordova) aanstuurt. Dat wordt namelijk realtime "gecompileert" en gerenderd in de app. Dat is overigens zeer klein. De hele core is maar 50kb en staat in een fractie van een seconde klaar... zelfs op Android 4 (geloof me, ik test het ook op deze oude koelkasten).
Het laatste (er is nog veel meer, maar goed) is wellicht ook leuk: de socials.
Van elk artikel laat ik namelijk volledig geautomatiseerd een
still maken (statische afbeelding) en een
animatie. Dat laatste is niet heel fancy, maar een animatie op basis van die stil, het zogeheten Ebbinghaus-effect (ooit groot gemaakt door Appel, de gruwel).
En omdat ik alles alleen doe, moet het effectief gaan. Dus ik heb via FFMPEG een heel script gemaakt (gewoon in old-skool CMD, niet eens Powershell) die volautomatisch op basis van een 3:2 afbeelding een Instapost maakt én TikTok / Youtube ding. En nog 10 andere social platformen, zoals X, Bluesky (ja, gaat goed samen...), Substack, Medium, Mastodon (leeft dat nog?), WhatsApp, etc...
Soms bieden die dingen een API aan en dat is dan netjes geïntegreerd in mijn app / site / CMS, maar soms ook niet... dus heb ik die zelf gemaakt
Hier zie je alles door elkaar, maar geloof me: het maken van een Instapost (afbeelding + tekst) kost minder dan een seconde. Een animatie van 10 seconden duurt +/- 1.5 seconden om te renderen (of 45 seconden, als ik het op mijn eeuwenoude Surface Go tablet doe, dat oude kreng is traaaaaag).
De hoofdafbeelding wordt via CURL (Windows) naar binnen getrokken, via FFMPEG (the probe) geanalyseerd, de tekst komt uit de H1 (header one, de subject van het artikel) en de |kleur|codering doe ik via een pipe-systeem. Feitelijk hoef ik enkel op het platform te drukken (de popup in de screenshot) en dan start dat DOS-ding vanzelf op.
Die kiest random een musictrack (ja, AI muziek - 30 tracks via Looperman) en wat FX (beam, scale, highlight). Die metadata van gemaakte keuzes zie je bovenin het venster. Om compleet onzinnige SEO-score te krijgen, probeer ik de caption binnen een bepaalde lengte te houden. Dat zijn die .................. markers die je ziet. En vervolgens dus in accent wat blauw wordt en dik in de definitieve animatie / still.
Daarna gaat het ding renderen en spuugt een highres en lowres .mp4 uit. Overigens gemaakt van meerdere layers, gewoon in Flash (arrrrrgh!) en via-via weer van Quicktime omgezet naar een PNG sequentie om 60 fps te halen.
Dat wordt tenslotte via SFTP (terminal) naar de server geknald en klaar.
Had ik al verteld dat ik alles alleen doe en compleet heb geoptimaliseerd? Hadden ze in 2022 maar niet "geen interesse" moeten zeggen...