Skill #6 · Clip vision & import

video-analyzer

«Глаза» для clip library: извлекает кадры из видео, описывает что там реально происходит через LLM Vision, проставляет scene_type/mood и складывает в проектную БД. Используется при импорте чужих/готовых видео — когда снимал не Veo.

Путь
~/.claude/skills/video-analyzer/
Триггеры
проанализируй видео, загрузи клип, добавь видео в библиотеку, analyze clip, import video, опиши видео, что на видео, импорт клипов
Зависит от
ffmpeg + ffprobe, Python 3.10+, multimodal LLM (Vision для анализа кадров)
Пэйрится с
clipgen (для Veo-результатов), director (потребитель библиотеки)

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

Это «приёмщик клипов». Если у тебя есть готовые видосы — со съёмки, с телефона клиента, скачанные из инстаграма конкурента, сгенерённые в Veo — analyzer их разглядывает и заносит в библиотеку проекта с правильным описанием. После этого director может их использовать в монтаже наравне с любыми другими.

  1. Берёт видеофайл (один или пачку)
  2. Извлекает 3-5 кадров (начало / середина / конец / ключевые моменты)
  3. Прокидывает кадры через Vision — буквально смотрит что на них
  4. Определяет scene_type (hook / product / lifestyle / testimonial / cta / transition) и mood (energetic / calm / dramatic / funny / luxury)
  5. Пишет подробное описание — что в кадре, какое освещение, что за движение, какое настроение
  6. Регистрирует в clips table + linкуeт к проекту через project_clips junction
Зачем подробное описание. Director выбирает клипы по их description, scene_type и mood. Если описание мутное или неточное — клип уйдёт в неподходящую сцену, ролик будет смотреться странно. Качество описания = качество монтажа.

Что analyzer умеет увидеть из кадров

Real-time видео он смотреть не может, но из 3-5 хорошо выбранных кадров вытаскивает:

Два режима работы

РежимКогдаКол-во кадровПодробность описания
Single clip Пришёл один файл — нужно тщательно 5 кадров Полное описание 3-5 предложений
Batch import Свалили пачку из 20 видео — нужно быстро прогнать 3 кадра на каждый Лаконично — 2-3 предложения, но визуальный анализ не пропускать

Scene types и moods

Scene type — выбирай один

ТипЧто это
hookВизуально яркий, цепляющий, неожиданный — для первых 2-3 секунд ролика
productПоказ продукта / услуги / демонстрация фич
lifestyleЛюди пользуются / наслаждаются продуктом в реальном контексте
testimonialЧеловек говорит / отзыв / social proof / до-после
ctaЭнергия call-to-action, urgency, ощущение завершения
transitionАбстрактное движение / текстура / для мостиков между сценами

Mood — выбирай доминанту

MoodХарактеристика
energeticБыстрое движение, яркость, динамика
calmМедленно, мягко, минимально
dramaticВысокий контраст, напряжение, импакт
funnyЮмор, играющий, неожиданный
luxuryЭлегантно, премиум, золото/тёмный фон, богатая текстура

Описание — хорошее vs плохое

Хорошее описание отвечает на вопрос «если человек не может посмотреть клип, что ему нужно знать, чтобы решить — подойдёт ли он под конкретный момент рекламы?»

«Close-up рук женщины, аккуратно ставящих белую керамическую вазу на деревянный стол. Мягкий natural свет из окна слева, тёплые золотистые тона. Shallow DOF размывает фон — современная кухня. Спокойное медленное движение. Действие занимает первые 3 секунды, дальше камера держится на вазе.»
Плохое описание: «Женщина с вазой на кухне.»
По такому описанию director не может решить — это hook или calm-lifestyle, продукт ли это или просто атмосфера. Клип превращается в slot machine.

Команды

Извлечь кадры из одного клипа

python ~/.claude/skills/video-analyzer/scripts/extract_frames.py /path/to/video.mp4 \
  --output-dir ~/video-projects/apparatus/thumbnails \
  --frames 5

# → пути к 5 JPG-кадрам + метаданные (duration, resolution, fps)

Извлечь кадры пачкой

python ~/.claude/skills/video-analyzer/scripts/extract_frames.py \
  --batch /path/to/videos/ \
  --output-dir ~/video-projects/apparatus/thumbnails \
  --frames 3

Зарегистрировать клип в БД

python ~/.claude/skills/video-analyzer/scripts/register_clip.py \
  --project-dir ~/video-projects/apparatus \
  --filepath /path/to/video.mp4 \
  --description "Подробное описание после визуального анализа..." \
  --scene-type lifestyle \
  --mood calm \
  --tags "woman,vase,kitchen,warm" \
  --actions "places vase on table,camera holds" \
  --source upload

