Agent skill

Horizontal Scroll Scenes

by MengTo in MengTo/Skills

Build scene-by-scene chapters that advance left to right on one fixed stage while the user scrolls vertically, with native scroll as the only input.

MITAuto-check passedFrontend & Design

Install Horizontal Scroll Scenes

skills CLI
$ npx skills add MengTo/Skills --skill horizontal-scroll-scenes -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install MengTo/Skills horizontal-scroll-scenes --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/MengTo/Skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/agent-skills/web-design/horizontal-scroll-scenes .claude/skills/horizontal-scroll-scenes && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
horizontal-scroll-scenes
GitHub stars
6.6k
Token cost
~2.5k tokens
SKILL.md length
1,372 words
Files
5
Skills in repo
39
Repo updated
First seen
Licence
MIT

At a glance

Build scene-by-scene chapters that advance left to right on one fixed stage while the user scrolls vertically, with native scroll as the only input.

  • Works in 12 steps: Derive, do not accumulate. Never keep… → No wheel hijack, no scroll-snap.… → Pin the craft clock outside its dwell.… → …
  • Horizontal scrollytelling
  • SKILL.md covers The pace: two weights and a…, Rules, each with the failure…, Accessibility and lifecycle and Cost, measured, plus 2 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Horizontal Scroll Scenes is an agent skill from MengTo/Skills. Build scene-by-scene chapters that advance left to right on one fixed stage while the user scrolls vertically, with native scroll as the only input. One pure function turns scrollY into scene, dwell and move, so forward, reverse, scrollbar drags, fast skips and reload at depth all land on the right frame. Covers dwell versus transition budgets, a burn-wipe or pan between scenes, chapter index and progress UI, glide-to-scene links that skip intermediate scenes, keyboard and reduced-motion behaviour. Use for…

Its SKILL.md is about 2.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files (for example `PROMPT.md` and `agents/openai.yaml`).

It sits in Frontend & Design. The repository describes itself as: Agent skills for designers and builders using Codex, Claude, Cursor, and other AI coding agents. The licence is MIT.

When your agent uses it

  • Horizontal scrollytelling
  • Multi-scene product tours
  • Scroll down to travel sideways
  • Chapter carousels driven by the wheel

Example prompts

  • “scroll down to travel sideways”
  • “/horizontal-scroll-scenes”

Workflow steps

12 steps, taken from the first numbered list in SKILL.md.

  1. Derive, do not accumulate. Never keep currentScene or add wheel deltas. Stored state desyncs on scrollbar drag, Home/End, anchor jumps…
  2. No wheel hijack, no scroll-snap. Hijacking breaks touch, trackpad momentum, Space/PageDown and find-in-page. Snap fights the dwell, which…
  3. Pin the craft clock outside its dwell. Scene k's progress is 1 if k < i, dw if k == i, 0 after. Then nothing snaps back behind you and…
  4. A move with nothing moving is dead scroll. Start the line at the frame's edge almost at once (rc = (f-0.01)/0.97); starting it further off…
  5. The wipe hides the camera. Freeze the outgoing frame ahead of the line and have the live world already standing on the destination behind…
  6. The line writes the next chapter in. Alternate sweep direction from the side the incoming words sit on. Mask outgoing text…
  7. The index flips at f < 0.39, not 0.5. At the midpoint the incoming title is already half written; flipping late labels the wrong scene…
  8. Chapter clocks overlap on purpose. Arrival starts MOVE*0.80 before the scene's home and finishes DWELL*0.62 into it; departure starts at…
  9. Fast-skip plays only the last move. More than one scene away: roll smoke in over 380 ms, scrollTo the station before the target…
  10. Any wheel, touch or nav key cancels the glide. Otherwise the page fights the hand.
  11. html{scroll-behavior:smooth} breaks both the glide and every capture. Per-frame scrollTo chases itself; playwright screenshots land…
  12. Hidden chapters are visibility:hidden plus inert. Opacity 0 alone leaves invisible links focusable and readable to screen readers.

What it can do on your machine

Read from SKILL.md and the folder at commit 83a47fe. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are javascript).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Horizontal Scroll Scenes loads about 2.5k tokens when it runs. Until then it costs about 188 tokens; SKILL.md has 1,372 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~188
When it runs · the whole SKILL.md, loaded when a task matches
~2.5k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from MengTo/Skills at commit 83a47fe, republished under its MIT licence (© MengTo). 1,372 words, ~2,526 tokens.

