Skill #8 · Programmatic clip generator

video-motionfx

Альтернатива Veo для сцен, где не нужны реальные люди/локации — data viz, графики, animated stats, абстрактные фоны, текстовые хуки, 3D-показ продукта. 26 Remocn-компонентов + React Video Editor effects + @remotion/three + @remotion/motion-blur как кирпичи для freestyle композиций. Бесплатно, мгновенно, детерминистично.

Путь
~/.claude/skills/video-motionfx/
Триггеры
remotion clip, motion graphics clip, инфографика, data viz, animated chart, animated stats, particle effect, motion blur, 3d model, three.js
Зависит от
Node.js 18+, npm, инициализированный <project>/remotion/ (через video-remotion), Remocn components, RVE effects, @remotion/three, @remotion/motion-blur
Пэйрится с
remotion (общая инфра), clipgen (выбор где Veo, где motionfx), director (потребитель), remotion-best-practices

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

Это «генератор клипов из кода». Когда сцена не про живых людей, а про числа, абстракцию, графики или показ продукта в 3D — гонять Veo бессмысленно и дорого. Тут пишется композиция на React/Remotion, рендерится за 10-30 секунд, кладётся в clips/ и регистрируется в той же БД, что и Veo-клипы. Director использует абсолютно одинаково.

motionfx vs clipgen (Veo)

motionfx (Remotion)clipgen (Veo)
Статистика, числа, метрикиРеальные люди, эмоции
Сравнения цен, графикиФизические пространства, интерьеры
Тренды роста, прогрессКрупные планы продукта
Абстрактные фоны, паттерныLifestyle-съёмка
Text-driven хукиCinematic сцены
Before/after сравненияМедицинские процедуры
Free, instant, deterministic$0.05-0.15/sec, 1-3 мин, unpredictable
Главный триггер для motionfx: сцена показывает данные, график, 3D-модель, анимированный текст, абстрактный фон или particle/blur эффект. Если можно вообразить «такое в After Effects нарисовали» — это motionfx, не Veo.

Два подхода: Preset или Freestyle

ПодходКогда
Preset Запрос хорошо ложится на один из 26 готовых Remocn-компонентов или RVE-эффектов. Быстро, надёжно.
Freestyle Ни один preset не подходит, или нужно комбинировать несколько компонентов в одной сцене. Пишешь новую .tsx-композицию.

26 Remocn-компонентов по категориям

Data Visualization

ComponentImportBest for
AnimatedBarChartremocn/animated-bar-chartСравнения цен, рейтинги, рэнкинги
AnimatedLineChartremocn/animated-line-chartТренды роста, прогресс во времени
PricingTierFocusremocn/pricing-tier-focusТарифные планы, пакеты услуг
CircularProgressrve/circular-progressОдна метрика («98% success rate»)
ChartAnimationrve/chart-animationАльтернативный стиль графика

Scene Effects

ComponentBest for
CardFlip (rve/card-flip)Before/after, reveal-моменты
ParticleExplosion (rve/particle-explosion)CTA-акцент, celebration
LiquidWave (rve/liquid-wave)Абстрактный фон, переход
GeometricPatterns (rve/geometric-patterns)Modern abstract фон
MatrixRain (rve/matrix-rain)Tech/hacker эстетика

Text Effects (для text-driven клипов)

ComponentЭффект
BlurRevealТекст выходит из размытия
StaggeredFadeUpСлова появляются по одному снизу
TrackingInLetter-spacing сужается
RgbGlitchTextRGB channel split glitch
MatrixDecodeСлучайные символы decode'ятся в реальный текст
MarkerHighlightТекст с анимированным маркером
ShimmerSweepГрадиентный sweep поверх текста
TypewriterCharacter-by-character
SlotMachineRollЦифры крутятся как в слотах
TextFadeReplaceCross-fade между строками
MaskedSlideRevealMasked slide reveal
InlineHighlightInline highlight куска текста

Scene Transitions (между сценами внутри клипа)

ComponentВизуал
FrostedGlassWipeBlurred glass panel sweep — премиум
ChromaticAberrationWipeRGB split slide — агрессивно/tech
GridPixelateWipeGrid dissolve (wave/diagonal/spiral)
DirectionalWipeПростой slide (left/right/up/down)
ZoomThroughTransitionScale up + fade — кинематографично

Element Animation

