Animated GIF Capsule Safe-Zone and Loop Readability Pass for October Next Fest - 2026
Your static capsule passes 32px icon gates and palette lock. You upload an animated GIF for the header capsule. On the store row, the loop strobes, the hero character’s face sits under the wishlist chrome, and frame twelve is a motion-blur smear nobody can read at library thumbnail width.
June–September 2026 Steam surfaces animated capsules beside static art on more store views and fest discovery rows. Motion wins attention when the loop is legible; it loses wishlists when the safe zone ignores UI overlays and the cycle length feels broken or seizure-adjacent.
This Art & Design pass is the motion layer for fest prep—not pixel font readability, not screenshot composition, not a metadata checklist. You will define safe zones, tune loop readability, pass five gates, and file gif_capsule_readability_receipt_v1.json before October traffic.
Non-repetition note: Palette lock mentions freezing one animation frame; this article owns full loop discipline for uploaded GIF capsules.
Why this matters now (June–September 2026)
- Animated capsules in discovery — Library and fest rows show motion before click; illegible loops waste the only moving pixel budget you get.
- Overlay chrome — Wishlist bars, tags, and discount ribbons cover fixed regions; art that treats the full frame as “safe” gets cropped in production UI.
- Thumbnail downscale — 920×430 header art collapses to tiny widths; detail inside the safe zone must survive, not edge vignettes.
- Fest parity — Trailer frame audit and capsule motion must tell the same genre story—strobing sci-fi on store, cozy pixel in demo erodes trust.
- Art cluster order — Run after palette lock; pair before pixel font pass if title type is rasterized into the GIF.
Direct answer: Export one master loop, proof it at 920×430, 616×353, and 231×87 preview widths today, pass gates A1–A5, archive frames in store-art/gif-capsule-proof/, block fest art lock until receipt is green.
Who this is for and what you get
| Audience | Outcome |
|---|---|
| Solo artist | Safe-zone template + loop checklist |
| Producer | Objective reject reasons for bad motion |
| Animator | Frame budget and file limit discipline |
Time: ~2 hours first animated capsule; 30 minutes per loop revision after templates exist.
Prerequisites: Locked palette swatches, static capsule fallback PNG, Steamworks upload access.
How this differs from nearby art guides
| Guide | Focus | This pass |
|---|---|---|
| 32px icon gates | Small icon crop | Full header GIF loop |
| Pixel font pass | Letterforms | Motion and framing |
| Palette lock | Color count | Animation within locked palette |
| Fest visual discipline opinion | Strategy | Export procedure |
Steam capsule sizes (reference grid)
Use these targets when placing safe zones (verify current Steamworks spec labels on upload day):
| Surface | Typical px | Proof width in folder |
|---|---|---|
| Header / main capsule | 920 × 430 | proof_920w.gif |
| Store page large | 616 × 353 | proof_616w.gif |
| Library micro | 231 × 87 | proof_231w.gif |
Beginner rule: If the hero face is readable at 231w, it will usually survive larger surfaces.
Safe-zone template (overlay)
Draw on a 920×430 master:
| Zone | Approx region | Rule |
|---|---|---|
| Hero core | Center 55% width, middle 60% height | Focal character/logo; no critical detail in outer 15% |
| Top band | Top 18% | Assume UI badges; avoid single-pixel text |
| Bottom band | Bottom 22% | Price/tags on some views; keep high contrast motion minimal |
| Left/right gutters | 12% each side | Cropping on narrow layouts |
Export safe_zone_overlay_920.png (semi-transparent red) into store-art/gif-capsule-proof/ for team review—not uploaded to Steam.
The five animation gates (A1–A5)
| Gate | Question | Fail signal |
|---|---|---|
| A1 Safe zone | Hero readable at 231w? | Face in gutter |
| A2 Loop seam | First frame ≈ last frame visually? | Hard jump / flash |
| A3 Motion budget | No full-frame flash >2 frames? | Strobe on loop wrap |
| A4 Cycle time | 2–6 s loop at 10–20 fps? | 15 s slog or 0.5 s seizure |
| A5 Palette | Colors ⊆ locked swatches? | Neon drift off worksheet |
Work A1 → A5. Do not upload until A2 and A3 pass on two monitors (sRGB + one laptop panel).
Beginner path — one evening pass
Step 0 — Static fallback (15 minutes)
Export one PNG from the best loop frame (usually frame 0). If GIF is rejected or disabled, you promote static art without emergency redraw. Store as capsule_static_fallback.png.
Step 1 — Storyboard the loop (20 minutes)
Six to twelve key poses maximum for indie capsules:
- Pose A — Rest (loop start/end)
- Pose B — Single accent (blink, idle bounce, logo shimmer)
- Avoid — Full scene changes, camera pans, text fades
Step 2 — Animate inside safe zone (45 minutes)
- Aseprite, Photoshop timeline, or Spine → GIF
- Keep focal mass inside hero core
- Limit palette to three swatches + neutrals
Step 3 — Export and compress (20 minutes)
Target discipline (adjust to Steamworks limits on upload day):
| Parameter | Starting target |
|---|---|
| Dimensions | 920 × 430 |
| Frame rate | 12 fps |
| Colors | ≤ 256 |
| Loop | Seamless |
| File size | Under partner upload warning threshold |
Tools: Aseprite export GIF, ffmpeg palettegen/paletteuse, ezgif optimize for quick passes—not for final without local backup.
Step 4 — Downscale proof (20 minutes)
Generate:
ffmpeg -i capsule_loop.gif -vf scale=231:-1 proof_231w.gif
ffmpeg -i capsule_loop.gif -vf scale=616:-1 proof_616w.gif
Open all three in viewer; squint test at arm’s length.
Step 5 — Receipt (10 minutes)
File gif_capsule_readability_receipt_v1.json (template below).
Developer path — automation and CI hooks
- Script
scripts/verify_gif_capsule.sh: fail if file size, dimensions, or frame count out of range. - Store golden GIF hash in
release-evidence/store-art/gif_sha256.txt. - Pair art lock with Wednesday metadata diff—capsule change = metadata row.
- Add
gif_capsule_passto BUILD_RECEIPT optional art column. - Block fest branch if receipt missing while
animated_capsule_enabled: truein scope map.
gif_capsule_readability_receipt_v1.json
{
"schema": "gif_capsule_readability_receipt_v1",
"project_version": "0.7.0-fest-art",
"files": {
"master": "store-art/gif-capsule-proof/capsule_loop_920x430.gif",
"static_fallback": "store-art/gif-capsule-proof/capsule_static_fallback.png",
"proof_231w": "store-art/gif-capsule-proof/proof_231w.gif"
},
"gates": {
"A1_safe_zone_231w": true,
"A2_loop_seam": true,
"A3_no_strobe": true,
"A4_cycle_time_ok": true,
"A5_palette_locked": true
},
"loop_seconds": 3.5,
"frame_count": 42,
"fps": 12,
"pass": true,
"signed_at": "2026-05-24T22:00:00Z"
}
A1 deep dive — micro thumbnail legibility
At 231×87, humans resolve silhouette + one accent color, not fine line art.
| Do | Avoid |
|---|---|
| Large head/hull silhouette | Thin outline-only characters |
| 2–3 color masses | Gradient backgrounds that dither to mud |
| Slow idle motion | Fast weapon swing across full frame |
Compare side-by-side with 32px icon—icon and GIF must agree on silhouette, not compete.
A2 deep dive — loop seam discipline
Onion-skin last frame over first in Aseprite. Match:
- Background pixels
- Character root position
- Lighting key
Acceptable micro-motion: chest breathe 1–2 px. Unacceptable: background swap or hard cut.
Test: Play loop 20 times in VLC; seam should be invisible at normal speed.
A3 deep dive — strobe and photosensitivity
| Pattern | Risk |
|---|---|
| Full-frame white flash | High |
| Rapid red/blue alternation | High |
| Small sparkle on dark bg | Medium |
| Subtle idle bounce | Low |
Rule: No more than one accent flash per loop; never on seam frame.
A4 deep dive — timing and fps
| Loop length | Feel |
|---|---|
| < 2 s | Hectic, cheap |
| 2–6 s | Store-standard indie |
| > 8 s | Loses loop readability in discovery row |
fps: 8–15 for pixel art; 24 only if file size allows and seams hold.
A5 deep dive — palette lock compliance
Sample dominant colors from frames 0, middle, last. Compare to palette_lock_worksheet.json or worksheet PNG.
If marketing adds a fourth accent mid-fest, re-run A5—do not only update static screenshots.
Twelve tools for GIF capsule passes (free-first)
| # | Tool | Role in this pass |
|---|---|---|
| 1 | Aseprite | Pixel loop authoring + palette |
| 2 | Photoshop | Timeline GIF for painted art |
| 3 | Krita | Animation timeline export |
| 4 | Spine | 2D skeletal → rendered GIF |
| 5 | ffmpeg | Resize, palette, fallback PNG |
| 6 | ezgif | Quick optimize experiments |
| 7 | GIMP | GIF optimize + crop |
| 8 | ImageMagick | Batch resize proofs |
| 9 | VLC | Loop seam review |
| 10 | Steam client | Real upload preview |
| 11 | Windows Photos | 125% OS scaling squint test |
| 12 | Spreadsheet | Gate pass log per revision |
You do not need all twelve—pick authoring tool + ffmpeg + VLC.
Workshop script (60 minutes, artist + producer)
| Minute | Activity |
|---|---|
| 0–10 | Overlay safe zone on static capsule |
| 10–25 | Storyboard 6–8 frames max |
| 25–40 | Animate hero core only |
| 40–50 | Export + 231w proof |
| 50–60 | Fill receipt; producer sign A3 |
Output: one receipt row or explicit “static only” decision documented.
Accessibility and motion sensitivity
Beyond A3:
- Offer static capsule as default in press kit when animation is intense.
- Avoid rapid red flashes for photosensitive audiences.
- Document in
ACCESSIBILITY.md: “Store capsule animates; static PNG available.”
Fest discovery is not the place to “surprise” with strobing hooks.
Genre-specific loop patterns (examples)
| Genre | Good loop | Bad loop |
|---|---|---|
| Cozy farming | Idle character blink | Full day/night cycle |
| Roguelite | Chest lid wiggle | Entire dungeon pan |
| VN | Portrait expression tick | Dialogue text scroll in GIF |
| Shooter | Muzzle glint 1 frame | Full reload animation |
Match vertical slice honesty—loop should reflect demo scope, not full game.
Static capsule parity row
Add to receipt:
"static_parity": {
"same_silhouette_as_icon": true,
"same_palette_as_worksheet": true,
"frame_0_matches_static_fallback": true
}
32px icon and GIF hero must read as same franchise at a glance.
Revision log (when to re-run gates)
| Trigger | Re-run |
|---|---|
| Palette worksheet change | A5 + full export |
| Character redesign | A1–A5 |
| Steamworks dimension note change | A1 proofs only |
| Fest week emergency static revert | Receipt pass: static_fallback |
Log in gif_capsule_revision_log.md with date and build_label if tied to demo promotion.
Producer rubric (reject without taste fights)
| Receipt gate false | Producer action |
|---|---|
| A1 | Send back—hero not readable at 231w |
| A2 | Send back—seam visible |
| A3 | Block upload—strobe risk |
| A4 | Negotiate timing—usually shorten loop |
| A5 | Block until palette lock updated |
Cross-link fest art cluster
| Order | Post |
|---|---|
| 1 | Palette lock |
| 2 | 32px icon |
| 3 | This GIF pass |
| 4 | Pixel font |
| 5 | Screenshot safe zones |
Color picking and dithering
When reducing colors for GIF:
- Use 16 color tools listicle to verify swatches.
- Ordered dither reads better than random noise at 231w for gradients—but prefer flat fills inside hero core.
Trailer vs capsule motion
Trailer frame audit covers video; capsule GIF is silent and shorter. Do not export trailer MP4 frames directly—re-compose for safe zone.
Store-demo and refund crosswalk
Unreadable store motion rarely causes refunds alone—but pairs with store-demo mismatch when genre tone diverges. Keep capsule loop tone aligned with hour-one demo palette.
Friday Block 5 art row
Add to Friday Block 5:
gif_capsule_pass=Y/N; receipt=store-art/gif-capsule-proof/gif_capsule_readability_receipt_v1.json
Proof table example (after pass)
| Proof file | A1 | A2 | A3 | Notes |
|---|---|---|---|---|
| proof_231w.gif | pass | pass | pass | face centered |
| proof_616w.gif | pass | pass | pass | — |
| master 920 | pass | pass | pass | 3.5s loop |
Engine export notes (if capturing from game)
| Engine | Capture tip |
|---|---|
| Unity | Record UI camera fixed FOV; crop in post |
| Godot | Viewport texture capture; lock resolution |
| Construct | Snapshot layer only; hide HUD |
| GameMaker | Surface export; avoid room scroll |
Game capture loops often fail A2—prefer authored 2D animation for capsules.
ffmpeg recipes (working dev)
Palette-safe resize and optimize:
ffmpeg -i capsule_master.gif -vf "fps=12,scale=920:430:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" capsule_loop.gif
Extract static fallback:
ffmpeg -i capsule_loop.gif -frames:v 1 capsule_static_fallback.png
Log commands in store-art/gif-capsule-proof/export_commands.txt for reproducibility.
Proof folder layout
store-art/gif-capsule-proof/
capsule_loop_920x430.gif
capsule_static_fallback.png
proof_231w.gif
proof_616w.gif
safe_zone_overlay_920.png
gif_capsule_readability_receipt_v1.json
export_commands.txt
A1_screenshot_231w.png
Pairing with fest operations
| Ritual | Pairing |
|---|---|
| Wednesday smoke | Same week as art lock |
| Metadata diff | Capsule row in diff log |
| LUFS listicle | Trailer audio separate from GIF |
| Playtest isolation | Public fest row gets final GIF only |
Static vs animated decision tree
Does motion clarify genre in <3s loop?
├─ NO → ship static PNG only
└─ YES → Can you hold palette lock + safe zone?
├─ NO → fix art; do not upload strobing GIF
└─ YES → run A1–A5; file receipt
Common mistakes (seven)
- Panning background — detail leaves safe zone every frame.
- Text inside GIF — unreadable at 231w; use static header for type.
- Uncropped export — wrong aspect ratio squashed on upload.
- No static fallback — emergency revert impossible.
- Ignoring seam — visible pulse on loop.
- Palette drift — neon added in animation only.
- Skipping 231w proof — “looks fine at 100% zoom.”
Pro tips (six)
- Hold frame 0 for 3 duplicates at 12 fps for calmer open.
- Desaturate gutters — focus contrast in hero core.
- Test on Steam client beta branch before fest lock.
- Archive PSD/Aseprite with same version as receipt.
- Compare to top fest peers in your genre—match energy, not copy layout.
- Run pass after icon gates—silhouette first, motion second.
Snippet-friendly answers
What size for Steam animated capsule GIF?
Start from 920×430 master; proof down to 231w for library readability.
How long should a Steam capsule loop be?
2–6 seconds at 10–15 fps for most indie loops; avoid sub-2s strobing.
Should I put the game title in the GIF?
Prefer static capsule or header text; motion titles fail A1 at micro width.
Month-one adoption ladder
| Week | Goal |
|---|---|
| 1 | Safe-zone overlay + static fallback |
| 2 | First loop passing A1–A3 |
| 3 | Receipt + BUILD_RECEIPT art row |
| 4 | Re-proof only if palette or scope changes |
Key takeaways
- Animated capsules need safe zones, not just pretty motion.
- Proof at 920w, 616w, and 231w before fest lock.
- A1–A5 gates cover zone, seam, strobe, timing, palette.
gif_capsule_readability_receipt_v1.jsonblocks subjective arguments.- Always ship static fallback PNG from best frame.
- Run after palette lock; pair with icon and font passes.
- Keep loops short and seamless—discovery rows loop forever.
- ffmpeg downscale proofs belong in evidence folder.
- This is Art & Design—not store metadata parity.
- October Next Fest traffic rewards readable motion, not noise.
- Genre parity with demo and trailer still applies.
- Re-run gates when palette worksheet changes.
- Producers can reject on A3 strobe without art-degree debates.
- File size and fps are ship constraints, not afterthoughts.
- Safe-zone overlay PNG aligns whole team before animate.
- Ship static fallback before experimenting with risky motion during fest lock week.
- Review loop on a cheap 1080p TV if your genre targets living-room browsing.
FAQ
Does Steam always show animation?
Some views and clients may show static; fallback PNG is mandatory.
APNG vs GIF?
Follow Steamworks upload guidance for your partner build; proof rules are the same.
Can I use video instead?
Trailer is separate; this pass is for capsule GIF surfaces.
We are 3D—not pixel art?
Safe zone and A3 still apply; reduce camera pan speed.
Can we use AI video generators for the capsule?
Only if downscaled proofs pass A1–A3 and palette lock—most AI loops fail seam and strobe gates without heavy edit.
Should the loop match the trailer beat?
Match genre energy, not frame-for-frame timing—the trailer is longer; the capsule is only a silent hook.
Ninety-minute audit (solo artist)
| Minute | Task |
|---|---|
| 0–15 | Overlay safe zone on master |
| 15–30 | Export 231w proof |
| 30–45 | Loop 20× in VLC for seam |
| 45–60 | A3 strobe check on laptop panel |
| 60–90 | Receipt + static fallback archived |
If any step fails, ship static fallback for this week rather than a bad GIF during fest lock.
Partner and press kit note
Include capsule_static_fallback.png in partner ZIP beside animated GIF so outlets that block motion can still run mock audit screenshots without requesting emergency exports from your art team.
Conclusion
Animated capsules are a privilege in discovery rows—illegible loops spend that privilege on noise.
Lock the palette. Respect the safe zone. Seam the loop. Proof at 231w. File the receipt.
Studios that skip 231w proof often revert to static capsules mid-fest—wasted animation days that palette lock and one evening pass could have prevented entirely.
Next reads: Palette lock worksheet, 32px icon gates, Pixel font pass.