| name | fantastic-posters |
| description | Generate fantastic posters across 33 distinct visual styles using GPT Image 2 (via Fal). Auto-picks the right style from the user's brief, builds a templated prompt, and renders. Multi-ref + logo + brief + batch + template modes. Triggers on "fantastic posters", "quality posters", "make a poster", "poster style", "generate poster". |
Fantastic Posters
A poster generator with a curated catalog of 33 visual styles. The agent picks the style that fits the brief, builds the prompt, and generates with GPT Image 2 (via Fal). Multi-reference uploads, brand-book PDFs, structured briefs, batch generation, and template replication are all first-class.
After generation, layer separation is handled outside this skill โ open the PNG in Canva and use Magic / Smart Layers to split foreground/background/text.
How to Run
generate.js lives at the project root (alongside styles.js).
cd <repo-root>
node generate.js "<brief>"
node generate.js "<brief>" --style=<style_id>
node generate.js "<brief>" --n=3
node generate.js "<brief>" --refs=hero.jpg,brand.pdf,logo.png
node generate.js "<brief>" --logo=<path>
node generate.js --brief=path/to/brief.{md,yaml}
node generate.js --batch=path/to/listings.json
node generate.js --template=existing.png "<brief>"
Flags: --size=portrait|landscape|square|WxH, --quality=low|medium|high, --palette="#hex,...", --yes, --include-experimental.
The script reads FAL_KEY (and optional KIE_KEY) from .env at the project root. Output PNGs go to ./out/.
When the User Says "Make a Poster"
- Read the brief. Identify mood (calm / vibrant / nostalgic / mystical / luxury / corporate / playful) and subject (event / product / album / movie / listing / retreat).
- Pick the best matching style from the catalog using the Style Picker rules below.
- Show the relevant
examples/<style-id>.png to the user before generating โ never regenerate the catalog showcase. The reference render is the baseline.
- Tell the user which style you picked and why (one sentence).
- Run
generate.js. Default to --n=1. If they say "more designs" or "variations", run with --n=3.
- The script will print an estimated cost and ask for confirmation. For >=5 images or
--quality=high it always prompts regardless of --yes.
- After it saves, give them the file path and remind them: open in Canva and use Magic Layers if they want to edit text or swap the subject.
Reference Image Order (for --refs)
Multi-reference uploads follow this convention:
- Image 1 โ hero photo (the main subject)
- Image 2 โ brand book (PDF auto-renders to PNG page 1 at 2x DPI)
- Image 3+ โ logos
For --template mode the order is: template (1st) โ new hero photo (2nd) โ optional logos.
Style Picker (auto-match by brief intent)
| If the brief is about... | Pick |
|---|
| moody crime / thriller / dark cinematic | cinematic-neonoir |
| travel / destination / vintage tourism | vintage-travel |
| design lecture / minimal swiss / typography | swiss-minimal-typo |
| tech conference / agentic web / dev event | tech-conf-darkmode |
| annual report / executive / finance | corporate-report |
| live music / DIY gig / underground band | indie-gig-riso |
| home listing / open house with photo | luxury-real-estate |
| luxury estate brochure / architectural retreat | luxury-estate-cover |
| art deco / Gatsby / 1920s glam | art-deco |
| Bauhaus / primary geometric / design school | bauhaus-geometric |
| Japanese woodblock / Edo / classical Japan | ukiyo-e |
| sixties rock / Fillmore / hippie concert | psychedelic-60s |
| synthwave / retro futurism / 80s sunset | vaporwave-synth |
| minimalist film / cut-paper / Hitchcock vibe | saul-bass-minimal |
| 80s postmodern / playful clashing patterns | memphis-80s |
| high fashion magazine / editorial cover | editorial-fashion |
| symmetric pastel / dollhouse / storybook film | symmetric-storybook |
| comic / Ben-Day dots / pop art | pop-art-comic |
| wellness / meditation / retreat / soft calm | pastel-mindful |
| zen / Japanese ink / monastic minimal | sumi-e-zen |
| Dรญa de los Muertos / Mexican folk / festival | loteria-folk |
| surreal / Magritte / dreamlike | surreal-dreamscape |
| documentary / Magnum reportage / photo essay | documentary-portrait |
| stadium / race / athletic event campaign | sports-action-hero |
| album cover / vinyl / soul-funk debut | album-cover-portrait |
| post-apocalyptic action game key art | post-apoc-sword |
| melancholic sci-fi wanderer / cargo / Iceland | lone-traveler-cargo |
| cyberpunk / neon noir / dystopian megacity | neon-noir-cyberpunk |
| streetwear lookbook / drop / collection | streetwear-lookbook |
| tech product reveal / keynote / Apple-style | minimal-tech-keynote |
| brutalist / broadcast / jersey-number / HYROX-style | brutalist-broadcast |
| restaurant / wine bar / jazz lounge / brasserie / hospitality | emerald-nocturne |
| absurd transit map / mood diagram (experimental) | absurd-transit-map |
If nothing matches confidently, ask the user to pick from a 3-option shortlist.
Out-of-Left-Field Mode
When the user asks for "out of left field", "weird", "different", "surprise me", or "experimental" ideas, default catalog picks are forbidden. Instead:
- Vary palette and typography away from catalog defaults. Don't reach for the obvious one.
- Pull inspiration from less-obvious design references via online research. Web search/fetch from: Polish theatre poster archives (Jan Lenica, Henryk Tomaszewski), Japanese book covers (Kohei Sugiura, Tadanori Yokoo), Czech New Wave film posters, AIGA poster annuals, Dribbble's experimental tag.
- Propose 5+ ideas with a one-line vibe each BEFORE generating. Let the user pick.
- Never default to safe catalog picks for these requests.
Logo Handling Protocol
- Pass logos as base64 data URIs (handled automatically when you supply
--logo=<path>), never as a local path string.
- Use the
gpt-image-2/edit endpoint when a logo is supplied (handled automatically).
- Add the "do NOT redraw, recolour, or modify proportions" clause to the prompt (handled automatically).
- When a brief specifies "mark on black panel" or "mark on white panel" (HYROX-affiliate work), enforce it in the prompt.
- For dual-wordmark layouts (client + partner), specify equal visual weight, separated by a hairline rule, never combined into a single lockup.
- Logo placement reliability is imperfect even with the edit endpoint โ review the rendered logo carefully before delivering.
Trust the Reference
When using --template or any multi-ref edit mode, the shortest prompt that names ONLY what changes outperforms verbose specs. Trust the reference image to carry layout, typography, palette, and logo. Don't restate what the reference already shows. Verbose specs make the model drift.
What References Can and Can't Do
- References guide style/content, not pixel-copy templates.
- Exact font reproduction is unreliable past ~6 words. Shorten titles.
- Logos may be subtly redrawn โ pass them as a separate ref for stronger anchor (
--logo=) or composite in Canva afterward.
- Output aspect follows
image_size (the --size flag), not the reference image. For --template mode, set --size to match the template's aspect manually.
Generation Settings (cost table)
| Quality | $/image | Time | When to use |
|---|
low | ~$0.011 | 10-15s | drafts, exploring directions |
medium | ~$0.04 | 25-40s | client review |
high | ~$0.17 | 60-90s | final delivery (then upscale externally) |
Default --size=portrait is 1024x1536 (max 1536/side). For A2 print at 300 DPI, upscale externally with Topaz Photo AI or Real-ESRGAN.
For >=5 images or --quality=high, the CLI always prompts for confirmation regardless of --yes.
Subagent Fan-Out (canonical bulk pattern)
For 10+ briefs, use Claude's Agent tool to fan out โ one subagent per brief, each running this skill independently. Example:
Spawn N subagents. Each runs:
fantastic-posters --brief=briefs/{client}.md --refs=hero.jpg,brand.pdf,logo.png
Subagents are how this skill produces real-client batches at speed.
Rules
- Use real brand names when supplied. Real-client work is the primary use case. Only anonymise for generic demos.
- Don't oversell calm styles โ for
pastel-mindful and sumi-e-zen, restraint is the whole point.
- Footer billing line is always last โ date ยท venue ยท price/credit.
- Title rendering โ GPT Image 2 is strong on typography but not perfect. If a title has more than ~6 words, expect typos.
- Variations โ when running
--n=3, vary the subject slightly rather than the same prompt 3x.
- Show, don't regenerate. When auto-picking a style, show
examples/<style-id>.png first โ never regenerate the catalog.
Out of Scope
- No PSD layering in this skill. Direct the user to Canva โ Magic / Smart Layers. PSD-layering is available via the adjacent
poster-to-layers pipeline if Photoshop is preferred.
- No upscaling in this skill. Point users to Topaz Photo AI or Real-ESRGAN for print-resolution output.
- No animation. Still images only.