Five layers that catch each other
Consistency is not a button. It is the sum of five measures, each stopping a different kind of fault.
Layer 1 — the brief is assembled, not typed
A human can forget a detail; an assembling routine cannot. Building the brief deterministically from the canon removes the biggest source of error: the incomplete prompt. Anyone who wants to overrule a canon rule has to do so explicitly, with a reason, and that is recorded with the generation.
Layer 2 — reference images always travel along
Text alone is too weak for a face. Every character in the cast supplies its canonical reference images, within the limits of the chosen model. The style profile supplies the style references.
Layer 3 — automatic checking of the mandatory traits
Immediately after a generation, before a human looks, the stored check question for each trait is put to a vision model together with the image. A missing heavy trait puts the variant on doubt: it is not deleted, but it is marked, because the verdict stays with the human. The checking model is by definition a different model from the maker — a model judging its own work does not see its own blind spots.
Layer 4 — the checks that need no AI
Cheap, fast and completely reliable, and therefore always run: palette against the colour lock, brightness and contrast relative to the rest of the series, dimensions and ratio, text in the image where it does not belong, near-duplicates via a perceptual hash, and file health (no zero-byte file, no truncated file, no missing alpha layer where transparency is expected).
Layer 5 — the human decides, and the regression set guards the whole
Approving is human work. Alongside it a fixed regression set runs periodically and on every model change, so it becomes visible when a provider updates its model and the visual language quietly shifts.
When the check and the human disagree
The human always wins, but the disagreement is recorded. If a trait is often wrongly rejected, the check question is badly worded; if it is often wrongly passed, the check is too lenient. In both cases it is the canon that needs improving, not the image. That is how the application gets better by itself.