Onboarding для разработчика

Чек-лист «сел за чужую систему — запусти за час». Что должно стоять локально, какие env-переменные, как разложена файловая система, как запустить первый проект, где смотреть результаты и как реагировать на типичные грабли.

1. Что должно стоять локально

Целевая система: macOS (Intel или Apple Silicon). На Linux — теоретически работает, но не тестировалось.

System deps

ЧтоКак поставитьПроверка
Homebrewсм. brew.shwhich brew
ffmpegbrew install ffmpegffmpeg -version
node 18+brew install node или nvmnode -v должно ≥18
python 3.9+brew install python@3.11 (или asdf/pyenv)python3 --version
npmидёт с nodenpm -v
sqlite3предустановлен в macOSsqlite3 --version

Python packages

Глобально или в venv — на твоё усмотрение. Скиллы зовут python3 напрямую, поэтому если venv — нужен в активном shell.

pip install \
  google-genai \              # Gemini SDK (постеры, planning, QA, Veo)
  pillow \                    # image processing
  pyyaml \                    # парсинг brand.yaml / project.yaml / preset.yaml
  mutagen \                   # длительность mp3 для VO-sync
  elevenlabs \                # TTS client
  openai-whisper              # транскрипция

# опционально — Higgsfield backend (NEW — для video-clipgen-higgsfield):
pip install higgsfield-client

# опционально, если на M1/M2 хочется быстрее:
pip install faster-whisper
Важно: ставить именно google-genai (это новая SDK), а НЕ google-generativeai (это старая, депрекейтнутая). У них разные API.

Node packages

Глобально ничего ставить не нужно. Каждый проект, который использует carousel или explainer, на init создаст свою копию Remotion-приложения и сделает локальный npm install. Это занимает 30-60 секунд один раз на проект.

2. Env vars в shell rc

Добавь в ~/.zshrc (или ~/.bash_profile):

export GOOGLE_API_KEY="AIzaSy..."         # обязательная — все Gemini/Veo вызовы
export ELEVENLABS_API_KEY="sk_..."        # обязательная — TTS для voiceover/explainer
export HF_API_KEY="hf_..."                # опц — Higgsfield (video-clipgen-higgsfield, NEW May 2026)
export HF_API_SECRET="hfs_..."            # опц — обязателен вместе с HF_API_KEY
export FB_GRAPH_ACCESS_TOKEN="EAA..."     # опционально — для creative-orchestrator perf-import

После правки — source ~/.zshrc или перезапусти Terminal / Claude Code session.

Per-project ключи. Если работаешь с несколькими клиентами на разных Google Cloud / ElevenLabs аккаунтах — заведи ~/video-projects/<project>/api_keys.db через project-setup. Скилл сначала проверит проектные ключи, потом env. Подробнее — тут.

3. Структура ~/video-projects/

Это базовая папка проектов. У каждого клиента/бренда — своя поддиректория со всем стейтом:

~/video-projects/
├── director.db                 ← shared SQLite БД (v8 schema), общая для всех проектов
├── <project_slug>/             ← один проект клиента
│   ├── project.yaml            ← business info, конфиги скиллов, final_output_dir
│   ├── brand.yaml              ← брендбук: цвета, шрифты, voice tone, VO voice_id
│   ├── brief.md                ← human-readable бриф (для копирайтера)
│   ├── api_keys.db             ← опц. per-project ключи (если не глобальные)
│   ├── references/             ← фото-референсы (product shots, конкуренты, vibes)
│   ├── clips/                  ← Veo-сгенерированные клипы + analyzer-метаданные
│   ├── voiceovers/             ← mp3 от ElevenLabs + транскрипты
│   ├── music/                  ← фоновые треки для роликов
│   ├── videos/                 ← собранные video ads (директор финальный output)
│   ├── posters/                ← статика (creative-poster + multi-aspect outpaint)
│   ├── carousel/               ← карусели (creative-carousel output)
│   ├── carousel-remotion/      ← per-project Remotion app для carousel (bootstrap)
│   ├── explainer/              ← explainer-видео output
│   ├── explainer-remotion/     ← per-project Remotion app для explainer
│   ├── screencasts/            ← raw recordings + cleaned cuts
│   └── out/                    ← top-N финалов после QA/curate (готово к delivery)
└── ...

Дополнительно у некоторых проектов прописан final_output_dir в project.yaml — например performante-ai-agency сливает финалы в ~/Desktop/prfmnt creo/.

4. Структура ~/.claude/skills/

Скиллы — это атомарные «модули» Claude Code, лежат глобально в дотфайл-папке:

