Scroll World
A landing where scroll drives a camera. The camera flies into a scene,
then on to the next, as one connected flight. Stills and clips come from
GrokBuild tools. The page only scrubs pre-rendered video by scroll
position.
Load first
Before any image_gen, image_edit, image_to_video, or
reference_to_video call, load OpenCode native image tools if the session exposes them; otherwise write prompt files and mark DEGRADED. Tool choice, prompt
length, real-people references, shot length, and ffmpeg live there. Do
not restate them here.
Hard rules
- Use only GrokBuild image/video tools. Do not call an external
image/video API, CLI, or MCP.
- Do not invent tool parameters. There is no end-image lock and no
video-to-video. Missing capability uses the fallback in
pipeline.md.
- If
PRODUCT.md, DESIGN.md, or an Impeccable pin exists, copy hex,
name, type, and forbidden treatments into the pack lock. Do not invent
brand facts.
- Ask at most four labeled questions, and only for blockers the brief
does not already answer.
- Keep the mechanic fixed: continuous fly-through, scroll as scrubber.
- Match the user's language. Architecture names stay A / B.
Handoff
| Request |
Skill |
| Fly-through, diorama, 3D world, camera-scrub landing |
this skill |
| Existing site; world is the hero |
this skill produces world + engine; impeccable owns chrome, tokens, copy system |
| Scroll-led storytelling without a camera world |
scroll-craft |
| Ordinary landing without a camera world |
impeccable |
| Photoreal stills, ads, cinematic, identity, thumbnails (no world page) |
visual-studio |
| Photoreal person/creature inside this world |
this skill owns the chain + page; load visual-studio cinematic for those stills/clips |
| Game sprites, tiles, icon sets |
game-asset-core |
| Deterministic HTML composition rendered to video |
hyperframes |
| UI chrome motion (nav, buttons), not the video scrub |
emil-design-eng after Impeccable |
Do not load Emil for stills. Do not load Impeccable to render the video
chain. Do not load visual-studio for an ordinary landing.
Run
- Interview only what is missing. Write the pack at
.grok/scroll-world/<slug>/. Templates:
prompts.md.
- Generate stills. One style preamble, byte-for-byte, on every still.
Review cohesion before any video.
- Pick the architecture the user chose. Default A (walkthrough /
locked-iso). B only for diorama / miniature / god's-eye.
pipeline.md.
- Encode for scrubbing. Mount
scrub-engine.js with
index-template.html or into the
existing site.
- QA seams in background Chromium. Save screenshots to files.
Interview
Ask at most these four, skip any the brief already answered:
- Subject (open) — business or idea + one-line pitch.
- Camera — fly-through (B: dives + aerial hops) / walkthrough
(A, default) / locked-iso (A + fixed angle). One-line trade-off each.
- Journey — propose 5–7 ordered scenes from the subject's own
value chain; let the user edit. Last scene is the hero + CTA.
- Mobile — native 9:16 second chain, or desktop only. State the
generate count. Never ship a 16:9 centre-crop as "the mobile version."
Art-direction default: clay diorama isometric for B; grounded / photoreal
for A. User may override. Palette: design system first; otherwise propose
4–6 named hexes.
Count before generating: A = N stills + N videos. B = N stills +
N dives + N−1 connectors. Mobile doubles the video count.
Architectures
A — continuous forward take (default). Each leg starts on the
previous leg's actual last frame. No connectors. Wire
connectors: [] and a small crossfade (~0.08). Camera never reverses
across a seam. Locked-iso is A plus the locked-iso clause in every leg.
B — dive + aerial hop (diorama only). One dive per scene from that
scene's still. A connector starts on dive i's actual last frame and
flies toward scene i+1. Grok cannot lock the connector's last frame to
the next dive. The engine crossfade covers the near-miss. If a hop is
unusable, set that connector to null (direct crossfade). Do not use B
on a grounded photoreal walkthrough without saying it will read as a
rewind.
Inside one clip the camera may orbit, crane, or push-in. Across a seam
it must not reverse. Every A leg ends in a slow forward drift (final
second) and the next leg begins by continuing that drift.
QA
Follow the live browser contract: opencode-chromium-cdp start, then
browser-act or chrome-devtools-axi attached to that CDP. Never Google
Chrome, chrome-direct, --headed, or HEADED=1 unless the user asks
to see a window.
- Screenshot just before and after each seam. Judge composition, not
PSNR. A pop means the handoff used a still instead of a rendered frame,
or B's crossfade cannot hide a content jump.
- Confirm
video.seekable.end(0) > 0 (blob URLs) and that currentTime
tracks scroll.
prefers-reduced-motion: stills only, no video, no particles.
- Mobile opt-in: serve the 9:16 files (
videoWidth < videoHeight).
Desktop-only: one phone-viewport sanity check; engine hardening is
already on.
Deliver
The page (or the mount into the existing site), the asset folder, and
short labels (architecture, N, mobile yes/no, what is locked). Do not
dump prompts, retries, or tool names unless the user asks.
1---2name: scroll-world3description: Build a scroll-scrubbed fly-through landing: as the visitor scrolls, a pre-rendered camera flies into each scene and on to the next with no cuts. Use when: 3D world landing, diorama site, Emons-style isometric world, scroll cinematic, browse-through-the-industry hero, camera-scrub page, or the user runs /scroll-world. Uses GrokBuild image_gen, image_edit, and image_to_video plus a portable vanilla-JS scrub engine. Load OpenCode native image tools if present, else DEGRADED before any generate/edit/video call. Not for scroll-led storytelling without a camera world (use scroll-craft), an ordinary landing (use impeccable), photoreal ads/identity with no world page (use visual-studio), or UI chrome motion (use emil-design-eng after Impeccable).4license: MIT5---67# Scroll World89A landing where **scroll drives a camera**. The camera flies into a scene,10then on to the next, as one connected flight. Stills and clips come from11GrokBuild tools. The page only scrubs pre-rendered video by scroll12position.1314## Load first1516Before any `image_gen`, `image_edit`, `image_to_video`, or17`reference_to_video` call, load OpenCode native image tools if the session exposes them; otherwise write prompt files and mark DEGRADED. Tool choice, prompt18length, real-people references, shot length, and ffmpeg live there. Do19not restate them here.2021## Hard rules2223- Use only GrokBuild image/video tools. Do not call an external24 image/video API, CLI, or MCP.25- Do not invent tool parameters. There is no end-image lock and no26 video-to-video. Missing capability uses the fallback in27 [pipeline.md](references/pipeline.md).28- If `PRODUCT.md`, `DESIGN.md`, or an Impeccable pin exists, copy hex,29 name, type, and forbidden treatments into the pack lock. Do not invent30 brand facts.31- Ask at most four labeled questions, and only for blockers the brief32 does not already answer.33- Keep the mechanic fixed: continuous fly-through, scroll as scrubber.34- Match the user's language. Architecture names stay A / B.3536## Handoff3738| Request | Skill |39|---|---|40| Fly-through, diorama, 3D world, camera-scrub landing | this skill |41| Existing site; world is the hero | this skill produces world + engine; `impeccable` owns chrome, tokens, copy system |42| Scroll-led storytelling without a camera world | `scroll-craft` |43| Ordinary landing without a camera world | `impeccable` |44| Photoreal stills, ads, cinematic, identity, thumbnails (no world page) | `visual-studio` |45| Photoreal person/creature inside this world | this skill owns the chain + page; load `visual-studio` cinematic for those stills/clips |46| Game sprites, tiles, icon sets | `game-asset-core` |47| Deterministic HTML composition rendered to video | `hyperframes` |48| UI chrome motion (nav, buttons), not the video scrub | `emil-design-eng` after Impeccable |4950Do not load Emil for stills. Do not load Impeccable to render the video51chain. Do not load visual-studio for an ordinary landing.5253## Run54551. Interview only what is missing. Write the pack at56 `.grok/scroll-world/<slug>/`. Templates:57 [prompts.md](references/prompts.md).582. Generate stills. One style preamble, byte-for-byte, on every still.59 Review cohesion before any video.603. Pick the architecture the user chose. Default **A** (walkthrough /61 locked-iso). **B** only for diorama / miniature / god's-eye.62 [pipeline.md](references/pipeline.md).634. Encode for scrubbing. Mount64 [scrub-engine.js](references/scrub-engine.js) with65 [index-template.html](references/index-template.html) or into the66 existing site.675. QA seams in background Chromium. Save screenshots to files.6869## Interview7071Ask at most these four, skip any the brief already answered:72731. **Subject** (open) — business or idea + one-line pitch.742. **Camera** — fly-through (B: dives + aerial hops) / walkthrough75 (A, default) / locked-iso (A + fixed angle). One-line trade-off each.763. **Journey** — propose 5–7 ordered scenes from the subject's own77 value chain; let the user edit. Last scene is the hero + CTA.784. **Mobile** — native 9:16 second chain, or desktop only. State the79 generate count. Never ship a 16:9 centre-crop as "the mobile version."8081Art-direction default: clay diorama isometric for B; grounded / photoreal82for A. User may override. Palette: design system first; otherwise propose834–6 named hexes.8485Count before generating: A = `N` stills + `N` videos. B = `N` stills +86`N` dives + `N−1` connectors. Mobile doubles the video count.8788## Architectures8990**A — continuous forward take (default).** Each leg starts on the91previous leg's **actual last frame**. No connectors. Wire92`connectors: []` and a small `crossfade` (~0.08). Camera never reverses93across a seam. Locked-iso is A plus the locked-iso clause in every leg.9495**B — dive + aerial hop (diorama only).** One dive per scene from that96scene's still. A connector starts on dive *i*'s actual last frame and97flies toward scene *i+1*. Grok cannot lock the connector's last frame to98the next dive. The engine crossfade covers the near-miss. If a hop is99unusable, set that connector to `null` (direct crossfade). Do not use B100on a grounded photoreal walkthrough without saying it will read as a101rewind.102103Inside one clip the camera may orbit, crane, or push-in. Across a seam104it must not reverse. Every A leg ends in a slow forward drift (final105second) and the next leg begins by continuing that drift.106107## QA108109Follow the live browser contract: `opencode-chromium-cdp start`, then110browser-act or chrome-devtools-axi attached to that CDP. Never Google111Chrome, `chrome-direct`, `--headed`, or `HEADED=1` unless the user asks112to see a window.113114- Screenshot just before and after each seam. Judge composition, not115 PSNR. A pop means the handoff used a still instead of a rendered frame,116 or B's crossfade cannot hide a content jump.117- Confirm `video.seekable.end(0) > 0` (blob URLs) and that `currentTime`118 tracks scroll.119- `prefers-reduced-motion`: stills only, no video, no particles.120- Mobile opt-in: serve the 9:16 files (`videoWidth < videoHeight`).121 Desktop-only: one phone-viewport sanity check; engine hardening is122 already on.123124## Deliver125126The page (or the mount into the existing site), the asset folder, and127short labels (architecture, N, mobile yes/no, what is locked). Do not128dump prompts, retries, or tool names unless the user asks.