ChatGPT generates images from a text description, and the fastest way to get the same look twice is to write that description as a JSON block instead of a sentence. A JSON template splits the image into named fields, so you change one field and keep the rest fixed. This guide explains why images drift, gives you a template to copy, and shows how to lock a character or a style across a whole set.
Why ChatGPT images drift between generations
Type "a coffee mug on a wooden table, product photo" twice and you get two different mugs on two different tables. Every generation starts from a fresh random state, and every gap in the prompt gets filled by the model's own taste, which changes with the roll.
Prose makes this worse. A sentence carries the important details and the filler in one stream, so when you edit the sentence to change the table, you nudge the mug too. The model reads the whole rewritten line as a new request.
The fix is to separate what stays from what changes. That is a structure problem, and JSON is the cheapest structure ChatGPT reads without complaint.
The JSON template idea
ChatGPT does not parse the JSON as parameters. It reads it as text, the same way it reads a sentence. The field names are mine, and you can rename them. What the format buys you is discipline: each aspect of the image lives in one labeled place, and you can see at a glance which line you are changing.
Here is the shape I start from.
{
"subject": "a matte forest-green ceramic mug, no logo, handle facing right",
"setting": "oak table by a window, morning light from the left, soft shadow",
"style": "commercial product photo, 50mm lens look, shallow depth of field",
"composition": "three-quarter angle, mug fills about 60 percent of the frame, centered",
"palette": ["forest green", "warm oak", "off-white"],
"avoid": ["text", "extra objects", "reflections on the rim"],
"output": "square, single image"
}
Paste that into ChatGPT with one line above it: "Generate an image from this spec." For the second image, change only setting. The mug holds. Change only palette and the scene holds while the colors shift.
Six or seven fields is plenty for product work. Portrait and scene work adds a character field and a mood field. Past ten fields the model starts losing track of what matters, so cut before you add.
Character and style consistency
Consistency across a set comes from two locked blocks: a character block and a style block. I write them once, keep them in a note, and paste them unchanged into every prompt in the series.
A character block names the fixed traits: age range, build, hair color and cut, skin tone, two or three clothing items, and two identifying details like a scar, glasses or a specific pin. Give the character a name inside the block and use the name in the scene field. The model uses the name as a handle back to the description.
A style block names the medium, the lighting logic, the lens look and the color rules. "Editorial illustration, flat color, thick outlines, muted palette with one accent" is enough. It stays identical across the set.
Then the only field that moves is the scene. Same character, same style, ten different moments. Expect the face to wander a little between generations even so, because the model has no memory of the last image beyond what the prompt carries. When a reference image is allowed, upload the best frame and say "match this character exactly" in the character field.
The ChatGPT prompt library has finished character and style blocks you can borrow, and the DALL-E section holds image prompts written in the same spirit, which still work as starting points.
Editing an existing image with a prompt
Upload an image, then describe the change. The mistake I see most often is describing only the change. Describe the keep list first, then the change. "Keep the composition, the lighting, the mug and the table. Change the wall behind it to pale blue." The keep list is what stops the model from re-rolling the whole scene.
For edits I use a smaller JSON block with two fields: keep and change. Each is a list. It takes ten seconds to write and it removes the guesswork about what you meant to preserve.
Edits work best one change at a time. Wall color in one pass, then a new object on the table in the next. Stacking four changes in one prompt gives the model four ways to misread you.
Limits
Some things the JSON will not fix.
- Text in the image. Short labels often render, long copy often does not. Leave real text out and add it in a design tool.
- Exact counts. Ask for seven candles and you may get six or nine. Say "a small cluster" if the number does not matter, and check the output if it does.
- Hands, fingers and small overlapping objects still go wrong at a rate you will notice.
- Brand assets. It will not reproduce a real logo or trademark reliably, and that is by design. Ask for a blank label and overlay your own.
- Identical faces across a set. Close, yes. Identical, no. Plan for a review pass.
- Plan limits. Image generation is metered by plan and the numbers change.
If you need the same character across a long series and ChatGPT keeps wandering, the Nano Banana guide covers a different image model and its approach to edits.
What is inside the free ChatGPT Images guide
The download has four parts.
- ChatGPT Images Prompt Engineering Guide
- 20+ JSON Image Templates
- Image Prompting Mini-Course
- Lifetime access and updates