Synthetic Users
Een marketingvisual opgebouwd uit code
Voor een blog over synthetic users had Bikkelhart een visual nodig.
Het onderwerp vroeg bijna vanzelf om een beeld waarin mens en technologie door elkaar liepen. Daarom splitste ik het portret van de schrijver in tweeën: aan de ene kant de oorspronkelijke foto, aan de andere kant dezelfde persoon opgebouwd uit nullen en enen.
Wat begon als een marketingvisual, eindigde met een Python script en opvallend weinig standaard marketingwerk.
Half mens. Half synthetisch.
De blog ging over synthetic users. Voor de visual zocht ik daarom naar een beeld dat die combinatie direct zichtbaar maakte.
De eerste stap was om verschillende schetsen te maken. De sterkste richting splitste hetzelfde portret in tweeën.
Aan de ene kant bleef de schrijver zichtbaar zoals op de oorspronkelijke foto. Aan de andere kant kreeg ze nog steeds precies dezelfde vorm, maar werd die opgebouwd uit nullen en enen.
De ene helft was de echte persoon.
De andere helft ook.
Alleen opgebouwd uit code.
Daarna ontwierp ik de rest van de visual in de huisstijl om die tweedeling heen. Het portret bleef centraal staan.
Python voor een marketing visual?
Mijn eerste gedachte was om het effect met een bestaande converter of in Photoshop te maken.
Online tools gaven weinig controle over de vorm en stijl. Photoshop had gekund, maar de definitieve foto stond nog niet vast en zelfs daar heb je eerder restricties. Bij iedere nieuwe versie zou ik het effect opnieuw moeten aanpassen.
Daarom schreef ik een Python script dat een foto omzet naar een svg van nullen en enen.
Het script opent de afbeelding en leest niet alleen de kleur van iedere pixel, maar ook de transparantie. Daarna wordt de foto teruggebracht naar een grid. Het aantal kolommen kan ik zelf instellen. Het aantal rijen wordt automatisch berekend, zodat de verhouding van het portret blijft kloppen.
Vervolgens loopt het script cel voor cel door dat grid.
Is een cel transparant, dan wordt daar een spatie geplaatst. Zo blijft alles buiten de portret leeg.
Is een cel zichtbaar, dan kijkt het script naar de helderheid. Donkere delen worden een 1. Lichtere delen worden een 0.
Op die manier ontstaat er regel voor regel een tekstversie van de foto.
Daarna worden al die regels weggeschreven als echte tekst in een svg en de volledige tekstlaag wordt geschaald naar de originele afmetingen van de afbeelding.
Het resultaat is dus geen filter over de foto heen, maar een nieuwe afbeelding die volledig uit tekst bestaat.
Zodra het definitieve portret bekend was, hoefde ik het alleen opnieuw door hetzelfde script te halen.
Of een Python script schrijven uiteindelijk echt minder omslachtig was, valt te betwisten.
Wel een stuk flexibeler.

De code bleef niet stilstaan
Binnen Bikkelhart bestond de wens om meer met animatie te doen.
Omdat het portret al uit losse tekens was opgebouwd, kon de beweging direct vanuit diezelfde basis ontstaan. Het tweede script begint daarom op dezelfde manier: de foto wordt verkleind naar een grid en ieder zichtbaar vlakje wordt vertaald naar een 0 of een 1.
Alleen bewaart dit script daarnaast ook welke plekken onderdeel zijn van het portret. Dat masker bepaalt waar tekens mogen verschijnen en waar het beeld leeg moet blijven.
Daarna begint de beweging.
Per kolom kiest het script een snelheid. Sommige kolommen zakken trager dan de andere.
Daardoor ontstaat een soort Matrix achtige cijferregen, maar wel binnen dat masker.
Na die 'Matrix animatie' werkt het script terug naar de orginele positie van het portret. Tot de persoon weer herkenbaar is.
Ieder tussenstapje wordt als aparte foto opgeslagen. Die worden dan weer samengevoegd tot een gif.
Het beeld blijft even staan en looped dan.
Het hele idee van dit is ook om inzichtelijk te maken dat AI, dus ook synthetic users alleen maar bestaan uit nullen en enen.
Blijf zelf kritisch nadenken.