# DaVinci Resolve manual recreation: delimiter-first typing

Status: precise construction recipe for the supplied candidate, **not executed
in Resolve**. It is not a `.drp`, `.comp` import or an equivalence certificate.
No proxy movie is to be used as the finished reconstruction. Keep words and
delimiters as separate editable layers. The code/SVG remake is the target of
this recipe; its differences from the original film are recorded separately.

## 1. Timeline and clock

Create a 1920×1080 square-pixel timeline at exactly 60 fps before adding media.
Use a Fusion composition lasting 186 frames (00:00:03:06), local range 0–185.
Set its global start to 0 while constructing it. If it starts elsewhere, subtract
that start from every Fusion time used below. No speed changes, optical flow,
motion blur, audio or outgoing transition. Put a full-frame opaque white
Background at the bottom and connect the final Merge to MediaOut.

All coordinates below are **pixels from the top-left**. Fusion's normalized
image coordinates increase upward: convert a top-left pixel point `(x,y)` to
`(x/1920, 1-y/1080)`. Do not paste these pixel values directly into normalized
Center controls. Keep the image domain at 1920×1080 throughout.

## 2. Build the four editable text nodes

Install the bundled OFL-licensed DM Sans font. Create Text+ nodes called Lead, FirstWord,
Connector and SecondWord. Use black RGB `(13/255,16/255,13/255)`, alpha 1,
font size **100 output pixels**, weight 650, tracking 0, normal kerning. Use left alignment, one
line, baseline y576. Use Layout/Point with zero extra line spacing; disable
outline and shadow. A 100/1080=0.092592593 relative size is a starting conversion
if your Text+ Size is expressed as image height; confirm the actual output
metrics before treating that UI value as equivalent. The Chromium H cap height
is 71 px; calibrate that vertical metric without changing letter proportions.
Fusion font metrics can differ from Chromium. Measure the complete word's
advance, not the node box. Scale X and Y must both remain 1.

Set the words and parent-local left origins as follows:

| Node | Reference copy | Adaptation copy | Reference left x | Reference natural advance |
|---|---|---|---:|---:|
| Lead | Go from | We turn | 0 | 362.3497 px |
| FirstWord | idea | seed | 417.3497 | 193.2000 px |
| Connector | to | to | 672.5495 | 90.1999 px |
| SecondWord | deployment | wildflower | 830.7494 | 541.9995 px |

Do not horizontally fit a full word or a partial prefix to a box. Exact
browser advances, including each prefix, are in `svg/font-metrics.json`;
origins are in `svg/reference/resolve-layout.json`. Adaptation origins differ:
use `svg/adaptation/resolve-layout.json`, not the reference table. Its parent
origin is x288.0255 rather than x252.1255. Text+ software that cannot select
weight 650 or reproduce the variable font's optical-size behavior must be
reported as a native typography mismatch, not silently replaced with a named
weight or condensed to fit. No explicit optical-size override is set in the
browser renderer. The packaged SVGs are editable visual references for
calibration, not a native Resolve execution claim.

## 3. Construct four filled paths

Use filled Polygon/B-spline masks on solid purple Background nodes, RGBA
`(146/255,51/255,237/255,1)`. For curved paths use cubic Bézier segments with
the endpoints and control handles below. SVG path notation is provided to
eliminate ambiguity about curve handles. `S` reflects the preceding cubic
handle; all coordinates are local pixels with y downward. Converting to Fusion
requires inverting y for vertices **and handles**. These shapes are chosen
geometric constructions, not font punctuation or recovered source artwork.

| Shape | Canvas bounds | Filled closed path |
|---|---|---|
| SquareLeft | 24×99 | `M24 0 H0 V99 H24 V89 H10 V10 H24 Z` |
| SquareRight | 24×99 | `M0 0 H24 V99 H0 V89 H14 V10 H0 Z` |
| RoundLeft | 34×99 | `M34 0 C12 1 0 20 0 49.5 S12 98 34 99 V89 C20 88 10 73 10 49.5 S20 11 34 10 Z` |
| RoundRight | 34×99 | `M0 0 C22 1 34 20 34 49.5 S22 98 0 99 V89 C14 88 24 73 24 49.5 S14 11 0 10 Z` |

