Prompts for posters and logos tend to grow organically: someone adds a colour, someone else pastes the headline, nobody mentions the aspect ratio, and the output comes back in the wrong shape with a misspelled date. The How to Use Ideogram 4 page lists the fields a good brief should contain. This post turns that list into a tiny validator so a brief can't be sent half-finished.

Summary of the linked page, read 2026-11-01
The fields
The page puts it in one sentence: "Include the exact text, visual style, subject, composition, aspect ratio, colors, and intended use." It also suggests planning drafts, HD renders, prompt variants and review checkpoints, and reviewing "text, logos, trademarks, and layout before publishing."

Self-made table: the fields with an example
The script
REQUIRED = ["exact_text", "style", "subject", "composition",
"aspect_ratio", "colors", "intended_use"]
def validate(brief: dict) -> list[str]:
missing = [k for k in REQUIRED if not brief.get(k)]
if brief.get("exact_text") and not all(
isinstance(t, str) and t.strip() for t in brief["exact_text"]
):
missing.append("exact_text (empty line)")
return missing
def render(brief: dict) -> str:
lines = " / ".join(f'"{t}"' for t in brief["exact_text"])
return (
f"{brief['intended_use']}, aspect ratio {brief['aspect_ratio']}. "
f"Text, exactly as written: {lines}. No other text. "
f"Subject: {brief['subject']}. Composition: {brief['composition']}. "
f"Style: {brief['style']}. Colors: {brief['colors']}."
)
brief = {
"exact_text": ["Saturday Market", "8-12 Town Square"],
"style": "risograph print look, two inks, slight grain",
"subject": "a woven basket full of vegetables",
"composition": "headline across the top, basket centred, time line at the bottom",
"aspect_ratio": "3:4",
"colors": "green and orange on off-white",
"intended_use": "A3 poster for a library notice board",
}
problems = validate(brief)
print(problems or render(brief))
If a field is missing, the script prints what is missing instead of a prompt. That is the whole point: the gap is caught before generation, not after.
What it catches in practice
The fields that go missing are rarely the creative ones. People always describe the style and the subject, because that's the fun part. What disappears is the boring information:
- aspect_ratio: the poster comes back square and has to be cropped, cutting off the headline.
- intended_use: without "A3 notice board", the model has no reason to keep the text large and readable from a distance.
- exact_text: the brief says "a poster for the Saturday market", and the generated date is invented.
- colors: two volunteers make posters for the same event in completely different palettes.
A validator is a blunt tool, but these are exactly the gaps that a blunt tool is good at catching. It also gives a team a shared definition of "a finished brief", which saves a surprising amount of back-and-forth.
Why the order of the rendered prompt matters

Self-made diagram: where the script fits
render() puts the intended use and aspect ratio first, then the exact text with "No other text", and style last. Purpose and words are the things that can't be wrong; style is the thing you'll vary. Keeping the order fixed also means two briefs for different events produce prompts that are easy to compare.
Variants
The page mentions prompt variants. With a dict, a variant is a one-line change:
variant = {**brief, "style": "flat vector illustration, bold outlines"}
print(render(variant))
Only the style differs, so when you compare the two results you know what caused the difference.
Review

Self-made checklist for reviewing the result
The checklist mirrors the page's review step: text, logos, trademarks and layout. Add one habit: save the brief as JSON next to the chosen image. When the market moves to 9-13 next season, you change one string, regenerate, and review again.
Extending it
A few ideas if you use this regularly: load briefs from YAML so non-developers can edit them, add a maximum length for exact_text lines (long lines are harder to render cleanly), or write the rendered prompt and the validation result into a small log so you can see which briefs produced usable posters.
Top comments (0)