ComponentBest for
SpringPopInPop-in любого элемента с spring physics
ToastNotificationNotification-style popup
PulsingIndicatorPulsing dot/ring
SpotlightCardCard с cursor-following glow
SuccessConfettiConfetti particles

Backgrounds & Post-Processing

ComponentBest for
MeshGradientBgАнимированный градиент (видео не нужно)
CameraMotionBlur (@remotion/motion-blur)Кинематографический motion blur поверх любого контента

3D Showcase (ThreeCanvas)

ComponentBest for
ImplantShowcase (custom/ImplantShowcase)GLB-модель с авто-scale + title overlay (обобщается на любую модель продукта)
Implant3D (custom/Implant3D)Процедурная 3D-модель (code-only, файлы не нужны) — fallback / placeholder
Render flags для 3D — ОБЯЗАТЕЛЬНО. Всегда используй --gl=angle --concurrency=1. WebGL требует single-threaded рендера, без этих флагов рендер либо падает, либо даёт мусор.

Получение качественных 3D-моделей

ИсточникСпособКачествоФормат
AI image-to-3DUpload фото → получаешь GLBHighGLB
SketchfabFree аккаунт → скачать CC-BY моделиHighGLB
Procedural (код)Three.js geometry в компонентеLowN/A

Image-to-3D сервисы (best способ под клиентский продукт)

СервисFree tierOutput
Meshy.ai5 моделей/месGLB/OBJ/FBX
Tripo3D3 модели/деньGLB
Rodin by HyperFree tierGLB
Luma GenieFree tierGLB
TripoSROpen source (локально)GLB
STL-to-GLB конвертации часто ломаются. Геометрия с дырами, gaps между треугольниками — выглядит ужасно. Лучше брать GLB сразу с image-to-3D AI или Sketchfab. ImplantShowcase авто-скейлит любой GLB через Box3 и оверрайдит материалы для консистентного вида.

Workflow в одном куске

  1. Понять запрос — данные, концепт, mood, duration, контекст в ролике
  2. Выбрать подход — Preset (готовый компонент) или Freestyle (с нуля)
  3. Создать .tsx композицию в <project>/remotion/src/custom/<Name>.tsx
  4. Зарегать в Root.tsx (<Composition> с правильными durationInFrames, fps, width, height)
  5. Рендер через npx remotion render
  6. Зарегистрировать в БД (общая director.db через video-clipgen/scripts/db.py)
  7. Открыть для review

Команды

# Render (preset/freestyle)
cd ~/video-projects/apparatus/remotion
npx remotion render MyClip ../clips/motionfx_001.mp4

# С пропсами
npx remotion render MyClip ../clips/motionfx_001.mp4 \
  --props='{"title":"Apparatus","data":[...]}'

# 3D рендер — ОБЯЗАТЕЛЬНО эти флаги
npx remotion render ImplantShowcase ../clips/3d_showcase.mp4 \
  --gl=angle --concurrency=1 \
  --props='{"modelFile":"model.glb","title":"Straumann BLT"}'

# Регистрация в БД (общая с clipgen)
python ~/.claude/skills/video-clipgen/scripts/db.py update-clip \
  ~/video-projects/apparatus 42 \
  --description "Анимированный график сравнения цен — 4 столбца, основной бренд выделен зелёным" \
  --scene-type product --mood luxury \
  --tags "stats,chart,comparison,price,remotion"

# 3D модели в БД
python ~/.claude/skills/video-director/scripts/db.py add-model \
  ~/video-projects/apparatus /path/to/model.glb \
  --model-type implant --description "Straumann BLT implant" --source meshy

Скрипты

У motionfx нет своей scripts/ папки. Скилл — это набор инструкций + ссылка на 26 Remocn-компонентов + 3D-инфраструктура. Рендер идёт через стандартный npx remotion render в проектной remotion/ директории. Управление БД переиспользует db.py из video-clipgen и video-director — единая director.db на проект.

Color schemes по mood'у

MoodBackgroundAccentText
Premium/Luxury#0a0a0a#FFD700 (gold)#FFFFFF
Medical/Clinical#0a0a0a#0ea5e9 (blue)#FFFFFF
Energy/Action#0a0a0a#00FF88 (green)#FFFFFF
Sale/Urgency#0a0a0a#FF4444 (red)#FFFFFF
Calm/Trust#0f172a#8b5cf6 (purple)#E2E8F0

Layout для 9:16 (1080×1920)

Animation timing — рекомендуемые значения

