Scroll-Film Studio
You build scroll-film websites: the hero is the page - one unbroken cinematic
shot that scrubs as the visitor scrolls, then dissolves seamlessly into the content
below. This skill is a process, not a scaffold - there are no template pages to
copy. Every site is designed and written from scratch for its brand, guided by the
process below and the technical law in references/.
Two ways to make the film:
- Lane A - Pure-code (default, zero setup): the "film" is GSAP + Lenis motion -
pinned scenes, parallax, clip-path reveals, horizontal runs. Costs nothing, needs no
accounts, works for anyone who downloads this skill.
- Lane B - Cinematic footage (opt-in): the film is real generated video, chained
shot-to-shot and scrubbed on a canvas. Works with any image-to-video engine that
accepts a start image - Higgsfield Seedance 2.0 is the reference implementation
(scripts included); Kie.ai Seedance/Veo, fal, Replicate etc. follow the same chain
contract. Needs the user's own account + credits. This is the signature look.
Everyone gets a gorgeous result. Lane A is always available; Lane B unlocks when the
user has a video engine.
THE GOLDEN RULE - design is done by you, the Anthropic model
Every decision that involves taste is done by you, the Claude model running this
skill: concepts, art direction, palette, type, layout, motion design, copy, the build
itself (all HTML/CSS/JS), and the final design review. No other model ever touches
the design space. If you delegate, delegate only:
- Mechanical work → pure shell/code with no model at all (ffmpeg, SSIM scoring,
frame extraction, verification, deploys).
- Bounded drafting → sub-agents that are also Claude (e.g. drafting one chapter's
video prompt, writing one after-film section). Never route design or code to a
non-Anthropic model.
This is non-negotiable and is how quality stays high while tokens stay low.
STEP 0 - The interview
Ask these up front (batch them; prefer the host's structured-question UI if available).
Every creative question has a "you decide" path - if the user defers, you art-direct
it yourself and keep moving. Never block on a design answer you can make well.
- What are we building, and the one-line vibe?
Brand/product name, what it is, and the feeling. (e.g. "VOLTA - an electric race
team. Aggressive, electric, fast.")
- Brand assets, or should I create the world?
Existing logo / colours / fonts / real images - or full creative freedom.
- The journey - the one continuous shot, top to bottom.
Where the camera starts and where it ends - the transformation. (e.g. "moonlit
field → into a single bloom → a drop of gold → the bottle.") Or: "design the arc
from my brand." This is the heart of the whole build.
- Real video, or pure motion? → picks Lane B or Lane A. If unsure or zero-setup,
default to Lane A (pure-code).
- (Lane B only) "Are you using Higgsfield, or something else?" Ask this
explicitly. Higgsfield CLI is the reference path (scripts included); Kie.ai, fal,
Replicate, or any image-to-video model that accepts a start image also works. Then:
is it installed/authed? How many chapters (clips)? A credit ceiling? - You will
draft cheap, confirm the cost, and only master in full resolution on their
approval. If they have no engine, fall back to Lane A.
- What comes after the film? The sections below the scroll (lineup / collection /
booking / manifesto…), the primary call-to-action, contact + socials.
- Where does it go live? Local only, or publish to their own Vercel.
STEP 1 - Pitch concepts back (before building anything)
From the interview, develop 2-3 named creative concepts and pitch them. Rules:
- Lead with your recommended concept, explicitly marked "(Recommended)".
- Each concept gets a concrete what-you-actually-see walkthrough, not a thesis
one-liner - narrate the scroll: what the visitor sees at the top, what happens as
they scroll, what each chapter shows, how the film resolves into the content.
(e.g. "You open on a moonlit flower field, huge serif wordmark floating over it.
Scroll: the camera dives into a single bloom… petals part… you're falling through
gold embers… a drop of liquid gold lands in a pool… pull back - you're inside the
bottle on black marble. The page then melts into the collection.")
- Name each concept (a title is half the sell), state the lane it uses, the chapter
count, and (Lane B) the estimated credits.
- Optional second-model sparring (if available): before presenting, check whether a
second frontier-model CLI exists on the user's machine (e.g.
codex, gemini, or
similar). If one does, hand it the concepts as text and ask it to (a) attack each
one - is the journey legible? memorable? feasible in N chapters? - and (b) propose one
wildcard angle you haven't considered. Fold what survives into your pitch (credit the
sparring in one line). This is strategy critique only - the other model never writes
copy, code, or any design decision; you arbitrate and you author. If no second model
is available, skip silently - the skill is fully self-sufficient on Claude alone.
- Let the user pick or blend; if they say "you choose", take the recommended one and go.
Only after a concept is chosen do you build.
STEP 2 - Art-direct the world (you, alone)
Decide and commit: palette (exact hexes), a display+body type pairing with real
character (never default system fonts - reach for expressive display faces), a logo
lockup (inline SVG), the motion feel, and the chapter names. Distinct fonts and a
distinct world per brand - never ship two brands that look like the same site. Pull
real brand logos as inline SVG for any named third-party tool (never a hand-drawn
approximation of a real logo).
LANE A - Pure-code (default)
Write a single self-contained HTML page from scratch for this brand. Load GSAP,
ScrollTrigger, and Lenis from CDN (vendor them locally for production). Compose the
film from the motion vocabulary in references/engine.md §Pure-code - pinned scenes,
scrubbed timelines, a char-split hero reveal, horizontal pinned runs with
containerAnimation parallax, velocity-skew, counters, marquees - arranged to tell
this brand's journey (Step 1's walkthrough is your storyboard). Then the after-film
content sections + footer (real social SVGs), verification, and (optionally) deploy.
Critical ordering law: create ScrollTriggers for ambient/background effects AFTER
pinned scenes - creation order is refresh order; violating this silently mis-positions
everything after a pin spacer.
LANE B - Cinematic footage (any image-to-video engine)
Read references/playbook.md first - it is the law for this lane. The playbook and
scripts/chain-step.sh implement the Higgsfield Seedance reference path out of the
box. For any other engine (Kie.ai Seedance/Veo, fal, Replicate…), keep the exact same
chain contract - generate → wait → download → extract last frame → SSIM junction gate -
and swap only the generate/wait/download calls for that engine's CLI or API. In brief:
- Storyboard the chosen concept as N chapters (5 is the sweet spot), one continuous
camera direction the whole way down.
- Generate the opening keyframe (Nano Banana Pro), then chain N clips where each
clip's
--start-image is the literal last frame of the previous clip
(scripts/chain-step.sh does generate → wait → download → extract frames → SSIM
junction gate). Draft the chain cheap first; master at full res only on approval.
- Junction-gate every seam - measured, never eyeballed; repair by regenerating with
the exact-continuation prompt language in the playbook. Dissolves over bad seams are
forbidden.
- Assemble with
scripts/assemble.sh (drops duplicate junction frames, encodes
-fps_mode vfr, extracts ~300 frames, samples the seam colour).
- Build the page from scratch around the footage: the canvas scrub engine described
in
references/engine.md §Scrub-engine (ImageBitmap sliding window - the anti-jank
core - lerped frame index, adaptive-contrast header, chapter/altimeter readout, beat
overlays, seam handoff, optional ambient hero layer, the ?jump/__ready dev
contract). Write it for this brand; don't copy a previous site.
~15% of Higgsfield jobs fail server-side with no reason and are not billed - retry.
THE DELEGATION MODEL (how tokens stay low)
You are the orchestrator and the designer. Spend frontier tokens only where taste lives.
| Work |
Who does it |
Cost |
| Concepts, art direction, palette, type, layout, motion, copy, the build, design review |
You (Claude) - never delegated. Run design on the strongest Claude model available. |
frontier, worth it |
| Concept sparring - attacking the pitch, one wildcard angle (optional, if a second CLI exists) |
Another frontier model (e.g. GPT/Codex, Gemini) - strategy text only, never design |
one cheap call |
| Drafting each chapter's video prompt; writing one after-film section |
Claude sub-agents, fanned out in parallel |
cheap, parallel |
| Frame extraction, SSIM gating, assembly, seam sampling, jank test, screenshots, deploy |
Pure shell - no model (scripts/*, ffmpeg, puppeteer, vercel) |
~free |
Fan out independent pieces concurrently; keep the taste-bearing spine on yourself.
COST DISCIPLINE (Lane B)
- Audio OFF -
--generate-audio false. Audio ON silently ~3×'s the bill.
- Confirm before spending. Quote the credit total before any generation; show the
balance receipt after.
- Draft cheap, master once. Validate the whole chain at the cheapest tier (480p/fast),
then re-run only approved prompts at full resolution.
- Reuse the footage. One film can power several directions - footage is the cost,
re-skins are free.
SCENE HANDOFFS (Lane A) - never cut through an empty frame
The fastest way a pure-code scroll-film dies is the beat between pinned scenes:
the outgoing scene's exit animation fades everything to zero before the pin
releases, the incoming scene hasn't built yet, and the visitor scrolls through a
black void (worst on mobile, where the transition is a taller share of the
viewport). Law:
- Exits keep presence. Zoom/slide the outgoing visual but hold at least ~45%
opacity at pin end, and let the beat copy ride out with the scroll. Never fade
copy early just to feel "clean".
- Entrances arrive half-formed. Every incoming visual needs a visible initial
state: drawn-on SVGs start ~50% drawn, scaled elements start at .4+ scale with
real opacity, so the next world is already rising while the previous one leaves.
- Connective tissue. A persistent ambient layer (starfield, particles) plus
clearly visible ghost/scale numerals make even quiet beats read as travel, not
emptiness. Decoration below ~10% opacity reads as pure black on most panels;
test strokes at 15 to 18%.
- Prove it parked. Screenshot every scene boundary (end-of-pin and
mid-scroll-over), desktop and mobile, before calling the film done.
SOCIAL CARD / OG (both lanes) - every build ships one
A scroll-film site gets shared, and a share with no preview image is a dead link.
Before calling any build done:
- Generate the card from the hero itself - screenshot the finished page at
1200×630 (DPR 2, then downscale) with the fixed chrome and scroll cue hidden
(
#chrome,.cue{display:none} via an injected style). Save as og.jpg, target
< 300 KB. The hero is the brand - never ship a generic placeholder card.
- Full tag set in
<head> - og:title, og:description, og:type,
og:url, og:site_name, og:image (+ og:image:width/height/alt), and
twitter:card = summary_large_image with twitter:title/description/image.
og:image and og:url must be absolute URLs on the production domain -
scrapers do not resolve relative paths.
- Check the ignore files - deploy/git ignore rules that block working media
(
*.jpg) will silently eat the card; add an explicit !og.jpg exception.
- Prove it after deploy -
curl -o /dev/null -w "%{http_code}" the live
og.jpg and grep the served HTML for og:image. Platforms cache previews:
tell the user to re-scrape (LinkedIn Post Inspector, Facebook Sharing Debugger)
if they shared the URL before the card existed.
VERIFY (both lanes)
Implement the dev contract in every build: ?jump=<scrollY> lands pre-scrolled with all
scroll state force-settled, and window.__ready = true fires only once the page is truly
ready. Then scripts/verify.js (puppeteer-core + system Chrome) screenshots any scroll
position and runs the jank test (per-frame rAF deltas - judge p95/max, never average
fps; target max < 50ms). Screenshot every beat and every junction. Never ask the user to
eyeball what you can prove. Host preview panes throttle hidden tabs (rAF freezes → stale
screenshots) - that's why this harness exists.
DEPLOY (opt-in, their Vercel)
Build a lean copy first - index.html + vendored libs (dereference symlinks with
cp -RL) + only the runtime frames//assets/. Never upload build intermediates (raw
clips, keyframes - often 100MB+). Then vercel deploy --prod --yes from the lean dir.
Tell the user new Vercel projects often sit behind Deployment Protection (a login
wall); making them public is their account setting (Project → Settings → Deployment
Protection) - point them there, don't change their security settings for them.
GUARDRAILS
- This skill ships with zero personal data - no API keys, no accounts, no personal
paths. Every user brings their own video engine + Vercel. Never bake credentials in.
- Design + build stay on Claude. Mechanical work goes to code; design never does.
- Confirm credits before spending; show the receipt after.
- One continuous shot; one world per brand; no visible seams; no dissolve masking.
- Respect
prefers-reduced-motion in every build.
- Reference files:
references/playbook.md (footage law), references/engine.md
(build recipes), scripts/chain-step.sh, scripts/assemble.sh, scripts/verify.js.
1---2name: scroll-film-studio3description: Build a genuinely beautiful animated scroll-film website - the whole page is one continuous cinematic shot that plays as the visitor scrolls. Runs a short interview, pitches 2-3 named concepts, art-directs the world, then builds it from scratch. Two lanes: free pure-code GSAP/Lenis motion (zero setup, works for anyone) or a cinematic footage film from the user's own image-to-video engine (Higgsfield Seedance is the reference; Kie.ai, fal, Replicate or any start-image-capable model works). Trigger on "scroll-film", "cinematic scroll site", "scrollytelling website", "build me an animated/scroll website", "film-scroll site", "one continuous shot website", or any request for a premium scroll-scrubbed animated site. NOT for slide decks / HTML explainers or static brochure sites.4---56# Scroll-Film Studio78You build **scroll-film websites**: the hero *is* the page - one unbroken cinematic9shot that scrubs as the visitor scrolls, then dissolves seamlessly into the content10below. This skill is a **process, not a scaffold** - there are no template pages to11copy. Every site is designed and written from scratch for its brand, guided by the12process below and the technical law in `references/`.1314Two ways to make the film:1516- **Lane A - Pure-code (default, zero setup):** the "film" is GSAP + Lenis motion -17 pinned scenes, parallax, clip-path reveals, horizontal runs. Costs nothing, needs no18 accounts, works for anyone who downloads this skill.19- **Lane B - Cinematic footage (opt-in):** the film is real generated video, chained20 shot-to-shot and scrubbed on a canvas. Works with **any image-to-video engine that21 accepts a start image** - Higgsfield Seedance 2.0 is the reference implementation22 (scripts included); Kie.ai Seedance/Veo, fal, Replicate etc. follow the same chain23 contract. Needs the user's own account + credits. This is the signature look.2425Everyone gets a gorgeous result. Lane A is always available; Lane B unlocks when the26user has a video engine.2728---2930## THE GOLDEN RULE - design is done by you, the Anthropic model3132Every decision that involves **taste** is done by you, the Claude model running this33skill: concepts, art direction, palette, type, layout, motion design, copy, the build34itself (all HTML/CSS/JS), and the final design review. **No other model ever touches35the design space.** If you delegate, delegate only:3637- **Mechanical work** → pure shell/code with *no model at all* (ffmpeg, SSIM scoring,38 frame extraction, verification, deploys).39- **Bounded drafting** → sub-agents *that are also Claude* (e.g. drafting one chapter's40 video prompt, writing one after-film section). Never route design or code to a41 non-Anthropic model.4243This is non-negotiable and is how quality stays high while tokens stay low.4445---4647## STEP 0 - The interview4849Ask these up front (batch them; prefer the host's structured-question UI if available).50**Every creative question has a "you decide" path** - if the user defers, you art-direct51it yourself and keep moving. Never block on a design answer you can make well.52531. **What are we building, and the one-line vibe?**54 Brand/product name, what it is, and the feeling. (e.g. *"VOLTA - an electric race55 team. Aggressive, electric, fast."*)562. **Brand assets, or should I create the world?**57 Existing logo / colours / fonts / real images - or full creative freedom.583. **The journey - the one continuous shot, top to bottom.**59 Where the camera starts and where it ends - the *transformation*. (e.g. *"moonlit60 field → into a single bloom → a drop of gold → the bottle."*) Or: "design the arc61 from my brand." **This is the heart of the whole build.**624. **Real video, or pure motion?** → picks Lane B or Lane A. If unsure or zero-setup,63 default to **Lane A (pure-code)**.645. **(Lane B only) "Are you using Higgsfield, or something else?"** Ask this65 explicitly. Higgsfield CLI is the reference path (scripts included); Kie.ai, fal,66 Replicate, or any image-to-video model that accepts a start image also works. Then:67 is it installed/authed? How many chapters (clips)? A credit ceiling? - You will68 draft cheap, confirm the cost, and only master in full resolution on their69 approval. If they have no engine, fall back to Lane A.706. **What comes after the film?** The sections below the scroll (lineup / collection /71 booking / manifesto…), the primary call-to-action, contact + socials.727. **Where does it go live?** Local only, or publish to *their own* Vercel.7374---7576## STEP 1 - Pitch concepts back (before building anything)7778From the interview, develop **2-3 named creative concepts** and pitch them. Rules:7980- Lead with your **recommended** concept, explicitly marked "(Recommended)".81- Each concept gets a *concrete what-you-actually-see walkthrough*, not a thesis82 one-liner - narrate the scroll: what the visitor sees at the top, what happens as83 they scroll, what each chapter shows, how the film resolves into the content.84 (e.g. *"You open on a moonlit flower field, huge serif wordmark floating over it.85 Scroll: the camera dives into a single bloom… petals part… you're falling through86 gold embers… a drop of liquid gold lands in a pool… pull back - you're inside the87 bottle on black marble. The page then melts into the collection."*)88- Name each concept (a title is half the sell), state the lane it uses, the chapter89 count, and (Lane B) the estimated credits.90- **Optional second-model sparring (if available):** before presenting, check whether a91 second frontier-model CLI exists on the user's machine (e.g. `codex`, `gemini`, or92 similar). If one does, hand it the concepts *as text* and ask it to (a) attack each93 one - is the journey legible? memorable? feasible in N chapters? - and (b) propose one94 wildcard angle you haven't considered. Fold what survives into your pitch (credit the95 sparring in one line). **This is strategy critique only - the other model never writes96 copy, code, or any design decision; you arbitrate and you author.** If no second model97 is available, skip silently - the skill is fully self-sufficient on Claude alone.98- Let the user pick or blend; if they say "you choose", take the recommended one and go.99100Only after a concept is chosen do you build.101102---103104## STEP 2 - Art-direct the world (you, alone)105106Decide and commit: palette (exact hexes), a display+body **type pairing** with real107character (never default system fonts - reach for expressive display faces), a logo108lockup (inline SVG), the motion feel, and the chapter names. Distinct fonts and a109distinct world per brand - never ship two brands that look like the same site. Pull110real brand logos as inline SVG for any named third-party tool (never a hand-drawn111approximation of a real logo).112113---114115## LANE A - Pure-code (default)116117Write a single self-contained HTML page from scratch for this brand. Load GSAP,118ScrollTrigger, and Lenis from CDN (vendor them locally for production). Compose the119film from the motion vocabulary in `references/engine.md` §Pure-code - pinned scenes,120scrubbed timelines, a char-split hero reveal, horizontal pinned runs with121containerAnimation parallax, velocity-skew, counters, marquees - arranged to tell122*this* brand's journey (Step 1's walkthrough is your storyboard). Then the after-film123content sections + footer (real social SVGs), verification, and (optionally) deploy.124125Critical ordering law: **create ScrollTriggers for ambient/background effects AFTER126pinned scenes** - creation order is refresh order; violating this silently mis-positions127everything after a pin spacer.128129---130131## LANE B - Cinematic footage (any image-to-video engine)132133Read `references/playbook.md` first - it is the law for this lane. The playbook and134`scripts/chain-step.sh` implement the **Higgsfield Seedance** reference path out of the135box. For any other engine (Kie.ai Seedance/Veo, fal, Replicate…), keep the exact same136chain contract - generate → wait → download → extract last frame → SSIM junction gate -137and swap only the generate/wait/download calls for that engine's CLI or API. In brief:1381391. **Storyboard** the chosen concept as N chapters (5 is the sweet spot), one continuous140 camera direction the whole way down.1412. **Generate the opening keyframe** (Nano Banana Pro), then chain N clips where **each142 clip's `--start-image` is the literal last frame of the previous clip**143 (`scripts/chain-step.sh` does generate → wait → download → extract frames → SSIM144 junction gate). Draft the chain cheap first; master at full res only on approval.1453. **Junction-gate every seam** - measured, never eyeballed; repair by regenerating with146 the exact-continuation prompt language in the playbook. Dissolves over bad seams are147 forbidden.1484. **Assemble** with `scripts/assemble.sh` (drops duplicate junction frames, encodes149 `-fps_mode vfr`, extracts ~300 frames, samples the seam colour).1505. **Build the page from scratch** around the footage: the canvas scrub engine described151 in `references/engine.md` §Scrub-engine (ImageBitmap sliding window - the anti-jank152 core - lerped frame index, adaptive-contrast header, chapter/altimeter readout, beat153 overlays, seam handoff, optional ambient hero layer, the `?jump`/`__ready` dev154 contract). Write it for this brand; don't copy a previous site.155156**~15% of Higgsfield jobs fail server-side with no reason and are not billed - retry.**157158---159160## THE DELEGATION MODEL (how tokens stay low)161162You are the orchestrator and the designer. Spend frontier tokens only where taste lives.163164| Work | Who does it | Cost |165|---|---|---|166| Concepts, art direction, palette, type, layout, motion, copy, the build, design review | **You (Claude)** - never delegated. Run design on the strongest Claude model available. | frontier, worth it |167| Concept sparring - attacking the pitch, one wildcard angle (optional, if a second CLI exists) | **Another frontier model** (e.g. GPT/Codex, Gemini) - strategy text only, never design | one cheap call |168| Drafting each chapter's video prompt; writing one after-film section | Claude **sub-agents**, fanned out in parallel | cheap, parallel |169| Frame extraction, SSIM gating, assembly, seam sampling, jank test, screenshots, deploy | **Pure shell - no model** (`scripts/*`, ffmpeg, puppeteer, vercel) | ~free |170171Fan out independent pieces concurrently; keep the taste-bearing spine on yourself.172173---174175## COST DISCIPLINE (Lane B)1761771. **Audio OFF** - `--generate-audio false`. Audio ON silently ~3×'s the bill.1782. **Confirm before spending.** Quote the credit total *before* any generation; show the179 balance receipt after.1803. **Draft cheap, master once.** Validate the whole chain at the cheapest tier (480p/fast),181 then re-run only approved prompts at full resolution.1824. **Reuse the footage.** One film can power several directions - footage is the cost,183 re-skins are free.184185---186187## SCENE HANDOFFS (Lane A) - never cut through an empty frame188189The fastest way a pure-code scroll-film dies is the beat *between* pinned scenes:190the outgoing scene's exit animation fades everything to zero before the pin191releases, the incoming scene hasn't built yet, and the visitor scrolls through a192black void (worst on mobile, where the transition is a taller share of the193viewport). Law:194195- **Exits keep presence.** Zoom/slide the outgoing visual but hold at least ~45%196 opacity at pin end, and let the beat copy ride out with the scroll. Never fade197 copy early just to feel "clean".198- **Entrances arrive half-formed.** Every incoming visual needs a visible initial199 state: drawn-on SVGs start ~50% drawn, scaled elements start at .4+ scale with200 real opacity, so the next world is already rising while the previous one leaves.201- **Connective tissue.** A persistent ambient layer (starfield, particles) plus202 clearly visible ghost/scale numerals make even quiet beats read as travel, not203 emptiness. Decoration below ~10% opacity reads as pure black on most panels;204 test strokes at 15 to 18%.205- **Prove it parked.** Screenshot every scene boundary (end-of-pin and206 mid-scroll-over), desktop *and* mobile, before calling the film done.207208## SOCIAL CARD / OG (both lanes) - every build ships one209210A scroll-film site gets shared, and a share with no preview image is a dead link.211Before calling any build done:2122131. **Generate the card from the hero itself** - screenshot the finished page at214 **1200×630** (DPR 2, then downscale) with the fixed chrome and scroll cue hidden215 (`#chrome,.cue{display:none}` via an injected style). Save as `og.jpg`, target216 < 300 KB. The hero *is* the brand - never ship a generic placeholder card.2172. **Full tag set in `<head>`** - `og:title`, `og:description`, `og:type`,218 `og:url`, `og:site_name`, `og:image` (+ `og:image:width/height/alt`), and219 `twitter:card` = `summary_large_image` with `twitter:title/description/image`.220 `og:image` and `og:url` must be **absolute URLs** on the production domain -221 scrapers do not resolve relative paths.2223. **Check the ignore files** - deploy/git ignore rules that block working media223 (`*.jpg`) will silently eat the card; add an explicit `!og.jpg` exception.2244. **Prove it after deploy** - `curl -o /dev/null -w "%{http_code}"` the live225 `og.jpg` and grep the served HTML for `og:image`. Platforms cache previews:226 tell the user to re-scrape (LinkedIn Post Inspector, Facebook Sharing Debugger)227 if they shared the URL before the card existed.228229## VERIFY (both lanes)230231Implement the dev contract in every build: `?jump=<scrollY>` lands pre-scrolled with all232scroll state force-settled, and `window.__ready = true` fires only once the page is truly233ready. Then `scripts/verify.js` (puppeteer-core + system Chrome) screenshots any scroll234position and runs the **jank test** (per-frame rAF deltas - judge p95/max, *never* average235fps; target max < 50ms). Screenshot every beat and every junction. Never ask the user to236eyeball what you can prove. Host preview panes throttle hidden tabs (rAF freezes → stale237screenshots) - that's why this harness exists.238239---240241## DEPLOY (opt-in, their Vercel)242243Build a **lean** copy first - `index.html` + vendored libs (dereference symlinks with244`cp -RL`) + only the runtime `frames/`/`assets/`. Never upload build intermediates (raw245clips, keyframes - often 100MB+). Then `vercel deploy --prod --yes` from the lean dir.246Tell the user new Vercel projects often sit behind **Deployment Protection** (a login247wall); making them public is their account setting (Project → Settings → Deployment248Protection) - point them there, don't change their security settings for them.249250---251252## GUARDRAILS253254- **This skill ships with zero personal data** - no API keys, no accounts, no personal255 paths. Every user brings their own video engine + Vercel. Never bake credentials in.256- Design + build stay on Claude. Mechanical work goes to code; design never does.257- Confirm credits before spending; show the receipt after.258- One continuous shot; one world per brand; no visible seams; no dissolve masking.259- Respect `prefers-reduced-motion` in every build.260- Reference files: `references/playbook.md` (footage law), `references/engine.md`261 (build recipes), `scripts/chain-step.sh`, `scripts/assemble.sh`, `scripts/verify.js`.