← All writing

A bit of fancy and flourish

Most mornings my phone opens on an image that did not exist the day before: one wide panorama, seen from a hillside or a rooftop, with the whole day happening in it at once. A model on my own GPU generates it from the day itself: the brief’s own contents supply the scenes, the hour picks the light, the month picks the season, and the edition number seeds it.

A generated morning header in the panorama style: a city at dusk seen from a hillside, with small scenes from the day's brief placed across it, from a rooftop handshake to a group of kids waiting on a curb.
A recent morning's header in the panorama design. Screenshot added October 2026.

Unbeknownst even to me, Dispatch, the app I’ve been building this month, has become my personal super-app for everything that matters to me: my calendar, inbound packages, home controls, the emails I actually need to answer, and a lot more. Almost all of that is strictly utilitarian. I wanted to go past utilitarian and add a bit of fancy and flourish, and to learn something on the way, so I put an image-generation model on my card to draw a daily header image. As complex as that sounds, it was a lot easier than I anticipated, and those headers have slowly become one of my favorite parts of the app.

Picking the model was the most enjoyable part of the build. I ran a blind taste test against myself: forty screens of six candidate images each, identified only by hash. On each screen I chose the one I liked best, and on a second pass I flagged anything below the quality bar I’d accept, mostly garbled text, bad hands and odd props. Krea 2 Turbo won the most screens and draws the header now.

The prompt has been more of a journey. The first one was a mild location-based description of the hills near us, and it made beautiful scenes that felt better suited to a framed TV than the top of a daily brief. So I gave myself a new goal: put the non-deterministic nature of these models on full display by handing it what amounts to a pile of unstructured garbage, the day’s headlines included, and seeing what comes out the other side.

The engineering underneath is a budgeting problem. The image model shares the card with the language model serving everything else in the house, so before generating, the pipeline checks how much memory is free and either generates on the GPU, generates with part of the model pushed to the CPU, or falls back to a procedurally drawn header. Day one fell back. The memory it couldn’t see was held by the image server’s own cached model from the night before, which its statistics couldn’t tell apart from a neighbor’s. Now the pipeline asks the server to release its memory and checks again before giving up, which took the free memory from 2.6 GB to 11 and produced the picture in eleven seconds, and the image model unloads itself after ten idle minutes. A failed regeneration never replaces a good header with the fallback.

The header regenerates when the content behind it changes on a refresh rather than on a timer, and the half-hourly mail refresh doesn’t count as a change, so it doesn’t redraw the picture.

The first morning it landed on my phone, I said the colors looked washed out. Measuring the image showed why: the grade designed to keep the image quiet behind the text was muting a prompt that had already asked for muted color, so the blacks lifted into haze and the whites capped out gray. Applying four grades to the same generated image made a real side-by-side possible, and I picked the light touch for the header. Tapping it opens the ungraded image at full size; the reason for restraint behind text does not apply to a picture filling the screen.

The same generated morning header twice, from the September 24 edition, before the panorama design: graded and matted at the top of the Dispatch brief on the left, ungraded and full-bleed in the viewer on the right.

What I have today is tamer than the pile of garbage I asked for. The tool I built it with added what would normally be reasonable guardrails, keeping the output uniform and legible from one morning to the next, and with daily use that got a bit boring, so I pulled it back the other way until I had a version I’m keeping. Each story of the day gets a small scene somewhere, at its true scale and distance, and a quiet day features less noise. The headlines stay in, because they add a bit of fun chaos, but an AI story has to show up as the event itself, with the people in it, the results of which are often hysterical. The weather came out. On a day I’m home, the language model that writes the picture’s prompt picks the place itself, anywhere in the world the day’s stories fit together best; my own location only shows up when I’m traveling.