Thursday, 4 June 2026 · vwwwv.org
Propaganda-style poster of marchers carrying placards and a flag, each stamped with a 'no-sparkle' symbol crossing out an AI-glitter motif.
code

Opt-in for AI slop

code

Opt-in for AI slop

I like a bit of AI slop, sometimes. I enjoy generating brutalist illustrations inspired by 1960s Chinese propaganda posters for my blog, because... well, I like them. Making slop is cheap, borderline free actually, and extremely quick and simple. But it will alienate some readers. Some people just plain hate that slop. So what do I do?

The same thing I would do for cookies, if I wanted to use them: I'd ask for user consent, right?

Why people hate slop

There are perfectly legitimate reasons for not enjoying AI generated images, apart from the glitzy-yet-trashy vibe it gives off. There is solidarity with the collapsing art professions and illustrators going unemployed. There is the environmental impact, and a reasonable objection to all those tech bros that are running politics now. Not to mention the whole AI bet/bubble in general, the idea that we should let big tech commoditise cognition.

Those are good reasons, but I think there is more to it. I think that slop triggers anxiety about the future. Just seeing identifiable AI images is a reminder that the way of life people spent their youth and their funds preparing for might not continue to exist. AI generated images trigger that uncertainty, even when presenting as cartoony cuteness.

The slop is just the trigger

The anxiety is about seeing the bottom dropping out of market after market: All the aspiring developers who will never get to write code for money. Musicians, Youtubers, Designers... traditionally safe jobs are reportedly next: accountants, legal, HR, most sorts of work taking place at a desk. Probably not all the positions, but enough to create a significant workforce surplus, and a very high barrier to entry. It means a whole lot of people will have to plan a different kind of career, and some think they might have no career at all. Slop photos of cats in papal robes are less amusing when that is where they take your thoughts.

So people are not really turning away from slop because they hate cheap trash per se. They don't fear hands with extra digits, stairs that lead nowhere or even ghiblification. What they fear is a future that has no use for them. It is not the image, it is what it represents. It's the whole tool chain, the world order, that they reject. It is perhaps not as much anxiety that is triggered as it is anger and resentment. Not so much towards the subject that is depicted, but towards the institutions finding it perfectly acceptable to utilize that technology. That gives the content category a negative brand proposition for a large and growing segment.

Pattern recognition

If it is indeed the case that slop triggers anxiety (and rage, and other strong, negative emotions), AI slop joins a category of objectionable imagery that we already have been blurring out for decades: NSFW content, phobia and anxiety triggers, graphic injuries and violence, assault, self-harm, animal cruelty, smoking, substance abuse and many more.

Twitter, in the era when it was still called Twitter, had a sensitive-content toggle. That blurring makes sense. Some sites do a similar thing to spare their users' bandwidth budgets: showing scaled down versions until the user decides to load them, to save energy costs and bandwidth budgets. Many do cooler effects than a gentle gaussian blur.

So there is already a grouped feature set for visual content.

Opt-in for slop and spiders

So I thought: For my blog, AI slop should be opt-in only. An opt-in should not only obscure, but minimize bandwidth and computing cost. That would come with a slight inconvenience to those who don't mind slop, and a much better experience for those who do object to the content. If I can make the user interaction appealing in itself, it becomes a positive feature, an engaging reader experience for all users.

A page from a zoological lexicon showing photographs of several spiders, including a pale one.
A page from my zoological lexicon, volume 6 - invertebrates, where the photos of spiders are. I like the pale one.

Brutalist Monet

On vwwwv.org, every content image renders as a pixelated halftone by default. The image is progressively loaded, first as a single kilobyte version (80 pixels wide, 20% quality), then scaled back up and pixelated with the CSS property image-rendering: pixelated, and pushed toward two-tone with a grayscale and contrast filter. It looks a bit like 32-bit graphics, and if you squint a bit, you can almost make out what the image depicts. I call the style "Brutalist Monet".

Each <figure> carries a data-triggers attribute listing the objectionable categories that the image trips. AI generated images trigger slop. A photo with a spider in it would trigger spider. A graphic injury photo would trigger gore. An image can trigger several at once, although I don't plan to post anything other than slop, and maybe a cute spider to prove the point. An image with no triggers gets the same halftone placeholder, but it fades through to the full-colour image as soon as the full-image bytes arrive. The halftone is the loading state. For non-triggering images, it lasts a fraction of a second.

