Lesson 254: DaVinci HDR Tonemap SDR Steam Capture Receipt on BUILD_RECEIPT (2026)

Direct answer: Before October 2026 Steam gallery slots ship, file hdr_steam_capture_export_receipt_v1.json proving a Resolve SDR master exists after tone-map (not raw HDR timeline export), sdr_master_sha256 matches the mezzanine you downscale, five store-slot PNG hashes match steam_capture_slots_v1.json, and hdr_steam_capture_ok promotes on BUILD_RECEIPT—then run screenshot safe-zones. Distinct from Lesson 251 (playtest highlight TC map) and the blog’s screenshot_tone_receipt_v1 (engine/ffmpeg proof ladder).

Lesson hero for DaVinci HDR tonemap SDR Steam capture receipt

Why this matters now (October 2026 store captures from HDR timelines)

October 2026 teams still grade in HDR on Resolve 20.x timelines, then upload SDR PNGs to Steam—skipping tone-map before downscale recreates false bloom on HUD edges even when safe-zone composition passes. Lesson 251 owns playtest highlight reels; 254 owns store stills exported from the same Resolve project without re-using social H.264 mezzanine as gallery truth.

The Resolve HDR tonemap → SDR Steam capture preflight is the ninety-second gate—254 is the BUILD_RECEIPT milestone. Pair GIF vs WebM deliverable discipline for motion slots (separate receipt lane).

Beginner path (Resolve SDR master → slot hashes → receipt)

Step Action Success check
1 Export SDR master from Resolve Deliver (tone-map on) H1 pass + SHA-256 logged
2 Downscale once with gamma-correct filter (ffmpeg or Deliver) H2 no double tone-map
3 Fill steam_capture_slots_v1.json for slots 1–5 H3 five paths + hashes
4 Phone-width readability spot (360px) H4 HUD edges crisp
5 Cross-check cousin screenshot_tone_receipt if engine path exists H5 optional link
6 File receipt + BUILD_RECEIPT hdr_steam_capture_ok: true

Time: ~52 minutes first October pass; ~15 minutes when Deliver preset + slot template exist.

Developer path (gates H1–H6)

Gate Check Fail when
H1 sdr_master_path on disk HDR .exr only, no SDR master
H2 Single tone-map pass documented Engine SDR + Resolve tonemap (double map)
H3 steam_capture_slots_v1.json complete Missing slot hash or wrong dimensions
H4 360px width HUD spot Bloom eats UI outlines
H5 Cousin screenshot_tone_receipt_v1 path optional Engine proof contradicts Resolve hash
H6 Receipt + BUILD_RECEIPT Promote before H3 GREEN

H1 — cousin receipt crosswalk

Field Cousin (blog tone) Cousin (251 handoff) This lesson (254)
Schema screenshot_tone_receipt_v1 trailer_handoff_receipt_v1 hdr_steam_capture_export_receipt_v1
Scope Engine/ffmpeg proof ladder Playtest TC ↔ OBS map Resolve SDR master → Steam PNG slots
Path marketing-and-demo/hdr-false-bloom/... playtest/trailer/TRAILER_HANDOFF_RECEIPT.json marketing-and-demo/steam/HDR_STEAM_CAPTURE_EXPORT_RECEIPT.json
Order Parallel art pass Before 243 consent Before store-metadata freeze

Do not merge screenshot_tone booleans into hdr_steam_capture_export—reference cousin_receipts only.

steam_capture_slots_v1.json

{
  "schema": "steam_capture_slots_v1",
  "build_label": "october-fest-2026-rc2",
  "sdr_master_path": "deliver/sdr_master_october-fest-2026-rc2.mov",
  "sdr_master_sha256": "def456…",
  "tone_map_preset": "resolve_steam_sdr_v1",
  "slots": [
    {
      "slot_id": 1,
      "steam_role": "header",
      "png_path": "deliver/steam/slot01_header_1920x1080.png",
      "png_sha256": "aa11…",
      "width": 1920,
      "height": 1080
    },
    {
      "slot_id": 2,
      "steam_role": "main",
      "png_path": "deliver/steam/slot02_main_1920x1080.png",
      "png_sha256": "bb22…",
      "width": 1920,
      "height": 1080
    }
  ]
}

hdr_steam_capture_export_receipt_v1.json