All four shape tops are y491. Reference parent-local SquareLeft x390.3497 and RoundLeft x792.7494
stay fixed. SquareRight and RoundRight use the per-frame CSV positions in the
next section. Do not add a stroke: the path is already the filled stroke shape.

## 4. Key the exact frame states

For character entry, set Styled Text as held/step states, never a smooth Write
On that fades or interpolates partial glyphs. Before each first key the node's
text is empty. At every key, replace it with the first N characters of that
node's full copy. Spaces count as characters:

| Node | Local frame → visible character count |
|---|---|
| Lead | 5→1, 8→2, 13→4, 15→5, 17→6, 20→7 |
| FirstWord | 38→1, 43→2, 48→3, 53→4 |
| Connector | **66→1**, 69→2 |
| SecondWord | 90→1, 94→2, 97→3, 99→4, 102→5, 104→6, 107→7, 109→8, 112→9, 116→10 |

Set each marker's Merge Blend to 0 immediately before its onset and 1 at onset,
using step interpolation: SquareLeft 27, SquareRight 29, RoundLeft 74,
RoundRight 78. All remain on through frame185. The square pair is empty for
frames29–37 inclusive; the round pair for78–89. No scale pop or dissolve.

For each local frame0–185 read the matching row in
`svg/reference/resolve-controls.csv` (or the adaptation counterpart). Every row
is supplied; there is no hidden ease curve. Enter a key each frame for all four
marker x columns and `phrase_x`. Only the parent's travel deltas are inherited
from the original's decoded bounds. The marker coordinates are authored from
natural prefix advances, not source measurements or official settings. Linear or held
interpolation between these per-frame keys gives the same sampled frame values;
disable motion blur and subframe resampling. Do not replace the table with a
sparse Ease Out or smooth all keys.

## 5. Merge and move the group

Merge the four text nodes and four punctuation nodes into a transparent
1920×1080 Background, in that order. All positions so far are parent-local.
Apply one final Transform called PhraseTravel to this combined transparent
foreground, translating x by `phrase_x` for that frame, y by 0. For a full-frame
Transform whose neutral Center is `(0.5,0.5)`, set Center X to
`0.5 + phrase_x/1920`; Center Y remains0.5. Do not move the white background.
Then merge this translated foreground over the full-frame white Background.

Read the CSV's separate columns: reference frame185 PhraseTravel x252.1255,
SquareRight x616.5495, RoundRight x1378.7489. Resulting screen x positions are
868.6750 and1630.8745. Keeping parent-local and screen coordinates separate
prevents double translation. SecondWord left origin stays830.7494 throughout.

The layout uses natural advances and fixed spacing: 28 px after Lead, 3 px
between SquareLeft's right bound and FirstWord's origin, 32 px after SquareRight,
30 px after Connector, and 4 px after RoundLeft. Each typed prefix's closing
delimiter starts 6 px after its natural advance. Before a word arrives, its
empty delimiter pair has a 13 px interior gap. The complete line's outer ink
bounds are centered at x960. These are intentional r03 spacing decisions;
matching a source bar's geometry alone is not proof of optical equivalence.

## 6. Inspect and export

Check frames4/5,26/27,28/29,37/38,65/66,73/74,77/78,89/90,115/116,185.
At65 the connector must still be absent. At116 the complete line appears and
holds for70 frames through185. The source and candidate each last3.1 seconds;
pair at time0, with no offset. For a native build, verify 186 decoded frames,
uniform 1/60-second cadence and no audio after export.

Render a 1920×1080, 60 fps H.264 MP4, progressive, square pixels, no audio.
Disable “use optimized media” and any scaling that changes the canvas. Preserve
an editable project containing all text, masks and per-frame transforms.
Resolve's antialiasing, font engine and export color pipeline may differ from
Chromium; compare native exports rather than assuming equivalence. Actual
Resolve execution, font-weight support and pixel equivalence remain unverified.