Hand-drawn map by Wes Anderson for a street shot from The Royal Tenenbaums (May 2, 2001), with crew polaroids around the perimeter.
Wes Anderson, shot map for The Royal Tenenbaums, May 2 2001. Very wholesome, no triggers.

How to opt in

For triggered images, a small label and checkbox sit above the image: Show slop, Show slop and spiders, Show gore, et cetera. Tick it and the full image is loaded. The halftone fades to the real image, appropriately sized. Untick it and the halftone returns. A settings panel (always show: slop / spiders / gore) persists selections in localStorage (not a cookie, it is not tracked, the server never sees it). A returning reader who has decided "I'm fine with slop" doesn't have to keep saying so.

I'm not going to pretend this is cutting edge innovation. These are all well established techniques. The only novelty is in categorically applying this to AI generated visuals, to group AI slop with the porn and the gore and the rest of that content group. Because slapping a badge on that was never enough.

We don't need no stinking badges

The current approach for dealing with AI generated assets is to either do nothing at all, or to slap a badge on it, to inform the reader that it is, indeed, AI generated.

But that doesn't cut the mustard.

It is not enough to show a banner, as if to say "I just showed you something you despise, in case you missed it". An opponent to AI slop should not have to waste bandwidth, generate any sort of carbon footprint in the form of server load, or have to fill up their device memory with bytes they don't want to see or keep in browser cache for the next 12 months. The thing they despise should not reach them at all.

Fixelation

So does that get me in the clear, then? I did some pixelation, and now the issue is fixed?

Well, no. My stubborn, continued use of AI slop, which I know is bad for me, does indeed make me a part of that tool chain, of the market process that is unemploying graphic designers and illustrators, and will soon - if the tech lords are to be trusted - come for the rest of the workforce. It would indeed be easier to just say no to slop.

Instead I chose the opt-in, a position somewhere between yes and no. It's just a statement feature on a tiny blog, and it won't change the world, but it could contribute to a conversation, and that conversation could lead somewhere. How great would it be if LinkedIn, for instance, processed all uploaded portraits mechanically and made fake profile pictures opt-in?

I know what I would choose, if I had that option.

Propaganda-poster mock-up of a longread magazine spread: framed illustrations of a swimmer in a flooded landscape, a flag-bearing boatman with smokestacks behind, a worker with a tool, and a tractor, interspersed with text columns and a small map of Norway.
work

Long-read, mixed-content data flow

work

Long-read, mixed-content data flow

In 2024, TV 2 published Vintersportens siste dager, The Last Days of Winter Sports, a multi-part series on what climate change is doing to Norwegian winter sports. I built the editor and the data flow underneath it.

The platform is a mini-CMS in Sanity, with schemas shaped to this article series rather than to a generic blog. Journalists composed with custom object types: framed and full-bleed photos, paired-image scrollers, table data, bar graphs comparing ski-day projections under different climate scenarios, a searchable lookup of 34 named ski resorts. Each block had its own validation and its own rendering. The schema was the editorial grammar.

The presentation is a SvelteKit app fetching content from Sanity with GROQ queries, with images served through cdn.sanity.io. My piece was the platform side: the schemas, the queries, the data flow. The journalists logged into a separate Sanity studio to do the writing; full integration with TV 2's main publishing rig was a possibility we left for later, and it was the right call.

The journalism is by Magnus Wikan, Elisabeth Teige, and Fredrik Fjellvang. The photographs are by Daniel Sannum Lauten and Elias Engevik. The frontend is by Marius Pedersen. The design is by Christoffer Sandell.

The project shipped as a one-off and stayed that way. The next iteration of long-read journalism at TV 2 wasn't built on top of this codebase; it was a separate system, picked up and grown by colleagues for the form they needed next. That, in retrospect, is the right shape for this kind of work. Move fast, get the thing to prod, get eyeballs on it, learn what works, and let the next iteration be its own thing rather than a refactor of the last one. Refactor-as-a-default slows everything down.

