# Static ad guide ## What a finished static ad is Product (unchanged) + scene + one headline + one sub-line + one button. The image model makes only the scene and the product. All words are drawn locally by `scripts/compose-ad.mjs`, so spelling, price and brand name are exact. ## Formats and safe zones | Format | Where it runs | Output (art is generated at 1088 px wide) | Text rule | |---|---|---|---| | 4:5 | Instagram and Facebook feed (the default, takes the most screen) | 1080 x 1350 | Text in the top 42 %. | | 1:1 | Feed, marketplaces, email, LinkedIn | 1080 x 1080 | Smaller headline; text in the top 40 %. | | 9:16 | Stories, Reels cover, TikTok, Shorts | 1080 x 1920 | Keep text out of the top 14 % (profile bar) and bottom 20 % (reply bar, link sticker, captions). | | 1.91:1 | Link ads, Google Display, X cards | not built in; generate art at 1536 x 816, put text in the left 45 % and compose by hand | Product on the right. | Generate art once per format. Cropping a 4:5 image into 9:16 loses the sides; cropping into 1:1 loses the empty text area. ## Writing the copy - Headline: 3 to 7 words, one idea, a benefit not a feature. Sentence case with a full stop reads calm and premium; Title Case or caps reads loud and retail. - Sub-line: what it is, plus one proof detail (size, count, ingredient). Under 40 characters. - CTA: a verb and the brand or action, 2 to 3 words ("Shop Halden", "Order now", "Book a demo"). - Never invent a claim: no percentages, awards, medical or "clinically proven" wording, prices or discounts the person did not give you. Use only text the person approved, character for character. - Prices and legal lines: pass them through unchanged; the script does not reformat them. ## Scene presets (`--preset`) `skincare`, `food-pack`, `tech`, `apparel`, `home`, `supplements` use the matching row below. Or describe your own with `--scene`. The sample ad (Halden serum) used this scene, with orange segments and a sprig as props that matched its vitamin C; swap props to suit your product: "a warm travertine stone plinth in a soft sunlit studio, a soft leaf shadow across a warm peach-cream backdrop, gentle window light from the left, a few fresh orange segments and a small green sprig at the base". ## Scenes by product type | Product | Scene that works | Avoid | |---|---|---| | Skincare, bottles | Stone plinth, soft leaf shadow, citrus or botanical prop that matches the ingredient | Water splashes that distort glass | | Food and drink packs | Kitchen counter, ingredients around, warm window light | Props bigger than the pack | | Tech, headphones, gadgets | Dark gradient, one coloured rim light, reflective floor | Cables, clutter | | Apparel, shoes | Colour-block backdrop in the brand colour, hard sun shadow | Busy street scenes | | Candles, home | Warm interior corner, soft evening light | Open flames that look fake | | Supplements, tubs | Clean pastel backdrop, bold colour, simple geometric props | Pills spilled around the label | Pick a scene colour that contrasts with the product and sits in the same family as the brand. ## Keeping the product the same Say what must not change in `--product`: shape, colours, label text. After generation put the input and the art side by side and check label wording, cap or lid, proportions, number of items. If the label text changed, rerun; if it keeps changing, the label is small or unusual, so use the `nano-banana-pro/edit` alternative (about $0.15 per image, twice the default) or raise quality to high. ## Contrast and readability - Compose picks dark brown text by default. Pass `--ink` (and `--button`, `--button-text`) in the brand colours; on a dark scene use a cream `--ink`, and a light `--button` with a dark `--button-text`. - Check at 320 px wide: the headline must still be readable. - Long copy: the script shrinks the headline to fit and warns when the text block runs past the empty area. `--text-bottom` only sets where that warning triggers; it does not move anything. To fix it: shorten the copy, move `--text-top` up, or regenerate the art with the product lower. Never let text touch the product. - Fonts: measured with the real font, so wrapping fits whatever resolves. Default Georgia and Helvetica (DejaVu fallback on Linux). For exact brand type pass `--font-file brand-bold.ttf` (use the bold cut) and `--body-font-file brand.ttf`. ## Failure modes | Problem | Fix | |---|---| | Product label reworded or logo redrawn | Rerun with the label text quoted in `--product`; try the alternative editor | | Props crowd the text area | Say "upper 40 % empty" again and remove props from the prompt | | Product floating | Add "resting on the plinth, soft contact shadow" | | Plastic, over-smooth look | Add film grain and natural light words; keep quality medium or high | | Text block touches the product | Fewer words, `--text-top` higher, or regenerate with the product lower | | Wrong typeface on another machine | Pass `--font-file` instead of relying on installed fonts |