Dabitch.net - Everything is so random there must be a pattern

Hi, I'm Åsk, I'm a geeky creative director. Here I share whatever is on my mind and the occasional script.

Dabitch.net - Everything is so random there must be a pattern

Writing an AI X scraper and what it taught me about vanity

Writing an AI X scraper and what it taught me about vanity

What I did, more specifically, was write a small Python program that quietly checks the list of my - that is, @dabitch’s followers using X’s official tools, aka the API.

For each follower, it grabs their short bio and most recent tweets, turns that information into a creative description, and then prompts Grok to draw a superhero picture of that person based on the generated text. The “superhero card" and made-up superhero name get uploaded to the site superheros.sinless.org, like this;

I thought people might find their cards funny. I didn't quite expect the reactions that did happen.

One of the first people I showed the card to became very angry and unfollowed me in a huff. "Don't put my name on other websites!" he declared, as if his name and every word he wrote on X dot com couldn't be scraped by every robot casually passing by. He is under the impression that he is shadowbanned (he is not); he hates AI, and he tags me together with @BrianRoemmele every other day, despite Brian's account being obviously run completely by AI. But I digress.

I expected some reactions, just not that one. I did expect people might not be flattered, even though I tried to make the script as humorous, flattering, and friendly-roasting as possible. It is meant to roast you, but gently, in a funny, self-deprecating way. A mirror, but a fun one! Something that you can chuckle at and actually agree with. But Grok generates the image, and Grok is AI, and I can not take credit for that.

For some reason, I always end up with a statement necklace, when Grok rendered me I got another one that reads “IDEA". Generated by Gemini.

Now, here is how image generation works: AI image generators don’t “decide” what a grandmother looks like; they statistically reconstruct the most common visual patterns from training data. When a prompt like “grandmother” reliably produces an elderly woman with grey or white hair, wrinkles, and a soft sweater and hair in a bun, the model isn't expressing a personal opinion, enforcing a cultural agenda, or insulting anyone. It is pattern completion. Some people recognize patterns well, and some are better at it than others.

People who treat the output as a moral judgment are misunderstanding how these systems work. So if the image prompt states “middle-aged woman”, and the image generates what the common visual pattern of a middle-aged woman looks like, don't be insulted. Charlize Theron is an outlier. You look good for your age, honestly. Don't do a Paulina Porizkova and get insulted that I added "for your age" here, that is the expression. But fine, you look good. Moving on.

The model is a mirror of aggregated human photography and language, not a moral agent. Getting offended at the mirror for showing the average face is a category error. The useful response is to learn how the mirror works and to steer it with clearer language, not to demand that every statistical mode be sanded flat.

“How dare the AI assume grandmothers are old and grey-haired? That’s ageist/stereotypical/exclusionary.”

Well, no. Grandmothers are, by definition in most cultures, the mothers of parents. The biological and social timeline means the modal grandmother is older. Grey or white hair is a high-visibility signal of that age range in many populations. Training data therefore contains millions more images of older women labeled “grandmother” than images of younger women in the same role. The model is not inventing a stereotype; it is compressing the empirical distribution. In my head I can hear both my husband and my daughter yelling “Neeeeerd” at me right now, they do that when I get like this. It keeps me humble, but it doesn't stop me.

The model mirrors aggregated human photography and language, not a moral agent. Getting offended at the mirror for showing the average face is a category error. The useful response is to learn how the mirror works and to steer it with clearer language. I've used many different AI's to generate images in testing ideas. I tried out how Gemini would render me based on a Google image search on “Åsk Dabitch Wäppling”; the result was a redhead with a statement necklace talking about ads at some conference in Stockholm, and a cat in the corner. It looks nothing like me. Hilarious.

Now, Beleno describes herself as a mother in her bio, “Mum, wife & beyond” she mentions in passing. She also mentions being Spanish- and English-bilingual, so her image-generation prompt generated by my script states, “Bilingual mother.” What does a bilingual mother look like? A young woman with a toddler on her hip who only speaks Spanish, apparently.

When an image model is given the bare prompt “mother,” one of the strongest visual patterns in its training data is a woman holding or carrying a young child. Those compositions appear constantly in everyday photos, stock images, family portraits, and captioned internet pictures labeled “mother.” So the model’s statistical default leans that way. It doesn't need to put a toddler on the hip every time, but it is a very common outcome. The Spanish-English detail can add a mild secondary influence; in the training data, people labeled as Spanish-English bilingual are more frequently photographed with features common in Spanish-speaking populations (darker hair, olive or medium skin tones, etc.). So the model may tilt that way slightly, but it doesn't have to, and the result is still just a probabilistic guess, not a portrait of any real person. That Beleno’s daughter has graduated college and is an aspiring media professional with a portfolio online is neither here nor there to AI.

Training data contains millions more images of older women labeled “grandmother” than images of younger women in the same role. There are millions more “mother” images of moms with toddlers than images of mothers like Beleno or myself with our grown daughters. Search any stock image site and you'll see.

