← All skills
Productionv1.0.0 · 2026-08-07
Format Resizer Spec
A resize is a re-composition, not a crop. Each placement has its own canvas, its own safe area, and its own attention pattern — cropping a 4:5 feed ad into 9:16 Stories is how hooks lose their heads and CTAs vanish under interface buttons.
What it does
- Know the target canvases
- Re-compose per placement
- Run the invariants check
- Preview before export
SKILL.md
--- name: format-resizer-spec description: Adapt one finished ad creative across Meta placements — 4:5 feed, 9:16 Stories and Reels, 1:1 — re-composing per format instead of cropping. Use when asked to resize an ad, adapt a creative for Stories or Reels, make placement versions, fix a creative that gets cut off, prepare one design for all placements, or someone says 'the ad looks wrong in Stories'. For the original build, see static-ad-builder. For what may never change between versions, see meta-ads-creative. metadata: version: 1.0.0 --- # Format resizer spec A resize is a **re-composition, not a crop**. Each placement has its own canvas, its own safe area, and its own attention pattern — cropping a 4:5 feed ad into 9:16 Stories is how hooks lose their heads and CTAs vanish under interface buttons. What never changes across versions: the message, the claims, the brand lock, and the persona_angle_variant identity. What re-composes: layout, sizes, and where elements sit. ## Before you start | Input | Why | | --- | --- | | The master creative and its spec | The elements and read order being re-composed | | Target placements | Each is its own re-composition | | The element inventory — hook, product, proof, CTA, logo | The invariant list that must survive every format | ## Step 1 — Know the target canvases | Placement | Ratio | Master rule | | --- | --- | --- | | Feed (FB/IG) | 4:5 · 1080×1350 | The corpus default — usually the master | | Stories / Reels | 9:16 full-screen | Re-compose; UI overlays eat top and bottom | | Square (some feeds/placements) | 1:1 | Tightest canvas; hierarchy must simplify | Placement menus and exact overlay geometry change — **verify in Ads Manager's placement preview before export**; this skill's percentages are the working method, not a frozen spec. ## Step 2 — Re-compose per placement **Feed 4:5 (master):** built per static-ad-builder — margins ≥15%, hook owns the hierarchy. **Stories/Reels 9:16:** - Treat roughly the **top 10–15% and bottom 15–20% as unsafe** — profile chrome above, CTA/reply UI below. Nothing load-bearing lives there; confirm against the current preview. - The extra height is for **breathing, not more content** — same elements, larger hook, more space. - Full-bleed background; the 4:5 master centered on a canvas reads as a poster on a wall, not a native ad. **1:1:** - Cut secondary elements before shrinking everything — hierarchy survives by dropping, not scaling. Proof badge or subhead goes; hook, product, CTA stay. ## Step 3 — Run the invariants check Per placement version: - [ ] Hook readable at phone size (25%-zoom squint test) - [ ] All invariant elements present — or consciously cut (1:1), never cropped out - [ ] Copy verbatim from the approved set — a resize never rewrites - [ ] Brand lock intact — same hex, font, logo treatment - [ ] Nothing in the placement's unsafe zones - [ ] File named `persona_angle_variant_<placement>.png` ## Step 4 — Preview before export Load each version in the Ads Manager placement preview (or on-device). The preview is the authority on current overlay geometry — not this document, not last quarter's template. ## Output ``` # Resize spec: <persona_angle_variant> → <placements> | Placement | Canvas | Re-composition notes | Cut elements | Safe-zone check | | feed 4:5 | 1080x1350 | master | — | ✓ | | stories 9:16 | 1080x1920 | hook enlarged, CTA raised above bottom 20% | — | ✓ preview | | square 1:1 | 1080x1080 | proof badge dropped | proof | ✓ | Invariants: message ✓ claims ✓ brand lock ✓ naming ✓ Copy: verbatim across all versions ✓ ``` ## When it breaks | What you see | What it means | The fix | | --- | --- | --- | | Hook cut off in Stories | 4:5 cropped to 9:16 | Re-compose on the 9:16 canvas; never crop up | | CTA hidden behind the reply bar | Bottom unsafe zone ignored | Load-bearing elements out of the bottom ~15–20%; confirm in preview | | Stories version looks like a poster on a wall | Master pasted onto a taller canvas | Full-bleed background, re-set the elements | | 1:1 version illegible | Everything scaled down to fit | Cut elements to keep hierarchy; drop proof/subhead first | | Versions drift apart in message | Copy "adjusted" during resize | Resize never rewrites — verbatim or back to the copy skill | | Preview shows new UI overlap | Platform moved its chrome | The preview is the authority; adjust and re-export | | Winner untraceable per placement | Placement suffix missing | `persona_angle_variant_<placement>` — the suffix is part of the system | Never ship the auto-generated placement crop unreviewed. Automatic cropping centers on pixels, not on the hook — the one thing the ad cannot lose. ## Rules - **Re-compose, never crop**, because crops decapitate hooks and bury CTAs under UI. - **A resize never rewrites copy or claims**, because placement versions must stay the same tested ad. - **Cut before you shrink** on smaller canvases, because hierarchy survives by losing elements, not legibility. - **The placement preview is the authority** on safe zones, because platform chrome changes and frozen pixel specs go stale. - **Placement suffix on every export**, because per-placement winners are a real finding you cannot recover from unnamed files. ## Related skills - **static-ad-builder** — builds the 4:5 master this skill adapts. - **meta-ads-creative** — the invariants (message, claims, brand lock) and checks. - **ugc-style-video-script** — 9:16 video is native there; this skill covers static adaptation. - **creative-diversity-audit** — placement versions are one creative, not diversity; the audit counts them as such.
Reviews
Sign in to leave a review.
