Два AI-изображения → 7-секундное видео → hero-секция где скролл управляет анимацией
Зарегистрируйся везде до начала работы. Бесплатных квот хватит для одного проекта.
Генерация START и END кадров. Бесплатный tier: ~10 генераций/день. Нужна регистрация через Google.
→ higsfield.aiСоздание видео из 2 изображений. Режим «Start / End frame». 30 генераций/месяц бесплатно. Начни отсюда — не надо платить.
→ lumalabs.aiБолее кинематографичный переход чем Luma. Платная подписка ~$15/мес. Используй только если нужно максимальное качество или уже есть подписка на Higsfield для Nano Banana.
→ higsfield.aiОркестратор всего пайплайна. Скилл уже установлен если ты читаешь это. Иначе — установи командой ниже.
curl -fsSL https://raw.githubusercontent.com/sergeyramas/scroll-scrub-hero-skill/main/install.sh | bash
Next.js 16+, gsap, @studio-freight/lenis. Если проекта нет — создай:
npx create-next-app@latest my-site --typescript --tailwind --app cd my-site npm i gsap @studio-freight/lenis
Claude Code автоматически создаст 3 готовых промпта для Nano Banana 2 и видео-перехода
Открой Claude Code и напиши одно из:
«Сгенерируй промпты для scroll-stop hero. Продукт: [название]. Метафора: [объект разбирается на части / собирается из хаоса]»
Что Claude спросит (4 вопроса):
| Вопрос | Пример ответа |
|---|---|
| Ниша / тип бизнеса | «строительная сетка», «логистика», «кофемашины» |
| Основной объект | «стеклопластиковая сетка ROCKMESH», «фургон AnyVan» |
| Метафора превращения | «разборка на 4 компонента», «мебель вылетает из фургона» |
| Цвета бренда (hex) | «#FF6B00, #0F0F0F» — или «пропусти» |
Claude выдаст 3 промпта:
=== PROMPT 1 — START FRAME (Nano Banana 2) === Photorealistic top-down isometric view of [объект], professional product photography style, soft directional lighting. Clean white seamless background. 16:9, 2K. No objects touch edges. === PROMPT 2 — END FRAME (Nano Banana 2) === Same [объект], same angle — but now exploded into components: [список компонентов floating mid-air]. Same white background, identical lighting. 16:9, 2K. No edges. === PROMPT 3 — VIDEO TRANSITION (Kling 3.0, 7s) === Smooth 7-second transition. [описание движения]. No text, no camera shake. Kling 3.0, multi-shot off, enhance off.
Объект целиком, в собранном/исходном состоянии. Белый фон, 2K, 16:9.
start.png (минимум 1920×1080)| Параметр | Значение | Почему |
|---|---|---|
| Aspect ratio | 16:9 | Веб-стандарт |
| Resolution | 2K минимум | 1K = дешёво выглядит |
| Background | clean white | Бесшовный переход в hero |
| Edges | no objects touching | Нужен воздух для вёрстки |
| Batch | 4 генерации | Качество кадров = качество видео |
Тот же объект, тот же ракурс — но трансформирован по твоей метафоре.
end.pngХорошие метафоры для END кадра:
| Тип | Описание | Пример |
|---|---|---|
| «Взорвано» | Компоненты разлетаются | сетка → волокна + смола + песок + узлы |
| «Разобрано» | Части разложены аккуратно | фургон → мебель/коробки летят наружу |
| «Собрано» | Хаос → порядок | россыпь стержней → арматурный каркас |
| «Переродилось» | Старое → новое | убитая квартира → современный лофт |
Два варианта. Попробуй lumalabs первым — быстрее и проще.
start.png как начальный кадрend.png как конечный кадрhero.mp4Smooth product teardown animation, objects gently separate and float outward, cinematic slow motion, no text, no camera shake, seamless transition between states
| Настройка | Значение | Почему |
|---|---|---|
| Model | Kling 3.0 | Лучшее качество transitions |
| Duration | 7 секунд | Оптимум для scroll-scrub |
| Resolution | 1080p | Стандарт |
| Multi-shot | OFF | Иначе режет на сцены |
| Enhance | OFF | Портит результат |
public/video/hero.mp4
Три скилла Claude Code. Каждый берёт готовое .mp4 и строит сайт — разного уровня сложности.
hero.mp4 уже готово — просто скажи Claude Code одно из слов-триггеров. Скилл сам задаст вопросы (бренд, цвет, CTA) и соберёт сайт.
Самый мощный скилл. Разбивает видео на кадры через FFmpeg, рендерит через <canvas> (как Apple iPhone teardown). Строит полный сайт из одного HTML-файла с:
Триггер-фразы:
«Вот видео hero.mp4. Собери полный сайт с Apple-style scroll анимацией. Бренд: ROCKMESH. Цвет: #FF6B00. Фон: тёмный.»
brew install ffmpeg — иначе скилл не сможет извлечь кадры. Первый кадр видео должен быть на белом фоне.
Берёт готовый .mp4 и строит MVP-сайт на чистом HTML/CSS/JS. Не нужен FFmpeg — напрямую использует video.currentTime через GSAP ScrollTrigger. Готово к деплою за минуты.
«Видео готово: ./assets/hero.mp4. Собери MVP сайт с scroll-stop анимацией. Бренд: ROCKMESH, акцент #FF6B00, CTA: Позвонить.»
Выдаёт: index.html + css/style.css + js/scroll.js + README
Для проектов на Next.js. Создаёт HeroSection.tsx с GSAP ScrollTrigger, тултипами компонентов, Lenis smooth scroll и mobile autoplay fallback.
«Видео hero.mp4 в public/video/. Реализуй scroll-scrub hero в Next.js: sticky 300vh, GSAP scrub, fade-out текста, mobile fallback.»
| Скилл | Метод рендера | FFmpeg | Результат | Когда выбирать |
|---|---|---|---|---|
/3d-animation-creator |
Canvas + кадры | Нужен | Полный сайт HTML | Хочешь Apple-style wow + полный лендинг |
/3d-website-builder |
video.currentTime | Не нужен | MVP vanilla HTML | Быстрый прототип без фреймворка |
/scroll-scrub-hero |
video.currentTime | Не нужен | Next.js компонент | Уже есть Next.js проект |
1. Скопируй видео:
cp ~/Downloads/hero.mp4 ./public/video/hero.mp4
2. Создай компонент HeroSection.tsx:
'use client' import { useRef, useEffect } from 'react' import gsap from 'gsap' import { ScrollTrigger } from 'gsap/ScrollTrigger' gsap.registerPlugin(ScrollTrigger) export default function HeroSection() { const sectionRef = useRef<HTMLElement>(null) const videoRef = useRef<HTMLVideoElement>(null) const textRef = useRef<HTMLDivElement>(null) useEffect(() => { const video = videoRef.current const section = sectionRef.current if (!video || !section) return // prefers-reduced-motion → autoplay, no scrub if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) { video.autoplay = true; video.loop = true; return } // mobile → autoplay loop fallback if (window.matchMedia('(max-width: 768px)').matches) { video.autoplay = true; video.loop = true; return } // scroll → video.currentTime ScrollTrigger.create({ trigger: section, start: 'top top', end: 'bottom bottom', scrub: 0.5, onUpdate: (self) => { if (video.duration) video.currentTime = self.progress * video.duration }, }) // текст исчезает в первые 30% скролла gsap.to(textRef.current, { opacity: 0, y: -40, scrollTrigger: { trigger: section, start: 'top top', end: '30% top', scrub: true }, }) return () => ScrollTrigger.getAll().forEach(t => t.kill()) }, []) return ( <section ref={sectionRef} style={{ height: '300vh' }}> <div className="sticky top-0 h-screen overflow-hidden bg-white"> <video ref={videoRef} src="/video/hero.mp4" muted playsInline preload="auto" className="absolute inset-0 w-full h-full object-contain" /> <div className="absolute inset-y-0 left-0 w-1/2 bg-gradient-to-r from-[#0F0F0F] to-transparent" /> <div ref={textRef} className="absolute left-8 top-1/2 -translate-y-1/2 z-10 max-w-lg"> <h1 className="font-extrabold text-4xl text-white mb-4"> Твой заголовок </h1> <a href="tel:+7XXXXXXXXXX" className="bg-[#FF6B00] text-white px-6 py-3 rounded-lg"> Позвонить </a> </div> </div> </section> ) }
3. Подключи в page.tsx:
import HeroSection from '@/components/HeroSection' export default function Home() { return <main><HeroSection /></main> }
4. Инициализируй Lenis (плавный скролл):
'use client' import { useEffect } from 'react' import Lenis from '@studio-freight/lenis' export function SmoothScroll({ children }: { children: React.ReactNode }) { useEffect(() => { const lenis = new Lenis() const raf = (time: number) => { lenis.raf(time); requestAnimationFrame(raf) } requestAnimationFrame(raf) return () => lenis.destroy() }, []) return <>{children}</> }
5. Проверь что работает:
npm run dev # открой localhost:3000, скролль вниз npm run build # должен собраться без ошибок npm run lint # чистый lint
Через скилл ship-to-vercel или вручную за 2 команды
# 1. Если репо ещё нет git init -b main gh repo create my-hero-site --public --source=. --push # 2. Линкуй с Vercel (первый раз) vercel link # 3. Деплой в прод git add . && git commit -m "Add scroll-scrub hero" vercel deploy --prod
git push Vercel auto-deploy не стартует — запускай vercel deploy --prod вручную. Это известный глюк когда auto-deploy не триггерится.
public/ — Vercel отдаёт статику напрямую. Никаких дополнительных настроек для видео не нужно.
| ❌ Ошибка | ✅ Правильно |
|---|---|
| Генерить кадры в 1K разрешении | Минимум 2K (1920×1080) |
| Разные ракурсы START и END | Тот же ракурс, то же освещение |
| Текст в промпте для видео (Kling) | Никакого текста — замыливается |
| multi-shot ON / enhance ON в Kling | Оба OFF |
preload не указан на <video> | preload="auto" — иначе скролл лагает |
| ScrollTrigger на мобильном без fallback | Проверяй max-width: 768px → autoplay |
| Объекты касаются краёв кадра | no objects touching the edges в промпте |
| Фон не белый (градиент, серый) | clean white seamless background |
| Когда | Команда в Claude Code |
|---|---|
| Нужны промпты для Nano Banana 2 | /scroll-stop-prompter |
| Есть видео, нужен полный hero в Next.js | /scroll-scrub-hero |
| Есть видео, нужен vanilla HTML MVP | /3d-website-builder |
| Деплой на Vercel | /ship-to-vercel |
| Весь пайплайн с нуля, одной командой | /scroll-scrub-hero |