Winter Store Capsule HDR Downscale Without False Bloom - December 2026 Art Pass
October Next Fest: your HDR screenshot pass GREEN—screenshot_tone_receipt_v1.json filed, HUD readable at 360px. December refresh: you add snow biome lighting to the same HDR master, downscale the header capsule and main capsule for winter store art, and upload. Discord: "why does the logo look like a light leak?"
December 2026 micro-studios refresh Steam header + main capsule and one–three gallery shots for holiday traffic without re-capturing entire sets. Reusing October HDR masters saves time—but winter highlights (snow, rim lights, cool fill) push bloom thresholds past what October tone maps assumed. Downscaling the capsule crop (not full 1920×1080 screenshots) reintroduces false bloom on title-safe zones when teams skip a second tone proof.
This Game Art & Design pass is the December winter capsule lane—not the October HDR screenshot art pass (gallery PNG tone map), not screenshot safe zones (composition gates), not Lesson 254 BUILD_RECEIPT milestone (hdr_steam_capture_export_receipt_v1). It delivers one ffmpeg downscale ladder for winter lighting, safe-zone cross-check on capsule dimensions, and winter_capsule_tone_receipt_v1.json before holiday uploads.
Pair December defer list (FREEZE lane for capsule masters), February fest prep calendar, and BUILD_RECEIPT optional winter_capsule_tone_ok.
Non-repetition note: October art pass owns screenshot_tone_receipt_v1 for gallery captures. This URL owns winter_capsule_tone_receipt_v1 for header + main capsule downscale from reused HDR masters with snow-highlight failure modes.
Why this matters now (December 2026)
- Holiday capsule refreshes — Teams swap winter art without re-running October full capture sprint.
- HDR master reuse — Snow and cool grade boost peak luminance; October SDR proof no longer matches.
- Capsule ≠ screenshot dimensions — Steam header (460×215) and main capsule (1232×706) downscale differently than 1920×1080 gallery PNGs.
- False bloom on logo safe zone — Title and logo sit in crop centers; winter bloom eats legibility before players open the store page.
- Defer list FREEZE — December BUILD_RECEIPT defer expects FREEZE capsule masters—this pass is the proof that freeze is honest.
Direct answer: Re-tone-map winter HDR master to SDR, run one ffmpeg ladder per capsule size, cross-check five safe-zone gates on downscaled crops, file winter_capsule_tone_receipt_v1.json with gates W1–W6 before Steam upload.
Who this art pass is for
| Audience | Outcome |
|---|---|
| Beginner artist | One ffmpeg command chain per capsule size |
| Solo producer | Block winter upload without tone receipt |
| Working dev | Wire winter_capsule_tone_ok on BUILD_RECEIPT |
| Team with October receipts | Extend HDR pipeline without re-inventing |
Time: ~90 minutes first winter refresh; ~25 minutes per capsule size once ladder is pinned.
Format ladder (store art cluster)
| Artifact | Role |
|---|---|
| This art pass | December winter capsule HDR downscale + winter_capsule_tone_receipt_v1 |
| October HDR art pass | Gallery screenshot tone map + screenshot_tone_receipt_v1 |
| Safe zones five gates | Composition + phone-width |
| Lesson 254 | DaVinci HDR→SDR capture BUILD_RECEIPT |
| December defer list | FREEZE store_capsule_winter_master |
| Animated GIF safe zone | Motion capsule cousin |
Order: October screenshot tone GREEN → winter HDR master edit → this pass on capsule exports → safe-zone gate 1 on crops → upload.
Beginner path — one ffmpeg downscale ladder (winter lighting)
Prerequisites
- Winter HDR master PNG (3840×2160 or engine export)—named
winter_hdr_master_v1.png - October SDR reference for A/B (optional)
ffmpeginstalled- Steam capsule dimension targets (verify in Steamworks capsule docs)
Step 1 — Export winter SDR proof (controlled roll-off)
Winter scenes clip highlights faster. Before downscale:
- Tone-map HDR → SDR with slightly lower peak white than October (snow highlights).
- Save
winter_sdr_proof.pngat working resolution. - Do not reuse October
proof_sdr.pngas truth—winter grade differs.
Success check: Logo silhouette readable at 100% zoom on winter_sdr_proof.png—no milky halo on title edges.
Step 2 — ffmpeg ladder (capsule sizes)
Main capsule (~1232×706) — gamma-correct lanczos:
ffmpeg -i winter_sdr_proof.png -vf "scale=1232:706:flags=lanczos,format=rgba" \
-color_primaries bt709 -color_trc iec61966-2-1 -colorspace bt709 \
-y winter_main_capsule_sdr.png
Header capsule (~460×215) — same chain, different target:
ffmpeg -i winter_sdr_proof.png -vf "scale=460:215:flags=lanczos,format=rgba" \
-color_primaries bt709 -color_trc iec61966-2-1 -colorspace bt709 \
-y winter_header_capsule_sdr.png
Optional gallery refresh (1920×1080) — reuse October command for consistency:
ffmpeg -i winter_sdr_proof.png -vf "scale=1920:1080:flags=lanczos,format=rgba" \
-y winter_gallery_01_sdr.png
Step 3 — Winter false-bloom spot check
Winter-specific failures:
| Symptom | Likely cause | Fix |
|---|---|---|
| Snow reads as flat white blob | Highlight clip before downscale | Re-tone with lower peak |
| Logo glow on header crop | Center-weighted bloom in master | Re-crop safe zone; darken rim |
| Cool cast turns muddy on 460×215 | Chroma collapse on tiny downscale | Sharpen mild unsharp only on logo layer |
| October gallery OK, capsule bad | Different aspect crop | Run ladder per capsule size |
Phone-width test: Resize winter_header_capsule_sdr.png to 360px wide—logo must remain identifiable (cousin to safe-zone gate 3).
Step 4 — Safe-zone cross-check (five gates subset)
Run on downscaled capsule PNGs:
| Gate | Capsule apply | Pass when |
|---|---|---|
| G1 safe zone | Logo + title inside center 80% | No critical text on crop edge |
| G3 phone test | Header at 360px width | Logo readable |
| G4 swatch | Hero character hue matches October capsule | Intentional winter shift documented in receipt |
| G5 order | If gallery slot 1 winter variant | Document in gallery-order-winter.txt |
Full five-gate doc: screenshot safe zones.
Developer path — gates W1–W6
| Gate | Check | Pass when |
|---|---|---|
| W1 | Winter HDR master version pinned | winter_hdr_master_v1.png path in receipt |
| W2 | SDR proof distinct from October | winter_sdr_proof.png newer mtime |
| W3 | ffmpeg ladder logged per capsule size | Commands in receipt ffmpeg_log[] |
| W4 | Header + main downscaled PNGs on disk | Both files exist |
| W5 | Safe-zone G1 + G3 pass on crops | Booleans in receipt |
| W6 | winter_capsule_tone_receipt_v1.json filed |
winter_capsule_tone_ok: true |
winter_capsule_tone_receipt_v1.json
Pin at release-evidence/marketing-and-demo/winter-capsule/WINTER_CAPSULE_TONE_RECEIPT.json:
{
"schema": "winter_capsule_tone_receipt_v1",
"build_label": "fest-demo-2026-12-rc3",
"winter_master": "release-evidence/marketing-and-demo/winter-capsule/winter_hdr_master_v1.png",
"sdr_proof": "release-evidence/marketing-and-demo/winter-capsule/winter_sdr_proof.png",
"october_cousin": "release-evidence/marketing-and-demo/hdr-false-bloom/screenshot_set_name/screenshot_tone_receipt_v1.json",
"capsule_exports": {
"main_1232x706": "release-evidence/marketing-and-demo/winter-capsule/winter_main_capsule_sdr.png",
"header_460x215": "release-evidence/marketing-and-demo/winter-capsule/winter_header_capsule_sdr.png"
},
"ffmpeg_log": [
"scale=1232:706:flags=lanczos,format=rgba",
"scale=460:215:flags=lanczos,format=rgba"
],
"safe_zone_checks": {
"G1_logo_safe_zone": true,
"G3_phone_width_360": true,
"G4_swatch_intentional_winter_shift": true
},
"winter_highlight_notes": "Snow rim lowered 8% vs October master; logo unsharp 0.3 on header only",
"cousin_lesson": "254-hdr_steam_capture_export_receipt_v1",
"gates": {
"W1_master_pinned": "pass",
"W2_sdr_distinct": "pass",
"W3_ffmpeg_ladder": "pass",
"W4_both_capsules": "pass",
"W5_safe_zone": "pass",
"W6_receipt": "pass"
},
"winter_capsule_tone_ok": true,
"steam_upload_allowed": true
}
BUILD_RECEIPT optional column: winter_capsule_tone_ok: true.
Thursday row review — add to marketing gate columns when winter upload precedes code promote.
Proof table (audit vocabulary)
| Evidence | Proves | Fail signal |
|---|---|---|
winter_hdr_master_v1.png |
Source for December refresh | Reused October without version bump |
winter_sdr_proof.png |
Tone map before downscale | Direct HDR→capsule skip |
winter_main_capsule_sdr.png |
Main store capsule | Milky logo |
winter_header_capsule_sdr.png |
Library header | Unreadable at 360px |
tone_compare_winter_pack.png |
Visual diff stack | Missing from evidence folder |
winter_capsule_tone_receipt_v1.json |
W1–W6 gates | Verbal "looks fine" |
Comparison pack command (standup artifact)
ffmpeg -i winter_hdr_master_v1.png -i winter_sdr_proof.png \
-i winter_main_capsule_sdr.png -i winter_header_capsule_sdr.png \
-filter_complex "vstack=inputs=4" -y tone_compare_winter_pack.png
Scenarios A–G (working dev)
| ID | Situation | Playbook move |
|---|---|---|
| A | No October receipts | Run October art pass first on one gallery shot |
| B | Only capsule refresh, no gallery | W4 requires header + main only |
| C | DaVinci export from Lesson 254 | Use Resolve SDR still as winter_sdr_proof input |
| D | Snow added in post, not engine | Document in winter_highlight_notes |
| E | GIF capsule also winterized | Pair GIF safe zone pass |
| F | Defer list FREEZE capsule | Upload only after W6—no mid-freeze tweak |
| G | February fest prep January | Winter art is cosmetic; do not bump build_label for art-only |
December upload calendar (art lane)
| Date window | Art action |
|---|---|
| Dec 13–17 | Finalize winter HDR master; run W1–W3 |
| Dec 18 | File receipt; add FREEZE row in defer list |
| Dec 19–20 | Steam upload header + main; log in BUILD_RECEIPT |
| Dec 20+ | FREEZE — no capsule edits without exception receipt |
| Jan 3+ | Re-entry—optional gallery winter slot if deferred |
Relationship to Lesson 254 (cousin, not duplicate)
| Field | Lesson 254 | This art pass |
|---|---|---|
| Schema | hdr_steam_capture_export_receipt_v1 |
winter_capsule_tone_receipt_v1 |
| Surface | DaVinci HDR→SDR capture export | Capsule downscale from winter master |
| BUILD_RECEIPT | hdr_steam_capture_ok |
winter_capsule_tone_ok |
| When | October fest capture sprint | December refresh |
Order: Lesson 254 GREEN on October capture → winter master edit → this pass → upload.
jq gate sketch (optional CI)
jq -e '.winter_capsule_tone_ok == true and .gates.W6_receipt == "pass"' \
release-evidence/marketing-and-demo/winter-capsule/WINTER_CAPSULE_TONE_RECEIPT.json
Block steam_upload job in December when CAPSULE_STRICT=1.
Post-upload verification (five minutes)
After Steamworks accepts winter capsules:
- Open store page in logged-out browser—view header in library context.
- Screenshot header at default zoom; compare to
winter_header_capsule_sdr.png. - Check main capsule on game page—logo center not clipped.
- Append
steam_upload_verified_utcto receipt JSON. - If mismatch, do not hotfix during defer FREEZE without SHIP exception.
Steam CDN caching can delay updates 15–60 minutes—note cdn_propagation_wait in receipt notes rather than re-uploading identical bytes.
Counterarguments (honest limits)
"October receipt covers winter."
October proves gallery tone at October grade—winter snow shifts peaks.
"We only change one PNG."
Header and main are two downscales—W4 requires both.
"Photoshop export is faster."
ffmpeg ladder is reproducible—receipt ffmpeg_log[] beats hand export settings.
"Capsule art does not need BUILD_RECEIPT."
Optional column—but partners and defer FREEZE culture benefits from proof.
Solo artist evening schedule (90 minutes)
| Block | Action |
|---|---|
| 0–20 min | Export winter HDR master + SDR proof |
| 20–40 min | Run ffmpeg ladder (main + header) |
| 40–55 min | G1 + G3 safe-zone checks |
| 55–70 min | Build tone_compare_winter_pack.png |
| 70–90 min | File winter_capsule_tone_receipt_v1.json; BUILD_RECEIPT row |
Winter highlight failure modes (deep dive)
Snow and holiday lighting introduce failures October screenshots rarely hit:
| Failure | What players see | Technical trigger |
|---|---|---|
| Snow clip | Flat white plateau in header | HDR peaks > SDR roll-off before downscale |
| Rim bloom | Logo halo at 460×215 | High-frequency edge + lanczos ringing |
| Cool cast mud | Gray-blue logo on dark UI | Chroma quantize on tiny resize |
| Double tone map | Waxy UI | HDR→SDR twice (engine + ffmpeg curves) |
| ICC mismatch | "Different on Mac" | One PNG tagged sRGB, one untagged |
Fix order: fix SDR proof first (W2), then re-run ladder (W3)—do not sharpen a bad tone map.
Engine vs post winter grade
| Source | When to use | Receipt note |
|---|---|---|
| In-engine winter biome | Live snow in capture | winter_master_source: engine |
| DaVinci still from Lesson 254 | Trailer frame reuse | cousin_lesson: 254 |
| Photoshop overlay snow | Last resort | Document post_composite: true in notes |
Post composites fail W5 more often—plan extra G1 margin on logo.
Team handoff checklist (producer → artist → upload)
- [ ]
build_labelunchanged if art-only refresh (scenario G) - [ ] October
screenshot_tone_receipt_v1path inoctober_cousinfield - [ ] Both capsule PNGs + comparison pack in evidence folder
- [ ] Defer list
freeze_lockedincludesstore_capsule_winter_master - [ ] Steamworks upload screenshot of header in library view (optional proof PNG)
- [ ] Thursday row review if upload same week as code promote
BUILD_RECEIPT integration (optional column)
When marketing and engineering share one receipt file:
{
"build_label": "fest-demo-2026-12-rc3",
"winter_capsule_tone_ok": true,
"winter_capsule_receipt_path": "release-evidence/marketing-and-demo/winter-capsule/WINTER_CAPSULE_TONE_RECEIPT.json",
"hdr_steam_capture_ok": true,
"holiday_defer_ok": true
}
hdr_steam_capture_ok from Lesson 254; holiday_defer_ok from December defer playbook—three marketing columns, one row review.
Outbound references
- Steamworks Store Capsules — dimension verification
- ffmpeg scale filter — lanczos flags
- Steam HDR on store (community context) — player viewing still SDR-heavy on many clients
Key takeaways
- December capsule refresh reuses HDR masters—re-tone for winter snow highlights.
winter_capsule_tone_receipt_v1is distinct from Octoberscreenshot_tone_receipt_v1.- One ffmpeg ladder per target size—main 1232×706 and header 460×215.
- Gates W1–W6 block upload when logo safe zone fails phone test.
- Safe zones five gates G1 + G3 apply to downscaled crops.
- Lesson 254 owns capture; this pass owns December capsule downscale.
- December defer list FREEZE lane expects W6 before freeze starts.
- False bloom on header is the highest-visibility failure—test at 360px width.
- Document intentional winter swatch shift in G4—avoid "looks wrong" without notes.
winter_capsule_tone_okoptional on BUILD_RECEIPT links art to promote discipline.- Gallery winter slot optional—use same ladder at 1920×1080 if refreshing slot 1.
- November jq capstone crosswalk when 266–275 child receipts share
build_label. - Do not bump
build_labelfor art-only winter upload (scenario G). - Comparison pack PNG answers "what changed?" in one Slack image.
- Pair February prep calendar for pre-freeze asset locks.
FAQ
Is this the same as the October HDR art pass?
No—October owns gallery screenshots and screenshot_tone_receipt_v1; this owns winter capsules and winter_capsule_tone_receipt_v1.
Do I need a new HDR capture?
Not always—edit October master for winter grade, then new SDR proof + downscale ladder.
What if only the header changes?
Still file receipt with header_460x215 only; note main_unchanged: true in JSON.
Steam exact capsule sizes?
Verify current Steamworks capsule requirements—update ffmpeg_log if Valve revises dimensions.
Does this replace safe-zone composition pass?
No—run both; composition first on master crop, tone pass on exports.
Can I use ImageMagick instead of ffmpeg?
Yes—log equivalent resize filter in ffmpeg_log[] for reproducibility.
Winter GIF capsule?
Add GIF safe zone pass—separate receipt lane.
Will this guarantee more wishlists?
No—it prevents illegible winter capsules—a common December store regression.
Help forward rows?
Help #33 forward (store art) when shipped—this blog is strategy; help is fix steps.
Where does HDR October receipt CI gate fit?
October jq gate on screenshot_tone_receipt_v1; add parallel jq on winter_capsule_tone_receipt_v1 for December jobs.
What if our game has no snow?
Winter refresh still applies to holiday lighting (warm rim, fog, neon)—same false-bloom mechanics; rename winter_highlight_notes to december_grade_notes.
Can we batch header + main in one ffmpeg command?
Prefer separate commands logged in ffmpeg_log[]—different aspect ratios need independent scale filters; one filter_complex is error-prone for receipts.
Should we update animated GIF capsule too?
If GIF uses same master frame, run GIF safe zone pass after static PNGs pass W5.
Closing read (December 2026)
Players see your header capsule before they read your patch notes. Winter art that looked cinematic in HDR often becomes a glowing smudge at 460×215 when teams skip a second tone proof.
Micro-studios that pin one ffmpeg ladder, cross-check safe zones on crops, and file winter_capsule_tone_receipt_v1.json treat December refresh as evidence, not a quick Photoshop export before vacation.
Start with winter_sdr_proof.png and the header downscale—if the logo survives 360px, the main capsule usually follows.
Found this useful? File the receipt before you mark capsule masters FREEZE in your December defer list.