~/.claude/skills/
├── video-project-setup/        ← wizard для нового проекта
├── video-orchestrator/         ← top-level dirigент видео-производства
├── video-copywriter/           ← скрипты для роликов
├── video-voiceover/            ← TTS через ElevenLabs
├── video-director/             ← монтаж через ffmpeg
├── video-clipgen/              ← Veo генерация клипов
├── video-analyzer/             ← анализ + import чужих видео
├── video-remotion/             ← motion graphics через Remotion
├── video-motionfx/             ← Remotion-клипы для data viz / abstract
├── video-captions/             ← Whisper + ASS karaoke-субтитры
├── video-reviewer/             ← AI quality review собранного видео
├── video-screencast/           ← cleanup raw recordings, dedupe takes
├── creative-poster/            ← статика через Gemini Image
├── creative-orchestrator/      ← top-level для статики (зеркало video-orchestrator)
├── creative-carousel/          ← Instagram карусели через Remotion
└── creative-explainer-video/   ← длинные narrated видео через Remotion + ElevenLabs

Внутри каждого скилла:

SKILL.md            ← frontmatter (name/description) + MANDATORY TRIGGERS + docs
scripts/            ← CLI-скрипты, которые делают работу
presets/            ← (если применимо) yaml-рецепты
remotion_template/  ← (для carousel/explainer) шаблон Remotion-app для копий

5. Как запустить первый проект

Сценарий: ты сел за чужой Claude Code, хочешь сделать пилотный проект для нового клиента apparatus (поставщик медтехники).

Шаг 1 — создать проект

В Claude Code:

новый проект apparatus

Должен сработать video-project-setup (триггер «новый проект»). Он зайдёт в wizard: спросит niche, geo, услуги, demographics, brand. Создаст:

Шаг 2 — положить референсы

Кинь фотки в ~/video-projects/apparatus/references/:

Шаг 3 — добить brief.md

Открой ~/video-projects/apparatus/brief.md и заполни:

Шаг 4 — прогон video ads

В Claude Code:

сгенерируй 3 ролика для apparatus

Должен сработать video-orchestrator (триггер «сгенерируй»). Цепочка: copywriter → voiceover → director → captions. На выходе — 3 готовых .mp4 с karaoke-субтитрами в ~/video-projects/apparatus/videos/.

Шаг 5 — прогон статики

сделай 5 постеров для apparatus

Должен сработать creative-orchestrator. Прогон: brief enrichment → variants → multi-aspect → QA loop → delivery. На выходе — top-N постеров в ~/video-projects/apparatus/out/posters/ + preview HTML по каждому.

Шаг 6 — карусель

сделай карусель для apparatus на тему "Запусти УВТ-кабинет за 30 дней"

Должен сработать creative-carousel. ПЕРВЫЙ запуск — около 1-2 минут (npm install), последующие — около минуты. На выходе: PNG-секвенция + ZIP + PDF + preview HTML.

6. Где смотреть результаты

АртефактПуть
Готовые video ads~/video-projects/<project>/videos/<variant>.mp4
Готовые постеры~/video-projects/<project>/out/posters/
Карусели~/video-projects/<project>/carousel/<deck>/
Explainer-видео~/video-projects/<project>/explainer/<name>/
Preview HTML (GR-1)рядом с каждым артефактом, см. GR-1 reference
Клиентский drop (если прописан final_output_dir)например ~/Desktop/prfmnt creo/ для performante-ai-agency
Логи скилловstdout/stderr Claude Code; БД-таблицы для перситентного стейта

7. Где смотреть БД

# открыть sqlite CLI
sqlite3 ~/video-projects/director.db

# базовая ориентация
.tables                              # список таблиц
.schema clips                        # схема конкретной
.headers on
.mode column
select * from projects;              # все проекты в системе
select count(*) from clips;          # сколько клипов в библиотеке (всех проектов)
select count(*) from clips c
  join project_clips pc on pc.clip_id = c.id
  join projects p on p.id = pc.project_id
  where p.slug = 'apparatus';        # клипов в конкретном проекте

Schema v8 — подробнее в отдельной странице. Если коротко: projects + tables со своим контентом (clips, videos, generated_texts, ...) + junction-таблицы project_X для many-to-many между проектами и контентом.

8. Как добавить новый скилл

  1. Создай папку ~/.claude/skills/<name>/
  2. Положи SKILL.md с frontmatter:
    ---
    name: <name>
    description: |
      Краткое описание + use cases.
      MANDATORY TRIGGERS: триггер1, триггер2, в русском и английском.
      Use this skill whenever ... — финальное пояснение когда зовут.
    ---
    
    # <Name> — заголовок
    
    Полная документация скилла.
  3. Сделай папку scripts/ с CLI-скриптами. По соглашению: каждый скрипт принимает --project-dir или --project <slug>, плюс свои флаги.
  4. Если скилл пишет в БД — добавь scripts/db.py с CRUD-функциями по своим таблицам. Используй общий scripts/schema.py (копия одинакова между скиллами).
  5. Если работаешь с API — добавь scripts/api_keys.py (общий резолвер: flag → project db → env).
  6. Если артефакты для агентского ревью — обязателен scripts/present.py для GR-1 preview, см. GR-1.
  7. Перезапусти Claude Code session — скиллы подхватываются на старте.
MANDATORY TRIGGERS — критично. Это то, по чему Claude Code решает «использовать этот скилл или нет». Если триггеры слабые или пересекаются с другим скиллом — будет ложно срабатывать. Перечитай существующие SKILL.md как референс.

