creative-explainer-video
Длинные narrated-видео на 2-5 минут: туториалы, кейс-стади, демо продукта, обучалки. Remotion + ElevenLabs TTS + ffmpeg. 9 типов сцен, 4 готовых шаблона. ~$0.55 за 3-минутный кейс против $500-2000 у агентств.
Что делает простыми словами
Это не ads. Это длинные образовательные видео: туториалы, разборы, кейсы, демо. В отличие от video-clipgen (где Veo делает короткие 9-30 сек рекламные клипы) — тут история на 2-5 минут с озвучкой и поэтапной визуальной композицией.
Типичные форматы, под которые скилл заточен:
- Tutorial — «Как установить T608 за 30 дней»
- Explainer — «Почему УВТ-кабинет окупается за 90 дней»
- Case study — «Клиника в Актобе — 2.4M ₸/мес дополнительного дохода»
- Product demo — обход аппарата + протоколы лечения
- Onboarding — обучающий контент для клиентов/персонала
Длительность типично 2-5 минут. Аспект: 9:16 для Reels/TikTok, 1:1 для feed, 16:9 для YouTube/landing-страниц.
Архитектура — Remotion + ElevenLabs
Как и creative-carousel, скилл работает по per-project bootstrap паттерну. На каждый проект — своя копия Remotion-приложения:
~/video-projects/<project>/explainer-remotion/
├── package.json
├── tsconfig.json
├── remotion.config.ts
├── src/
│ ├── index.ts
│ ├── Root.tsx ← композиции: Explainer-9x16 / -1x1 / -16x9
│ ├── ExplainerVideo.tsx ← timeline composer + scene dispatcher
│ ├── scenes/
│ │ ├── TitleCard.tsx ← intro/outro big text
│ │ ├── BulletList.tsx ← 01/02/03 numbered points
│ │ ├── ProductCallout.tsx ← hero shot + аннотации
│ │ ├── ScreenRecord.tsx ← embed mp4/gif экранки
│ │ ├── ChartReveal.tsx ← animated bar/line chart
│ │ ├── LowerThird.tsx ← talking-head + name strip
│ │ ├── BeforeAfter.tsx ← split-screen comparison
│ │ ├── QuoteCard.tsx ← testimonial с атрибуцией
│ │ └── OutroCTA.tsx ← closing scene (NO button — текст)
│ └── lib/
│ ├── brand.ts ← автопатчится из brand.yaml
│ └── audio.ts ← VO + music mixing helpers
└── public/
├── assets/ ← фотки, скринрекорды
├── vo/ ← per-scene VO mp3 (от vo.py)
└── music/ ← фоновые треки (опц.)
9 типов сцен
| Тип | Use case | Визуальный рецепт | Длит. |
|---|---|---|---|
title_card | Intro/outro big text | Огромный headline по центру + плавная анимация bg | 3-5с |
bullet_list | 3-5 ключевых пунктов | Numbered list со staggered reveal (0.4s между айтемами) | 8-15с |
product_callout | Hero-шот с labeled features | Продукт 60% кадра + 2-3 анимированных стрелки/лейбла | 8-12с |
screen_record | Демо софта / UI walkthrough | Embedded mp4 с zoom/highlight overlay | 10-30с |
chart_reveal | Data viz | Animated bar/line или big-number count-up от 0 к target | 5-10с |
lower_third | Представление спикера | Talking-head video + name/title strip снизу-слева | 3-6с |
before_after | Демонстрация результата | 50/50 split с reveal slider (опц.) | 6-10с |
quote_card | Отзыв | Огромная кавычка, italic-quote 48-60pt + атрибуция | 6-12с |
outro_cta | Closing scene | Bold action text + бренд-цвета (НЕТ кнопки) | 4-6с |
Полный спек — в справочнике scene/slide-типов.
4 готовых шаблона
| Шаблон | Сцены | Описание |
|---|---|---|
tutorial | title_card → bullet_list → screen_record → screen_record → bullet_list → outro_cta | Пошаговый how-to («как установить T608») |
case_study | title_card → lower_third → bullet_list → chart_reveal → before_after → quote_card → outro_cta | Клиентская success-story с метриками («Клиника в Актобе — 2.4М ₸/мес») |
product_demo | title_card → product_callout → product_callout → screen_record → chart_reveal → outro_cta | Hero-разбор продукта с фичами («T608 deep dive») |
onboarding | title_card → bullet_list → screen_record → bullet_list → screen_record → outro_cta | Обучающее видео клиент/staff («как онбордить новую клинику») |
Workflow
init_project.py — один раз на проект. vo.py заполняет duration_seconds обратно в план, render.py берёт уже синхронизированную раскадровку.
Шаг 1 — bootstrap (один раз)
python ~/.claude/skills/creative-explainer-video/scripts/init_project.py \ --project apparatus # Копирует remotion_template/ → ~/video-projects/apparatus/explainer-remotion/ # Копирует assets, патчит brand.ts из brand.yaml, npm install (~30-60 сек)
Шаг 2 — план сцен
python ~/.claude/skills/creative-explainer-video/scripts/plan.py \
--project apparatus \
--topic "Как УВТ-кабинет окупается за 90 дней — пример клиники в Актобе" \
--template case_study \
--scene-count 7 \
--output explainer_plan.json
# Gemini 2.5 Flash, ~$0.0001. На выходе — JSON со сценами:
# { "scene_n": 3, "type": "chart_reveal",
# "vo_text": "За первые три месяца клиника обработала 247 пациентов...",
# "on_screen_text": "247 пациентов / 2,4 млн ₸",
# "visual_hint": "animated bar chart 0→247, count-up до 2,400,000",
# "duration_seconds": null, "asset_ref": null }
Шаг 3 — Approval gate
vo_text — потому что от него зависит и звук, и длительность сцены. Менять visual_hint можно после рендера, менять текст озвучки — нет.
Шаг 4 — озвучка
python ~/.claude/skills/creative-explainer-video/scripts/vo.py \ --project apparatus \ --plan explainer_plan.json \ --voice-id <voice_id> \ --output-dir public/vo/ # Что делает: # 1. На каждую сцену из плана зовёт ElevenLabs eleven_multilingual_v2 # 2. Сохраняет scene_NN.mp3 в public/vo/ # 3. Замеряет длительность через mutagen # 4. ПАТЧИТ duration_seconds обратно в plan.json # Результат: Remotion-таймлайн теперь VO-synced автоматически
vo.py не просто генерит mp3 — он патчит план обратно. До этого шага все duration_seconds в плане были null. После — Remotion знает сколько каждая сцена должна длиться (ровно столько, сколько говорит голос).
Шаг 5 — рендер
python ~/.claude/skills/creative-explainer-video/scripts/render.py \ --project apparatus \ --plan explainer_plan.json \ --aspect 9:16 \ --output ~/Desktop/apparatus_explainer.mp4 \ [--bg-music public/music/calm_corporate.mp3] \ [--bg-music-volume 0.15] # Под капотом — `npx remotion render`. Если задана музыка — после Remotion # идёт ffmpeg-проход с ducking (~15% под VO, fade in/out на краях). # Скорость: ~1× realtime на M1/M2 (3-мин видео → ~3-5 мин рендера) # По окончании авто-вызывает present.py (GR-1)
Voice-over (ElevenLabs)
Дефолтный голос настраивается в brand.yaml в блоке vo::
vo: provider: elevenlabs voice_id: <voice_id> model: eleven_multilingual_v2 stability: 0.5 similarity_boost: 0.7
Locale-aware: --locale ru (дефолт), kk, en, uk. Multilingual-модель сама детектит язык.
Background music
Опциональная. --bg-music <path> → авто-дакинг до ~15% под VO, fade in 1с в начале, fade out 2с в конце, лёгкий ramp-up на переходах между сценами. Если без музыки — чистый VO + тишина в зазорах.
Внутренности
Скрипты
| Файл | Что делает |
|---|---|
scripts/init_project.py | One-time bootstrap: копия remotion_template/, npm install, патч brand.ts |
scripts/plan.py | Бриф + template + scene-count → один вызов Gemini → JSON-план сцен |
scripts/vo.py | ElevenLabs TTS per scene + measure duration + патч duration_seconds в план |
scripts/render.py | npx remotion render → mp4 + опц. ffmpeg-микс bg-music с ducking |
scripts/present.py | HTML preview с embedded mp4 + кликабельным scene-timeline + payload-сайдбаром (GR-1) |
scripts/db.py | CRUD по explainer_videos + explainer_scenes |
Стоимость и скорость
| Операция | Что использует | Цена |
|---|---|---|
| Plan generation | Gemini 2.5 Flash | $0.0001 |
| VO на минуту аудио | ElevenLabs multilingual_v2 | $0.18 |
| Video render (3-мин explainer) | локальный Remotion | $0 |
| Итого за 3-мин кейс-стади: | ~$0.55 | |
Для сравнения: ручное продакшн-агентство — $500-2000 за explainer аналогичного качества. Пайплайн делает это за <$1 и ~5 минут wall-clock.
Тайминги
init_project.py— 30-60 сек один раз на проектplan.py— ~10 сек (один Gemini call)vo.py— ~5-15 сек на сцену, зависит от длины VOrender.py— ~1× realtime на M1/M2 (3-мин видео → ~3-5 мин)- Cold start: ~10 мин на первый explainer; ~5-7 мин на следующие в том же проекте
Hard constraints
- NO CTA button — outros text-only
- NO brand logo — только текст + бренд-цвета через CSS
- NO Unicode glyph substitution —
₸,×,—рендерятся real-Unicode через CSS - NO text truncation — строки из JSON рендерятся as-is
- NO photo equipment in frame — Product/Lower-third берут только подготовленные фото
Output
~/video-projects/<project>/explainer/<video_name>/ ├── explainer_plan.json ├── public/ │ ├── vo/scene_01.mp3 ... scene_07.mp3 │ └── assets/... └── render.mp4 ~/Desktop/apparatus_explainer.mp4 ← финальное видео ~/Desktop/apparatus_explainer.html ← GR-1 preview с timeline + payload
Gotchas и tips
duration_seconds в плане null → Remotion не знает сколько длится каждая сцена → рендер либо упадёт, либо выдаст «черновую» раскадровку с дефолтами.
public/assets/ до запуска render.py. Снять можно video-screencast или Screen Studio.
chart_reveal в плане поле chart_data — это объект {kind: 'bar'|'line'|'big_number', labels: [], values: [], unit: '₸'|'%'|...}. Если хочется кастомный график — пиши его как kind: 'big_number' и в visual_hint опиши какую анимацию ждёшь.
🎬 Примеры работы
Место в пайплайне
Explainer — самостоятельный пайплайн, не часть видео-рекламного. Использует brand.yaml и (опционально) ассеты от video-screencast / clipgen.
Сверху может стоять creative-orchestrator с режимом explainer-orchestrate для батча эпизодов в одном style.