# Tick a mono elapsed timer in tenths, then hard-swap the centre to a completion state with two stats

Manual DaVinci Resolve / Fusion construction guide generated from the recipe. It is not a tested .drp.
The accompanying Remotion project (recipe.json) is the executable definition; the numbers below are copied from it.
Neither construction establishes source fidelity: this is an original vector approximation of an inspected editing moment.

## Source and clock
Reference: OpenAI's "Introducing gpt-transcribe and gpt-live-transcribe" (WeP9VUf1OoE), published 2026-07-28.
Source interval [2580, 2660) on the 24000/1001 fps master: 80 frames, 3.336667 s. Local frame 0 = source frame 2580.
Create a 1920x1080 progressive timeline at 24000/1001 fps and a Fusion composition exactly 80 frames long. Keep integer frames; do not round the frame rate.
Background field: #5a4fd8. Export silent H.264 yuv420p to match the intended playback container.

## Observation
A browser window on a purple gradient shows an 'Offline transcription' page: title, Realtime/Offline segmented control, a file row with a greyed 'Transcribing' button and a nearly full progress bar. Centred below, a large monospaced timer counts in tenths of a second from about 00:40.0 (local 0, master 2580) to 00:41.7 by frame ~42, with a small spinner and label above it. At about local frame 43 (master 2623) the centre hard-swaps to a green check, 'Transcription complete', two large mono stats (audio length and elapsed time) and a dark 'View transcript' button; the file row gains a green complete badge and the button becomes solid 'Transcribe file'. Everything then holds.

## Mechanism
Real-time numeric counter that resolves into a summary state: the ticking value is stepped text with no easing, and completion is a single-frame swap of the centre block plus dependent controls.

## Phases (local frames)
- 0: Timer at 00:40.0, transcribing
- 22: Timer past 00:41.0
- 43: Hard swap to completion state
- 60: Hold

## Layer inventory (absolute 1920x1080 top-left pixels, back to front)
- blob-a [ellipse] at (-200, -300) size 1400x1200 fill #8c7cf2
- blob-b [ellipse] at (1100, 300) size 1300x1100 fill #3b2fb5
- blob-c [ellipse] at (300, 700) size 1200x800 fill #a394f6
- window [group] at (210, 130) size 1500x880 radius 16 fill #ffffff
  - chrome [rect] at (210, 130) size 1500x56 radius 16 fill #f2f2f4
  - chrome-flat [rect] at (210, 160) size 1500x26 fill #f2f2f4
  - tl-r [ellipse] at (228, 150) size 14x14 fill #ff5f57
  - tl-y [ellipse] at (250, 150) size 14x14 fill #febc2e
  - tl-g [ellipse] at (272, 150) size 14x14 fill #28c840
  - url [rect] at (710, 144) size 500x28 radius 8 fill #e4e4e7
  - app-title [text] at (300, 222) text "Offline transcription" 30px weight 600 #1a1a1a
  - seg [rect] at (970, 222) size 320x40 radius 10 fill #ececee
  - seg-a [text] at (970, 231) size 160x0 text "Realtime" 18px weight 400 #6b6b69
  - seg-b-bg [rect] at (1134, 226) size 152x32 radius 8 fill #ffffff
  - seg-b [text] at (1130, 231) size 160x0 text "Offline" 18px weight 600 #1a1a1a
  - file-row [rect] at (300, 294) size 1320x68 radius 12 stroke #e6e6e8 1px
  - play [path] at (328, 328) fill #1a1a1a
  - file-name [text] at (350, 306) text "Conference keynote recap.m4a" 20px weight 500 #1a1a1a
  - file-meta [text] at (350, 334) text "25:00 · 24.1 MB · uploaded just now" 14px weight 400 #8a8a88
  - btn-choose [rect] at (1330, 310) size 120x36 radius 8 stroke #dcdcdf 1px
  - btn-choose-t [text] at (1330, 318) size 120x0 text "Choose file" 15px weight 400 #333333
  - btn-run-a [rect] at (1466, 310) size 140x36 radius 8 fill #e6e6e8 visible [0, 43)
  - btn-run-a-t [text] at (1466, 318) size 140x0 text "Transcribing…" 15px weight 400 #6b6b69 visible [0, 43)
  - btn-run-b [rect] at (1466, 310) size 140x36 radius 8 fill #1a1a1a visible [43, 80)
  - btn-run-b-t [text] at (1466, 318) size 140x0 text "Transcribe file" 15px weight 400 #ffffff visible [43, 80)
  - track [rect] at (300, 378) size 1320x6 radius 3 fill #ececee
  - track-fill [rect] at (300, 378) size 1250x6 radius 3 fill #1a1a1a
      keyframes w: f0=1250, f43=1320
  - done-dot [ellipse] at (350, 398) size 16x16 fill #1f9d55 visible [43, 80)
  - done-pill [text] at (374, 395) text "Complete · 00:41.7" 15px weight 600 #1f9d55 visible [43, 80)
  - spinner [ellipse] at (802, 600) size 18x18 stroke #9a9a9a 2px visible [0, 43)
  - status [text] at (210, 598) size 1500x0 text "Transcribing the complete file" 18px weight 400 #6b6b69 visible [0, 43)
  - status-sub [text] at (210, 714) size 1500x0 text "Keep this tab open while the file is processed." 15px weight 400 #9a9a98 visible [0, 43)
  - tick-0 [text] at (210, 626) size 1500x0 text "00:40.0" 64px weight 700 #111111 visible [0, 2)
  - tick-1 [text] at (210, 626) size 1500x0 text "00:40.1" 64px weight 700 #111111 visible [2, 5)
  - tick-2 [text] at (210, 626) size 1500x0 text "00:40.2" 64px weight 700 #111111 visible [5, 7)
  - tick-3 [text] at (210, 626) size 1500x0 text "00:40.3" 64px weight 700 #111111 visible [7, 10)
  - tick-4 [text] at (210, 626) size 1500x0 text "00:40.4" 64px weight 700 #111111 visible [10, 12)
  - tick-5 [text] at (210, 626) size 1500x0 text "00:40.5" 64px weight 700 #111111 visible [12, 14)
  - tick-6 [text] at (210, 626) size 1500x0 text "00:40.6" 64px weight 700 #111111 visible [14, 17)
  - tick-7 [text] at (210, 626) size 1500x0 text "00:40.7" 64px weight 700 #111111 visible [17, 19)
  - tick-8 [text] at (210, 626) size 1500x0 text "00:40.8" 64px weight 700 #111111 visible [19, 22)
  - tick-9 [text] at (210, 626) size 1500x0 text "00:40.9" 64px weight 700 #111111 visible [22, 24)
  - tick-10 [text] at (210, 626) size 1500x0 text "00:41.0" 64px weight 700 #111111 visible [24, 26)
  - tick-11 [text] at (210, 626) size 1500x0 text "00:41.1" 64px weight 700 #111111 visible [26, 29)
  - tick-12 [text] at (210, 626) size 1500x0 text "00:41.2" 64px weight 700 #111111 visible [29, 31)
  - tick-13 [text] at (210, 626) size 1500x0 text "00:41.3" 64px weight 700 #111111 visible [31, 34)
  - tick-14 [text] at (210, 626) size 1500x0 text "00:41.4" 64px weight 700 #111111 visible [34, 36)
  - tick-15 [text] at (210, 626) size 1500x0 text "00:41.5" 64px weight 700 #111111 visible [36, 38)
  - tick-16 [text] at (210, 626) size 1500x0 text "00:41.6" 64px weight 700 #111111 visible [38, 41)
  - tick-17 [text] at (210, 626) size 1500x0 text "00:41.7" 64px weight 700 #111111 visible [41, 43)
  - check-bg [ellipse] at (938, 566) size 44x44 fill #1f9d55 visible [43, 80)
  - check [path] at (960, 588) stroke #ffffff 3px visible [43, 80)
  - done-label [text] at (210, 624) size 1500x0 text "Transcription complete" 22px weight 600 #1a1a1a visible [43, 80)
  - cap-a [text] at (730, 666) size 200x0 text "Audio length" 13px weight 400 #8a8a88 visible [43, 80)
  - cap-b [text] at (990, 666) size 200x0 text "Transcribed in" 13px weight 400 #8a8a88 visible [43, 80)
  - stat-a [text] at (730, 684) size 200x0 text "25:00" 52px weight 700 #1a1a1a visible [43, 80)
  - stat-dot [text] at (930, 684) size 60x0 text "·" 52px weight 700 #9a9a98 visible [43, 80)
  - stat-b [text] at (990, 684) size 200x0 text "00:41.7" 52px weight 700 #1a1a1a visible [43, 80)
  - view-btn [rect] at (865, 766) size 190x44 radius 8 fill #1a1a1a visible [43, 80)
  - view-btn-t [text] at (865, 777) size 190x0 text "View transcript" 17px weight 500 #ffffff visible [43, 80)

