The same data, the same image, every time
On-brand is not a style setting. It is the property that two runs of the same job cannot disagree. You design the template, mark what changes, and send data; the renderer does the rest without inventing anything.
Two renders,one hash.
Determinism is easy to claim and easy to check, so it is worth checking. We rendered one design twice with the same field values and compared the files.
27,225 bytes
SHA-256 5720d9df…
27,225 bytes
SHA-256 5720d9df…
None
Byte for byte identical. Not visually close: the same file.
That is the property a diffusion model cannot give you, and it is what makes a render safe to put in a billing run, a certificate batch, or anything a customer will read closely.
Three things dothe work.
None of them is clever. They are constraints, and the output is predictable because of them rather than in spite of them.
The template is the contract
You design the layout once and mark the parts that change as dynamic fields. A render fills those fields and touches nothing else, so the only thing that can differ between two images is the data you sent.
Your fonts, and a warning when one is missing
Upload a family and use it as the fontFamily. If a design asks for a font that is not attached, the render still returns an image, and it returns a warning naming the family and the fallback. A silent substitution is the way brand drift usually gets into a batch.
A fixed canvas, on purpose
Dimensions are set at design time, not per request. That is the trade: you make one design per size, and in exchange nothing reflows, nothing crops unexpectedly, and the thousandth render has the layout you approved on the first.
Different tools,different jobs.
This is not an argument that generative models are bad at images. It is an argument that they are bad at this particular job, and the reason is structural.
Ask a model for a picture
You get something that did not exist before, which is the point. Ask twice and you get two different pictures. Put a name on it and the letters are often not quite letters. Excellent for illustration and concept work.
Ask a renderer for a document
You get the layout you approved with the values you sent. The name is real text in your font, so it is spelled correctly and it is searchable. No invention, which is exactly what an invoice needs.
Use both
Generate the artwork with a model, upload it, and set it as the background of a template. The illustration varies; your logo, headline and spacing do not.
Where getting itwrong is expensive.
Consistency matters most where the image carries a fact that someone will check.
Certificates and diplomas
One recipient per render, each name spelled the way it was given. A batch that drifts is a batch you reprint.
Invoices and receipts
A line-item table and a total, rendered per customer. Numbers that are real text, not a model's impression of numbers.
Link previews at scale
One 1200x630 template, a URL per post. Every card the same shape, which is the whole reason the feed looks deliberate.
27 component types, each one deterministic
Text, images, QR codes, barcodes, tables, ratings, progress bars, shapes and the chart and data family. Each takes structured values rather than a description, which is why the same values always draw the same thing.
Consistent images FAQ.
Yes, and that is the whole model here. You design a template and send data; nothing is inferred from a prompt. The agent or script chooses the values, and the renderer fills the fields it was given. Because no generative step sits between the data and the pixels, two runs with the same data cannot disagree.
Measured rather than claimed: the same design rendered twice with the same field values returned the same 27,225-byte PNG, with a matching SHA-256 hash. Same design plus same data gives the same bytes.
Yes. Upload your font family and reference it as the fontFamily on any text layer. If a render asks for a family that is not attached to the design, the response carries a warning naming the font and the fallback it used, so a missing font surfaces as a signal instead of a quietly wrong image.
Text layers take auto-resize with a minimum and maximum font size, so a long name shrinks to fit its box rather than overflowing it or pushing the rest of the design around. The box stays where you put it.
Not by passing a size to the render call. Dimensions are fixed at design time, so one design is one size, and a design can carry extra sizes you create deliberately. That is a real constraint and it is the reason output is predictable: there is no reflow step to disagree with you.
A diffusion model is the right tool when you want a picture that did not exist before. It is the wrong tool for a certificate with someone's name on it, because you cannot ask it for the same layout twice and text often comes back malformed. Templates are the other half: no invention, exact text, repeatable output.
Render it twice and compare
100 renders a month, free forever, no credit card. Enough to put the claim on this page to the test on your own template.