Lesson 251: DaVinci Trailer Handoff OBS Highlight Receipt on BUILD_RECEIPT (2026)
Direct answer: Before July playtest highlight reels run Lesson 243 consent concat, file trailer_handoff_receipt_v1.json proving a mezzanine export, handoff_map_v1.json rows link Resolve TC ↔ OBS clip_id, fps matches between timeline and Replay Buffer, and ffprobe duration covers every out point—then promote BUILD_RECEIPT trailer_handoff_ok. Distinct from Lesson 250 (VO WAV metadata) and Lesson 234 (store stereo).

Why this matters now (July 2027 playtest highlight reels)
July 2026–2027 teams export a Resolve playtest-trailer master Monday and merge OBS Replay Buffer clips Tuesday—without handoff_map_v1.json, editors guess in/out points, drift against the mezzanine, and re-cut the same boss fight three times. Lesson 250 owns VO consent metadata; Lesson 243 owns clip consent concat—251 owns editorial timecode linkage between lanes.
The Resolve playtest trailer handoff preflight is the ninety-second gate—251 is the BUILD_RECEIPT milestone. Pair GIF vs WebM deliverable discipline for store exports (separate lane).
Beginner path (mezzanine → map → receipt)
| Step | Action | Success check |
|---|---|---|
| 1 | Export playtest mezzanine from Resolve | T1 pass + SHA-256 logged |
| 2 | Lock timeline fps = OBS capture fps | T2 pass |
| 3 | Write handoff_map_v1.json per highlight |
T3 no orphan obs_clip_id |
| 4 | ffprobe mezzanine duration vs last TC out | T4 pass |
| 5 | Spot-check OBS clip duration ±2s | T5 pass |
| 6 | File receipt + BUILD_RECEIPT | trailer_handoff_ok: true |
Time: ~58 minutes first wave; ~12 minutes when mezzanine preset + map template exist.
Developer path (gates T1–T6)
| Gate | Check | Fail when |
|---|---|---|
| T1 | Mezzanine on disk | Social H.264 only, no TC reference |
| T2 | timeline_fps = OBS setting |
30 vs 60 silent drift |
| T3 | handoff_map_v1.json complete |
Missing obs_clip_id row |
| T4 | Mezzanine duration covers resolve_tc_out |
Short master export |
| T5 | OBS file exists + duration sanity | Renamed inbox clip |
| T6 | Receipt + BUILD_RECEIPT | Promote before T3 GREEN |
T1 — cousin receipt crosswalk
| Field | Cousin (243) | This lesson (251) |
|---|---|---|
| Schema | playtest_clip_consent_receipt_v1 |
trailer_handoff_receipt_v1 |
| Scope | Consent + concat manifest | Resolve TC ↔ OBS map |
| Path | release-evidence/playtest/vod/PLAYTEST_CLIP_CONSENT_RECEIPT.json |
release-evidence/playtest/trailer/TRAILER_HANDOFF_RECEIPT.json |
| Order | Run 251 first | Then 243 |
Do not embed consent rows inside handoff_map—reference shared clip_id only.
handoff_map_v1.json
{
"schema": "handoff_map_v1",
"build_label": "playtest-july-2027-rc1",
"timeline_fps": 60,
"mezzanine_path": "deliver/playtest_mezzanine_playtest-july-2027-rc1.mov",
"mezzanine_sha256": "abc123…",
"highlights": [
{
"handoff_id": "h7f2a1b0-0001-4000-8000-000000000001",
"resolve_tc_in": "00:12:04:12",
"resolve_tc_out": "00:12:46:00",
"resolve_frame_in": 43452,
"resolve_frame_out": 45960,
"obs_clip_id": "clip03",
"obs_path": "playtest-vod/highlights/inbox/clip03.mkv",
"facilitator_note": "Boss phase 2 — consent pending Lesson 243"
}
]
}
trailer_handoff_receipt_v1.json
{
"schema": "trailer_handoff_receipt_v1",
"build_label": "playtest-july-2027-rc1",
"handoff_map_path": "playtest-vod/highlights/handoff_map_v1.json",
"mezzanine_path": "deliver/playtest_mezzanine_playtest-july-2027-rc1.mov",
"mezzanine_sha256": "abc123…",
"timeline_fps": 60,
"highlight_rows": 4,
"orphan_obs_clips": 0,
"fps_mismatch": false,
"cousin_receipts": {
"playtest_clip_consent": "release-evidence/playtest/vod/PLAYTEST_CLIP_CONSENT_RECEIPT.json",
"gif_deliverable_slot": "deliver/gif_deliverable_slot_receipt_v1.json"
},
"gates": {
"T1_mezzanine": "pass",
"T2_fps_lock": "pass",
"T3_handoff_map": "pass",
"T4_mezzanine_duration": "pass",
"T5_obs_duration": "pass",
"T6_build_receipt": "pass"
},
"handoff_ok": true,
"playtest_promotion_allowed": true
}
Pin under release-evidence/playtest/trailer/TRAILER_HANDOFF_RECEIPT.json.
BUILD_RECEIPT row (T6)
| Column | Pass when |
|---|---|
trailer_handoff |
handoff_ok: true |
playtest_clip_consent |
Cousin Lesson 243 independent column |
vo_consent_metadata |
Cousin Lesson 250 independent column |
ALTER TABLE release_publish_gate ADD COLUMN IF NOT EXISTS
trailer_handoff_blocked BOOLEAN NOT NULL DEFAULT false;
Thursday row review — trailer handoff line: map rows Y/N.
Key takeaways
- Store GIF/WebM ≠ playtest handoff—GIF vs WebM preflight is a different lane.
handoff_map_v1.jsonis source of truth forclip_id↔ Resolve TC.- Run 251 before 243 consent concat—manifest needs real in-points.
- Lesson 250 VO metadata is parallel, not a substitute.
- Lesson 220 Whisper batch is audio triage—separate from highlight reels.
- Evening OBS concat pipeline — capture stack only.
playtest_promotion_allowedhere ≠ Q4 capstone 253.- Forward: Lesson 252 Spline LCP under load BUILD_RECEIPT.
8b. October store stills: Lesson 254 HDR→SDR Steam capture (distinct from playtest handoff). - Pair 16 OBS/ffmpeg tools for capture; this lesson owns the map.
- Top 20 receipts hub — handoff row in playtest→public map.
Common mistakes
- Filing 243 while 251 map still missing—consent cannot fix wrong in-points.
- Mixing 30 fps OBS with 60 fps Resolve without retime note.
- Renaming
clip03.mkvafter map written—orphanobs_clip_id. - Skipping T4 because timeline “looks fine”—mezzanine shorter than last
resolve_tc_out. - Merging
trailer_handoff_receiptintoplaytest_clip_consent_receiptschemas.
Troubleshooting
| Symptom | Lane |
|---|---|
| Highlights drift vs master | Re-export mezzanine; bump map version |
| OBS clip longer than map delta | Replay Buffer padding—note in facilitator_note |
| Consent GREEN, editorial wrong | This lesson T3–T5 |
| Store trailer fine, highlights wrong | Skipped handoff—store lane ≠ playtest lane |
| Whisper triage blocked | Lesson 220 — separate |
Mini exercise (50 minutes)
- Export mezzanine without TC—confirm T1/T4 fail modes.
- Write
handoff_map_v1.jsonfor two clips. - Link cousin path placeholder for Lesson 243.
- ffprobe mezzanine + OBS durations.
- File receipt; BUILD_RECEIPT GREEN.
Continuity — Q4 2027 July playtest scale (245–253)
| Lesson | Receipt focus |
|---|---|
| 250 | Audacity VO consent metadata |
| 251 (this) | DaVinci trailer handoff → OBS |
| 252 | Spline playtest LCP under load |
| 253 | Q4 capstone (queued) |
Previous: Lesson 250 — Audacity VO consent metadata
Next: Lesson 252 — Spline playtest landing LCP spot
FAQ
Same as Lesson 243?
243 = consent + concat manifest; 251 = Resolve TC map—run 251 first.
Same as the DaVinci guide chapter?
Guide = T1–T6 checklist; 251 = BUILD_RECEIPT promotion.
Same as Lesson 250?
250 = VO WAV metadata; 251 = video editorial handoff.
Need ProRes mezzanine?
Team policy—document codec in receipt; social-only export fails T4 when TC out exceeds duration.
Highlights cut blind from Resolve fail every July scale wave—mezzanine hash, fps lock, handoff_map_v1.json, then trailer_handoff_ok before Lesson 243 consent concat.