Для Veo-клипов

python ~/.claude/skills/video-analyzer/scripts/register_clip.py \
  --project-dir ~/video-projects/apparatus \
  --filepath /path/to/veo_clip.mp4 \
  --description "..." --scene-type hook --mood energetic \
  --source veo \
  --prompt "Original Veo prompt that generated this clip"

Перепроанализировать существующий клип

# 1. Берём текущую инфу
python ~/.claude/skills/video-analyzer/scripts/db_helper.py get-clip \
  ~/video-projects/apparatus 42

# 2. Извлекаем кадры заново
python ~/.claude/skills/video-analyzer/scripts/extract_frames.py \
  /path/to/existing_clip.mp4 \
  --output-dir ~/video-projects/apparatus/thumbnails --frames 5

# 3. Смотрим кадры → пишем новое описание → обновляем
python ~/.claude/skills/video-analyzer/scripts/db_helper.py update-clip \
  ~/video-projects/apparatus 42 \
  --description "Обновлённое описание..." \
  --scene-type hook --mood energetic

Скрипты

ФайлЧто делает
scripts/extract_frames.pyFFmpeg-извлечение N равноотстоящих кадров из видео + ffprobe для метаданных (duration / resolution / fps). Поддерживает single и batch режимы
scripts/register_clip.pyГлавная регистрация: копирует видео в clips/ проекта, генерит thumbnail, добавляет в clips + project_clips, сохраняет prompt если это Veo, метаданные источника
scripts/db_helper.pyCRUD-хелперы по clips (project-scoped) — get-clip, update-clip, list-clips, статистика
scripts/schema.pyОбщий schema-source-of-truth (v8) — синхронизирован со всеми остальными скиллами

Параметры register_clip.py

ПараметрЗначения
--sourceupload (пользователь дал), veo (clipgen сгенерил), remotion (motion graphics)
--scene-typehook / product / lifestyle / testimonial / cta / transition
--moodenergetic / calm / dramatic / funny / luxury
--descriptionПолное описание (string)
--tagsComma-separated теги для поиска
--actionsЧто происходит (comma-separated)
--promptОригинальный промпт (только для --source veo)

Что попадает в БД

После register_clip в проектной director.db появляется запись в clips:

id              | 42
filename        | clip_042.mp4
filepath        | ~/video-projects/apparatus/clips/clip_042.mp4
thumbnail_path  | ~/video-projects/apparatus/thumbnails/clip_042_thumb.jpg
duration        | 6.0
width, height   | 1080, 1920
fps             | 30
description     | "Close-up рук женщины..."
scene_type      | lifestyle
mood            | calm
tags            | "woman,vase,kitchen,warm"
actions         | "places vase on table,camera holds"
source          | upload (или veo / remotion)
prompt          | NULL (или оригинальный Veo prompt)
created_at      | 2026-05-16T12:34:56

Link к проекту — через junction project_clips(project_id, clip_id). Один клип теоретически может быть прилинкован к нескольким проектам, но обычно scoped к одному.

Batch report

После пачки import показывай пользователю сводку:

Gotchas и tips

Не доверяй имени файла. «hook.mp4» может оказаться спокойным lifestyle. Всегда смотри кадры через Read, и только потом проставляй scene_type/mood. То же правило что и в clipgen для референсов.
Frames должны быть содержательными. Если видео начинается с чёрного fade-in — frame 0 будет чёрным, и описание получится мусорным. В таких случаях лучше извлекать больше кадров (7-10) и брать те, где реально что-то видно.
Для Veo-результатов — передавай --prompt. Сохранённый оригинальный промпт пригодится потом для дебага: «почему этот клип такой, что просили?». Director это поле не использует, но history полезен.
Batch import = быстрая проверка library. Если клиент скинул свои съёмки 20 штук — прогон через analyzer показывает, что у него есть из коробки. Потом clipgen добивает пробелы через Veo.
Возможный апгрейд клипов от clipgen. Veo сразу регистрирует клип с описанием = промпт. После генерации clipgen вызывает analyzer (через analyze_clip.py) → получает реальные кадры → обновляет описание через update-clip. Это нормальный workflow — описание из промпта неточное, нужен честный visual review.

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

Открой Showcase → phone-clips — там 2 phone-camera клипа клиента (iPhone 9:16 raw) — пример input'а для analyzer'а. Все примеры — реальные production-runs, embedded локально (работают офлайн).

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

user upload / Veo result analyzer clips table director (montage)

Analyzer — это «ворота» в clip library. Любой клип, который не попал в БД через analyzer (или через clipgen с обновлённым описанием) — для Director невидим.

Сценарии вызова: