Communitygithub.com

scroll-cinematic — 1プロンプト3Dスクロール

1プロンプトで受賞級3Dスクロールサイト。Claude Code + Higgsfield MCP。64★。READMEにデモあり。

scroll-cinematic — 1プロンプト3Dスクロール とは?

Site Building手順1:zubair 64★。1プロンプト→Higgsfield映像→スクロールサイト。昨夜のLocalizationと別軸。

対応✓Claude Code~Codex CLI~Cursor
npx skills add zubair-trabzada/scroll-cinematic-claude

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント


name: scroll-cinematic description: Build an award-winning "3D scroll" website of ANY kind from ONE prompt — product launch, portfolio, agency, contractor/home-services, restaurant, real estate, personal brand, event, app, etc. Generates a high-end cinematic hero visual + clips (360° orbit, fly-through, reveal, explode, parallax) fitting the site's subject with the Higgsfield MCP, slices them into a scroll-scrubbed canvas frame sequence with ffmpeg, builds a branded multi-section site (Lenis smooth scroll + scroll reveals), and launches it on localhost. Use when the user asks for a "3D scroll" site, scroll-driven hero/reveal, a cinematic landing page, a buckssauce/Apple/Awwwards-style scroll site, or "build me a website like X" — for a product OR a service, person, place, or brand. Trigger words: 3D scroll, scroll animation, cinematic hero, fly-through, turntable, scroll site, landing page, portfolio site, agency site, Higgsfield site.

Scroll-Cinematic — one-prompt 3D product sites

What this actually is (read first)

The viral "3D scroll" effect is not Three.js. It's a canvas image-sequence scrub: a short cinematic clip is exported to ~180 numbered JPGs, all preloaded, and the frame drawn to a <canvas> is chosen by scroll progress. Scrolling forward/backward plays the clip. Add Lenis smooth scroll + scroll-synced overlay copy and it reads as premium 3D. The "3D" comes entirely from the source video — which we generate with Higgsfield.

Stack: plain HTML + CSS + JS + Lenis (zero build, runs from any static server).

Prerequisites

  • Higgsfield MCP connected + credits (~$1–2 / site). This is the only thing the user must set up.
  • ffmpeg — DO NOT ask the user to install it. Step 0 below installs it automatically (no Homebrew).
  • This skill installed at ~/.claude/skills/scroll-cinematic/.

Step 0 — Ensure ffmpeg (run first, always)

Run bash ~/.claude/skills/scroll-cinematic/scripts/ensure-ffmpeg.sh. It uses system ffmpeg if present, otherwise downloads a static binary to /tmp/ffmpeg-bin/ffmpeg (macOS/Linux, no Homebrew). The extract/compress scripts already fall back to that path. Never block the build on ffmpeg.

THE PIPELINE — run all of this from the single prompt

1. Decide the brief (works for ANY site — no extra questions unless the subject is unclear)

From the user's prompt pick: site type, hero subject, vibe/palette, brand/name (invent one if not given), and 2 hero motions. The hero subject is whatever the site is about — a product, a person/founder, a building/space, a dish, a vehicle, or an abstract visual. Default motions by site type:

  • Product (bottle, gadget, shoe, cosmetic) → 360° rotation + explode/pour/reveal.
  • Portfolio / personal brand → cinematic portrait or abstract liquid/geometry motion + a slow parallax/orbit.
  • Agency / app / SaaS → abstract 3D shape/logo morph or UI-in-space + light-streak fly-through.
  • Contractor / home services / real estate → slow orbit or fly-through of a building/home/jobsite + a detail reveal.
  • Restaurant / food → dish 360° + ingredient/steam motion or interior fly-through.
  • Fitness / events / travel → motion of the subject (athlete, crowd, landscape) + a sweeping camera move. If unsure, default to one hero orbit/fly-through + one reveal/parallax clip.