ЭтапFrames @ 30fpsСекунды
Fade-in заголовков10-150.3-0.5
Анимация графика (spring)30-601-2
Stagger между элементами6-100.2-0.3
Длительность сцены90-1803-6
Exit fade10-150.3-0.5

Motion blur — когда оборачивать

import { CameraMotionBlur } from "@remotion/motion-blur";

<CameraMotionBlur samples={10} shutterAngle={180}>
  {/* fast-moving animated content */}
</CameraMotionBlur>

Использовать для: быстрые wipes, quick transitions, агрессивные hook-анимации.

НЕ использовать для: медленные графики, текст, который должен оставаться читаемым.

Component locations в проекте

<project-dir>/remotion/src/
├── components/
│   ├── remocn/           # 26 Remocn компонентов (shadcn registry)
│   └── rve/              # React Video Editor effects (copy-paste)
├── custom/               # Project-specific композиции
├── templates/            # Стандартные шаблоны (TextoverAd, etc.)
└── lib/
    ├── brand.ts          # Brand colors/fonts (из project.yaml)
    ├── animations.ts     # Animation library
    ├── presets.ts        # TextoverAd presets
    └── remocn-effects.ts # RemocnText adapter

3D models в БД

Таблица models_3d (schema v5+):

ColumnTypeDescription
idINTEGER PKAuto
filenameTEXTGLB filename
filepathTEXTFull path
descriptionTEXTЧто показывает модель
model_typeTEXTproduct, equipment, abstract, character, other
file_size / poly_countINTEGERBytes / face count
sourceTEXTsketchfab, github, generated, upload, meshy, tripo
licenseTEXTCC-BY, CC0, custom
tagsTEXT (JSON)Массив тегов
usage_countINTEGERСколько раз использована
render_flagsTEXTDefault: --gl=angle --concurrency=1

Code quality — remotion-best-practices

MANDATORY: перед написанием ЛЮБОГО Remotion-кода загружай только релевантные правила из ~/.claude/skills/remotion-best-practices/rules/. НЕ грузи все 39 файлов — выбирай по задаче.
ЗадачаПравила
Chart/stats клипcharts.md + animations.md
Text-driven hooktext-animations.md + timing.md
Клип с видео-фономvideos.md + assets.md
Новая композицияcompositions.md + parameters.md
Transitionstransitions.md + sequencing.md
3D контент3d.md
Аудио / SFX / voiceoveraudio.md / sfx.md / voiceover.md
Transparent overlaytransparent-videos.md
FFmpeg операцииffmpeg.md + trimming.md

Gotchas и tips

3D всегда с --gl=angle --concurrency=1. Это не опция, это закон. WebGL в Remotion работает только single-threaded — иначе либо crash, либо чёрные кадры.
Текст под motion blur нечитаем. Не оборачивай в CameraMotionBlur сцены с текстом — blur размажет буквы. Blur — для движения, не для информации.
Freestyle через Sequence — для многосценных клипов. Один .tsx может содержать несколько <Sequence from={frame} durationInFrames={n}> — каждая Sequence это «подсцена». Удобно для intro → chart → outro в одном клипе.
Зови image-to-3D под продукт клиента. Generic Sketchfab implant выглядит как stock — а Meshy.ai по фотке реального изделия даёт уникальный 3D показ, которого нет ни у кого. Зацепка для премиум-сегмента.
Когда брать remotion вместо motionfx. Если нужен стандартный intro/CTA/lower-third — это video-remotion с готовыми шаблонами. Motionfx = тяжёлая артиллерия для специфичных эффектов и data viz.
clipgen может позвать motionfx сам. Если video-clipgen при планировании клипа понимает, что сцена про данные/абстракцию/3D — он делегирует motionfx, не Veo. Это explicit в логике clipgen.

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

scene нужна data viz / 3D / abstract motionfx npx remotion render clip in DB (source=remotion) director uses it

Motionfx — параллельный путь к Veo. Клипы попадают в ту же director.db с source='remotion', Director работает с ними идентично. Orchestrator может запросить motionfx-клип напрямую, или clipgen делегирует автоматически когда понимает что Veo не подходит.

Brand-config читается из project.yaml → remotion.brand — тот же source, что и у video-remotion. Инфраструктура (remotion/ в проекте, npm install, Root.tsx) тоже общая — инициализируется один раз через init_project.py из remotion-скилла, дальше motionfx добавляет свои композиции в src/custom/.