The model is not inventing a stereotype; it is compressing the empirical distribution. If the data contained equal numbers of 25-year-old and 75-year-old women labeled “grandmother,” the outputs would look different.

They do not, because reality (and the cameras pointed at it) do not. Treating the resulting image as an attack on diversity is like treating a weather model’s prediction of rain in a rainy climate as climate denial.

In the end I had to regenerate a few cards. The case of Alice was pretty interesting, because she kept being generated as mixed or or Hispanic. Why? Well, the prompt always contained the word “Brixton.”

Image models learn statistical associations from the photos and captions in their training data. Brixton is a real London neighborhood with a well-documented history of Caribbean and African settlement from the Windrush generation onward and a substantial black population. Because public photographs, news images, street scenes, market shots, and cultural events tagged or captioned with “Brixton” disproportionately show black and mixed-heritage people, the model is more likely to draw from that denser training distribution when a prompt includes the bare keyword “Brixton,” especially for a person. That makes it more likely to depict someone with darker skin, Afro-textured or mixed hair, or other features common in those communities than a prompt that says “person in London.” In the end I had to edit this prompt manually to add “blonde woman.”

The script does not know that Alice's name is a English habitational surname, because I did not write a onomastic classifier into the script. A lot of people leave their real names out of their X bio these days, so a surname origin classifier looking names up in curated databases would be a colossal waste of time.

Most people had a good laugh at their cards, even if they were generated as actual gorillas, wolves, bunnies, cats, dogs, sturgeons, dragonflies, alligators and lord knows! Now granted, some of these animals were generated due to their usernames, but others popped up due what the users talked about a lot or simply how they described themselves.

Here's the actual lesson, the mirror that I wrote is working on your tweets and your bio. If the image and card generated is somehow offending you in the end, consider what you are putting in your bio and how other people are reading it.

People, much like the script, react to words in a similar way. We know this, no? After all, we work in advertising.

Now, some of my favorites generated by the script. They are very funny if you know the people behind the account, and funny even if you do not!


It truly is an end of an era : Kesselskramer declares bankruptcy

It truly is an end of an era : Kesselskramer declares bankruptcy

Something happened in the past ten years. Meetings were staffed with bobbleheads all rushing to cheer on and be agreeable, loving everything because criticizing things is mean, asking questions is rude, and having a sense of humor is offensive

Before this culture took a hold of advertising and the world, there was a world where "why not?" ruled. Where a creative team who had worked in London returned home to Amsterdam and built a new agency on the back of doing flyposters for a friend's youth hostel. Videoing themselves in nearly half of the ads, they managed to make a big international PR splash on a shoestring budget with clip art and a fun attitude. Because back then, MTV still aired commercials and the target market spent weekends in Amsterdam, and gosh darnit, we actually had fun in the 90s.

0:00
/0:15

Hans Brinkert Hostel - "Guestbook" 1996

That man in the white shirt and longish hair is Erik Kessels himself, everyone else in the video is a friend or working with the agency at the time.

The agency was originally in a chapel on Jacob Obrechtstraat 26, next to a big beautiful church, and close to a few other ad agencies. They eventually grew so big that they invested in a church building of their own, because why not?

Like with everything else, the people who worked for and with KK were roped in to help paint and decorate the church, and over a few weekend nights the gothic ceilings got their new colors while astroturf was rolled out. As people arrived in the reception, polaroids were taken of them which eventually filled up the frame behind the receptionist. The diving board did nothing, but the organ still worked and was sometimes played. It was always kind of cold inside, as old churches are, and it had a lot of space - so my hand painted wildplakken posters for Marcel at Amsterdam tattooing could spend an entire weekend drying off in unused hallways.

Once a couple who had gotten married in this church asked to come inside and see it again, the receptionist at the time let them in. They were horrified at the transformation. Chartreuse ceilings. Discoball lamps. A fort and a diving board in the middle of it all. Despite being gereserveerd Dutch people, a national trait that is very similar to how Scandinavian people behave but with different roots, as the modesty from Calvanistic influence can not be understated. The expression "doe maar normaal, dan doe je al gek genoeg" - just act normal, that's crazy enough as it is, sums it up.
As you can imagine, an agency that decided to return from London and break all the rules were at the epicenter of a creative revolution wave that spread in the Netherlands, from the music scene to the interior design scene. So while this might look a little dated today, you can still see what influence it has had.

In 1997, conceptual design collective Droog Design shifted from an emerging Dutch phenomenon into an international powerhouse, I was working at FHV/BBDO at the time and there was no doubt that the creative center of Europe had shifted to Amsterdam. Wieden and Kennedy was already there, and from them a team split and created 180. In a triangle of bars on the Spuistraat you could run into everyone who was anyone in advertising, production, and design on any evening out, and the only "cliques" were between the Dutch speakers and the non-Dutch speakers.