Download SKILL.mdSave it as .claude/skills/horizontal-scroll-scenes/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.
name
horizontal-scroll-scenes
description
Build scene-by-scene chapters that advance left to right on one fixed stage while the user scrolls vertically, with native scroll as the only input. One pure function turns scrollY into scene, dwell and move, so forward, reverse, scrollbar drags, fast skips and reload at depth all land on the right frame. Covers dwell versus transition budgets, a burn-wipe or pan between scenes, chapter index and progress UI, glide-to-scene links that skip intermediate scenes, keyboard and reduced-motion behaviour. Use for horizontal scrollytelling, multi-scene product tours, "scroll down to travel sideways", chapter carousels driven by the wheel, or any piece where a wheel-jacked slider keeps breaking on touch, keys, refresh or back.

Horizontal Scroll Scenes

The mechanism: scroll position is the only state. One pure function turns scrollY / (scrollHeight - innerHeight) into {scene, dwell 0→1, move 0→1} every frame, and everything on screen (camera, wipe line, craft clock, text, index) is written from that triple. Nothing remembers where you were, so every beat is a place on the page.

This is what Kibori does, and it is not a translateX slider. Verified by running it: the page is a 1742vh native-scroll track (15,678 px at 1440×900); a fixed stage holds one WebGL world whose camera travels 0 → 49.7 world units left to right through eight stations; between stations a ragged burn line wipes from a frozen frame of the scene being left to the live scene already framed on the next. There is no wheel handler, no snap, no stored "current chapter". Reload at depth, scrollbar drag and anchor jumps work because state is derived, not accumulated.

Reach for scroll-world-storytelling or build-threejs-scroll-worlds for the story and 3D-world side, gsap-scrolltrigger-storytelling for pinned sticky sections, scroll-progress-timeline for a progress line. Reach for this when the deliverable is discrete chapters with a resting beat each, laid along an X axis, and the hard part is making that state machine survive reverse, skip and refresh. The demo is Vanilla JavaScript + DOM/CSS + inline SVG; the source is three.js. The state machine is identical.

The pace: two weights and a track height

Every number lives in DWELL, MOVE and the track height. One unit is one screen of scrolling.

constantvaluemeaning
DWELL1.15scroll spent inside a scene while its craft advances (about 1,030 px at 900 tall)
MOVE0.85scroll spent crossing to the next scene (about 760 px); the last scene has none
CYC2.00one scene per two screens
SPANN*DWELL + (N-1)*MOVE8 scenes: 15.15 plus a 1.35 footer = 16.5; demo, 5 scenes: 9.15
track(SPAN + 1) * 100vhso 1 unit ≈ 1 screen; Kibori is 1742vh for 16.5
js
function travel(sp){                              // sp = scrollY / (scrollHeight - innerHeight)
  const u  = Math.min(SPAN - 1e-5, sp*SPAN);
  const i  = Math.min(N - 1, Math.floor(u/CYC));
  const local = u - i*CYC;
  const dw = Math.min(1, local/DWELL);                        // the scene's own clock
  const f  = i >= N-1 ? 0 : clamp01((local - DWELL)/MOVE);    // the move
  const rc = clamp01((f - 0.01)/0.97);                        // the line's own clock
  return {i, u, dw, f, fe: sstep(0,1,f), L: -0.08 + 1.24*rc,  // L: line, off-frame at both ends
          live: Math.min(N-1, f < 0.39 ? i : i+1)};           // what the index shows
}

Normalise by scrollHeight - innerHeight, never a hard-coded pixel height: a phone's collapsing URL bar changes innerHeight mid-scroll and a px map drifts.

