"Showing the newest result isn't a design decision. It's what you get when you haven't made one — and it quietly declares that recency is the ranking."
The Default Nobody Chose
A workspace that receives generated candidates has to put them somewhere, and the path of least resistance is a board that shows the latest one biggest, or newest-first, or simply replaces what was there. That feels neutral. It isn't. A latest-wins surface has made a ranking decision on the artist's behalf — it has decided that the most recent result is the most interesting one — and it has done so invisibly, which is the worst way to make a decision.
The whole point of generating four variants is that you don't know which one is good yet. A surface that answers "which one?" before you've looked has skipped the only part of the loop that was ever yours.
Three Verbs a Mirror Doesn't Have
Turning the board into a place you actually judge took three capabilities, and each one is a verb the latest-wins version couldn't express.
Hold. Clicking a candidate pins it to the canvas so it stops being transient. Without this, every new arrival evicts the thing you were considering — you can't evaluate a result that keeps getting replaced while you look at it.
Compare. Press and hold on the canvas and it shows the artist's own Photoshop preview; release and it returns to the candidate. A slider blends the two like an onion skin. Note carefully what the comparison is against: not another candidate, but the drawing itself. The question a drawing companion has to answer is never "which of these four is prettiest" — it's "did this help what I was making?" The B side of the comparison is the artist's own work, and building it that way is the thesis showing up in a UI control.
Hold constant. A lock on a card makes that card's seed the base seed for every following generation. A chip beside the denoise control clears it.
Why the Seed Lock Is the Deepest of the Three
This one looks like a convenience and is actually the difference between iterating and gambling. Nudge the prompt, regenerate, and the result is different — but if the seed re-rolled too, two things changed and you cannot attribute the difference to either. You're not iterating; you're sampling a distribution and hoping. Lock the seed and the noise stops being one of the things that moved between runs, leaving the change you actually made. That's a controlled experiment, and it is the only way a creative loop accumulates knowledge instead of just accumulating images.
It matters most in the automatic mode, where the companion regenerates as the artist draws. There the variable you want moving is the canvas — the drawing itself, stroke by stroke. If the noise re-rolls each pass, the canvas's contribution is buried under a fresh random field every time, and the live loop shows you a slideshow instead of a response. The automatic loop always asks for a single candidate, so there the locked seed is used exactly as locked.
A manual batch is the deliberate exception, and it is worth understanding rather than filing as a bug. Ask for four candidates with a seed locked and the batch does not go to the engine as a batch at all: the brain fans it out into four sequential engine jobs and steps the seed by one for each, so every job still receives a single fixed seed. The stepping is there because four generations from an identical seed and an identical prompt would be four copies of the same image, which is not a set of alternatives. Note where that logic lives — at the single fan-in point, not in the workspace that asked and not in the engine that ran. A batch is a routing decision, so it belongs with routing. So the lock means base seed, not frozen seed: the batch fans out from a place you chose instead of from a place chance chose. One variable still moves between runs; within a run, the fan is the whole point.
Batches, and the Bug Hiding in Them
Judgment needs alternatives, so generation gained a count: ask for one to four candidates at a time. That's the obvious half. The non-obvious half is what "done" means. A job that reports itself complete when its first candidate arrives will hand the automatic loop back its free slot while three more images are still coming, and the next generation starts on top of the batch it just launched. The batch has to stay open until every candidate it promised has landed. Counting is not bookkeeping here; it's the thing that keeps the loop from racing itself.
Some State Deserves to Be Forgotten
One deliberate asymmetry: the pin is not persisted. It survives while you're looking and it's cleared when candidates are deleted or purged. The instinct is to save everything the user touched, but a pin isn't a commitment — it's "I'm looking at this one right now." Persisting it would turn a glance into a decision the artist never made, and they'd return later to a workspace asserting a preference they don't remember having. Meanwhile the seed lock and the batch count are persisted, because those are settings about how the tool should behave. Same board, two kinds of state, and the line between them is whether the user meant it to last.