At the height of it all, Amsterdam hosted creative gathering for all kinds of creative professionals, and I was often involved in hosting these gatherings. They were often informal dinners, which eventually evolved into networking breakfasts, creative summits, and three day conferences.
Condor Music went from one office to many, and eventually even opened one in Beijing. Amsterdam hosted the Boards summit, the Epica awards, the Tomorrow awards, I've lost count of it all. Sid Lee from Montreal wanted to get in on this and opened an office in Amsterdam, for a brief moment we all thought that we had a new Madison Avenue creative revolution happening. And it was fun!

But nothing lasts forever, alas. Even in permissive Amsterdam. In the land of "why not", they have now banned all advertising for all fossil fuels and meat products. While stricter rules can absolutely force people to be more creative, as has been proven with the legendary Silk Cut, Benson & Hedges, and John Player Special campaigns, it also really puts a damper on why creative people are attracted to a city. It's not like anarchy attracts creativity, but the Kraak neighborhoods (squatted) of Amsterdam and the occupied buildings in Berlin served the same purpose for creative inspiration. The difference between Berlin and Amsterdam is that the clients in Germany are in Hamburg, not near Berlin - so Berlin "only" has a music and an art, design, and author scene as a result. Not an advertising scene.

Perhaps anarchy is just a small part of creativity, lord knows that I've DJ:ed in occupied buildings Amsterdam on the Keizersgracht. When there was a deck up there and nobody wanted the party to end I just went home to get all my records and played until the sun came up together with another professional DJ.

I left Amsterdam during that heydey, for personal reasons, and I will probably always regret what I missed out on but as the Swedish saying goes "här blir inga barn gjorda" - which literally means "here, no babies are being made" (nothing gets done here, but specifically, no babies.)

We've all seen the happy accidents, the mistakes that turn out to be brilliant, the misprints that look good. You need space to experiment, and so the creative areas in cities are the cheap areas, Soho in New York was that area for a minute, Amsterdam had the quality of life that London lacked in the late 90s, you could literally bike to work and the rain never bothered anyone. And there was cheap space within reach. So the pilgrimage began.

Kesselskramers most recent campaign is still running, it's for the Stedelijk Museum in Amsterdam. The reason for the sudden bankruptcy is that three major commercial projects unexpectedly fell through. The age-old story of clients backing out, not paying for work already done.

Will we see a new city like Amsterdam take over the title of the next creative hot-spot? I'm not so sure? I get restless, I globetrot, I look for it. I left Amsterdam and went straight to New York thinking it would happen there, but then a terrorist attack happened just as I had rented an apartment two blocks from the twin towers. My timing wasn't great then. I moved to Los Angeles unofficially in 2012.
I caught a bit of the creative wave in Los Angeles, but that died with the fires. I had some hope that the California to Nashville emigration would start a new revolution, but that city lacks space, and the energy there has died.

I've moved again. Creativity is restless. Creativity is seeking. Creativity is curious. Creativity never ends. Creativity may be nostalgic, but I also know, looking at these images, that this moment can not be repeated. This is lightning in a bottle. You can't catch that in the same spot twice.

Country of origin displayed as flags on X - a chrome plugin.

Country of origin displayed as flags on X - a chrome plugin.

But what we really really want, is flags next to usernames - so I wrote a plugin for chrome that shows just that. You can download the zip above.

At first Nikita showed only users their own about page, where everyone could double-check that things were correct. This was even open for a full hour for anyone to see anyone else, but I think I was asleep when that happened. My profile stated correctly how old the account is, and where it was created in the "Date joined" part. Like so:

Account created in Sweden. True.

This is accurate, and not a secret, so I had no problem with that - but a lot of people did. People who bought accounts would obviously want to hide if that account was created in a country they've never been to, for example.
Nikita claimed in a Xeet that this field showed inaccurate data for a lot of users, so they simply removed it.

Now I'm verified with ID too!

But what we all really wanted was a simpler way to identify where people are Xeeting from - like a flag by their usernames. So I made one, and this is what it looks like on my account. The US flag before my name. Now when I scroll X using my Chrome browser, I see flags next almost everyones user name.

If you want to use this, simply download these files, X-flag-verified.zip and open it somewhere on your computer.

Then load up chrome://extensions/ in your browser and toggle on "developer mode". Then "Load unpacked" and select the directory x-flag-verified and Bob's your uncle.

UPDATE: Shoutout to @bashildy on X who helped me fix this for Windows!

Optionally you can remove all the other annoying flags that people put in their profiles, if you simply uncomment the line in content.js below :

Optional: prevent double flags if user already has one in their name

I'm still working on this to see if there are any other fun things that I can add, since the government ID verification doesn't quite work yet, but I'm just too impatient not to share this right now. A lot of caching issues on the X "about page" currently is slowing down my bugtesting. Check back in a day or so and there might be more features.

If you find this useful, I like ko-fi and I like subscribers!

Great! You’ve successfully signed up.

Welcome back! You've successfully signed in.

You've successfully subscribed to Dabitch.net - Everything is so random there must be a pattern.

Success! Check your email for magic link to sign-in.

Success! Your billing info has been updated.

Your billing was not updated.