# Shot plan: spotify-concept-ad (shot contracts), revision 5 with the owner fixes (D-35 to D-37) and the draft-9 notes (D-38 to D-41)
The contracts below hold for draft-14: the film is 35.0 s; shots 13 to 15 are re-timed (27.5 to 31.5, 31.5 to 33.5, 33.5 to 35.0; the end card is the logo alone on black, D-44 to D-46); shots 6 to 9 carry the camera pushes of D-41; the jam has a second row in the far lane (D-40). The draft-9 contracts are kept in shot-plan-draft9.md.
One composition: film/v2-en-16x9.html loading film/js/util.js, config.js, ui.js, lockup.js and film/js2/street.js, main.js (one continuous timeline; shots are time ranges of one camera along a drawn street). English 16:9 only (D-28). Times in seconds at 30 fps, from storyboard.md revision 5 (D-33). Richness values are measured on the stills of the real build with ice-qa's own area function (film_gate.area_features, 320 px grey; temp/v2o/v2-en-16x9/), and for type and interface heroes as hero_width, the hero text or interface width over the frame width. Every camera entry gives its reason. The revision 3 contracts of the lane-grid world are kept in shot-plan-rev3.md.

| Shot | Time | Claim and evidence | Start state | Decisive state | Handoff state | Focal owner | Motion verb | Camera window and reason | Layer manifest (back to front) | Alive | Richness (hero_share / frame_fill of 16 / depth) | Cues | Assets | QA checks |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0.0-2.9 | none (situation) | close on the grey honking hero car at frame 0, the jam behind it, the motorbike above, HONK in front of it | 2.62: the whole noisy block, the loudest horn, all four machines and their words in frame (frame-1) | the field rises at 2.9 as the street dims | the honking car, then the whole street | fire, pull back | 0.0 to 2.5: pull back from scale 1.1 on the hero car and the jam behind it to 0.7 on the block; reason: find the noise, then show all of it | sky, far skyline (parallax), buildings and site, road and lamps, machines, words | the four machines fire out of time, words pop and fade, the camera pulls back | 91 at 0.3 and 100 at 2.62 / 16 / 4 | horn 0.0, 0.7, 1.4, 1.9, 2.6 (loudest); breaker 0.3, 1.1, 2.0; ram 0.5, 1.25, 2.2; engine 0.15, 1.6, 2.4 | none | frame 0 readable; every read word whole inside the 5 percent margins; no face |
| 2 | 2.9-3.3 | F1 search | the noisy block dimming | 3.2: the field risen with the question, caret showing | the first key at 3.3 | the search field | rise | held, slow drift; reason: the question rises over the dim street | street, dim layer, field | the field rises, the street drifts | hero_width 83 (the field) / 16 / 3 | pillIn 2.9 | webplayer-search-en | exact placeholder; field fidelity at least 90 percent |
| 3 | 3.3-5.75 | F1 search | the field with the question | 4.6: the answer half typed, the caret after the last key (frame-2) | the last key at 5.4, the card rises at 5.75 | the typed answer | type | a drift left along the jam (scale 0.8); reason: the answer names this traffic while the viewer sees it | as 2 | 26 keys with a real cadence, the caret solid while keys come | hero_width 83 / 16 / 3 | typeStart 3.3; last key 5.4 | webplayer-search-en | letter by letter; no dead caret time |
| 4 | 5.75-7.5 | F1 search, F2 play | the field with the answer | 6.4: the Top result card risen, the pointer on its way (frame-3) | the press on the downbeat 7.5 | the green play circle | rise, press | held, slow drift; reason: the viewer follows the pointer to the circle | street, dim, field, label, card, play circle, pointer | the card rises, the pointer travels | hero_share 82 (the field and card block) / 16 / 3 | cardIn 5.75; pointer 6.2; press 7.5 | webplayer-results-playlist-en, webplayer-play-control | card fidelity at least 90 percent; "Playlist" exact |
| 5 | 7.5-9.5 | F2 play (the street playing is illustrative) | the pressed circle on the card, the interface sinking away by 7.9 | 7.95: the circle lands on the car front, HONK in coral, the car outlined in coral (strip) | the breaker joins at 9.5 | the car | press, drop, honk | held to 8.0 for the landing, then in on the hero car (scale 0.95) by 8.7; reason: follow the press into the street | sky, far skyline, street, ground pools, machines, words, circle | the car rocks and its horn waves ring on each kick | 100 / 16 / 4 | press 7.5; landing 8.0 (the second kick) | none | the lock within one frame of the beat; the circle lands on the head lamp |
| 6 | 9.5-11.5 | none | the car playing | 9.75: the breaker drilling in mint, BRRRRT, the car playing (strip) | the pile rig joins at 11.5 | the breaker | drill | to the breaker at scale 0.88 by 9.6, then a slow tilt toward the rig; reason: the new player and the hero car in one frame | as 5 | the chisel and the dust on the eighths, the car on the kick | 91 / 16 / 4 | breaker lock 9.5 | none | BRRRRT inside the margins; the machine whole |
| 7 | 11.5-13.5 | none | two machines playing | 12.03: the ram on the pile cap, a flash, dust where the pile goes in, BANG in olive (strip) | the motorbike joins at 13.5 | the pile rig | drop | tilted up (scale 0.85, 120 px) by 11.4; reason: the rig stands on the site above the breaker | as 5 | the ram on 2 and 4, the others on their parts | 100 / 16 / 4 | rig lock 11.5; hits 12.0, 13.0 | none | the mast whole in frame; olive on the ram only |
| 8 | 13.5-15.5 | none | three machines playing | 13.75: the motorbike in slate, exhaust puffs, VRRRM, all four in frame (strip) | the fill at 15.5 | the motorbike and its rider | rev | to the motorbike over the jam (scale 0.92) by 13.4; reason: the last player joins above the hero car | as 5 | puffs on the bass notes; all four on the beat | 91 / 16 / 4 | engine lock 13.5 | none | the rider in a full-face helmet with a dark visor, no face |
| 9 | 15.5-17.5 | none | four machines | 16.6: four machines on one groove, no words (strip) | the breath at 17.5 | the street | groove | all four (scale 0.73); reason: the band together | as 5, no words | every machine on its part | 100 / 16 / 4 | fill 15.5 to 17.5 | none | no word on screen; each machine moves only on its part |
| 10 | 17.5-19.5 | none | the groove | 18.6: the street dimmed and nearly still (strip) | the drop at 19.5 | the street | hold | held (declared hold) at scale 0.71; reason: the pre-drop breath | as 9 plus the dim layer | machines at 15 percent motion, a riser | 100 / 16 / 4 | breath 17.5 | none | hold declared in the cue sheet at 06 |
| 11 | 19.5-23.5 | none | the dim street | 20.2: every machine and the windows lit, the four words once more (frame-4, strongest frame) | the line at 23.5 | the whole street | light, play | a 3 percent scale kick at 19.5, all four at 0.75, then from 21.5 a travel left along the jam (scale 0.85); reason: the drop shows the whole band, then the traffic joins | as 5 plus the lit windows | machines and windows on the beat | 100 / 16 / 4 | drop 19.5 | none | light event (the drop); words for one bar only |
| 12 | 23.5-27.5 | none (the film's own line, D-34) | the street playing wide | 25.0: "Press play." over "The noise becomes the beat." in the sky over the playing street (frame-5) | the line clears at 27.1 | the line | appear, hold | pulled back to scale 0.56, 50 px lower, by 24.5; reason: open sky for the line over the whole street | sky, far skyline, street, machines, line | the street plays under the line | hero_width 44 (the second line) / 16 / 4 | line 23.5 to 27.5 | none | reads in 3.6 s (31 letters / 15 + 1.5 s); held about 3.6 s from half in to half out |
| 13 | 27.5-31.5 | F1 search | the street after the line | 29.0: the empty field over the playing street | the street and the field fade to black 31.5 to 33.0 | the field | wait | a slow push (0.55 to 0.61); reason: the question to the viewer, read in full before the black | street, dim, field | the caret blinks, the street plays | hero_width 83 / 16 / 3 | question2 27.5; black 31.5 | captures | exact placeholder; on screen 4.0 s |
| 14 | 31.5-33.5 | brand | the street and the field fading to black | 33.5: the official logo at full size, centred, on black | the final hit at 33.5 | the logo | arrive | locked; reason: the logo alone (D-44) | black, logo | the logo fades and scales as a whole (0.92 to 1.0) | logo hero_width 39 (768 px, 748 px of ink) / end card allowance / 2 (black, logo) | black 31.5 to 33.0; logo 32.5 to 33.5 (accelerating) | a1 to a6 | logo gate (R-01): official file, unaltered, green on #000000, centred, clear zone; no stroke-by-stroke drawing; no flat black frames (look.py G2) |
| 15 | 33.5-35.0 | brand | the logo landed | 34.9: the same frame | end | the logo | hold | locked (declared end hold); reason: the chord rings out, within the end hold of a text-less end card (look.py G3) | as 14 | still (declared hold, 1.5 s) | as 14 | endHit 33.5 | a1 to a6 | the last frame equals the static logo page over the whole frame (Final Frame Contract) |

Rigs for the build at 07 (code-drawn, film/js2/street.js; no character animation beyond these parts):
- The jam (D-36): four cars and vans standing bumper to bumper behind the hero car; each has a shell, a head lamp and three horn waves rising from its bonnet; in the noise each honks out of time in grey; from the drop each answers the kick on its off-beat step (6 or 14 of 16, alternating), lit coral only on its own stab, rocking 8 units.
- The rider (motorbike shot 8): one group with the motorbike; parts named in the code: helmet (a circle with a dark visor, no face), jacket (the torso leaning forward), thigh, shin, boot, the arm to the grip. The group bobs 6 units on each bass note; the parts do not move apart.
- The car: shell (coral outline once playing), head lamp, horn waves group (three arcs), wheels; the whole car rocks up 10 units on each kick.
- The road breaker: tracks, cab, boom and stick (mint once playing), breaker group with the chisel (jumps 10 units on each hit), five dust puffs at the road.
- The pile rig: crawler, cab, backstay, leader mast (grey), ram (olive once playing; drops 66 units onto the pile cap on each hit), pile with its cap going into the ground, a flash at the contact, three dust puffs where the pile goes in.
- The motorbike: frame, tank (slate once playing), head lamp, silencer, three exhaust puffs on the bass notes.

End card note (D-24, D-31): the sky above the rooftops turns pure #000000 by 29.5 and holds the logo (640 px, 33 percent of the width), the field and the required line; the whole street plays softly below. The logo is smaller than the 40 percent of the lane-grid end card because the black sky must hold the logo, its clear space, the field and the line above the rooftops: at 40 percent the field would enter the clear space or the rooftops would reach the line. frame_fill 12 of 16 sits inside the end-card allowance; depth 3 (black sky, street, logo and field).

Staging board: ice/plan/storyboard-strip-v2.png (18 stills of the real build with timings) is the stage 04 staging board for the drawn street; ice/plan/rough-board.png shows the superseded lane-grid world.

## Draft-10 changes (D-38 to D-41)
- The jam (D-40): seven vehicles in two rows: the near lane J1 (van, behind the hero), J2, J3, J4; the far lane F1 (car), F2 (van), F3 (car), drawn at 1.3 against the near lane's 1.6 for depth; the motorbike rides ahead of the far row (between it and the road works). In the noise each honks out of time; from the drop the stabs on steps 6 and 14 cycle one car per stab in the order J1, F1, F2, J2, F3, J3, J4.
- Camera (D-41): 9.5 to 11.0 a push toward the breaker (0.84 to 0.96); 11.6 to 12.8 a push toward the rig with its mast whole (0.84 to 0.88); 13.6 to 15.3 a push toward the motorbike (0.9 to 1.02); 16.4 to 17.5 out to the band and a slow drift along it.
- End card (D-39): 0.39 instead of 0.342; the logo (640 px) at y 142, the field (900 px) at y 364, the required line at y 428, the rooftops from y 507; the street brighter under the logo (dim 0.09), the windows and lamp cones pulse on the beat, the jam answers to the last hit.

## Draft-11 timing (the 07 approver return on draft-10)
The film is 35.0 s, the prompt's lower bound: the street plays under the logo from 28.5 to the last hit at 32.5, then the chord rings out to 35.0. Everything before 28.5 is as in draft-10.

## The end card from draft-12 on, as built in draft-14 (D-44 to D-46)
The end card is the official logo alone on a fully black screen: 768 px wide (40 percent), centred at y 540, entering 32.5 to 33.5 s with a fade and a 0.92 to 1.0 scale as a whole on an accelerating curve and holding unchanged from the final hit at 33.5 to 35.0 (draft-14; draft-12 landed at 32.5 and failed look.py G2 and G3; draft-13 eased out and failed G3). No street, no search field and no non-affiliation line on the end card; the film carries no non-affiliation line anywhere (D-46). The end card is a declared brand card with two layers (black, logo), under the depth floor by design (the owner's request).