## Construction steps
1. Timeline 1920x1080 at 23.976 fps; Fusion composition 80 frames. Local 0 = master frame 2580.
2. Background: solid #5a4fd8 with three large blurred ellipses (#8c7cf2, #3b2fb5, #a394f6) for the gradient; browser window 1500x880, radius 16, drop shadow, centred.
3. Timer: Text+ in a mono font, 64 px bold, centred. Drive it with a Text+ keyframe per tenth (or a TimeCode expression rounded to 0.1 s); values step 00:40.0 to 00:41.7 at frames 0,2,5,7,10,12,14,17,19,22,24,26,29,31,34,36,38,41.
4. Progress fill: Rectangle width 1250 to 1320 px over frames 0 to 43, linear.
5. Completion: at frame 43 cut off the spinner, label and timer; cut on the check circle, 'Transcription complete', two 52 px mono stats with 13 px captions, and the 190x44 dark button. Same frame: file-row button switches from grey 'Transcribing' to solid dark 'Transcribe file' and a green 'Complete' badge appears under the file name.
6. Easy mistake: dissolving the counter into the stats; the source swaps the whole centre block in one frame.

## Content variants
Default copy:
- title: Offline transcription
- fileName: Conference keynote recap.m4a
- fileMeta: 25:00 · 24.1 MB · uploaded just now
- statusLabel: Transcribing the complete file
- doneLabel: Transcription complete
- audioLen: 25:00
- elapsed: 00:41.7
- button: View transcript
Adaptation changes:
- title: Batch transcription
- fileName: Board meeting audio.wav
- fileMeta: 18:30 · 61.5 MB · uploaded just now
- statusLabel: Processing the uploaded recording
- doneLabel: Ready to review
- audioLen: 18:30
- button: Open transcript

## Limits
Easing names map to Fusion spline shapes: linear = linear, in/out/inOut = ease curves on the same frames, hold = step, spring/overshoot = slight overshoot past the target before settling.
Text reveal frames give the first and last unit; distribute characters/words evenly between them. Cursor click rings last 14 frames.
Vector illustration is an approximation of layout and motion, not the product UI or recovered production assets.