The most rewarding part has been watching the ideas travel. Vidar Håland took some of the techniques and concepts from this project and built a much more versatile, more integrated system for long-read journalism at TV 2. His platform powered, among other stories, the Russian Cabins investigation, which won SKUP, Norway's investigative-journalism prize. I had no direct hand in that; it was just very cool to see.

Read it: Vintersportens siste dager.

Propaganda-style poster of a factory worker pulling faces from a crate labelled 'Factory Production Batch 1965' and assigning them to a line of placeholder bodies whose heads are loading spinners.
curiosities

pain itself, because it is pain

curiosities

pain itself, because it is pain

Remember placeholder content? Cleverly resized cat photos and variations over Lorem Ipsum. Call an endpoint and get back filler that looks like Latin. Clever stuff, useful back then, now replaced by generative AI. Here's today's novel idea, then: Murder Ipsum. A mystery with its clues hidden in placeholder text.

An audience of none

Imagine somebody cruel and patient, a serial killer with a web dev kink: he's running a free to use placeholder text service. Users get structured filler text that contains, at random intervals, a name followed by three apparently random words, but... they are not quite random. Not random at all.

Nobody will read it. That's the whole point. This sicko needs to confess, but doesn't really want to get caught. And he has found the perfect audience.

Tens of thousands of staging environments serve the names of his victims, padded between consectetur adipiscing elit, whatever that means, but these sites are never indexed, and never actually read. The placeholder content is replaced with real content for prod, and the confessions go unnoticed.

Or maybe it's something weirder than that. A cosmic entity, a moth man type figure that knows things and means well. But its only mode of communication is to subtly influence the random generation of strings hidden among fragments of dodgy Latin.

Or maybe it's a message from the future, somehow. The main character himself, who in the future got hold of a tachyon emitter that can flip single bits in the past. In the future, as an old man, he targets the placeholder generator's content seed key, which will create the clues he will discover as a young man. Why not. It's not like I'm going to write this novel anyway.

A short history of filler

Placeholder text started as a typesetter's joke. Lorem ipsum is Cicero with the front teeth knocked out: dolorem ipsum quia dolor sit amet means "pain itself, because it is pain", but it got chopped into lorem ipsum dolor sit amet to fit the line-length better, and everybody thought it was real latin, for a Letraset specimen book published in the sixties. Designers needed Roman-shaped paragraphs to test fonts, and didn't care that they got a philosopher's mangled complaint about pain, recut to not quite mean anything at all, because no one was ever supposed to actually read it. They used it for sixty years. No one cared about what it meant anyway. It was just placeholder. Sure, it reached prod, some times. Fun times.

If placeholder text can be called a literary genre, and it probably can't, it is the least pretentious, least assuming, and least relevant of all genres. But the genre had real craftsmen, and fun projects: Bacon Ipsum. Hipster Ipsum. Shakespeare Ipsum. JSONPlaceholder gave you a fake REST API: ten users, a hundred posts, comments that nested correctly, so you could build a frontend before the backend existed. Faker.js was famously blown up by its own creator to protest corporate greed.

Those libraries and services were, and this is worth saying, clever, and also generous. Developers saw a pain point, and just made cool stuff that sorted it out. No signup, no SaaS subs. No tokens burned. The load-bearing trait of all of it was always the same: nobody reads it. Two words in, the eye glazes. The placeholder is for seeing the shape, not for reading the message. There is no message.

So. Let's get back to the mystery. Whoever is using Murder Ipsum, has built their broadcast on top of that one fact: No-one reads this stuff. That's a good place to hide a confession.

Murder Ipsum

No-one had even seen the site for years; I was just by to check what it was before culling the pod. Lorem ipsum header to footer, an image carousel, a product list, a list of portraits with generic names and made-up titles, cute cats instead of portraits. So a test site, ready to be deleted, except...

I noticed the name of a member of the placeholder board. Lucrezia Diallo. That's an unusual name, and I knew a Lucrezia once. We called her Lucy, but when her mother hung up posters of her all over town, she used her full name, and it stuck with me.

Her title was weird too. The others had titles like Assisting Director of Party Services and Executive Polenta Manager. But Lucrezia's was Stick Chapels Reputable.

Write another 300 pages of that, and you've got yourself a novel that no one will read.