Skill #15 · Long-form narrated videos NEW · May 2026

creative-explainer-video

Длинные narrated-видео на 2-5 минут: туториалы, кейс-стади, демо продукта, обучалки. Remotion + ElevenLabs TTS + ffmpeg. 9 типов сцен, 4 готовых шаблона. ~$0.55 за 3-минутный кейс против $500-2000 у агентств.

Путь
~/.claude/skills/creative-explainer-video/
Триггеры
explainer video, tutorial video, кейс-видео, обучающее видео, видео-инструкция, narrated video, voiceover video
Зависит от
Node 18+, npm, Remotion, ffmpeg, GOOGLE_API_KEY (план), ELEVENLABS_API_KEY (озвучка)
Пэйрится с
creative-orchestrator, copywriter, clipgen (для ScreenRecord-сцен), captions (опц. accessibility)

Что делает простыми словами

Это не ads. Это длинные образовательные видео: туториалы, разборы, кейсы, демо. В отличие от video-clipgen (где Veo делает короткие 9-30 сек рекламные клипы) — тут история на 2-5 минут с озвучкой и поэтапной визуальной композицией.

Типичные форматы, под которые скилл заточен:

Длительность типично 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_cardIntro/outro big textОгромный headline по центру + плавная анимация bg3-5с
bullet_list3-5 ключевых пунктовNumbered list со staggered reveal (0.4s между айтемами)8-15с
product_calloutHero-шот с labeled featuresПродукт 60% кадра + 2-3 анимированных стрелки/лейбла8-12с
screen_recordДемо софта / UI walkthroughEmbedded mp4 с zoom/highlight overlay10-30с
chart_revealData vizAnimated bar/line или big-number count-up от 0 к target5-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_ctaClosing sceneBold action text + бренд-цвета (НЕТ кнопки)4-6с

Полный спек — в справочнике scene/slide-типов.

4 готовых шаблона

ШаблонСценыОписание
tutorialtitle_card → bullet_list → screen_record → screen_record → bullet_list → outro_ctaПошаговый how-to («как установить T608»)
case_studytitle_card → lower_third → bullet_list → chart_reveal → before_after → quote_card → outro_ctaКлиентская success-story с метриками («Клиника в Актобе — 2.4М ₸/мес»)
product_demotitle_card → product_callout → product_callout → screen_record → chart_reveal → outro_ctaHero-разбор продукта с фичами («T608 deep dive»)
onboardingtitle_card → bullet_list → screen_record → bullet_list → screen_record → outro_ctaОбучающее видео клиент/staff («как онбордить новую клинику»)

Workflow

init_project.py plan.py Approval vo.py render.py present.py (auto)

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.pyOne-time bootstrap: копия remotion_template/, npm install, патч brand.ts
scripts/plan.pyБриф + template + scene-count → один вызов Gemini → JSON-план сцен
scripts/vo.pyElevenLabs TTS per scene + measure duration + патч duration_seconds в план
scripts/render.pynpx remotion render → mp4 + опц. ffmpeg-микс bg-music с ducking
scripts/present.pyHTML preview с embedded mp4 + кликабельным scene-timeline + payload-сайдбаром (GR-1)
scripts/db.pyCRUD по explainer_videos + explainer_scenes

Стоимость и скорость

ОперацияЧто используетЦена
Plan generationGemini 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.

Тайминги

Hard constraints

Что TSX гарантирует автоматически (как в creative-carousel):
  • 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

vo.py обязателен перед render.py. Без него все duration_seconds в плане null → Remotion не знает сколько длится каждая сцена → рендер либо упадёт, либо выдаст «черновую» раскадровку с дефолтами.
ElevenLabs quota. Один 3-мин explainer = ~3 минуты TTS = ~$0.55. На бесплатном плане квота кончается за 1-2 видео. На paid — следи за месячным лимитом.
ScreenRecord-сцены — отдельно. Скилл не записывает скринкасты сам. Mp4-файлы должны лежать в public/assets/ до запуска render.py. Снять можно video-screencast или Screen Studio.
chart_data структура. Для chart_reveal в плане поле chart_data — это объект {kind: 'bar'|'line'|'big_number', labels: [], values: [], unit: '₸'|'%'|...}. Если хочется кастомный график — пиши его как kind: 'big_number' и в visual_hint опиши какую анимацию ждёшь.
Не путать с video-clipgen. Этот скилл — про длинные narrated видео 2-5 мин (туториалы, кейсы). video-clipgen — про короткие ad-клипы 9-30 сек через Veo. Разные форматы, разные движки, разные use cases.

🎬 Примеры работы

Открой Showcase → coming-soon — там Coming soon — нет real outputs (скилл новый, May 2026). Стоимость генерации example: ~$0.55. Все примеры — реальные production-runs, embedded локально (работают офлайн).

Место в пайплайне

brief plan.py (Gemini) Approval vo.py (ElevenLabs) render.py (Remotion + ffmpeg) YouTube / Landing / IG Reels

Explainer — самостоятельный пайплайн, не часть видео-рекламного. Использует brand.yaml и (опционально) ассеты от video-screencast / clipgen.

Сверху может стоять creative-orchestrator с режимом explainer-orchestrate для батча эпизодов в одном style.