video-project-setup
Первый шаг для нового клиента. Собирает информацию о бизнесе, создаёт папку проекта, генерирует project.yaml, brief.md, шаблоны рефересных текстов, регистрирует всё в общей БД и опционально привязывает уже существующие голоса/музыку из других проектов.
Что делает простыми словами
Это визард-онбординг. Представь, что приходит новый клиент — например, стоматология «Бас Дент». Чтобы остальные 15 скиллов могли с ней работать, нужно:
- создать папку
video-projects/bas-dent/ - положить туда
project.yamlс настройками бизнеса (ниша, услуги, демография для Veo, бренд-цвета, ElevenLabs-параметры) - создать
brief.mdс описанием бизнеса и ЦА - для каждого направления услуг (имплантация, виниры, чек-ап) создать шаблон
creatives/<slug>.md, куда копирайтер потом подсмотрит рефересные тексты - зарегистрировать проект в общей
director.db(она одна на все проекты) - опционально — привязать голоса/музыку из других проектов, чтобы не загружать заново
Без этого скилла остальные не понимают, к какому бизнесу относится команда «сделай 3 ролика». С ним — у каждого проекта есть единая точка входа, и весь пайплайн знает, что читать.
11 шагов визарда
Визард ведёт пользователя по чёткому списку. Каждый шаг можно пропустить (отвечая «потом») — тогда подставится разумный дефолт или пустой шаблон.
Шаг 1. Базовая информация
Минимум: название, ниша, город. Если юзер уже написал в команде («добавь проект фитнес клуб FitZone Астана») — парсим оттуда. Если нет — спрашиваем по одному через AskUserQuestion.
Ниши предлагаются списком: Стоматология, Фитнес, Ресторан, Салон красоты, Автосервис, Медицина, Образование, Other.
"FitZone" → fitzone, "Бас Дент" → bas-dent, "Астана Гриль" → astana-grill. Транслит + lowercase + дефисы. Показываем юзеру и просим подтвердить.
Шаг 2. Направления услуг
«Перечислите основные направления через запятую». Пример для фитнеса: Персональные тренировки, Групповые занятия, Абонементы, Похудение. Каждое получит свой slug и свой creatives/<slug>.md:
"Персональные тренировки" → slug: "personal-training"
→ creative_ref: "creatives/personal-training.md"
Это критично: copywriter потом будет читать эти файлы как референсы при генерации текста для каждого направления.
Шаг 3. Демография для Veo
Все проекты в Казахстане → дефолт: Central Asian (Kazakh) and Slavic/Russian-looking people. Юзера спрашиваем «подходит?» (большинство не правит).
demographics: "Central Asian (Kazakh) and Slavic/Russian-looking people" demographics_hint: "Explicitly specify: 'Central Asian woman', 'Kazakh-looking young man'" forbidden_demographics: ["East Asian", "African", "South Asian"]
Шаг 4. Бренд (опционально)
| Поле | Дефолт |
|---|---|
| Primary color | #2563EB (синий) |
| Secondary color | #F59E0B (янтарный) |
| Font family | Montserrat |
| Logo file | копируется в references/logo.png |
Шаг 5. Meta Ads (опционально)
Account ID (act_XXXXX), Page ID, Instagram Account ID, Lead form IDs по направлениям. Если юзер пропустил — секция meta: просто не пишется в yaml. Можно добавить позже руками.
Шаг 6. Создание структуры папок
video-projects/<slug>/ ├── project.yaml # генерируется на шаге 7 ├── brief.md # шаг 8 ├── creatives/ # шаг 9 — по файлу на направление │ ├── personal-training.md │ ├── group-classes.md │ └── ... ├── clips/ # video-analyzer / clipgen зальют сюда ├── videos/ # director выкладывает финал ├── voiceovers/ # voiceover сохраняет mp3 ├── music/ # юзер кладёт треки сам ├── references/ # логотип, фото для Veo ├── remotion/ # remotion-проект для motionfx/captions ├── out/ └── tmp/
Одна команда:
mkdir -p video-projects/<slug>/{clips,videos,voiceovers,music,references,remotion,out,tmp,creatives}
Шаг 7. Генерация project.yaml
Это центральный файл, который читают все остальные скиллы. Полная структура:
name: "FitZone"
slug: "fitzone"
niche: "Фитнес"
geo: "Астана"
language: "ru"
timezone: "UTC+5"
brief: "brief.md"
creatives_dir: "creatives/"
service_directions:
- slug: "personal-training"
name: "Персональные тренировки"
creative_ref: "creatives/personal-training.md"
veo:
demographics: "Central Asian and Slavic"
forbidden_demographics: ["East Asian", "African"]
scene_context: "fitness gym" # маппится из niche
reference_photos_dir: "references/"
voiceover:
provider: "elevenlabs"
model: "eleven_multilingual_v2"
speed: 1.2
captions:
style: "karaoke"
font: "Montserrat-Bold"
font_size: 24
remotion:
brand:
primary_color: "#2563EB"
secondary_color: "#F59E0B"
font_family: "Montserrat"
logo_path: "references/logo.png"
director:
default_format: "9:16"
default_duration: 15
music_dir: "music/"
transition_style: "fade"
music_ducking: true
dental clinic, Фитнес → fitness gym, Ресторан → restaurant, Салон красоты → beauty salon, Автосервис → auto repair shop, Медицина → medical clinic, Образование → education center, Other → спрашиваем.
Шаг 8. brief.md
Спрашиваем юзера: «Вставьте текст брифа или скажите 'потом'». Если есть текст — пишем как есть. Если нет — кладём шаблон с заголовками для заполнения:
# <Business Name> — Бриф ## Бизнес - Название: <name> - Ниша: <niche> - Город: <city> ## Целевая аудитория <!-- Опишите вашу ЦА --> ## Направления услуг <!-- Услуги с ценами и УТП --> ## Преимущества <!-- Что отличает вас от конкурентов? --> ## Тон бренда <!-- professional | warm | edgy | playful -->
Шаг 9. Шаблоны creative-рефересов
Для каждого направления — отдельный creatives/<slug>.md с пустой нумерованной структурой:
# Персональные тренировки — Рекламные тексты <!-- Сюда копируются лучшие рекламные тексты для этого направления. Copywriter использует их как референс при генерации новых. --> ## Примеры текстов #1 <!-- Вставьте текст --> #2 <!-- Вставьте текст -->
Шаг 10. Регистрация в БД
Сначала прогоняется миграция схемы (на случай если БД старой версии), затем INSERT в projects:
python3 <schema-path>/schema.py migrate <video-projects-dir>
python3 -c "
import sqlite3, os
db = os.path.expanduser('~/video-projects/director.db')
conn = sqlite3.connect(db)
conn.execute('INSERT OR IGNORE INTO projects (slug, name, config_path) VALUES (?, ?, ?)',
('fitzone', 'FitZone', '/abs/path/to/project.yaml'))
conn.commit()
"
Если юзер дал бриф — также вставляем в таблицу brief:
python3 <clipgen-path>/scripts/db.py save-brief <project-dir> \ --text "<brief>" --business-name "FitZone" \ --niche "Фитнес" --geo "Астана" --language ru
Шаг 11. Привязка существующих ресурсов (опционально)
Если в системе уже есть другие проекты — спрашиваем «хочешь привязать голоса или музыку оттуда?». Если да:
python3 <voiceover-path>/scripts/db.py list-voices <other-project-dir> --json # показываем юзеру → он выбирает → линкуем через junction: INSERT OR IGNORE INTO project_voices (project_id, voice_id) VALUES (<new_project_id>, <voice_id>);
Аналогично для музыки через project_music. Это экономит ElevenLabs-квоту — голос «Rachel», который уже куплен под другой проект, теперь работает и здесь.
Финальный checklist
Прогоняется check_project.py из orchestrator-скилла:
python3 ~/.claude/skills/video-orchestrator/scripts/check_project.py <project-dir>
И выдаётся summary юзеру:
Project "FitZone" created! project.yaml .............. OK brief.md .................. OK creatives/ ................ 4 files created clips/ .................... 0 (use clipgen or analyzer to add) voices .................... 2 linked music ..................... 0 (add music files) references/ ............... logo: yes Meta Ads .................. not configured Ready for pipeline: YES (clips needed before director)
Что генерируется в project.yaml — полный мап
| Блок | Кто читает | Что внутри |
|---|---|---|
slug, name, niche, geo | все скиллы | идентификация проекта |
language | captions, voiceover | язык генерации |
service_directions[] | copywriter, clipgen, creative-orchestrator | список услуг + пути к референс-файлам |
veo.* | clipgen | демография, scene_context, папка с фото-референсами |
voiceover.* | voiceover | ElevenLabs модель и speed |
captions.* | captions | стиль субтитров, шрифт, цвета |
remotion.brand.* | remotion, motionfx, captions | бренд-цвета, шрифт, лого |
director.* | director | формат, длительность, music-dir, переходы |
meta.* | creative-orchestrator perf-import | Meta Ads IDs для импорта метрик |
final_output_dir | director, captions | опц. финальная папка вне проекта (например ~/Desktop/prfmnt creo/) |
Таблицы БД, которые трогает
| Таблица | Действие | Зачем |
|---|---|---|
projects | INSERT OR IGNORE | Регистрация (slug, name, config_path) |
brief | INSERT | Текст брифа + business-name/niche/geo/language |
project_voices | INSERT | Junction: линковка голосов из других проектов |
project_music | INSERT | Junction: линковка музыки из других проектов |
Внутренности
scripts/ у этого скилла НИЧЕГО нет. Вся логика — внутри SKILL.md (то есть в самой модели). Скилл вызывает скрипты других скиллов: schema.py из любого, db.py save-brief из clipgen, db.py list-voices из voiceover, check_project.py из orchestrator.
Это сознательное решение: проект-сетап = это инструкция «как собрать дом из готовых кирпичей», а не сами кирпичи.
Gotchas и tips
~/video-projects/director.db, НЕ внутри папки проекта. Изоляция проектов делается через junction-таблицы (project_clips, project_voices, project_music, project_videos, etc.).
list-voices по --language.
brand.yaml для статики). В VIDEO_PIPELINE_SYSTEM.md явно указано, что эти два сетапа стандартно вызываются вместе.
video-projects/<slug>/. Если есть — спроси юзера: «обновить yaml или работать с тем, что есть?». Случайная перезапись project.yaml сотрёт ручные правки.
Место в пайплайне
Project-setup = точка входа. Без него остальные не знают «о каком клиенте речь». Запускается один раз; после этого можно сразу или генерить клипы (clipgen через Veo), или импортировать свои (analyzer) — и потом гонять полный pipeline через orchestrator.
После сетапа: первое что обычно нужно — наполнить clip library (clipgen или analyzer) и добавить голоса (voiceover add-voice). После этого orchestrator сможет запустить полный pipeline.