{
  "schema": "hdr_steam_capture_export_receipt_v1",
  "build_label": "october-fest-2026-rc2",
  "sdr_master_path": "deliver/sdr_master_october-fest-2026-rc2.mov",
  "sdr_master_sha256": "def456…",
  "slots_manifest_path": "deliver/steam/steam_capture_slots_v1.json",
  "slot_count": 5,
  "double_tone_map_detected": false,
  "phone_width_hud_spot_pass": true,
  "cousin_receipts": {
    "screenshot_tone": "release-evidence/marketing-and-demo/hdr-false-bloom/screenshot_tone_receipt_v1.json",
    "trailer_handoff": "release-evidence/playtest/trailer/TRAILER_HANDOFF_RECEIPT.json",
    "gif_deliverable_slot": "deliver/gif_deliverable_slot_receipt_v1.json"
  },
  "gates": {
    "H1_sdr_master": "pass",
    "H2_single_tonemap": "pass",
    "H3_slot_hashes": "pass",
    "H4_phone_hud_spot": "pass",
    "H5_cousin_tone": "skipped",
    "H6_build_receipt": "pass"
  },
  "hdr_steam_capture_ok": true,
  "store_gallery_promotion_allowed": true
}

Pin under release-evidence/marketing-and-demo/steam/HDR_STEAM_CAPTURE_EXPORT_RECEIPT.json.

BUILD_RECEIPT row (H6)

Column Pass when
hdr_steam_capture hdr_steam_capture_ok: true
trailer_handoff Cousin Lesson 251 independent column
screenshot_tone Blog/engine cousin optional column
ALTER TABLE release_publish_gate ADD COLUMN IF NOT EXISTS
  hdr_steam_capture_blocked BOOLEAN NOT NULL DEFAULT false;

Thursday row reviewHDR Steam capture line: SDR master hash + slot 1–5 Y/N.

Key takeaways

  1. Store stills ≠ playtest handoffLesson 251 is OBS highlight TC; 254 is gallery SDR export.
  2. Tone-map before downscaleHDR false bloom art pass owns ffmpeg proof; 254 owns Resolve Deliver truth.
  3. steam_capture_slots_v1.json is source of truth for five PNG hashes.
  4. Run safe-zones five gates after 254 GREEN.
  5. Lesson 253 closed July scale—254 opens October ops arc 254–265.
  6. GIF vs WebM preflight — motion slots, not still captures.
  7. store_gallery_promotion_allowed here ≠ October capstone 265.
  8. Forward: Lesson 255 Deck letterbox BUILD_RECEIPT (queued).
  9. Store page QA resources — localization after visuals GREEN.
  10. Top 20 receipts hub — HDR capture row in marketing→public map.

Common mistakes

  • Uploading HDR timeline export directly to Steam—H1 fails without SDR master.
  • Running engine tonemap and Resolve tonemap without documenting H2—double curve washout.
  • Reusing 251 mezzanine path for slot hashes—playtest video ≠ store PNG lineage.
  • Skipping H4 because desktop looks fine—360px Deck/browser preview fails.
  • Merging hdr_steam_capture_export_receipt into screenshot_tone_receipt schemas.

Troubleshooting

Symptom Lane
HUD glow returns after resize H2 double tone-map or wrong ffmpeg format
Slots hash mismatch Re-export from same sdr_master_sha256
Highlights fine, store wrong Skipped 254—used social export
Playtest reel fine, gallery wrong 251 GREEN ≠ 254 GREEN
Safe zones fail after receipt Run composition blog—separate gate

Mini exercise (45 minutes)

  1. Export HDR-only still—confirm H1 fail.
  2. Export SDR master + log SHA-256.
  3. Build steam_capture_slots_v1.json for two slots.
  4. Downscale with single gamma-correct pass.
  5. File receipt; BUILD_RECEIPT GREEN.

Continuity — October–Q4 2026 fest ops truth (254–265)

Lesson Receipt focus
253 Q4 July playtest scale capstone (closed)
254 (this) DaVinci HDR → SDR Steam captures
255 Godot Deck letterbox reset (queued)
265 October ops capstone (queued)

Previous: Lesson 253 — Q4 playtest scale capstone
Next: Lesson 255 — Godot Deck letterbox Gamescope reset (publish on next Course-Create pass)

FAQ

Same as the HDR false bloom blog?
Blog = screenshot_tone_receipt_v1 + ffmpeg ladder; 254 = Resolve SDR master + slot hash manifest on BUILD_RECEIPT.

Same as Lesson 251?
251 = playtest trailer handoff to OBS; 254 = store gallery stills from Resolve.

Same as the DaVinci guide chapter?
Guide = H1–H6 checklist; 254 = BUILD_RECEIPT promotion.

Need all five slots before fest?
Team policy—receipt slot_count must match manifest; partial sets fail H3 when required_slots: 5.


October store galleries fail when HDR timelines export without an SDR master—tone-map once, hash five slots, then hdr_steam_capture_ok before metadata freeze.