9. Как откатить миграцию схемы БД

Текущая схема — v8. Иногда нужно откатиться на vN (например после неудачной миграции или при разработке новой версии).

Перед миграцией

# Бэкап ВСЕГДА
cp ~/video-projects/director.db ~/video-projects/director.db.v8.bak.$(date +%Y%m%d-%H%M)

Откатить

В системе есть migration-скрипты в ~/video-projects/migrations/ (или у каждого скилла свой). Откат — выполнить reverse-миграцию через migrate.py:

python ~/video-projects/migrations/migrate.py --target-version 7 --rollback

# Или жёстко: восстановить из бэкапа
cp ~/video-projects/director.db.v8.bak.YYYYMMDD-HHMM ~/video-projects/director.db

Что менять в скиллах при изменении schema

У каждого скилла копия scripts/schema.py с определениями таблиц + CRUD-функции. При смене version — синхронизируй копии (sync-скрипт лежит рядом с migrate.py, либо вручную).

Не откатывай без бэкапа. Junction-таблицы (project_clips, project_videos, ...) появились в более поздних версиях. Откат удалит данные о связях проект-контент. Восстановить можно только из бэкапа.

10. Куда подавать issue / fix / improvement

ТипКуда
Bug в конкретном скиллеправишь ~/.claude/skills/<name>/scripts/... + обновляешь SKILL.md если меняется CLI
Bug в БД / schemaмиграция через ~/video-projects/migrations/migrate.py + sync schema.py копий
Bug в shared logic (api_keys, schema)правишь во всех копиях (или вынеси в общий модуль если sync-скрипт надёжный)
Improvement / новый фичерTrello-доска Performante AI — карточка в Backlog через добавь задачу в Claude Code
Регресс / срочный фиксчинишь сразу + комментарий в Trello-карточке «hotfix»
Документация (эта KB)правишь HTML в ~/Desktop/video-pipeline-kb/ прямо

Troubleshooting — типичные грабли

СимптомПричина / фикс
«Скилл не нашёлся / не сработал» Проверь MANDATORY TRIGGERS в SKILL.md. Если триггер слабый — переформулируй. Перезапусти Claude Code session.
«project not found: apparatus» Проект не зарегистрирован в director.db. Запусти video-project-setup сначала.
Gemini Image подменяет ₸ на «Т» Известный баг токенизации. Для карусели используй Remotion-route (там Unicode рендерится через CSS). Для постеров — explicitly включи в QA правило проверки символа.
Veo генерит в кадре интерфейсы / штативы / softbox Строжее prompt rules: «no UI / no equipment / no studio gear visible». Если Veo упорный — попробуй другую reference photo или сменить модель на 3.0 fallback.
ElevenLabs quota exhausted Включи rotation voices в pool проекта (несколько voice_ids, разные кабинеты). Или upgrade plan.
Whisper транскрибировал с ошибками → субтитры некорректные ВСЕГДА передавай --text в captions-скилл с оригинальным копирайтом. Whisper используется только для тайминга, не для текста. Запомни как правило.
FFmpeg desync — голос плывёт относительно видео В assemble.py валидируется, что sum(trim_end - trim_start) ≈ duration озвучки. Если расхождение >0.3 сек — фикси montage_plan, не пытайся «починить ffmpeg-флагами».
Carousel render падает: «remotion app not found» Не запускал init_project.py для этого проекта. Run его first — он создаст carousel-remotion/ с npm install.
Explainer выдал mp4 без озвучки Забыл прогнать vo.py между plan.py и render.py. Без него duration_seconds везде null → Remotion рендерит дефолтную раскадровку.
Gemini 429 Too Many Requests на батче Уменьшать параллельность не нужно (она 1). Увеличь cooldown_seconds в orchestrator до 40-45. Не запускай два батча одновременно.
Постеры выходят с CTA-кнопкой хотя в промпте «no CTA» Gemini Image любит дорисовывать. Усиль prompt: «strictly no button, no clickable elements, no rectangles labeled with action text». QA-петля должна ловить — пересмотри QA-промпт.
SFX звучит синтетически (звуки сгенерированы через ffmpeg) Запомни правило: никогда не генерировать SFX через ffmpeg synthesis. Скачивать только real sounds (Freesound, Zapsplat, BBC SFX). SFX-управление — отдельный support-скилл video-soundfx в ~/.claude/skills/ (не входит в основные 15, но используется director'ом).

Дополнительные ресурсы

Первая неделя. Прокликай все 4 reference-страницы — там собрана вся «справочная база», без неё легко терять контекст почему что-то сделано именно так. Особенно GR-1 — это контракт, на который завязаны 3 скилла. И presets.html — это сердце визуального стиля.
Что НЕ читать в первую очередь: детали реализации каждого скрипта. Лезть в код имеет смысл когда упрёшься в баг или будешь делать новый скилл. До того — читай SKILL.md скилла + соответствующую страницу этой KB.