Quality Posters
A poster generator with a curated catalog of 31 visual styles. The agent picks the style that fits the brief, builds the prompt, and generates with GPT Image 2.
After generation, layer separation is handled outside this skill — open the PNG in Canva and use Magic / Smart Layers to split foreground/background/text for editing.
How to Run
generate.js lives at the project root (alongside styles.js). This skill folder holds only SKILL.md.
cd <repo-root>
node generate.js "<brief>" # auto-pick style
node generate.js "<brief>" --style=<style_id> # force a style
node generate.js "<brief>" --n=3 # 3 design variations
node generate.js "<brief>" --style=<style_id> --n=3
The script reads FAL_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. If two styles fit, pick the more distinctive one — the user can ask for a different style if it misses.
- 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 (or the number they ask for).
- After it saves, give them the file path and remind them: open in Canva and use Magic Layers if they want to edit the text or swap the subject.
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 |
| absurd transit map / mood diagram |
absurd-transit-map |
If nothing matches confidently, ask the user to pick from a 3-option shortlist of the closest styles.
Style Catalog
Each style is a self-contained prompt template defined in styles.js. The fields the agent fills in vary by style (title, subtitle, date, location, etc.) — the template tells the user what's needed. Common fields:
title — main headline
subtitle — supporting line or kicker
body — small block of text (lineup, quote, listing details)
footer — date / venue / billing block
subject — the central illustrated or photographed element
If a field isn't provided, leave it generic (e.g. "EVENT NAME · CITY · DATE") rather than ask 5 questions.
Catalog (31 styles)
cinematic-neonoir — rainy Tokyo alley, neon, distressed serif title, fake billing block
vintage-travel — 1950s WPA / Roger Broders, flat color, cobalt + cream + red
swiss-minimal-typo — pure white, single geometric shape, Helvetica stack, generous space
tech-conf-darkmode — charcoal, abstract chrome sculpture, geometric sans-serif title, monospace footer
corporate-report — premium off-white, single editorial photo, Didone serif, refined whitespace
indie-gig-riso — risograph two-color, halftone collage, hand-cut zine feel
luxury-real-estate — listing flyer, photo top 2/3, forest-green serif, three-column data block (uses --ref=<image>)
luxury-estate-cover — full-bleed dusk estate photo, Didone "QUIET MAJESTY", magazine-cover restraint
art-deco — gold geometric sunburst on midnight black, tall condensed serif, mirrored ornament
bauhaus-geometric — primary red/blue/yellow shapes, lowercase sans, hairline rules
ukiyo-e — Japanese woodblock, great wave or Fuji, vertical kanji column + small hanko seal
psychedelic-60s — Fillmore-era hand-drawn melting bubble lettering, hot magenta + lime + tangerine
vaporwave-synth — sunset gradient, chrome floor grid, roman bust, glowing pink + cyan title
saul-bass-minimal — single torn-paper graphic on cream, two-pass screen print
memphis-80s — mint background, clashing terrazzo and zigzag patterns, chunky multicolor type
editorial-fashion — full-bleed studio portrait, tall serif masthead, vertical cover lines
symmetric-storybook — perfectly symmetric pastel diorama, mustard Futura, decorative deco border
pop-art-comic — Ben-Day dots, bold black ink outlines, comic speech burst
pastel-mindful — dusty rose to sage gouache wash, ceramic teacup, light serif typography
sumi-e-zen — rice paper, single bamboo brushstroke, vast negative space, vermilion hanko
loteria-folk — vibrant Mexican folk-art, papel-picado border, marigold + sapphire + cactus green
surreal-dreamscape — clear sky raining apples, floating doorway, painterly oil-on-canvas
documentary-portrait — Magnum-style B&W reportage portrait, harsh natural light, exhibition poster
sports-action-hero — stadium-night runner mid-stride, lens flares, stencil sans + tangerine
album-cover-portrait — 70s soul-funk vinyl cover, mustard band + serif title, warm tungsten light
post-apoc-sword — Korean AAA action-RPG key art, female warrior + glowing blade, ruined megacity
lone-traveler-cargo — melancholic sci-fi wanderer with cargo stack, Icelandic ash plain, golden particulate
neon-noir-cyberpunk — rain-soaked megacity, hologram billboards, anamorphic flares, cinematic 70mm
streetwear-lookbook — concrete studio backdrop, oversized cargo + hoodie, Tokyo-NYC editorial
minimal-tech-keynote — pure black, single floating product hero, ultra-thin lowercase sans, generous whitespace
absurd-transit-map — Vignelli subway diagram, coloured route lines, stations named after emotional states
Generation Settings (locked)
endpoint: https://fal.run/openai/gpt-image-2
image_size: portrait_16_9
quality: medium
num_images: 1 (per --n)
output: png
For luxury-real-estate with a photo reference, use https://fal.run/openai/gpt-image-2/edit and pass the uploaded image URL (any S3/CDN URL works; the script handles upload via Kie if a Kie key is in .env).
Rules
- Anonymize — don't put a real person's name or a known brand in the prompt unless the user explicitly asks. Use generic stand-ins (e.g. "Acme Holdings" not a real company).
- Don't oversell calm styles — for
pastel-mindful and sumi-e-zen, restraint is the whole point. Don't load the prompt with extra elements.
- 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. Suggest shortening.
- Variations — when running
--n=3, vary the subject slightly (different colour accent, different framing) rather than the same prompt 3×.
Out of Scope
- No PSD layering. Direct the user to Canva → Magic / Smart Layers for foreground/background/text separation and editing.
- No upscaling. Output is whatever GPT Image 2 returns.
- No animation. This is a still-image skill.
1---2name: quality-posters3description: Generate quality posters across 31 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. Triggers on "quality posters", "make a poster", "poster style", "generate poster".4---56# Quality Posters78A poster generator with a curated catalog of 31 visual styles. The agent picks the style that fits the brief, builds the prompt, and generates with GPT Image 2.910After generation, layer separation is handled outside this skill — open the PNG in Canva and use Magic / Smart Layers to split foreground/background/text for editing.1112## How to Run1314`generate.js` lives at the project root (alongside `styles.js`). This skill folder holds only `SKILL.md`.1516```bash17cd <repo-root>18node generate.js "<brief>" # auto-pick style19node generate.js "<brief>" --style=<style_id> # force a style20node generate.js "<brief>" --n=3 # 3 design variations21node generate.js "<brief>" --style=<style_id> --n=322```2324The script reads `FAL_KEY` from `.env` at the project root. Output PNGs go to `./out/`.2526## When the User Says "Make a Poster"27281. Read the brief. Identify mood (calm / vibrant / nostalgic / mystical / luxury / corporate / playful) and subject (event / product / album / movie / listing / retreat).292. Pick the best matching style from the catalog using the **Style Picker** rules below. If two styles fit, pick the more distinctive one — the user can ask for a different style if it misses.303. Tell the user which style you picked and why (one sentence).314. Run `generate.js`. Default to `--n=1`. If they say "more designs" or "variations", run with `--n=3` (or the number they ask for).325. After it saves, give them the file path and remind them: **open in Canva and use Magic Layers if they want to edit the text or swap the subject.**3334## Style Picker (auto-match by brief intent)3536| If the brief is about... | Pick |37|---|---|38| moody crime / thriller / dark cinematic | `cinematic-neonoir` |39| travel / destination / vintage tourism | `vintage-travel` |40| design lecture / minimal swiss / typography | `swiss-minimal-typo` |41| tech conference / agentic web / dev event | `tech-conf-darkmode` |42| annual report / executive / finance | `corporate-report` |43| live music / DIY gig / underground band | `indie-gig-riso` |44| home listing / open house with photo | `luxury-real-estate` |45| luxury estate brochure / architectural retreat | `luxury-estate-cover` |46| art deco / Gatsby / 1920s glam | `art-deco` |47| Bauhaus / primary geometric / design school | `bauhaus-geometric` |48| Japanese woodblock / Edo / classical Japan | `ukiyo-e` |49| sixties rock / Fillmore / hippie concert | `psychedelic-60s` |50| synthwave / retro futurism / 80s sunset | `vaporwave-synth` |51| minimalist film / cut-paper / Hitchcock vibe | `saul-bass-minimal` |52| 80s postmodern / playful clashing patterns | `memphis-80s` |53| high fashion magazine / editorial cover | `editorial-fashion` |54| symmetric pastel / dollhouse / storybook film | `symmetric-storybook` |55| comic / Ben-Day dots / pop art | `pop-art-comic` |56| wellness / meditation / retreat / soft calm | `pastel-mindful` |57| zen / Japanese ink / monastic minimal | `sumi-e-zen` |58| Día de los Muertos / Mexican folk / festival | `loteria-folk` |59| surreal / Magritte / dreamlike | `surreal-dreamscape` |60| documentary / Magnum reportage / photo essay | `documentary-portrait` |61| stadium / race / athletic event campaign | `sports-action-hero` |62| album cover / vinyl / soul-funk debut | `album-cover-portrait` |63| post-apocalyptic action game key art | `post-apoc-sword` |64| melancholic sci-fi wanderer / cargo / Iceland | `lone-traveler-cargo` |65| cyberpunk / neon noir / dystopian megacity | `neon-noir-cyberpunk` |66| streetwear lookbook / drop / collection | `streetwear-lookbook` |67| tech product reveal / keynote / Apple-style | `minimal-tech-keynote` |68| absurd transit map / mood diagram | `absurd-transit-map` |6970If nothing matches confidently, ask the user to pick from a 3-option shortlist of the closest styles.7172## Style Catalog7374Each style is a self-contained prompt template defined in `styles.js`. The fields the agent fills in vary by style (title, subtitle, date, location, etc.) — the template tells the user what's needed. Common fields:7576- `title` — main headline77- `subtitle` — supporting line or kicker78- `body` — small block of text (lineup, quote, listing details)79- `footer` — date / venue / billing block80- `subject` — the central illustrated or photographed element8182If a field isn't provided, leave it generic (e.g. "EVENT NAME · CITY · DATE") rather than ask 5 questions.8384### Catalog (31 styles)85861. `cinematic-neonoir` — rainy Tokyo alley, neon, distressed serif title, fake billing block872. `vintage-travel` — 1950s WPA / Roger Broders, flat color, cobalt + cream + red883. `swiss-minimal-typo` — pure white, single geometric shape, Helvetica stack, generous space894. `tech-conf-darkmode` — charcoal, abstract chrome sculpture, geometric sans-serif title, monospace footer905. `corporate-report` — premium off-white, single editorial photo, Didone serif, refined whitespace916. `indie-gig-riso` — risograph two-color, halftone collage, hand-cut zine feel927. `luxury-real-estate` — listing flyer, photo top 2/3, forest-green serif, three-column data block (uses `--ref=<image>`)938. `luxury-estate-cover` — full-bleed dusk estate photo, Didone "QUIET MAJESTY", magazine-cover restraint949. `art-deco` — gold geometric sunburst on midnight black, tall condensed serif, mirrored ornament9510. `bauhaus-geometric` — primary red/blue/yellow shapes, lowercase sans, hairline rules9611. `ukiyo-e` — Japanese woodblock, great wave or Fuji, vertical kanji column + small hanko seal9712. `psychedelic-60s` — Fillmore-era hand-drawn melting bubble lettering, hot magenta + lime + tangerine9813. `vaporwave-synth` — sunset gradient, chrome floor grid, roman bust, glowing pink + cyan title9914. `saul-bass-minimal` — single torn-paper graphic on cream, two-pass screen print10015. `memphis-80s` — mint background, clashing terrazzo and zigzag patterns, chunky multicolor type10116. `editorial-fashion` — full-bleed studio portrait, tall serif masthead, vertical cover lines10217. `symmetric-storybook` — perfectly symmetric pastel diorama, mustard Futura, decorative deco border10318. `pop-art-comic` — Ben-Day dots, bold black ink outlines, comic speech burst10419. `pastel-mindful` — dusty rose to sage gouache wash, ceramic teacup, light serif typography10520. `sumi-e-zen` — rice paper, single bamboo brushstroke, vast negative space, vermilion hanko10621. `loteria-folk` — vibrant Mexican folk-art, papel-picado border, marigold + sapphire + cactus green10722. `surreal-dreamscape` — clear sky raining apples, floating doorway, painterly oil-on-canvas10823. `documentary-portrait` — Magnum-style B&W reportage portrait, harsh natural light, exhibition poster10924. `sports-action-hero` — stadium-night runner mid-stride, lens flares, stencil sans + tangerine11025. `album-cover-portrait` — 70s soul-funk vinyl cover, mustard band + serif title, warm tungsten light11126. `post-apoc-sword` — Korean AAA action-RPG key art, female warrior + glowing blade, ruined megacity11227. `lone-traveler-cargo` — melancholic sci-fi wanderer with cargo stack, Icelandic ash plain, golden particulate11328. `neon-noir-cyberpunk` — rain-soaked megacity, hologram billboards, anamorphic flares, cinematic 70mm11429. `streetwear-lookbook` — concrete studio backdrop, oversized cargo + hoodie, Tokyo-NYC editorial11530. `minimal-tech-keynote` — pure black, single floating product hero, ultra-thin lowercase sans, generous whitespace11631. `absurd-transit-map` — Vignelli subway diagram, coloured route lines, stations named after emotional states117118## Generation Settings (locked)119120```121endpoint: https://fal.run/openai/gpt-image-2122image_size: portrait_16_9123quality: medium124num_images: 1 (per --n)125output: png126```127128For `luxury-real-estate` with a photo reference, use `https://fal.run/openai/gpt-image-2/edit` and pass the uploaded image URL (any S3/CDN URL works; the script handles upload via Kie if a Kie key is in `.env`).129130## Rules131132- **Anonymize** — don't put a real person's name or a known brand in the prompt unless the user explicitly asks. Use generic stand-ins (e.g. "Acme Holdings" not a real company).133- **Don't oversell calm styles** — for `pastel-mindful` and `sumi-e-zen`, restraint is the whole point. Don't load the prompt with extra elements.134- **Footer billing line** is always last — date · venue · price/credit.135- **Title rendering** — GPT Image 2 is strong on typography but not perfect. If a title has more than ~6 words, expect typos. Suggest shortening.136- **Variations** — when running `--n=3`, vary the subject slightly (different colour accent, different framing) rather than the same prompt 3×.137138## Out of Scope139140- **No PSD layering.** Direct the user to **Canva → Magic / Smart Layers** for foreground/background/text separation and editing.141- **No upscaling.** Output is whatever GPT Image 2 returns.142- **No animation.** This is a still-image skill.