| name | scroll-film-studio |
| description | 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. |
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.