Summer Steam Capsule Gradient Band Readability Pass Before October Next Fest - 2026 Art Workflow

Late July 2026: art regrades the October fest capsule for summer warmth—lifted mids, tighter vignette, sun-bleached sky gradient behind the logo. July signup receipt filed; October RC label evening pinned fest-demo-2026-10-rc1. Store upload goes live. August wishlist threads: "capsule looks cheap on phone." Engineering: gameplay looks fine—because in-game tonemapping hides 8-bit gradient steps the store JPEG amplifies.
July–August 2026 HDR regrades and sRGB export compress wide sky ramps into visible banding stripes on Steam's 1232×706 main capsule and 616×353 discovery thumbnails. Banding is a CTR failure mode that hits before Wednesday smoke fails—players never download a demo they scroll past.
This Game Art & Design workflow is the summer gradient band second pass—not February safe-zone Z (crop/composition), not palette lock worksheet (three swatch discipline), not winter HDR tone (false bloom downscale). It delivers 616×353 gradient band squint test, ImageMagick banding detect sketch, gates B1–B6, and summer_capsule_gradient_receipt_v1.json before summer freeze store upload.
Non-repetition note: February capsule Z owns 84% safe-zone overlays after winter master swaps. Palette lock owns three hex swatches. October safe zones five gates own gallery composition. This URL owns summer_capsule_gradient_receipt_v1 for HDR regrade gradient banding on capsule sky/ground ramps before October fest traffic.
Pair July signup trend, October RC label evening, cluster #1–#6, forward #8 jq March sprint weekly diff.
Why this matters now (July–August 2026 HDR regrade season)
- Summer capsule swaps — Teams upload fest variant B after signup without re-proofing gradient ramps—only logo position.
- HDR→sRGB crush — Wide 16-bit sky grades band when exported to Steam's JPEG pipeline; in-engine viewport looks smooth.
- Phone discovery CTR — Store grid shows ~616×353 effective read—banding reads as "mobile port" before title is parsed.
- Engineering blind spot — Content-freeze manifest pins
build_labelbut not marketing export profile. - BUILD_RECEIPT gap —
october_rc_label_oktrue does not implysummer_capsule_gradient_ok.
Direct answer: Export main capsule 1232×706; run 616×353 squint test on sky/ground gradient bands; measure banding with ImageMagick row-variance sketch; cross-check palette lock; file summer_capsule_gradient_receipt_v1.json with B1–B6 GREEN before summer freeze store metadata upload.
Who this workflow is for
| Audience | Outcome |
|---|---|
| Beginner artist | 616×353 squint test in five minutes |
| Solo producer | Block capsule upload without B receipt |
| Working dev | Wire summer_capsule_gradient_ok on BUILD_RECEIPT |
| Team post-signup | Second pass after July signup store art swap |
Time: ~75 minutes first summer regrade capsule; ~25 minutes per variant once banding script exists.
Format ladder (October store art cluster)
| Artifact | Role |
|---|---|
| Palette lock worksheet | Three swatches before capture |
| October safe zones | Gallery composition gates |
| This workflow | Summer gradient band B1–B6 after HDR regrade |
| February capsule Z cousin | Winter crop safe-zone pass |
| October RC label evening | Label + content-freeze manifest |
| 14 screenshot tools | Capture tooling listicle |
Order: July signup → RC label evening → this gradient pass → summer content freeze → Wednesday metadata diff.
Beginner path — 616×353 gradient band squint test
Steam's discovery grid often presents your main capsule at roughly half linear resolution—616×353 is half of 1232×706. Beginners run this before any ImageMagick script:
- Export
capsule_main_1232x706_summer_v2.pngfrom your art tool. - Resize to 616×353 (bicubic—matches typical downscale).
- Zoom to 200% on a 1080p monitor at arm's length.
- Trace the sky or ground gradient band behind logo/title with your eyes—count visible steps.
- Pass: ≤3 obvious steps across the band at 200% zoom. Fail: zebra stripes or posterized blocks.
Copy checklist into release-evidence/marketing/summer-capsule-gradient-checklist-2026.md:
# October 2026 summer capsule gradient pass
build_label: fest-demo-2026-10-rc1
palette_lock: release-evidence/marketing/palette-lock-2026.md
[ ] B1 — palette lock swatches A/B/C still within ΔE tolerance after regrade
[ ] B2 — HDR master path + export ICC profile documented
[ ] B3 — 616×353 squint test: ≤3 steps on primary gradient band
[ ] B4 — ImageMagick banding metric below team threshold
[ ] B5 — 360px-wide phone mock: title readable over gradient
[ ] B6 — summer_capsule_gradient_receipt_v1.json filed
[ ] BUILD_RECEIPT summer_capsule_gradient_ok == true
Beginner mistake: Judging banding at 100% on a 4K monitor—Steam shoppers see half-res JPEG, not your PSD.
Gates B1–B6
| Gate | Name | Pass criteria |
|---|---|---|
| B1 | Palette crosswalk | Swatches A/B/C from palette lock within ΔE2000 < 8 after regrade |
| B2 | Master lineage | summer_hdr_master_v2.png path + export profile (sRGB, quality 90–95) in receipt |
| B3 | Half-res squint | 616×353 resize passes ≤3-step rule on primary gradient band |
| B4 | Banding metric | ImageMagick row-variance score below team threshold (see script) |
| B5 | Phone overlay | 360px-wide mock: logo/title readable over gradient (contrast ≥4.5:1 on title bbox) |
| B6 | Receipt filed | summer_capsule_gradient_receipt_v1.json + BUILD_RECEIPT row |
B3–B5 are upload blockers when RED. B1 YELLOW only when regrade intentionally shifts hero swatch—document palette_waiver in receipt.
Working dev path — ImageMagick banding detect sketch
Store script as release-evidence/marketing/scripts/detect_capsule_gradient_banding.sh:
#!/usr/bin/env bash
# Banding heuristic: high row-to-row variance in luminance along gradient axis
set -euo pipefail
INPUT="${1:?capsule png}"
THRESH="${2:-0.042}"
# Half-res like Steam grid
HALF="/tmp/capsule_616x353.png"
magick "$INPUT" -resize 616x353! "$HALF"
# Extract red channel as proxy; compute mean absolute row delta
SCORE=$(magick "$HALF" -channel R -separate +channel -scale 1x353! \
-format "%[fx:mean]" info:)
# Simpler pass: count adjacent rows with delta > 3/255 in center 60% crop
DELTAS=$(magick "$HALF" -crop 60%x100%+20%+0 +repage \
-colorspace Gray -depth 8 txt:- | awk '
NR>1 && prev!="" {
split($0,a,": "); split(a[2],rgb,",");
g=rgb[2]; if (g-prev > 3 || prev-g > 3) n++
prev=g
}
NR>1 { split($0,a,": "); split(a[2],rgb,","); prev=rgb[2] }
END { print n+0 }')
if [ "${DELTAS:-999}" -gt 12 ]; then
echo "FAIL: banding row spikes=$DELTAS (max 12)"
exit 1
fi
echo "OK: banding row spikes=$DELTAS"
Interpretation: This is a heuristic, not perceptual science—calibrate DELTAS threshold on one known-good and one known-bad capsule from your art history. Log banding_row_spikes in receipt metrics.
Krita / Photoshop dither fix (when B4 fails)
| Technique | When to use |
|---|---|
| Add 0.5% noise on gradient layer only | Sky bands after sRGB export |
| 16-bit workflow end-to-end | Re-export from HDR master, dither on flatten |
| Split gradient into 2-stop + soft light overlay | Extreme sun-bleach regrades |
| Reduce saturation 5–8% | Banding masked by oversaturated ramps |
Re-run B3–B4 after fix—do not upload on "looks fine zoomed out."
Worked example — summer sky regrade (synthesized)
Starting state: capsule_main_1232x706_may_v1.png passed palette lock in May. July art lifts sky swatch A ~12% luminance for "summer warmth."
| Step | Action | Result |
|---|---|---|
| 1 | ΔE sample swatch A on regrade | 9.2 → B1 YELLOW |
| 2 | Producer waiver: intentional summer lift; update palette-lock row | B1 GREEN with note |
| 3 | Export sRGB PNG quality 93 | B2 GREEN |
| 4 | 616×353 squint | 6 steps visible → B3 RED |
| 5 | Add 0.6% noise on sky layer only; re-export | B3 2 steps → GREEN |
| 6 | detect_capsule_gradient_banding.sh |
banding_row_spikes=9 → GREEN |
| 7 | 360px mock white title on sky | contrast 4.2 → B5 RED |
| 8 | Darken gradient 8% behind title bbox | contrast 5.3 → GREEN |
| 9 | File summer_capsule_gradient_receipt_v1.json |
B6 GREEN |
Total elapsed: ~90 minutes first time; ~30 minutes on summer_v3 tweak after script exists.
CI GitHub Actions sketch (optional B4 regression)
name: capsule-gradient-banding
on:
pull_request:
paths:
- 'release-evidence/marketing/capsule_main_*.png'
jobs:
banding:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: banding detect
run: |
chmod +x release-evidence/marketing/scripts/detect_capsule_gradient_banding.sh
./release-evidence/marketing/scripts/detect_capsule_gradient_banding.sh \
release-evidence/marketing/capsule_main_1232x706_summer_v2.png
Fail PR when marketing exports change without re-running B gates—pairs Addressables hash lockfiles engineering cousin.
jq receipt merge (BUILD_RECEIPT wiring)
jq -e --slurpfile gr summer_capsule_gradient_receipt_v1.json '
.summer_capsule_gradient_ok == $gr[0].summer_capsule_gradient_ok
and .october_rc_label_ok == true
and .october_fest_signup_ok == true
' BUILD_RECEIPT.json
Log banding_row_spikes and squint_step_count in receipt metrics—Thursday row review can diff summer_capsule_gradient_ok week over week.
B2 export profile table
| Field | Recommended | Fail signal |
|---|---|---|
| Color space | sRGB IEC61966-2.1 | Display P3 export without conversion |
| Bit depth | 8-bit PNG after dither | Direct 16-bit upload without flatten |
| JPEG quality | 92–95 if JPEG required | Quality <85 on sky-heavy capsule |
| Sharpening | None on export | Unsharp mask on gradient layers |
Document in receipt export_profile block—pairs October RC label content_freeze_manifest art path.
summer_capsule_gradient_receipt_v1.json (schema)
{
"schema": "summer_capsule_gradient_receipt_v1",
"iso_week": "2026-W29",
"fest_name": "Steam Next Fest October 2026",
"build_label": "fest-demo-2026-10-rc1",
"gates": {
"B1": "GREEN",
"B2": "GREEN",
"B3": "GREEN",
"B4": "GREEN",
"B5": "GREEN",
"B6": "GREEN"
},
"evidence": {
"palette_lock": "release-evidence/marketing/palette-lock-2026.md",
"summer_hdr_master": "release-evidence/marketing/summer_hdr_master_v2.png",
"capsule_main_export": "release-evidence/marketing/capsule_main_1232x706_summer_v2.png",
"half_res_proof": "release-evidence/marketing/capsule_616x353_squint_proof.png",
"banding_script_log": "release-evidence/marketing/banding_detect_log.txt"
},
"export_profile": {
"color_space": "sRGB",
"format": "PNG",
"jpeg_quality": null
},
"metrics": {
"banding_row_spikes": 8,
"squint_step_count": 2,
"title_contrast_ratio": 5.1
},
"october_rc_label_receipt": "release-evidence/03-builds/october-rc/2026-W28/october_rc_branch_label_receipt_v1.json",
"summer_capsule_gradient_ok": true,
"next_milestone": "summer content freeze store upload"
}
BUILD_RECEIPT root rows (same commit)
{
"build_label": "fest-demo-2026-10-rc1",
"october_rc_label_ok": true,
"october_fest_signup_ok": true,
"summer_capsule_gradient_ok": true,
"summer_capsule_gradient_receipt": "release-evidence/marketing/summer_capsule_gradient_receipt_v1.json",
"summer_content_freeze_ok": false
}
Set summer_content_freeze_ok after L5 content-freeze manifest—gradient pass is art gate, freeze is engineering gate.
verify_summer_capsule_gradient.sh (sketch)
#!/usr/bin/env bash
set -euo pipefail
RECEIPT="${1:-summer_capsule_gradient_receipt_v1.json}"
BUILD="${2:-BUILD_RECEIPT.json}"
jq -e '
.summer_capsule_gradient_ok == true
and (.gates | .B1, .B2, .B3, .B4, .B5, .B6 | . == "GREEN")
' "$RECEIPT"
jq -e --slurpfile su "$RECEIPT" '
.summer_capsule_gradient_ok == $su[0].summer_capsule_gradient_ok
and .october_rc_label_ok == true
' "$BUILD"
test -f "$(jq -r '.evidence.half_res_proof' "$RECEIPT")"
echo "OK: summer capsule gradient gates GREEN"
February Z vs summer B comparison (cousin art passes)
| Check | February Z (winter crop) | Summer B (HDR regrade) |
|---|---|---|
| Primary failure | Logo in outer 8% | Gradient banding at half-res |
| Beginner test | 84% overlay | 616×353 squint |
| Receipt | february_capsule_safe_zone_receipt_v1 |
summer_capsule_gradient_receipt_v1 |
| Metric | Overlay screenshot | banding_row_spikes |
| Pairs tone pass | Winter HDR | Palette lock |
| Upload blocker | Z2–Z4 | B3–B5 |
Run both when February alumni ship October fest with summer regrade—Z for crop, B for ramps.
Proof table
| Evidence | Proves | Fail signal |
|---|---|---|
| palette_lock crosswalk | B1 color discipline | Three unrelated games on one page |
| HDR master path | B2 reproducible export | "Final_final_v7.psd" only on one laptop |
| 616×353 squint PNG | B3 shopper view | Banding only visible at 4K 100% |
| banding_detect_log | B4 objective gate | Script never run |
| 360px phone mock | B5 title over gradient | White title on yellow band |
| Gradient receipt | B6 team latch | Verbal "art approved" |
Scenarios A–G
| ID | Situation | Move |
|---|---|---|
| A | Standard summer regrade | Full B1–B6 before upload |
| B | No palette lock yet | Run worksheet first—B1 blocker |
| C | B4 fails, B3 passes | Add dither; re-export; re-run metric |
| D | Animated GIF capsule | Pair GIF loop pass—B gates on static keyframe |
| E | Solo dev, no ImageMagick | B3 squint + manual log; document b4_manual_waiver |
| F | Upload before receipt | File retroactively; consider store revert if banding viral in Discord |
| G | February Z alumni | Run B even if Z passed—regrade changes ramps not crops |
Producer upload workflow (75 minutes)
| Time | Action | Gate |
|---|---|---|
| 0:00 | Confirm october_rc_label_ok + signup receipt |
Prereq |
| 0:10 | Palette ΔE sample on regrade | B1 |
| 0:25 | Export 1232×706 + document profile | B2 |
| 0:35 | 616×353 squint + screenshot proof | B3 |
| 0:50 | Run banding script | B4 |
| 1:00 | 360px phone mock | B5 |
| 1:15 | Write receipt JSON | B6 |
| 1:20 | Producer sign-off → Steam upload | — |
Block upload when vacation handoff lists art owner offline without delegate.
Partner / publisher diligence zip (post-pass)
When co-dev partners or publishers request store art proof before October fest marketing spend, attach a pointer-first zip—not raw PSDs:
october-2026-summer-capsule-gradient-proof.zip
├── summer_capsule_gradient_receipt_v1.json
├── capsule_616x353_squint_proof.png
├── banding_detect_log.txt
├── palette-lock-2026.md (excerpt)
└── README.txt → "B1–B6 GREEN 2026-07-13; build_label fest-demo-2026-10-rc1"
Email subject: <Game> — October 2026 summer capsule gradient receipt (B1–B6)
Body one-liner:
Gradient band pass filed against
fest-demo-2026-10-rc1; half-res squint + banding script GREEN. RC label receipt path:october_rc_branch_label_receipt_v1.json. Next: summer content freeze per RC label L5.
Partners care that marketing exports match engineering label—same discipline as Q3 diligence packets.
Engine / DCC notes by toolchain
| Tool | Banding risk | Mitigation |
|---|---|---|
| Blender compositor | Wide ramp in 16-bit PNG | Dither on composite; trim sheet swatch match |
| DaVinci Resolve | HDR grade → sRGB crush | Use winter tone cousin downscale discipline |
| Photoshop | Gradient tool 8-bit | Noise layer 0.5%; smart object from 16-bit master |
| Krita | Linear export | Convert to sRGB before flatten |
| Unity URP screenshot | Tonemapped viewport ≠ store | Export from marketing PSD, not raw capture |
Micro-studio time budget
| Phase | Solo artist | Artist + producer |
|---|---|---|
| B1 palette check | 15 min | 10 min |
| B2 export | 20 min | 15 min |
| B3 squint | 10 min | 10 min |
| B4 script | 25 min | 15 min |
| B5 phone mock | 15 min | 15 min |
| B6 receipt | 15 min | 10 min |
| Total | ~1.75 h | ~1.25 h |
Cheaper than fest-week "why does our capsule look bad on phone" threads—common July–August pattern.
Common mistakes
| Mistake | Fix |
|---|---|
| Judge at full res only | B3 616×353 mandatory |
| Skip palette after regrade | B1 crosswalk |
| Sharpen gradient export | B2 profile—no unsharp on sky |
| Trust in-engine viewport | Store JPEG ≠ gameplay tonemap |
| Upload before RC label | october_rc_label_ok prereq on BUILD_RECEIPT |
| Conflate with safe-zone Z | Z = crop; B = ramps—both may be needed |
Counterarguments (honest limits)
"Steam recompresses anyway."
True—which amplifies banding; fix at source export.
"Our capsule is illustration, not gradient."
Vignette and fog still band—run B4 on largest soft ramp region.
"Same as palette lock."
Palette owns which colors; this pass owns smooth transitions between them.
"ImageMagick heuristic is fake science."
Agreed—pair with B3 squint; script catches regressions in CI, not taste.
Outbound references
- Steamworks store assets — capsule dimension requirements
- sRGB specification (IEC 61966-2-1) — export color space reference
Related GamineAI reads
- July October signup trend
- October RC label evening
- Palette lock worksheet
- February capsule safe-zone Z
- October safe zones five gates
- Winter HDR tone pass
- Wednesday metadata diff
- Fest-first visual discipline
- 14 screenshot capture tools
Key takeaways
- July–August 2026 HDR regrades push gradient banding on store capsules before gameplay looks wrong.
- Beginners run 616×353 squint test—half linear resolution of 1232×706 main capsule.
- Gates B1–B6 tie palette crosswalk, export profile, squint, metric, phone mock, and receipt.
summer_capsule_gradient_receipt_v1.jsonrecords evidence before summer freeze upload.summer_capsule_gradient_okon BUILD_RECEIPT latches art discipline—orthogonal tooctober_rc_label_ok.- Pair palette lock for swatches; this pass for ramps.
- February capsule Z cousin—run both when crop and regrade change.
- ImageMagick banding_row_spikes is a calibrated heuristic—not a substitute for B3 squint.
- Forward #8 jq March sprint weekly diff when post-fest engineering overlaps October prep.
- Post-July signup: schedule this pass before CTR-sensitive store swaps.
- No invented CTR percentages—qualitative banding failure pattern only.
- Dither/noise fixes target gradient layers only—not full capsule sharpen.
- RC label evening prereq: label truth before art export paths file.
FAQ
Is 616×353 the exact Steam grid size?
It is half of main capsule 1232×706—a practical squint proxy for discovery downscale, not an official Valve pixel spec.
Can we skip B4 if B3 passes?
Solo studios may waive B4 with b4_manual_waiver—teams with CI should keep the script for regression.
How does this differ from February safe-zone Z?
Z tests crop/composition overlays; B tests gradient banding on HDR regrades—complementary passes.
Does this replace palette lock?
No—B1 crosswalks palette lock; run worksheet first if swatches never locked.
When should we run this vs RC label evening?
RC label evening first (label + freeze manifest); this pass before store capsule upload on summer variant.
What if we only change the header 460×215?
Run B3–B4 on header export too—sky bands appear in small caps when vignette is heavy.
Does banding affect wishlist CTR?
Qualitative store threads link muddy gradients to "low effort" reads—fix before fest traffic, not during.
Can we run this before July signup?
Yes—B gates are independent of signup; July signup trend forward #7 assumes post-signup store swap timing.
RED / YELLOW / GREEN routing (B gates)
| Signal | Route |
|---|---|
| B1 RED | Re-run palette lock or document waiver |
| B3 RED | Dither/re-export; do not upload |
| B4 RED | Fix export profile; re-run script |
| B5 RED | Move title or darken gradient behind logo |
| B2 YELLOW | ICC profile ambiguous—document in receipt |
| All GREEN | File receipt; upload; declare freeze with engineering |
Closing
Summer capsule gradient banding is a silent CTR tax—engineers see smooth gameplay while shoppers see posterized skies at 616×353. File summer_capsule_gradient_receipt_v1.json, run squint + metric gates, and crosswalk palette lock after every HDR regrade. Prevention beats fest-week Discord screenshots—pair July signup and RC label evening so art paths sit on the same build_label as engineering freeze.