THE SHORT VERSION
An object holds its shape across runs because writing it forces you to name every part separately.
• Three keys at the top: high_level_description, style_description, compositional_deconstruction. Only the last is required.
• Each element takes type, desc, an optional bbox, and for text elements a text key holding the literal string.
• Colour lives in color_palette, on the whole picture or on a single element. Sixteen hex values for the image, five for any one element, uppercase.
• Honest caveat: a model reads either shape and turns both into the same tokens. The object buys repeatability, and Ideogram's own guide sends you back to plain text for photoreal work.
|
Most of the prompts I keep are one long sentence, and most of them drift. I rewrote one as an object last month, ran both ten times, and the object held its shape while the sentence wandered.
That is the whole case for it, and it is smaller than people make it sound. A model does not prefer JSON. It reads either shape and turns both into the same tokens. The object holds because writing it forces you to name every part separately, and because you can change one line later without disturbing the rest.
Below: every key with a worked example, how to break a picture into parts, how to pin text and colour, and the four ways this quietly comes apart.
|
 |
ONE · THE WHOLE SHAPE One picture, every key.
Here is a complete caption with nothing left implicit. style_description is not a sentence, it is its own object, and that is the part most people get half right.
{ "high_level_description": "A steel kettle on a kitchen counter in late afternoon light.", "style_description": { "aesthetics": "quiet, domestic, unstyled", "lighting": "low side light from a west window, no fill", "photo": "50mm, f/2.8, waist height", "medium": "photograph", "color_palette": ["#E8E2D9", "#8A8578", "#2B2B2B"] }, "compositional_deconstruction": { "background": "A plain plaster wall and a wooden counter, nothing on the walls.", "elements": [ {"type": "obj", "desc": "A brushed steel kettle, handle turned left."}, {"type": "obj", "desc": "A folded linen cloth beside it."} ] } }
Say the picture once at the top, say the look once in the middle, then stop describing and start listing. Most first attempts fail by writing the same scene three times in three places and leaving the model to pick which one it believed.
|
TWO · BREAKING IT INTO PARTS One entry per thing.
The test I use: anything you might move, remove or swap gets its own entry. Everything else stays inside the desc of whatever it belongs to. A kettle is an entry. The steel it is made of is not, because you would never swap the steel without swapping the kettle.
"elements": [ {"type": "obj", "desc": "A ceramic mug, half full, closest to camera."}, {"type": "obj", "desc": "A folded newspaper, edges soft from handling."}, {"type": "obj", "desc": "A small glass jar of loose tea, lid off."}, {"type": "person", "desc": "A hand entering frame from the right, reaching for the mug."} ]
Two things that always travel together stay one entry, and a wall does not become wall, paint and shadow. Over-splitting reads as clutter and you lose what you wanted, which was a short list you can still edit a month from now.
|
THREE · WHERE THINGS SIT Place only what must be placed.
Any element can carry a bbox, four numbers on a grid running 0 to 1000 in both directions with 0,0 at the top left. The order is top, left, bottom, right. Boxes are optional on every element, which is the part people miss.
"elements": [ {"type": "obj", "desc": "A steel kettle on the counter.", "bbox": [420, 120, 760, 380]}, {"type": "obj", "desc": "A window, blown out, the light source.", "bbox": [80, 620, 520, 980]}, {"type": "obj", "desc": "A cloth, wherever it falls."} ]
Give a box when the position is the whole point: words over a shoulder, a shape in one corner, two things that must not overlap. Leave it off everywhere else, as the cloth above does, and let the model compose. A frame full of boxes is a layout you drew by hand in the least suitable tool available.
|
FOUR · TEXT AND COLOUR The two things worth pinning.
Words that must render exactly get their own element, with type set to text and the string in text, held apart from the desc that says how it should look. Colour sits either on the whole picture or on one element.
"elements": [ {"type": "text", "text": "GOOD MORNING", "desc": "Condensed sans, all caps, pressed into the label.", "bbox": [300, 240, 380, 760], "color_palette": ["#2B2B2B"]}, {"type": "obj", "desc": "A paper label wrapped around the jar, slightly creased.", "color_palette": ["#F4EFE6", "#C8BEA8"]} ]
Sixteen hex values for the image and five for any single element, uppercase. Putting the string inside a sentence instead of its own text key is the most common reason exact wording comes back approximated.
|
 |
FIVE · HOW IT BREAKS Four failures, in order of how often.
Invented keys. Anything the documentation does not define is ignored in silence. Every key below does nothing, and the same words inside a desc would have worked.
{"type": "obj", "description": "A steel kettle.", "bounding_box": [420, 120, 760, 380], "camera": "50mm", "vibe": "calm", "mood": "domestic"}
The keys are desc and bbox. I carried the long forms in my own notes for months before I read the page properly.
Burying things. Elements nested inside elements read as decoration rather than instruction. Keep the list flat and let each desc carry the detail.
Over-building a plain photo. The vendor's own guide sends you back to plain text for photoreal scenes where placement is not critical. A portrait in daylight does not need a structure.
Drift. After five edits the object no longer describes the picture you had in your head. Read the whole thing aloud before you run it, which takes twenty seconds and catches nearly all of it.
|
WHAT IT CHANGES When to reach for it.
Reach for the object when words have to render exactly, when a layout matters, or when you are making a run of pictures that have to look like each other. Those are the jobs where a sentence quietly costs you a whole afternoon of regenerating.
Keep the sentence for a one-off, for anything photoreal, and for the part of the work where you actually want the model to surprise you. Structure is for the things you intend to repeat.
|
PROMPT OF THE DAY The converter.
Paste a prompt you already use under this and let a text model do the conversion. The key names are the ones Ideogram documents, so the result runs without editing.
Convert the prompt below into one JSON object with exactly three top level keys. high_level_description: one or two sentences about the whole picture. style_description: an object with aesthetics, lighting, photo, medium and color_palette. compositional_deconstruction: an object with background as a string and elements as an array. Each element takes type, desc, an optional bbox written top, left, bottom, right on a 0 to 1000 grid, and for text elements a text key holding the literal string. Use no key outside that list. Give a bbox only where I stated a position. Keep elements flat, add no adjectives I did not write, and list every gap you had to fill in a notes field outside the object.
The last clause is the one that matters. Without it the model fills your gaps silently, and you inherit its taste as though it were your own.
|
START HERE Convert one you already use.
Take the prompt you reach for most, the one you have retyped a dozen times, and write it as an object once. Run both versions three times each. The sentence will move more than you expect, and you will see exactly which part of it was never pinned down.
|
THE NEXT WORKING NOTE
Next I am finishing the format sheet: one prompt written four ways side by side, a sentence, a line of tags, a set of blocks kept constant, and the object, with a note on which one held under repetition.
Want it when it ships? Reply with send me the format sheet and I will get it to you.
|
A QUESTION FOR YOU
Which of your prompts drifts the most?
Reply with the one that never comes back the same twice. I will convert a few of them in the format sheet and show what the object caught.
If this was useful, forward it to someone who regenerates the same picture six times.
|
|