Not in the top 1,000 by GitHub stars
AIwithhassan/lets-scroll
Agent skill that builds scroll-scrubbed "fly through the world" landing pages, AI-generated scenes + camera flights chained into one seamless continuous shot, driven by scroll. Claude Code / Codex / SKILL.md-compatible.
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
skills/lets-scroll/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a0605366e8e7
No earlier version was observed for comparison.
Heat
2.9- Star growth, last 7 daysNot available
- Star growth, last 24 hoursNot available
- Rank movement, last 7 daysNot available
- Commits, last 30 daysNot available
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekNot available
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
- lets-scroll
skills/lets-scroll
How it works
lets-scroll
When your agent uses it
Build an immersive scroll-scrubbed "fly through the world" landing page for any industry or brand using Higgsfield. As the visitor scrolls, a pre-rendered camera flies from outside each scene into its interior, then flows on to the next scene with NO cuts — one continuous connected flight (Emons-style isometric diorama world, or any art direction you pick). The skill interviews the user for the topic, the story beats/sections, and brand kit, then generates cohesive scenes + seamless camera clips with Higgsfield (or the user's own tools, via a prompt + conditioning-frame handoff) and wires a portable, framework-agnostic scroll-scrub engine. The video chain renders through Monid by default (Seedance 2.0, pay-per-clip USD — capability re-checked each build, see Step 4) with Higgsfield credits as the fallback biller. Use when the user wants a "3D world" / "browse-through-the-industry" hero, a scroll cinematic, a diorama landing, or to turn a business into a scrollable world.
What it loads into context
Frontmatter
273 tokensAlways available to the agent
SKILL.md
14,828 tokensWhen the skill is activated
Reference documents
8,283 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Step 0 — Bootstrap
- Step 1 — Interview the user
- Step 2 — Generate the scene stills
- Step 3 — (Optional) Float the scenes
- Step 4 — Camera architecture (implements the Step 1.4 choice)
- Step 5 — Connectors (architecture B only)
- Step 6 — Encode for smooth scrubbing
- Step 7 — Assemble the page
- Step 8 — QA the seams (don't skip)
- Gotchas (hard-won)
- References
Scripts executed separately
references/knockout.pyreferences/scrub-engine.js
Files
SKILL.mdcore57,278 bytesSKILL.mdcore57,278 bytesSKILL.mdcore57,278 bytesSKILL.mdcore57,278 bytesSKILL.mdcore57,278 bytesSKILL.mdcore57,278 bytesSKILL.mdcore57,278 bytesSKILL.mdcore57,278 bytesSKILL.mdcore57,278 bytesSKILL.mdcore57,278 bytesSKILL.mdcore57,278 bytesreferences/index-template.htmlasset2,712 bytesreferences/knockout.pyruns2,855 bytesreferences/pipeline.mddoc16,603 bytesreferences/prompts.mddoc11,845 bytesreferences/scrub-engine.jsruns28,691 bytes
Read SKILL.md
# lets-scroll
Produces a landing page where **scroll drives a camera**: it dives from outside a scene
into its interior, then flies out and into the next scene, continuously, with no visible
cuts. The visuals are AI-generated — stills via Higgsfield (or Codex), the video chain
via **Monid by default** (pay-per-clip Seedance 2.0; Higgsfield credits as fallback) —
and the page just scrubs pre-rendered video by scroll position. A **manual asset path**
(Step 1.7) swaps the render calls for a prompt + file handoff: the user generates every
still and clip in tools of their choice and drops the files into the work folder;
everything downstream (frame extraction, encode, engine, QA) is identical. This is the same technique behind Apple's scroll-through product
pages — the camera genuinely moves, scroll only drives time.
**What you generate:** N scene stills → N "dive-in" camera clips → N-1 "connector" clips
that join consecutive scenes seamlessly → a portable scrub engine that plays the wholeView the complete source on GitHubSkills included
- lets-scroll
Repository facts
- License
- MIT
- Created
- Aug 15, 2026
- Last pushed
- Aug 15, 2026
- Forks
- 23
- Open issues
- 0
- Project activity
- Slowing
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 5, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 10 notes
skills/lets-scroll/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/lets-scroll/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/lets-scroll/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/lets-scroll/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/lets-scroll/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/lets-scroll/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/lets-scroll/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/lets-scroll/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/lets-scroll/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/lets-scroll/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- 1 broad permissionin 1 file: lets-scroll/SKILL.md:1
- No dangerous shell commands
- 23 network referencesin 3 files: lets-scroll/references/pipeline.md:45 lets-scroll/SKILL.md:402 lets-scroll/references/scrub-engine.js:204
- No hidden or obfuscated text
- No instruction overrides
- 2 executable scriptsin 2 files: lets-scroll/references/knockout.py:1 lets-scroll/references/scrub-engine.js:1
- 1 reference to secretsin 1 file: lets-scroll/references/knockout.py:25
- No requests to vote in Hot
Show all 27 signals by file
skills/lets-scroll/SKILL.md
- Broad permissionsline 1
Bash, Read, Write, Edit, AskUserQuestion, Skill - Network accessline 402
base64 data URLs are **rejected** ("Must be a public https:// URL or an asset://<id> reference"). Local frames travel through Monid's free workspace file system: `sfs /put` → `curl -T` the bytes → `sfs /cat` returns a signed - Network accessline 403
asset://<id> reference"). Local frames travel through Monid's free workspace file system: `sfs /put` → `curl -T` the bytes → `sfs /cat` returns a signed public URL to paste into the body ($0, explicitly built for this). - Network accessline 404
file system: `sfs /put` → `curl -T` the bytes → `sfs /cat` returns a signed - Network accessline 828
- **Monid seedance rejects inline images** → "Must be a public https:// URL or an asset://<id> reference": frames go through the free `sfs` file system (put → `curl -T` → cat → signed URL; pipeline.md → Monid backend), never base64. - Network accessline 829
asset://<id> reference": frames go through the free `sfs` file system (put → `curl -T` → cat → signed URL; pipeline.md → Monid backend), never base64. Quirk: `/put` echoes back `home/<path>`, but `/cat` and `/ls` want the **original - Network accessline 830
(put → `curl -T` → cat → signed URL; pipeline.md → Monid backend), never base64.
skills/lets-scroll/references/knockout.py
skills/lets-scroll/references/pipeline.md
- Network accessline 45
url=$(jq -r '.[0].result_url // empty' "$WORK/still_$1.json") [ -n "$url" ] && curl -fsSL "$url" -o "$WORK/still_$1.png" && echo "still $1 ok" || echo "still $1 FAIL" - Network accessline 46
[ -n "$url" ] && curl -fsSL "$url" -o "$WORK/still_$1.png" && echo "still $1 ok" || echo "still $1 FAIL" - Network accessline 81
--wait --wait-timeout 20m --json > "$WORK/dive_$1.json" 2> "$WORK/dive_$1.err" url=$(jq -r '.[0].result_url // empty' "$WORK/dive_$1.json") [ -n "$url" ] && curl -fsSL "$url" -o "$WORK/dive_$1.mp4" && echo "dive $1 ok" || echo "dive $1 - Network accessline 82
url=$(jq -r '.[0].result_url // empty' "$WORK/dive_$1.json") [ -n "$url" ] && curl -fsSL "$url" -o "$WORK/dive_$1.mp4" && echo "dive $1 ok" || echo "dive $1 FAIL" } - Network accessline 83
[ -n "$url" ] && curl -fsSL "$url" -o "$WORK/dive_$1.mp4" && echo "dive $1 ok" || echo "dive $1 FAIL" - Network accessline 114
--wait --wait-timeout 20m --json > "$WORK/conn_$1.json" 2> "$WORK/conn_$1.err" url=$(jq -r '.[0].result_url // empty' "$WORK/conn_$1.json") [ -n "$url" ] && curl -fsSL "$url" -o "$WORK/conn_$1.mp4" && echo "conn $1 ok" || echo "conn $1 - Network accessline 115
url=$(jq -r '.[0].result_url // empty' "$WORK/conn_$1.json") [ -n "$url" ] && curl -fsSL "$url" -o "$WORK/conn_$1.mp4" && echo "conn $1 ok" || echo "conn $1 FAIL" } - Network accessline 116
[ -n "$url" ] && curl -fsSL "$url" -o "$WORK/conn_$1.mp4" && echo "conn $1 ok" || echo "conn $1 FAIL" - Network accessline 229
curl -fsS -T "$jpg" "$up" > /dev/null - Network accessline 254
monid_wait "$rid" "$WORK/dive_$1.json" url=$(jq -r '.output.content.video_url // empty' "$WORK/dive_$1.json") [ -n "$url" ] && curl -fsSL "$url" -o "$WORK/dive_$1.mp4" \ - Network accessline 255
url=$(jq -r '.output.content.video_url // empty' "$WORK/dive_$1.json") [ -n "$url" ] && curl -fsSL "$url" -o "$WORK/dive_$1.mp4" \ && echo "dive $1 ok (\$$(jq -r '.cost.value' "$WORK/dive_$1.json"))" \ - Network accessline 256
[ -n "$url" ] && curl -fsSL "$url" -o "$WORK/dive_$1.mp4" \ - Network accessline 271
monid_wait "$rid" "$WORK/conn_$1.json" url=$(jq -r '.output.content.video_url // empty' "$WORK/conn_$1.json") [ -n "$url" ] && curl -fsSL "$url" -o "$WORK/conn_$1.mp4" \ - Network accessline 272
url=$(jq -r '.output.content.video_url // empty' "$WORK/conn_$1.json") [ -n "$url" ] && curl -fsSL "$url" -o "$WORK/conn_$1.mp4" \ && echo "conn $1 ok (\$$(jq -r '.cost.value' "$WORK/conn_$1.json"))" \ - Network accessline 273
[ -n "$url" ] && curl -fsSL "$url" -o "$WORK/conn_$1.mp4" \
skills/lets-scroll/references/scrub-engine.js
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Signal confidence: 27 facts
- Broad permissions in the frontmatter of the SKILL.mdlets-scroll/SKILL.md:1High confidence
- Network access in prose of the SKILL.mdlets-scroll/SKILL.md:402Low confidence
- Network access in prose of the SKILL.mdlets-scroll/SKILL.md:403Low confidence
- Network access in prose of the SKILL.mdlets-scroll/SKILL.md:404Low confidence
- Network access in prose of the SKILL.mdlets-scroll/SKILL.md:828Low confidence
- Network access in prose of the SKILL.mdlets-scroll/SKILL.md:829Low confidence
- Network access in prose of the SKILL.mdlets-scroll/SKILL.md:830Low confidence
- Executable script in code of a file that runslets-scroll/references/knockout.py:1High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuelets-scroll/references/knockout.py:25Low confidence
- Network access in code of documentationlets-scroll/references/pipeline.md:45Low confidence
- Network access in code of documentationlets-scroll/references/pipeline.md:46Low confidence
- Network access in code of documentationlets-scroll/references/pipeline.md:81Low confidence
- Network access in code of documentationlets-scroll/references/pipeline.md:82Low confidence
- Network access in code of documentationlets-scroll/references/pipeline.md:83Low confidence
- Network access in code of documentationlets-scroll/references/pipeline.md:114Low confidence
- Network access in code of documentationlets-scroll/references/pipeline.md:115Low confidence
- Network access in code of documentationlets-scroll/references/pipeline.md:116Low confidence
- Network access in code of documentationlets-scroll/references/pipeline.md:229Low confidence
- Network access in code of documentationlets-scroll/references/pipeline.md:254Low confidence
- Network access in code of documentationlets-scroll/references/pipeline.md:255Low confidence
- Network access in code of documentationlets-scroll/references/pipeline.md:256Low confidence
- Network access in code of documentationlets-scroll/references/pipeline.md:271Low confidence
- Network access in code of documentationlets-scroll/references/pipeline.md:272Low confidence
- Network access in code of documentationlets-scroll/references/pipeline.md:273Low confidence
- Executable script in a comment of a file that runslets-scroll/references/scrub-engine.js:1Low confidence
- Network access in code of a file that runslets-scroll/references/scrub-engine.js:204High confidence
- Network access in code of a file that runslets-scroll/references/scrub-engine.js:205High confidence
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Compatible | Standard SKILL.md skills/lets-scroll/SKILL.md | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md skills/lets-scroll/SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md skills/lets-scroll/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md skills/lets-scroll/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md skills/lets-scroll/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md skills/lets-scroll/SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.