Rules, each with the failure it prevents

  1. Derive, do not accumulate. Never keep currentScene or add wheel deltas. Stored state desyncs on scrollbar drag, Home/End, anchor jumps, back-forward and refresh. Prove it: record a signature of every visible style at 20 u values going forward, then again in reverse, then by jumping straight to each, then after reload() at three depths. All must be equal (the demo run: 0 mismatches of 21, 0 skip, 0 reload).
  2. No wheel hijack, no scroll-snap. Hijacking breaks touch, trackpad momentum, Space/PageDown and find-in-page. Snap fights the dwell, which is already the resting plateau (1.15 screens where nothing moves but the craft). Native scrolling stays 1:1: 2,000 px of wheel gave exactly u = 2000/(scrollHeight - vh)*SPAN.
  3. Pin the craft clock outside its dwell. Scene k's progress is 1 if k < i, dw if k == i, 0 after. Then nothing snaps back behind you and reverse retraces exactly. Write it as --p{k} and eased --e{k} custom properties on the stage; both world copies read them, so it is one write per frame.
  4. A move with nothing moving is dead scroll. Start the line at the frame's edge almost at once (rc = (f-0.01)/0.97); starting it further off made the first eighth of every move do nothing.
  5. The wipe hides the camera. Freeze the outgoing frame ahead of the line and have the live world already standing on the destination behind it. A camera still travelling under the line reads as a double exposure. Demo: layer A at camera i clipped to the far side of the line, layer B at i+1 clipped to the near side. Pan mode (translateX(-(i+fe)/N*100%)) is the alternative when no wipe is wanted.
  6. The line writes the next chapter in. Alternate sweep direction from the side the incoming words sit on. Mask outgoing text linear-gradient(a, transparent (L-.01)%, #000 (L+.016)%) and incoming #000 (L-.062)%, transparent (L-.048)%, with a = 90deg or 270deg. Two chapters never share a patch of frame. On a phone both sit in one slot: hide the incoming until the line has cleared, sstep(1.00, 1.14, L).
  7. The index flips at f < 0.39, not 0.5. At the midpoint the incoming title is already half written; flipping late labels the wrong scene. Fade the inactive rows to 0.55, not 0.
  8. Chapter clocks overlap on purpose. Arrival starts MOVE*0.80 before the scene's home and finishes DWELL*0.62 into it; departure starts at DWELL + MOVE*0.28 and takes MOVE*0.34. Each part (eyebrow, title, lede, numbers) takes its own slice of arrive (0, .12, .40, .60 plus a 0.30 ramp).
  9. Fast-skip plays only the last move. More than one scene away: roll smoke in over 380 ms, scrollTo the station before the target ((tgt-1)*CYC + DWELL*0.96 going forward, (tgt+1)*CYC + 0.02 going back), then play the final move for 2,600 ms with 1-(1-x)^2.4 as the veil lifts over the first 24%. Hide the scene it passes through, or its words flash. Land at tgt*CYC + DWELL*0.80 so the target is assembled. One scene away or fewer: plain leg of clamp(700 + |dy|/vh*150, 900, 2400) ms with cubic in-out. Without this a jump from 1 to 8 strobes six fires.
  10. Any wheel, touch or nav key cancels the glide. Otherwise the page fights the hand.
  11. html{scroll-behavior:smooth} breaks both the glide and every capture. Per-frame scrollTo chases itself; playwright screenshots land mid-scroll and look like overlap bugs. Set auto.
  12. Hidden chapters are visibility:hidden plus inert. Opacity 0 alone leaves invisible links focusable and readable to screen readers.
  13. Render on scroll, resize, pageshow, load and fonts.ready. Reload restores scroll after first paint; a bfcache restore fires no scroll event. Guard a zero-size stage and size from a ResizeObserver.
  14. Duplicate worlds need unique SVG ids. Two copies sharing a clipPath id resolve url(#id) to the first one only.
  15. Announce committed changes only. A polite live region says "Scene 4 of 5: Yakisugi" once when a glide lands, not on every threshold crossed on the way.
Show full SKILL.md (365 more words)Show less

Accessibility and lifecycle

  • Index rows are real links with aria-current="step" and a visible 1 px outline at 5 px offset; brand link returns to scene 1. The stage is position:fixed above a plain-height track so Space, arrows, PageDown, Home and End scroll natively.
  • prefers-reduced-motion: reduce: no line, no travel. Scene B cross-fades over f 0.30 → 0.70, the incoming chapter waits until f = 0.64, glides are an instant scrollTo, and the craft still advances with scroll (that is the user's own input). Controls stay live.
  • document.hidden: settle any glide at its target so a resumed tab does not integrate the pause.
  • Mobile: keep the index to the current row (03 / 05 Kigumi), stack the chapter at the foot and the work above it.

Cost, measured

The state machine is free: render() sits at the 0.1 ms timer floor (p50 0, p90 0.1) over a 400-step sweep, and 8.3 ms p50 (120 Hz cap) with 9.2 ms max during a 2.6 s glide in the demo. The cost is whatever the scenes draw. In Kibori a dwell frame was slower than a transition until a 4096² shadow map stopped redrawing every frame, and a scissored live scene did the rest; see the kibori-60fps notes. Never spend effort optimising travel().

Failure signatures

you seecause
reload lands on scene 1state kept in JS; derive from scrollY and render on load/pageshow
scene "sticks" between two beatssnap or wheel capture; delete it
two rooms overlap under the linecamera still travelling under the wipe
index shows the old scene as the title landsflip threshold at 0.5 instead of 0.39
jump link strobes several scenesglide plays every move instead of the last
jump link overshoots or stuttersscroll-behavior:smooth on html
second scene's clip does nothingduplicated SVG id
screen reader reads chapters that are not on screenopacity 0 without inert
phone shows two titles spliced at the lineincoming chapter not held back until the line clears

Provenance

Extracted from KIBORI 木彫, an eight-craft Kyoto woodshop page in one three.js file (kibori.html, travel() and the glide block near the end of its module script). Demo staged in that page's dark-and-ember look with five hand-drawn SVG crafts.

© MengTo, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 4 other files in agent-skills/web-design/horizontal-scroll-scenes of MengTo/Skills.

  • SKILL.md
  • PROMPT.md
  • agents/openai.yaml
  • demo.html
  • preview.jpg

Open the folder on GitHubat commit 83a47fe

Compare with similar skills

Horizontal Scroll Scenes next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Horizontal Scroll Scenes compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Horizontal Scroll Scenes this skillMengTo/Skills6.6k—~2.5kAutomated safety check: PassMIT
AI Elementsxiaoiver/infinite-canvas-tutorial1.1k2 repos~1.9kAutomated safety check: PassMIT
Aholo Viewer Example Contentmanycoretech/aholo-viewer1.1k—~580Automated safety check: PassMIT
Phantom Motionpixelxzen/phantom-motion185—~1kAutomated safety check: PassApache-2.0
Shader for Interfacesv2space-labs/shader-for-interfaces115—~3.1kAutomated safety check: PassMIT
Nerv UITheGreatGildo/nerv-ui228—~2.3kAutomated safety check: PassMIT

Similar skills

  • AI Elements

    xiaoiver/infinite-canvas-tutorial

    Create new AI chat interface components for the ai-elements library following established composable patterns, shadcn/ui integration, and Vercel AI SDK conventions.

    1.1k GitHub starsUsed in 2 repos~1.9k tokens
    Frontend & DesignAuto-check passed
  • Aholo Viewer Example Content

    manycoretech/aholo-viewer

    Owns the paired JSON metadata and TypeScript runner files that define the Aholo Viewer's example and Playground content.

    1.1k GitHub stars~580 tokensUpdated 13 days ago
    Frontend & DesignAuto-check passed
  • Phantom Motion

    pixelxzen/phantom-motion

    交互式动态视觉叙事生成器 v11.0 (Hybrid Drive Edition)。基于用户输入的任意主题关键词, 通过多轮交互式对话收集需求,利用 React 19 + Tailwind 4 驱动的 Minimal Mono 极简编辑器, 实时操纵隔离在 Iframe 中的硬核 GSAP/WebGL 影视级叙事引擎。

    185 GitHub stars~1k tokensUpdated 4 mo ago
    Frontend & DesignAuto-check passed
  • Shader for Interfaces

    v2space-labs/shader-for-interfaces

    Decides whether an interface effect belongs in CSS, SVG, Canvas 2D, WebGL or WebGPU, then builds, debugs and visually verifies focused GPU effects inside product UIs.

    115 GitHub stars~3.1k tokensUpdated 1 mo ago
    Frontend & DesignAuto-check passed
  • Nerv UI

    TheGreatGildo/nerv-ui

    NERV Operations Console v2 — Evangelion-inspired UI component library.

    228 GitHub stars~2.3k tokensUpdated 7 mo ago
    Frontend & DesignAuto-check passed
  • Frontend Design Principles

    pretend1111/claude-desktop-app

    Gives practical design rules for polished HTML, CSS and JavaScript interfaces and browser games, covering spacing, type, color, components, motion and responsive breakpoints.

    494 GitHub starsUsed in 1 repo~824 tokens
    Frontend & DesignAuto-check passed

More from MengTo/Skills

All 39 skills in this repo
  • Draws hand-authored SVG spot illustrations in a bold pop-geometric style for design and coding scenes.

    6.6k GitHub stars~5.1k tokensUpdated yesterday
    Auto-check passed
  • Draws a slim, long-limbed character acting out one coding or design moment as an outline-free flat SVG card, in a fixed measured palette with confetti and no ground line.

    6.6k GitHub stars~4.9k tokensUpdated yesterday
    Auto-check passed
  • Draws flat vector spot illustrations of lanky people doing design and coding things, with solid black as a main fill, for empty states, onboarding and error pages.

    6.6k GitHub stars~5.2k tokensUpdated yesterday
    Auto-check passed
  • Draws cozy animal scenes as hand-authored 480x360 SVG cards in a grainy, risograph-like gouache style on hot pink, for empty states, headers and marketing cards.

    6.6k GitHub stars~5.2k tokensUpdated yesterday
    Auto-check passed
  • Draws hand-authored SVG spot illustrations in a halftone line style for design and coding scenes.

    6.6k GitHub stars~4.7k tokensUpdated yesterday
    Auto-check passed
  • Draws hand-inked cartoon critters and living objects as SVG cards (480x360), each acting out a coding or design idea.

    6.6k GitHub stars~4.6k tokensUpdated yesterday
    Auto-check passed

Questions about Horizontal Scroll Scenes

What does Horizontal Scroll Scenes do?

Build scene-by-scene chapters that advance left to right on one fixed stage while the user scrolls vertically, with native scroll as the only input. Horizontal Scroll Scenes is an agent skill from MengTo/Skills. Build scene-by-scene chapters that advance left to right on one fixed stage while the user scrolls vertically, with native scroll as the only input.

When should I use Horizontal Scroll Scenes?

Horizontal Scroll Scenes fits situations like: horizontal scrollytelling; multi-scene product tours; scroll down to travel sideways; chapter carousels driven by the wheel.

How do I install Horizontal Scroll Scenes in Claude Code?

Run `npx skills add MengTo/Skills --skill horizontal-scroll-scenes -a claude-code`. Or copy the skill folder (agent-skills/web-design/horizontal-scroll-scenes in MengTo/Skills) into .claude/skills/horizontal-scroll-scenes in your project. Claude Code loads it when a task matches its description.

How do I install Horizontal Scroll Scenes in Codex?

Run `npx skills add MengTo/Skills --skill horizontal-scroll-scenes -a codex`. Or copy the skill folder (agent-skills/web-design/horizontal-scroll-scenes in MengTo/Skills) into .agents/skills/horizontal-scroll-scenes in your project. Codex loads it when a task matches its description.

Can I use Horizontal Scroll Scenes in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add MengTo/Skills --skill horizontal-scroll-scenes -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/horizontal-scroll-scenes, .gemini/skills/horizontal-scroll-scenes, .github/skills/horizontal-scroll-scenes and .opencode/skills/horizontal-scroll-scenes in your project.

What does Horizontal Scroll Scenes need to run?

SKILL.md names no scripts, command-line tools or credentials: Horizontal Scroll Scenes is instructions for the agent only.

Does Horizontal Scroll Scenes access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Horizontal Scroll Scenes safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Horizontal Scroll Scenes use?

Horizontal Scroll Scenes is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Horizontal Scroll Scenes use?

About 2.5k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Horizontal Scroll Scenes?

Skills that share tags, products or a category with Horizontal Scroll Scenes: AI Elements (xiaoiver/infinite-canvas-tutorial, 1.1k stars), Aholo Viewer Example Content (manycoretech/aholo-viewer, 1.1k stars), Phantom Motion (pixelxzen/phantom-motion, 185 stars) and Shader for Interfaces (v2space-labs/shader-for-interfaces, 115 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Horizontal Scroll Scenes?

MengTo (a GitHub user) maintains it in MengTo/Skills, which has 6,647 GitHub stars. The repository holds 39 skills in this directory. The repository was last updated on October 6, 2026.

Source: MengTo/Skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.