162c8a23788fcf7c1ae35c11e294322a403adb5b
2 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
8a6601dfce |
Re-cut the Motion films in landscape, and hold the camera still
THE FORMAT. The first pair were vertical. That was wrong for this product: PIG is a desktop application, and reframing it 9:16 either shrinks it past reading or crops away the sidebar and half the table. These are 1920x1080, like the five already on the page, and the app is filmed at a real 1920 desktop viewport — the previous renderer set the viewport to 960 and captured at 2x, which produced a 1920px image of the COLLAPSED layout, because the viewport is what the product responds to and the scale factor is only how much detail there is to zoom into. THE CAMERA. It now holds still, and eases in on the thing the narration is naming, holds, and eases back out — the way Cap zooms toward a click. The first cut drifted a slow zoom across every shot, which reads as restless rather than as emphasis and is the thing people mean when they call a screen recording annoying. Six of fourteen shots move in the customer film; the rest are locked off. The curve is a smoothstep either side of a hold, written as a function of the frame number rather than accumulated through zoompan's own `zoom` variable, which refers to the previous frame and drifts off its endpoints. Zoom targets are chosen as the SMALLEST element already in frame, not the last match in document order. That was wrong in a way only a long page shows: the Halcyon engagement prints the same phrases twice — once in the score note and again inside the artefact bodies below — so "kappa 0.54" resolved to a paragraph two and a half thousand pixels below the fold that no amount of scrolling would reveal, because an ancestor clips it. Preferring what is on screen keeps the zoom inside the frame the shot chose; preferring the smallest match makes naming a figure land on the figure rather than on the card around it. THE SCRIPTS were rewritten from nothing through a judge panel — three independent angles each, scored on hook, concreteness, ear, tension and ending, then synthesised and adversarially checked against the running product. The second film is the one that was asked for: one customer, end to end. Halcyon Research, scored 52.8 and scope down on the day of first discovery because nothing had been measured, through legal and scoping and a budget path, to 82.8 and build once the verifier, the baseline and the environment landed — and the two dimensions that fell inside that same twenty-five point rise. It closes on the week-two dev split reading under its trajectory, because the honest thing about that record is that the gate might not be met and it says so before anyone asks. It runs 68 seconds; a feature tour is 30 and a story is not. |
||
|
|
e0473e7258 |
Cut two vertical Motion films, and write down the pipeline that makes them
THE PIPELINE. The five existing platform videos were cut by an ad-hoc process that was never committed, so the first time the UI moved nobody could re-shoot them — which is the same failure `scripts/screenshots.mjs` was written to stop. `scripts/learn-film.mjs` is that pipeline, and it reuses both of the screenshot script's hard-won lessons: the appearance preference is stored server-side and adopted after hydration, so the theme has to be forced by rewriting the profile response rather than by seeding localStorage; and per-device layout state has to be pinned or the framing is whatever a human last left behind. Order is load-bearing. The narration is rendered first and its MEASURED duration drives every shot length, because a shot list timed by guess leaves the narrator talking over a frozen frame. Shot durations are then proportional to the words spoken over them, so the cut lands on the sentence. Typography is composed in the browser rather than in ffmpeg. The product's face is Manrope Variable and drawtext would have fallen back to DejaVu, which reads as a different company. Playwright renders a transparent chrome layer per shot and ffmpeg only moves pixels. Detail shots crop to the content column rather than the whole viewport. The first attempt cropped a box around the element being talked about, which is narrower than the column, so it sliced the cards either side of centre and the frame read as broken rather than as close. Width first, height from the aspect. CRF is 22, not 18. The frame is a static UI with a slow zoom, and 18 spent 3.7 Mbps — a 15 MB download for a video whose whole point is that somebody opens it on a phone between meetings. THE STAGE RAIL BUG, which the films found. Every stage label was losing its last letters — "QUALIFICATIO", "PROCUREMEN" — with no ellipsis to show for it. Three attempts to fix that by widening the card did nothing, because the card was never the thing being measured: the LI holding it had `min-w-0` and no `shrink-0`, so it took its flex share of 88px while the card inside stayed 160, and every card was overpainted by the next one. The DOM reported no overflow the whole time, because there wasn't any — the clipping was one level up. `shrink-0` moves to the LI, where it belongs, and the rail scrolls as it was always meant to. The labels also wrap rather than truncate now: they are a fixed vocabulary of eight words we control, and losing a letter is worse than taking a line. THE FILMS. Two 9:16 clips for the team, narrated in Karti's cloned voice through Chatterbox at 1.20x and scored with the platform's own ambient bed, ducked and loudness-normalised so they do not jump against the five already on the page. Both open dark and switch to light at the midpoint. Shot lists live beside the narration in `docs/learn-films/`, because a script and its shot list timed against each other are one object and splitting them is how they drift. |