2. Generate the hero keyframe (Higgsfield generate_image)

  • Model: nano_banana_pro (top quality / crisp). Prompt the hero subject for the site (product, person, place, abstract), strong lighting, intentional background, "ultra sharp, photorealistic, 8k, editorial/advertising". 16:9. (For portfolios you can also use a brand-colored abstract 3D render so there's no likeness/IP issue.)
  • Poll job_display until status:"completed"; keep the job id (used as the video start frame).

3. Generate 1–2 cinematic clips (Higgsfield generate_video)

  • Model: seedance_2_0, resolution:"1080p", aspect_ratio:"16:9", duration:6, medias:[{role:"start_image", value:<keyframe id>}]. Always pass declined_preset_id:"24bae836-2c4a-48e0-89b6-49fcc0b21612" if it suggests a preset; if it suggests a different preset, retry with that preset's id in declined_preset_id.
  • Motion prompt patterns (pick what fits the subject):
    • turntable — "smooth seamless full 360-degree rotation, one complete revolution, stays centered".
    • fly-through — "slow continuous forward camera flight through/around the [building/space/scene], smooth dolly, deep parallax".
    • reveal/explode — "the [contents/components/elements] burst or assemble outward and float in slow motion" (keep it object/scene context — moderation-friendly).
    • abstract — "elegant slow-morphing liquid-metal / glass / particle form drifting and rotating".
  • Generate both clips in parallel (two tool calls in one message), then poll job_display. 1080p renders take ~3–8 min; sleep in the background between polls.
  • Cost: preflight with get_cost:true once; ~54 credits per 1080p clip. Confirm if the user is low.

4. Handle render results

  • completed → download results.rawUrl with curl.
  • nsfw or failed → refunded, retry. Moderation false-flags abstract "floating pills/ dissolving figures"; reword to product-context, or switch that clip to grok_video_v15 (resolution:"720p", more lenient). Product turntables/explosions pass at 1080p.
  • Tell the user about any retry; never claim a clip rendered if it didn't.

5. Slice + compress frames (ffmpeg)

  • scripts/extract-frames.sh <clip.mp4> frames/<name> 180 → ~179 numbered JPGs.
  • scripts/compress-frames.sh frames/<name> 1600 88 → 1600px wide, q88 (crisp, <~15MB/section).
  • One folder per clip (e.g. frames/spin, frames/explode).

6. Build the site from templates/

  • Copy templates/index.html, styles.css, scroll-cinematic.js into the project.
  • Edit the SCRUB_SECTIONS config (bottom of index.html) — one entry per clip: { section:"#hero", frameCount:179, bg:"#0a0a12", framePath:(i)=>\frames/spin/frame_${String(i).padStart(4,"0")}.jpg` }`.
  • Write brand copy, palette (CSS vars), benefit/colorway/feature sections, stats, CTA.
  • Hue-shift trick for product variants/colorways (no extra generation): ffmpeg -i base.png -vf "hue=h=120:s=1.15" variant.png.

7. Launch on localhost

  • Copy templates/Launch Demo.command into the project, edit PORT + name, chmod +x it.
  • Start it (python3 -m http.server <port>), curl the page + a frame to confirm 200, open the URL.
  • Tell the user the URL + that double-clicking the .command relaunches it for recording.

Engine rules (already in templates/scroll-cinematic.js)

  • Preload every frame; paint frame 0 on first load; redraw only when the frame index changes.
  • Sticky stage: outer section height: 420–600vh, inner position:sticky; top:0; height:100vh. Progress = clamp(-rect.top / (rect.height - innerH), 0, 1). Throttle in the rAF loop.
  • Cover-fit draw + HiDPI (devicePixelRatio, cap 2). Drive updates from the Lenis rAF loop (robust to any scroll source). Overlay copy fades over per-line [in,out] progress windows.
  • Multi-section: SCRUB_SECTIONS array; engine skips sections whose element is missing.

Known gotchas

  • More/larger frames = slow load → keep 1600px / q88 / ~180 frames.
  • Continuous-motion clips only (no hard cuts — ugly when scrubbed backward).
  • The headless screenshot tool blanks sticky-canvas sections when scrolled; verify with pixel sampling, and view live in a real browser.
  • python http.server previews die when idle — the .command launcher is the durable demo.

Files

  • templates/index.html, styles.css, scroll-cinematic.js — multi-section scrub site.
  • templates/CinematicReveal.tsx — React/Next drop-in (optional).
  • templates/Launch Demo.command — double-click localhost launcher.
  • scripts/extract-frames.sh, scripts/compress-frames.sh — the ffmpeg pipeline.

関連スキル