Start with one idea
A promo graphic is not a poster, a menu, or a press release. It is seen only for a moment in a scrolling feed, so it gets to say exactly one thing. Before you open a canvas, finish this sentence: “When someone sees this, I want them to know ______.” If the blank contains an “and,” you have two promos, not one. Everything else on the canvas — the date, the handle, the QR code — exists to support that single idea, and anything that doesn’t support it should come off. The most common failure in promo design isn’t bad taste; it’s three competing messages fighting for the same moment of attention.
Hierarchy: title, supporting line, action
Once you have one idea, arrange the canvas so the eye lands on things in the order you choose. A reliable promo has exactly three tiers, and each tier is visibly different in size and weight from the one above it — not slightly different, obviously different.
| Tier | Job | Treatment |
|---|---|---|
| Title | Carries the one idea | Largest element, heaviest weight, few words |
| Supporting line | Answers who, when, or why | Clearly smaller, one short sentence |
| Action | Tells the viewer what to do next | QR code, URL, or a short imperative |
Squint at the finished design. If the title doesn’t clearly win the squint test, the hierarchy isn’t done yet.
In the Studio the three tiers are separate text styles — title, body, action — with the families Geist, Oswald Condensed, Arial, Trebuchet, Georgia, Times New Roman, Courier New, Impact and weights 400 to 900. The normaliser clamps each size to its tier’s range before every render: a title asked for at 999 px comes back at 104 px, one asked for at 0 at 28 px.
Contrast the viewer doesn’t have to work for
Text that looks readable on your monitor at full size can vanish on a phone in sunlight. The accessibility baseline worth designing to is the WCAG AA contrast ratio of 4.5:1 between text and its background (verified 2026-10-02). It isn’t just an accessibility box to tick — a promo that passes AA stays legible when the image is compressed, dimmed, or shrunk by a platform. The Studio shows a live contrast advisory against this exact 4.5:1 threshold as you pick colors, so you can see a failing pairing before you export it. Light text on a busy photo is the classic trap; if you must set text over a photo, put a solid or heavily darkened panel behind it rather than trusting the photo to stay dark in the right places.
Contrast, computed on named pairs
The Studio’s ratio is the WCAG 2.x relative-luminance contrast ratio, computed from the two hex colours against the Level AA minimum of 4.5:1 (source, 2026-10-02). Here its advisory function runs on four fixed pairs: two Studio defaults, then the two traps from the common-mistakes list.
| Pair | Colours | Ratio | AA at 4.5:1 |
|---|---|---|---|
| Default title on the default panel | #14201c on #fbfcfa | 16.3:1 | passes |
| Default supporting line on the default panel | #65706b on #fbfcfa | 5.0:1 | passes |
| Light grey on white | #9a9a9a on #ffffff | 2.8:1 | fails |
| Mid-tone on mid-tone | #777777 on #999999 | 1.6:1 | fails |
The default supporting line passes at 5.0:1 with little to spare — one reason it is a short sentence, not a paragraph. The mid-tone pair is not a near miss: at 1.6:1 it reaches about 35% of the minimum, and a pairing that looks “a bit soft” on a bright monitor is usually of that kind.
Colours are honoured exactly — with one exception
The Studio validates a colour for format only and never rewrites it. Pass the light grey #9a9a9a as a title colour through the normaliser and it comes back as #9a9a9a, though it measures 2.73:1 against the default panel #fbfcfa. The advisory shows the failing pair; the decision stays yours, and the package manifest records the design exactly as picked. Built here for a fictional Autumn Night Market, its fields are generatedBy, generatedAt, title, destination, routingDestination, campaignType, category, price, shortLink, startsAt, timezone, venue, sourceImage, captionPlatforms, design, designSchemaVersion, files, with designSchemaVersion 3. The methodology sets out this doctrine engine by engine.
The exception is the thumbnail’s overlay text — the title and the kicker — drawn over a photograph the design cannot predict. The renderer does not read that photograph. It draws a protective scrim down the text column — a dark gradient, light at the top and growing denser towards the foot of the frame — and then resolves each requested colour against a fixed assumption that is separate from the drawn gradient: pure white composited under the scrim’s dark tone at 0.76 opacity, the colour engine’s OVERLAY_SCRIM_OPACITY, which comes out as the protected background #454948. If the requested colour fails the same AA minimum the advisory uses against that protected background, the renderer swaps in a dark ink or white, whichever contrasts more. The Studio requests the overlay title in its default #ffffff, which is kept at 9.13:1. If you asked instead for the promo panel’s dark title ink #14201cas the overlay colour — a hypothetical request, run here through the same function — it would resolve to #ffffff at 9.13:1, because the assumed background is dark. The thumbnail maker builds that scrim for you; a promo graphic expects you to build the panel.
Design for the smallest size it will be seen at
Your export is big; the places it renders are not. A YouTube thumbnail is exported at 1280×720, but in search results it often renders around 360px wide, and in the suggested sidebar around 168px wide — roughly a postage stamp. Specs current as of August 2026— verify against the platform’s own documentation before a critical print run or launch. The practical rule: judge every design at thumbnail size before you ship it. Zoom out, or preview it with the thumbnail tool, and check that the title still reads and the subject is still recognizable. Three or four large words survive shrinking; a paragraph never does. The same logic applies to print — a QR code needs roughly 2×2 cm at minimum for close-range scanning, and a reliable scan distance is about 10× the printed code's width — the site’s August 2026rule of thumb, restated here in the registry’s notation — so a code meant to be scanned from across a room must be sized for that room, not for the corner of a flyer.
Print size is arithmetic: the QR readout against the two rules
The QR tool’s PNG export offers 3pixel sizes and reports what each prints at — pixels divided by 300 dots per inch, then millimetres from inches:
- 512 px → 1.71 in × 1.71 in (43.3 mm × 43.3 mm) at 300 DPI
- 1024 px → 3.41 in × 3.41 in (86.7 mm × 86.7 mm) at 300 DPI
- 2048 px → 6.83 in × 6.83 in (173.4 mm × 173.4 mm) at 300 DPI
The smallest preset prints at 43.3 mm a side, about 2.2× the 2×2 cm floor, so every preset clears the close-range floor at 300 DPI. The distance rule, about 10× the printed code's width as restated above, puts that 512 px print at about 0.4 m; the SVG export scales to a sign. Both rules are approximate, so test-scan a printed proof. How logos, contrast and print size spend the same margin is the subject of the decode-margin guide.
Fitting a headline: shrink, wrap, then cut
The thumbnail maker does not let a long title overflow its box. It hands the title to the Studio’s text fitter, which wraps the words at the preferred size, steps the size down one pixel at a time while the block is taller than the box, and only at the floor drops words, ending the last line with an ellipsis. The thumbnail renderer calls the fitter with a floor of its own, lower than the smallest overlay-title size the Studio lets you ask for, and a tighter line height; neither value is exported, so this page does not retype them. The worked example below runs the same fitter with stand-ins: three fictional titles in a fictional 900×300 px box, at the default overlay-title size of 88 px, with the normaliser’s 48px overlay-title clamp as the floor, the fitter’s default line-height ratio, and a flat 0.55 em per character in place of the canvas measurer (the tool measures real glyphs at its own floor and line height, so its sizes and breaks differ):
- “Night Market Friday” stays at 88 px on 2 lines.
- “Autumn Night Market opens this Friday at the old tram depot” shrinks to 81 px over 3 lines before it fits.
- A paragraph-length title hits the example’s 48 px stand-in floor, keeps 5 lines, and reports truncated = true.
Write the title short enough that the fitter never has to choose for you.
One design, three frames — adapt, don’t stretch
A campaign usually needs a 1080×1080 square (source, 2026-10-02), a 1080×1350 portrait (its source is quoted below), and a 1080×1920 story (source, 2026-10-02). These are different shapes, not different zoom levels of the same shape: stretching a square into a story distorts type and logos, and cropping a story into a square amputates whatever lived at the top and bottom. Instead, treat your design as a kit of parts — title, supporting line, action, background — and recompose those parts for each frame. The story format has its own hazard: on a 1080×1920 frame, Meta’s own guidance is to “consider leaving roughly 14% (250 pixels) of the top and bottom of the image free from text and logos.” (source, 2026-10-02) — those are the bands that can be covered by platform interface elements, so keep text and QR codes out of them (approximate; it varies by platform and device). The Studio generates all three formats, plus a 1280×720thumbnail, from one campaign so the recomposition is handled for you — but the principle matters even when you compose by hand. For the full format-by-format breakdown, see social image sizes.
Re-checked on 2026-10-02, Instagram’s page says “as long as the photo's aspect ratio is between 1.91:1 and 3:4 (a width of 1080 pixels with a height between 566 and 1440 pixels)” (source). The reading that 4:5 (1080×1350) sits inside that range is this site’s, not Instagram’s sentence, and the Studio’s portrait is that frame. The shared width is not arbitrary either: 1080 pixels is the maximum width Instagram keeps for feed photos (source, 2026-10-02).
Photo or flat panel?
Use a photo when the image itself is the message — a venue, a product, a face people recognize. A good photo earns attention that flat color can’t. Use a flat panel when the words are the message: launch dates, offers, announcements. Flat backgrounds give you total control over contrast, keep file sizes small, and never fight the text for attention. The worst of both worlds is a mediocre stock photo with text scattered across it — it adds noise without adding meaning. If you’re unsure, start flat: a two-color panel with strong type is almost impossible to get badly wrong, and dark-on-light also happens to be what QR codes want — dark modules on a light background scan most reliably, and inverted codes should be avoided entirely.
The QR engine checks polarity separately from contrast: white modules on black measure 21:1 and it still warns “Light-on-dark (inverted) codes are not reliably read by all scanners. Prefer dark modules on a light background.”
Common mistakes
- Two or three messages on one graphic, none of which wins.
- Title and supporting line set at nearly the same size, so nothing leads.
- Text over a busy photo with no panel behind it.
- Color pairings that fail the 4.5:1check — especially light gray on white and mid-tone on mid-tone.
- Stretching one export to fit every aspect ratio.
- A QR code jammed into a corner with no quiet zone — the code needs four modules of clear space on every side to scan reliably (source, 2026-10-02). The QR tool bakes the quiet zone in for you.
- Judging the design only at full size and never at the size the audience will actually see.
- No action tier at all — the viewer likes it and moves on.
Running a launch or an event? Pair this guide with the event promotion checklist to make sure the well-designed promo also ships everywhere it needs to go.
Related: YouTube thumbnail specs, how the QR maker encodes ten payloads, favicon packages explained, the package anatomy guide, and the methodology for every rule above in the engine’s terms.
Questions
- Does passing 4.5:1 mean the promo will be read?
- No. The ratio measures two colours by relative luminance and says nothing about the words, their size, or where the graphic renders. It is a floor, not a target.
- Why can I export a colour pair that fails the advisory?
- Because a picked colour is honoured exactly: the normaliser checks only that it is a valid hex value, so #9a9a9a survives at 2.73:1 against the default panel. Only the thumbnail's overlay text, the title and the kicker, is changed for you, at render time, because it sits on a photograph.
- How large should the QR code be on a flyer?
- The site's rule of thumb, in its August 2026 wording, is at least 2×2 cm (0.8×0.8 in) for close-range scanning. The QR tool's smallest PNG preset prints at 43.3 mm a side, which clears the floor; the SVG export scales to any size.
- Can I put the title straight onto a photo?
- In the thumbnail maker, yes: the renderer draws a protective scrim gradient down the text column, then resolves the title and kicker colours against a fixed assumption rather than the drawn gradient — pure white composited under the scrim's dark tone at 0.76 opacity, the engine's OVERLAY_SCRIM_OPACITY — swapping any colour that fails the AA minimum there. It never reads the photograph itself. A promo graphic gets no scrim, so the panel is your job, checked against the advisory.
- Why does a long title come out smaller instead of overflowing?
- Because the fitter shrinks before it cuts: it steps the size down while the wrapped block is too tall, stops at the floor, and only then drops words. Above, the short title kept 88 px, the long one settled at 81 px, and the paragraph was cut at the example's 48 px stand-in floor; the thumbnail renderer uses a lower floor of its own.
Everything here runs in your browser: the tools compute on your device and the Studio’s package is assembled on the device. The methodology documents every rule the tools apply.