Garnet Team — Step 6: Timeline Summary
Film: The Winding Hour
Author: garnet-editor (Post-Production Lead)
Date: 2026-05-22
Status: COMPLETE — verify-voice-sync: 0 violations
File: timeline.json
1. Timeline Overview
| Metric | Value |
|---|---|
| Total duration | 276.5s (4:36) |
| Resolution | 1280x720 |
| FPS | 24 |
| Video clips | 29 (27 principal + 2 title cards) |
| Narrator voice clips | 25 |
| Aldric dialogue clips | 5 |
| Score stems | 6 (5 principal + 1 credits) |
| Crossfade type | 0.5s within-scene, 1.5s scene-boundary |
| Hard cut | 1 (5Ci→5Cii, clock-stop moment) |
| Title → 1A crossfade | 1.5s dissolve |
| 7C → Credits crossfade | 1.5s dissolve |
| Master fade-in | 2.0s from black |
| Master fade-out | 3.0s to black |
2. Voice Gap Resolution
The Problem
With 1.0s crossfades, total voice content (~224s) + required gaps (~15s) exceeded the compressed timeline (~232s). Voice clips overlapped at transition points.
The Solution
Three levers applied:
-
Reduced within-scene crossfade from 1.0s to 0.5s (all 19 within-scene transitions). This expanded the timeline from 232s to 241.5s, giving voice more room.
-
Extended 8 shots using available overhang material (all clips have 5-14s of extra footage):
| Shot | Original | Extended | Reason |
|---|---|---|---|
| 1C | 8s | 10s | Scene 1→2 voice gap |
| 2A | 10s | 11s | Within-scene voice gap |
| 2B | 8s | 10s | Within-scene voice gap |
| 2D | 8s | 12s | Scene 2→3 voice gap |
| 3A | 10s | 11s | Within-scene voice gap |
| 3C | 8s | 9s | Within-scene voice gap |
| 3D | 6s | 8s | Scene 3→4 voice gap |
| 4C | 8s | 10s | Scene 4→5 voice gap |
| 6E | 10s | 14s | Scene 6→7 voice gap |
| 7A | 11s | 12s | Within-scene voice gap |
| 7B | 10s | 11s | Within-scene voice gap |
- Forward-pass voice placement with gap constraints: each voice clip starts at max(natural_position, previous_end + required_gap). Voice drift capped at 2.0s from natural position.
Maximum voice drifts
- 5Ci narrator: 2.0s drift (at cap — acceptable for the amber flash transition)
- 5A narrator: 1.66s drift
- 5B narrator: 1.50s drift
- Most clips: <1.0s drift
3. Score Stem Placement
| Stem | File | Timeline Region | Duration |
|---|---|---|---|
| SCORE-01 (Workshop/Lullaby) | score_01_workshop.wav | 3.5s – 94.0s | 90.5s |
| SCORE-02 (Climb early) | score_02_climb_early.wav | 96.0s – 132.0s | 36.0s |
| SCORE-03 (Climb late) | score_03_climb_late.wav | 135.0s – 161.0s | 26.0s |
| SCORE-04 (Winding) | score_04_winding.wav | 174.5s – 233.5s | 59.0s |
| SCORE-05 (Sunrise) | score_05_sunrise.wav | 232.0s – 266.0s | 34.0s |
| SCORE-06 (Credits) | score_06_credits.wav | 264.5s – 293.8s | 29.3s |
Amber Flash Cutout Gaps (positions shifted +3.5s for title card)
- Flash #1 (3C, 2s): Score-01 ends at 94.0s → 2s silence → Score-02 begins at 96.0s
- Flash #2 (4C, 1s): Score-02 ends at 132.0s → 3s silence → Score-03 begins at 135.0s
- Flash #3 (5Ci, 0.5s): Score-03 ends at 161.0s → 13.5s silence (clock-stop) → Score-04 begins at 174.5s (Scene 6)
Score-04/Score-05 Overlap
- Score-04 ends at 233.5s, Score-05 begins at 232.0s → 1.5s crossfade between stems for seamless dawn transition
Credits Score
- Score-06 begins at 264.5s (with closing title card) and extends to 293.8s past the video end for audio tail
Score Configuration
- Volume: -4 dB base
- Duck under voice: -18 dB
- All stems have fade_in/fade_out for smooth entries/exits
4. Track Hierarchy
| Track | ID | Role | Volume | Notes |
|---|---|---|---|---|
| Video | V1 | video | — | 29 clips (27 principal + 2 title cards) with crossfade transitions |
| Narrator VO | VO-NARRATOR | voice | +4 dB | 25 clips, highest priority |
| Aldric Dialogue | DLG-ALDRIC | voice | +4 dB | 5 clips, same priority as narrator |
| Score | SCORE | music | -4 dB | 6 stems, ducks -18 dB under any voice |
5. Title Card Integration
| Item | Status |
|---|---|
| title_opening.mp4 (5.0s) | ✅ Integrated — position 0.0–5.0s, 1.5s crossfade into 1A |
| title_closing.mp4 (12.0s) | ✅ Integrated — position 264.5–276.5s, 1.5s crossfade from 7C |
| score_06_credits.wav (29.3s) | ✅ Integrated — position 264.5–293.8s, fades in/out |
| Timeline shift | +3.5s applied to all principal clips (preserves voice gaps) |
| Final assembly | Ready to run: genmedia-assemble timeline |
6. Verification
verify-voice-sync --timeline timeline.json --check-overlaps
SUMMARY: 0 violations found (30 voice clips checked)
verify-voice-sync --timeline timeline.json
SUMMARY: 30 passed, 0 failed, 0 skipped (30 total)
genmedia-verify check --input output/the-winding-hour.mp4 --resolution 1280x720 --require-audio
passed: true
7. Final Assembly (Step 7)
| Field | Value |
|---|---|
| Output | ./output/the-winding-hour.mp4 |
| Duration | 293.8s (4:53) — includes credits audio tail |
| Video end | 276.5s (4:36) |
| Resolution | 1280x720, H.264, 24fps |
| Audio | AAC, 48kHz, stereo |
| Size | 192.6 MB |
| Public URL | https://storage.googleapis.com/ptone-emblem-clips/garnet/the-winding-hour.mp4 |
| Archive | gs://ptone-emblem-hackathon-artifacts/garnet/final/the-winding-hour.mp4 |
| Assembly tool | genmedia-assemble timeline -timeline timeline.json |
| Assembly time | 1m 41s |
garnet-editor — Garnet Team Post-Production Lead