cinematic
Skill1 starsChanged 7 days agoMITView on GitHub
Designs and builds award-level, cinematic web experiences: scroll-driven 3D scenes, WebGL and three.js, shaders, choreographed scroll stories, page transitions and signature interactions, with real performance and accessibility. Use when the user asks for an immersive, cinematic, award-worthy, "Awwwards", 3D, three.js, WebGL, react-three-fiber, GSAP or scroll-driven site, scrollytelling, or "make it an experience". Also consider it when a design concept from the ui skill would clearly gain from a cinematic layer, and suggest it before building.
1 other project uses a version of this.
Adopted by
Most recently taken up by
- soilmass/motion-design-agenttheir own version, first seen Nov 8, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- soilmass/motion-design-agent★ 7same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
The file
We split this skill into the rules it gives an agent
7 rules. About 0 are common, 5 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈5
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 53
Write the experience as scenes, the way a director would:
- Distinctive: line 76
Use the cheapest tool that achieves the scene, and mix them:
- Distinctive: line 109
Keep the subject readable at phone size.
- Distinctive: line 116
Never take scroll away: keyboard, anchors, Back, find-in-page and screen readers keep working.
- Very specific: line 139
All text, navigation and actions live in the HTML, readable and usable before and without the canvas.
- Distinctive: line 158
every heading split into letters that slide up.
- Very specific: line 173
run scripts/scene-checks.js in Playwright's browser_evaluate while scrolling through every scene, also with the CPU throttled (CDP …
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Cinematic
Award-winning sites aren't defined by effects. Judges weight design 40%, usability 30%, creativity 20% and content 10%, and most entries fail on usability and speed rather than imagination. What wins is one strong idea told like a film: a story in scenes, one signature moment, real content, and motion with timing and purpose, while it still loads fast and works on a mid-range phone.
Two things decide whether it feels cinematic or generated:
- Spectacle is the point. Restraint applies to the interface chrome, not to the scene. The peak should be big: a dramatic camera move, an object coming apart, a change of light, scale that fills the screen. The budgets in step 5 are what make that affordable, not a reason to play it safe.
- The interface lives in the scene. Type, navigation, buttons and captions are composed with the 3D, the way titles are composed in a film: anchored to the same grid, styled from the concept, timed with the camera. A stock landing page laid over a canvas, with labels above its headings and a default button, undoes the scene behind it. Each frame is composed so the type has its own calm area; captions boxed in dark plates mean the frame wasn't. The chrome stays minimal: a wordmark, one action and a quiet chapter indicator, not a website's tab bar of sections.
This skill sits on top of ui: load the ui skill too and follow its process (system, research,
concept, color, motion, approval, design review), then add what's here. Before the storyboard, read
this skill's references/scroll.md, references/three.md, references/modelling.md and
references/skeleton.md with the Read tool, and from ui: creativity.md, color.md,
typography.md, anti-patterns.md and objects.md. The storyboard replaces the ui section
sequence: a fixed-canvas story is planned in scenes and shots, not in page sections, so deal its
constraints with python3 <ui skill>/scripts/direction.py --surface cinematic. Read ui's
composition.md and imagery.md only for parts of the page that scroll as ordinary HTML.
The user decides. Their wishes and references come first; this skill fills in what they left open. If they want a particular library, effect or look, build it well, even when it is one of the clichés below; say so once if you see a better option, then follow their call. When the cinematic layer is your idea rather than theirs, suggest it in a sentence (what it adds, what it costs in time and weight) and build it only if they want it.
1. Storyboard before code
The storyboard gate. The storyboard appears in your reply, together with the ui plan, before you
write any page, script or style file. "The plan is approved" or "build it" skips the approval
question, never the storyboard. Writing the scene first and describing it afterwards is not a
storyboard.
Write the experience as scenes, the way a director would:
| Scene | Scroll / trigger | What the user sees | Type area | Shot: fill and shift | What moves (camera, objects, type) | Light | Content and message | Interaction |The shot column is the SHOTS table of references/skeleton.md: fill is how much of the screen's
width the object covers, shift where it sits, on the side away from the type area. A shot with a
fill above about 0.7 is a close-up and carries at most one short line of type, in a band the object
doesn't reach. Frame by these numbers: you may never see a frame before shipping.
- An establishing scene that sets the world in the first viewport, quickly.
- Development scenes, each with one idea, each revealing something new about the subject.
- One peak: the signature moment, the thing people will screenshot or send to a friend.
- A resolution that lands on the main action (contact, buy, explore), never on a dead end.
Then name the camera language (static, dolly, orbit, crane, push-in, cut), the lighting mood and where it changes, and how scenes transition (continuous camera, match cut, wipe, morph). Get the storyboard approved with the rest of the plan.
2. Pick the lightest medium per scene
Use the cheapest tool that achieves the scene, and mix them:
| Medium | Good for |
| CSS, scroll-driven animations, View Transitions | type, layout and image choreography, page transitions |
| SVG | line, diagram and drawing effects, masks |
| Canvas 2D | generative patterns, particles in the thousands, pixel art |
| WebGL / three.js (or react-three-fiber) | real 3D objects and spaces, shaders, light |
| Video or image sequences | photoreal motion that would be too heavy to render live |
A full 3D scene for something CSS could do is a cost with no benefit.
3. Art direction for 3D
- Make the object from the subject: geometry that belongs to it (a product, a tool, a place, an
instrument), built with the recipes in
references/modelling.md(displaced, lathed, extruded, bevelled, cut, instanced) or loaded from a CC0 or user-supplied glTF. Default primitives (spheres, boxes, torus knots, icosahedra) read as placeholders, and so does a single undeformed primitive standing in for the real thing. Check every object against the craft bar inmodelling.md. - Light is the mood: an environment (
RoomEnvironmentthroughPMREMGenerator, or an HDRI) plus a deliberate key light with a soft shadow, fill and rim, or baked lighting; a contact shadow so objects stand on something; tone mapping chosen on purpose (modelling.md). - Materials with intent: one or two hero materials (rough, wet, translucent, printed), not shiny glass on everything.
- Color from the palette (
ui/references/color.md); post-processing (bloom, grain, aberration, depth of field) only where it serves the scene, and subtle. - Composition: frame each scene like a still. In the storyboard, name for every scene the area of the screen its type occupies (left third, lower band, right column) and keep the object out of that area at the scene's key frame and at the transitions into and out of it, at desktop and phone sizes; the last scene, with the main action, is where objects drift over text most often. Close-ups are the other: when the object fills the frame there is no calm area left, so a close-up shot crops the object to one side of the screen and keeps the other side for the type, or carries no more than one short line in a band the object doesn't reach. Keep the subject readable at phone size.
4. Scroll as the timeline
See references/scroll.md. In short:
- Scroll drives progress through a scene, not only triggers. Scrub with a little smoothing.
- Pin sparingly, and only when the user can tell how long it lasts (progress, chapters).
- Never take scroll away: keyboard, anchors, Back, find-in-page and screen readers keep working. Smooth-scroll libraries are optional and must not break them.
- Mobile gets its own choreography, designed for touch and a small, tall screen, not the desktop version shrunk.
5. Performance is part of the design
See references/three.md, and start from the skeleton in references/skeleton.md (pinned
versions, resize, pause, render on demand, reduced motion, context loss, disposal). Budgets to
design against, stricter than Google's "good" thresholds (LCP 2.5 s, INP 200 ms) on purpose,
because a scene adds load:
- Load: LCP under about 2 s, first meaningful content without waiting for WebGL, page weight under about 3 MB before optional assets.
- Frame rate: a steady 60 fps on a mid-range phone, and no long main-thread tasks while scrolling (INP under about 100 ms).
- Show the HTML content first, then initialize the scene. Pause rendering when it's offscreen or the tab is hidden, and render on demand when nothing moves.
- Loading without a countdown: the HTML and a poster still of the first scene show at once; the scene fades in over the poster when its first frame is ready; heavy assets stream in after the first scene is visible. No percentage counter.
6. Content and access first
- All text, navigation and actions live in the HTML, readable and usable before and without the
canvas. The canvas is decoration (
aria-hidden) or has a text equivalent. - Reduced motion: a composed still or a calm version of each scene, with no camera moves, parallax or scrubbing. Still beautiful, not a broken page.
- No WebGL or a weak device: a designed fallback (poster image, video or 2D version), chosen by capability and measured frame rate, not by user agent.
- Text over moving scenes keeps its contrast at every frame; give it a calm area or its own surface.
A fixed header over the scene needs a backing once anything scrolls beneath it (a translucent
surface with
backdrop-filterblur, or a scrim), checked at the brightest, busiest frame; see the ui skill'sreferences/depth.md. - Sound only on request, with a visible toggle, never autoplay.
7. Clichés
These are the generated or template versions of cinematic. Avoid them unless the user asks:
- the particle sphere, orbiting rings, glowing network nodes, starfield or warp tunnel;
- a floating glass blob, torus knot or chrome object with no relation to the subject;
- bloom, chromatic aberration and film grain on everything at once;
- a preloader that counts from 0 to 100%;
- every heading split into letters that slide up; horizontal scroll sections with no reason;
- magnetic buttons, custom blob cursors and image-distortion hovers everywhere;
- scroll hijacking that makes the page feel slower than native.
A loader, cursor or horizontal section is fine when it is part of the story; the cliché is using it because sites like this usually have one.
8. Validate
First the ui design review (always): render each scene's key frame at desktop and phone width,
compare it with the storyboard, and push the weakest two scenes, twice. Scroll programmatically to
each scene's progress point before the screenshot.
Then use the validation choice from ui (ask, or follow the saved preference). In addition to its
checks:
- run
scripts/scene-checks.jsin Playwright'sbrowser_evaluatewhile scrolling through every scene, also with the CPU throttled (CDPEmulation.setCPUThrottlingRate, rate 4) and at a phone-sized viewport. It first reports which renderer the browser uses: headless browsers usually render WebGL in software (SwiftShader), and then frame rates mean nothing; report draw calls, triangles, long tasks and the structure checks instead, and say the fps needs a real device. Open the page with?debugso it also reportstextOverObject: every point in the scroll where a heading, caption or button sits inside the object's screen area. Fix each one by changing that shot's fill or shift; a dark plate behind the text is not the fix; - Lighthouse for load metrics;
- the reduced-motion (
browser_emulate_media) and no-WebGL versions, scene by scene; - a screenshot of each scene's key frame, checked against the storyboard.
Report the measured numbers, not impressions.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

