When AI Refuses to Dream

| In AI
| 9 minute read |by Constantin Gonzalez
A calm mountain lake at dawn with a wooden jetty leading into the water and a red canoe moored beside it. Snow-dusted peaks and dark pine forests line the far shore under a soft pink and orange sky. No text or numbers appear anywhere in the image. AI: Gemini 3 Pro Image

During our summer vacation in Italy, I had a silly idea: what happens if you feed an image generator random data instead of a prompt?

It’s a bit like provoking hallucinations instead of avoiding them. What do image generators produce that is truly inside them, if the prompt doesn’t carry any meaning at all? I hoped that random input would push the models off their predictable paths and into something unexpected, a bit like the Serendipity Engine I built last year, only without any curation at all.

So I asked Claude Code to help me build a small tool, pointed it at three services (Google’s Gemini 3 Pro Image, OpenAI’s gpt-image-2, and Stable Diffusion 3.5 Large), and let the dice roll. The code and all the images are on GitHub, along with a lot more detail, in case you’re interested. Here are the three things I found most interesting:

Smart models mostly try to make sense out of nonsense

The newer models from Google and OpenAI refuse to accept that a random number is just a random number. They insist on finding a meaning, and then try to make that meaning work.

Close-up of an oval brass plate screwed onto a dark, weathered wooden door, engraved with the number 763530653 in large black serif digits. AI: Gemini 3 Pro Image
Gemini’s answer to 763530653: a brass house number

For example, I gave Gemini 763530653 and got a brass house number on a weathered wooden door. A UUID ended up embroidered on a hoodie sleeve or engraved on a clock, character-perfect, with hyphens included. OpenAI tried to be more clever by producing a clean spec sheet, or in one case a fully annotated diagram explaining the internal structure of the UUID it was given.

A dark, dashboard-style diagram showing the UUID 353ba353-81bb-4834-aa83-4c7610604cbf split into color-coded fields labelled time_low, time_mid, time_hi_and_version, clock_seq_hi_and_reserved and clock_seq_low_and_node, with small panels below naming the version, variant, format and type. AI: gpt-image-2
OpenAI read a UUID and wrote the documentation

In order to tease out some more creativity, I tried asking Gemini to “let itself be inspired” by a number. It returned no image at all. Instead, it helpfully explained that 931360149 is a Unix timestamp for Wednesday, July 7, 1999. Another number I gave it was factored into primes. Both were correct, but both were also boring.

Google and OpenAI don’t publish how these models work inside, so I can only describe what I observed. To me, it looks like something in there tries to understand the prompt before any pixels get made. That’s a great feature when you want a precise image, but it’s also a real obstacle when you’re trying to provoke a happy accident. While working through the results, Claude suggested putting it this way: Stable Diffusion denoises pixels, while the newer models also denoise meaning.

Which brings up Stable Diffusion, one of the grandparents of today’s image generators. Its current version ignores the string completely: none of the images generated with it contained any text, and none related to the (random, nonsensical) input either. Instead, it produced serendipitous photographs of nothing in particular: a container ship, a group of workers in hard hats, a golden robotic bee in a snowy forest. Much closer to what I was hoping for!

A grid of nine unrelated photographs: rows of workers in helmets and uniforms, a container ship at sea, a stone gateway on a beach, two women leaping over a pond, a small figure beside a huge staircase wall, a man holding a burger to the camera, a golden robotic bee in a snowy forest, pink and yellow flowers in soft focus, and a bearded man in sunglasses on a country path. None contains any text. AI: Stable Diffusion 3.5
Nine random strings, nine photographs of nothing in particular

Short numbers go on brass, long numbers go on screens

With nothing else to go on, Gemini revealed a clear house style: short numbers tended to go onto brass plates, tags, and keys, almost always on weathered wood in warm light. Claude and I ran seven samples to make sure this wasn’t a coincidence, and all seven looked like variations of the same theme.

Seven photographs in a grid, each showing a nine-digit number on an old metal object: a rusty California license plate, several brass and steel plates screwed onto weathered wood, an oval brass door plate, and an antique key with digits stamped into its shaft. AI: Gemini 3 Pro Image
Seven random integers, one house style
A dark screen filled with lines of bright green random letters and digits, with the hooded figure of a person typing on a backlit keyboard in the lower right. AI: Gemini 3 Pro Image
256 random characters become a hacker’s terminal

Long random strings got a different treatment: they converged on glowing terminals. The string no longer looked like a label, so the model decided it must be code.

I find this oddly charming, because it’s not wrong. Where do short numbers appear in photos? On doors, lockers, and hotel keys. Where do long strings of gibberish appear? On screens. The model tried to find a home for these numbers that was consistent with its view of the world.

Asking it to be more creative didn’t change much. Even when I told it explicitly to use the number “as pure inspiration, not as a description,” it still wrote the digits onto something. The packaging may have changed, but the model’s (uninspired) goal remained the same: show the number.

However, there was one exception: Gemini split 186561909 into 1865 and 1909, decided that must be a date range, and built an entire genealogy office around it: a ledger, a pocket watch, a family portrait, and a calendar for September 1909 on the wall. We checked, and September 1909 really did start on a Wednesday. Still about the number, but this time there was a creative story behind it.

A sepia-toned old office: an open ledger, a pocket watch and a pair of spectacles on a worn wooden desk, a framed family portrait on the peeling wall, and a September wall calendar by the window. AI: Gemini 3 Pro Image
From random digits to a family history

Sometimes a number breaks through

Every now and then, even the smart models let go. With Google’s Gemini, one 256-character string produced a serene mountain lake with a red canoe, without any reference to the input at all. OpenAI did the same more often, returning a puppy or an alpine village for a UUID, though its scenes looked more like stock photos than happy accidents.

A golden retriever puppy lying on a fluffy carpet in a cozy living room, mouth open in a happy expression, next to a plush teddy bear. AI: gpt-image-2
What OpenAI made of a random UUID

My first thought was that the canoe must be hiding in the string somehow, maybe a token that looked like “boat.” So I ran the exact same string three more times. I got a street festival, a woman in a café, and the string written on a blackboard.

Four images side by side generated from the same random string: the original lake with a red canoe, a colorful street festival, a smiling woman holding a cup in a café, and a blackboard covered in the random characters written in chalk. AI: Gemini 3 Pro Image
Same string, same model, four very different images

To me, these are the only truly serendipitous results of the whole experiment: images that have nothing to do with their input and that nobody, including the model, could have predicted. They’re rare, but they’re the lucky ones that made me press the button again.

Noise needs a partner who doesn’t explain it away

I love playing with image generators, and doing so can tell you a surprising amount about their embedded priors. However, if you’re after generating serendipity through randomness, today it seems to come down to these options:

  • Noise fed into a smart model tends to get explained away, as a brass plate or a spec sheet.
  • Good old diffusion models generate raw, unpredictable output, which is great for surprises but has no intention behind it.
  • Curated randomness, like the constrained serendipity approach from the Serendipity Engine, sits in the sweet spot: random enough to surprise you, meaningful enough that the model has something to work with.

Brian Eno didn’t hand musicians random noise. He handed them Oblique Strategies: small, curated nudges with just enough meaning to push you somewhere new. Now that the smartest models are so good at making sense of things, I think that’s the kind of randomness that yields the best results.

If you want to try it yourself, the code and some further analysis are on GitHub. You can also feed it your own strings. I’d love to hear what you get, and what other approaches you try out to make a model dream!