Video Generation — единый хаб для AI-видео
КУДА ИДТИ: маршрут по всему видео-кластеру (читать ПЕРВЫМ)
На «сделай ролик» претендуют шесть входов, и они делают РАЗНОЕ. Выбор идёт по одному
вопросу: откуда берётся картинка — её рисует модель, она уже снята, её рисует браузер.
Ошибка выбора стоит не промаха в стиле, а всего пайплайна: конвейер ролями и turnkey-run.py
не совместимы по артефактам, переиграть на середине нельзя.
| Что просят |
Куда идти |
| «сгенерь видео / оживи картинку / сцена по описанию» — кадры рисует ИИ (Veo, Seedance 2.5, Runway, Kling) |
этот навык, ниже по тексту |
| «вырежи паузы / склей / наложи субтитры / цветокор / сделай вертикалку» — футаж УЖЕ снят |
video-editor |
| «собери рилс с нуля» 9:16 — бриф → сценарий → музыка → раскадровка → монтаж → приёмка, стадиями |
video-montage (конвейер workflows/reel-factory.js; промпты стадий — video-factory-pipeline) |
| «промо продукта / видео из лендинга / шоурил» — кадры рисует браузер, Remotion + 153 рецепта |
video-shotcraft |
| «выгрузи эту HTML-анимацию в MP4/GIF» — покадровый рендер готовой страницы |
video-export |
| «нарежь шортсы из вебинара / шорт с владелец конфига» — SRT → HeyGen Avatar V → SubMagic → канал |
shorts-pipeline-владелец конфига |
| «сделай полный ролик про X и выложи на YouTube» — тренд → сценарий → аватар → b-roll → загрузка |
Agent video-factory |
| «сгенерь кейфрейм gpt-image-2.5 / отредактируй кадр по референсам / транскрипция / TTS у OpenAI» — нужна картинка или звук, не клип |
openai-dalle |
Граница с openai-dalle больше НЕ проходит по видео. До сентября 2026 Sora была описана в
обоих навыках, и правило звучало «вендор назван и нужен вызов → openai-dalle». Правило мертво:
24.09.2026 OpenAI выключает sora-2, sora-2-pro, все снапшоты и сам эндпоинт /v1/videos,
замены не предложено — это уход продукта, а не переименование, и кода Sora в openai-dalle
уже нет. Туда теперь ходят за картинками (gpt-image-2.5: генерация и edit до 16 референсов,
прозрачный фон) и за звуком того же ключа (транскрипция, TTS, embeddings) — то есть за
кейфреймами и озвучкой, а не за клипом. Любое «сгенерь видео / оживи картинку» — сюда, назван
вендор или нет.
⚠️ Приём «Sora, когда на кадре кириллица» больше невыполним. Veo кириллицу корёжит, и
подменить его теперь нечем: единственное лечение — не рисовать текст моделью, а класть его
оверлеем на монтаже (PIL/drawtext поверх кадра, см. turnkey battle-notes ниже).
⚠️ Имя video-factory носят ДВЕ разные вещи. Agent video-factory (+ команда
/video-factory) — конвейер тренд → YouTube с аватаром HeyGen. Внутри video-montage
лежал одноимённый файл конвейера ролями — он переименован в workflows/reel-factory.js,
чтобы «запусти video-factory» не означало две разные программы.
Промпты стадий обоих конвейеров лежат в Skill video-factory-pipeline: сборка ролика —
references/stage-1-brief.md … stage-8-qc.md, тренд → YouTube —
references/youtube-pipeline.md. Отдельных агентов vf-* больше нет (сведены 2026-08-22).
Хаб, который выбирает провайдер, держит auth, оркестрирует шесть фаз, накладывает аудио, собирает финал. Детали по провайдерам — в references/*.md, чтобы не раздувать контекст.
Что умеет хаб
Три уровня вызова: (A) весь пайплайн под ключ (scripts/run.py --brief b.json [--execute]) ·
(B) отдельный флоу движка Higgsfield · (C) отдельный атом/инструмент. Разбор всех уровней,
список флоу и таблица соседних навыков — references/capability-map.md.
Когда использовать
Срабатывает на любую фразу про видео:
- "сгенерь видео / ролик / шортс / reels / TikTok / YouTube Short"
- "оживи картинку / image-to-video / animated illustration"
- "буктрейлер / cinematic trailer / living book cover"
- "Veo / Seedance / Runway / Kling / Pika" (Sora больше не вариант — эндпоинт OpenAI выключается 24.09.2026)
- "vertical / 9:16 / 21:9 / cinemascope / square"
Когда НЕ использовать:
- Чистый text-to-speech без видео →
elevenlabs
- Чистая генерация картинки →
nano-banana-pro / image-generation
- Talking-head шортсы владелец конфига под YouTube →
shorts-pipeline-владелец конфига (готовая обвязка Avatar V + SubMagic + триггер-чек)
- Чистый монтаж готовых клипов (без AI-генерации) →
video-editor
- Ролик 9:16 «с нуля» конвейером ролей (бриф→сценарий→музыка→раскадровка→монтаж) →
video-montage
- Промо-ролик продукта на Remotion (кадры рисует браузер, не модель) →
video-shotcraft
- Удалить объект из существующего видео →
void-video
- Скачать чужое видео →
video-downloader
ROUTING-MAP — какую часть хаба грузить (читай только нужную ветку, остальное lazy)
ПРИНЦИП ЭКОНОМИИ (главный): генерируем МАКСимально через СВОИ прямые API / подписки / скиллы (дёшево или $0),
а bundled hf.exe (токены/кредиты Higgsfield) дёргаем ТОЛЬКО для того, что напрямую невозможно (HF-эксклюзивы).
engines/higgsfield/scripts/router.py это и делает: route(jst) → direct где можно, hf.exe только для 🔴.
- Прямая генерация (DEFAULT) — Veo (GOOGLE_API_KEY) · Seedance 2.5 + Kling (Runway; ⚠️ не $0, см. ниже) · HeyGen Avatar · keyframes (Nano/GPT-Image) · аудио (ElevenLabs/Lyria/Suno) · монтаж (ffmpeg). → остаёшься в этом SKILL.md +
references/* (6-фаз пайплайн, decision-tree ниже, 40-строчная gotcha-таблица, audio/assembly рецепты, scripts/*).
⚠️ Здесь стояло «Seedance 2.0 + Kling (Runway Unlimited = $0 marginal) · Sora (OpenAI)». Оба факта врали: Sora выключается 24.09.2026, а «$0 marginal» держался на подписке Unlimited, которая ещё 22.06.2026 сваливалась на free plan (разбор 22.06.2026: Runway отказывал и в explore, и в stable). Считать генерацию бесплатной по факту наличия ключа нельзя — сначала план в /v1/profile, потом стоимость в кредитах.
- Структурный флоу Higgsfield (его промпт-инжиниринг, но генерация — СВОИМИ провайдерами!) — cinematic-5, motion-design (highMD/productMD/typographyMD/infographicMD/classicMD), UGC/unboxing/tutorial/try-on, TV-ad, podcast, cartoon. → открой
engines/higgsfield/ENGINE.md режим (A): prompt_builders.py строит промпт → router.py гонит через Runway/Veo/Replicate (НЕ hf) → assemble.py/ffmpeg_assemble.py собирает.
- HF-эксклюзив (только тут тратим hf.exe) — Soul Cast/Location/ID, Marketing Studio/DTC, Virality Predictor (brain_activity), Cinema Studio, ai_stylist, reframe, draw_to_video. →
engines/higgsfield/ENGINE.md режим (B). Это единственное, чего нет напрямую.
⚠️ Ветке (B) нужен вход в Higgsfield CLI. Без него ./bin/hf.exe account status отвечает Error: Not authenticated, а ~/.config/higgsfield/credentials.json отсутствует. HIGGSFIELD_ACCESS_TOKEN в окружении бинарь НЕ читает — router.py его подкладывает, и всё равно приходит отказ авторизации, который выглядит как проблема модели. Перед первым HF-эксклюзивом: cd engines/higgsfield && ./bin/hf.exe auth login (Clerk device-flow, подтверждение в браузере), затем ./bin/hf.exe account status для проверки плана и кредитов.
Приоритет провайдеров пересмотрен 09.09.2026 — «иначе всегда Runway $0» больше не действует.
Раньше тут стояло: «Seedance доступен через hf.exe, но только как фолбэк когда Runway в throttle».
Сегодня Runway не в throttle, а лежит: RUNWAY_JWT истёк 31.07.2026 и провалялся просроченным
40 дней, все вызовы отдают 401. Порядок на сейчас:
- Veo (
GOOGLE_API_KEY) — единственная ветка, живая без ручных действий. Дефолт, пока Runway не восстановлен.
- Runway / Seedance 2.5 — только после ручного обновления токена. ⚠️ Обновление может НЕ помочь, и
это главная ловушка: 22.06.2026 подписка уже сваливалась на free plan, и Runway отказывал и в explore,
и в stable — при полностью валидном токене. Поэтому порядок такой: сперва убедиться, что план платный
(кабинет на app.runwayml.com или
/v1/profile со свежим токеном), и лишь потом считать ветку рабочей —
иначе новый RW_USER_TOKEN снят зря, а отказ выглядит как «проблема модели». Автоматики обновления нет
нигде: только руками через localStorage. Срок токена офлайн — runway_client.py token-status.
- hf.exe (Higgsfield) — фолбэк, но и он не залогинен (см. ⚠️ в п.3 выше). Требует такого же ручного
входа, поэтому «фолбэком на автомате» не является.
TURNKEY — одна команда под ключ (scripts/run.py)
Не хочешь собирать вручную — дай бриф, и оркестратор прогонит весь пайплайн сам (intake → flow → промпт → route DIRECT-first → параллельный fan-out keyframes+clips → аудио → ffmpeg → платформенный экспорт), с approval-гейтом перед дорогой стадией клипов.
# DRY-RUN (по умолчанию — строит ПЛАН, ничего не тратит, пишет out/plan.json):
python scripts/run.py --flow cinematic --story "сюжет" --aspect 21:9 --platform youtube --duration 24
python scripts/run.py --brief brief.json # полный бриф (flow/palette/voiceover_text/music_prompt/scenes)
# ЗАПУСК (keyframes → GATE → clips → audio → assemble; --yes снять гейт):
python scripts/run.py --brief brief.json --execute
Бриф (JSON): {flow, brief, aspect, platform, duration, palette[], voiceover_text, voice, music_prompt, scenes[], out_dir}. flow ∈ cinematic / highMD / productMD / typographyMD / infographicMD / classicMD / simple. Под капотом зовёт prompt_builders (промпт), router (DIRECT vs hf), nano_banana_keyframes/runway_client/veo_image_to_video (генерация своими ключами), elevenlabs_voiceover/lyria_music (аудио), ffmpeg_assemble+engines/.../assemble.py (сборка). hf.exe — только если флоу требует эксклюзив. Для сложного/творческого — оркеструй фазы сам по ROUTING-MAP ниже.
⚠️ Ловушка имени в плане (деньги за кадр). В plan.json и в выводе run.py строка вида Keyframes : DIRECT via google-genai (nano_banana_2) означает Nano Banana Pro (gemini-3-pro-image-preview), а НЕ дешёвую NB2. Внутренние алиасы router.py не совпадают с каноном config/models.md: nano_banana_2 = Pro (дорого), nano_banana_flash = «Nano Banana 2» / gemini-3.1-flash-image-preview (дефолт канона, дёшево). Читая план — сверяйся с этой парой, а не с именем.
Turnkey battle-notes (заработано боем на @your_channel, 2026-06)
- Текст/числа в хуке → PIL-оверлей + Ken Burns, НЕ image-моделью и НЕ i2v. Nano/Veo гарбят цифры; крупное «$48 000 000» компонуй PIL (arialbd) на затемнённый bg →
ken_burns (без AI-морфа = текст чёткий). Виральный хук всегда = число/имя крупно в 1-ю секунду (топ-шортсы канала так и сделаны).
- Runway → Veo фолбэк теперь на ДВА разных отказа, и путать их нельзя.
429 — throttle (account-level, даже sequential), проходит сам, resubmit не нужен. 401 — мёртвая авторизация (истёкший JWT; отдельно возможен отказ по free-плану, но КАКОЙ код он отдаёт — не проверено, в записи 22.06.2026 стоит только «отказывал и в explore, и в stable»), и ожиданием не лечится: это ручной вход, а не «попробуй позже». Код различает их отдельно; фолбэк на Veo (свой GOOGLE_API_KEY) спасает в обоих случаях, но в 401 без человека Runway не вернётся.
- Veo ID: рабочий
veo-3.0-fast-generate-001 (stable). 3.1 ТОЛЬКО как veo-3.1-*-preview (НЕ -001) — и все три (veo-3.1-generate-preview, veo-3.1-fast-generate-preview, veo-3.1-lite-generate-preview) в статусе Preview, не GA: выпущены 15.10.2025 (full и fast) и 31.03.2026 (lite), дата снятия не объявлена. Preview означает, что ID может пропасть без предупреждения — держи veo-3.0-fast-generate-001 как запасной. Veo --duration ∈ {4,6,8} (не 5). Veo 9:16 = 720×1280 (concat нормализует до 1080×1920).
- brain_activity (virality) ≤16 секунд — финал для проверки режь ≤15.5с.
- Git Bash
$PWD = POSIX /c/... ffmpeg на Windows не откроет → в манифестах/путях всегда C:/... (или PowerShell).
- Цикл полировки: сделал → контактка (ffmpeg tile) → смотреть глазами → диагноз → фикс скрипта/скилла → пересобрать → virality-замер. Так v1 hook 27 → v2 hook 33.
Provider selection — decision tree
| Задача |
Провайдер |
Почему |
Цена |
| Default «просто оживи» |
Seedance 2.5 через Runway JWT — ⚠️ токен просрочен с 31.07.2026, до восстановления фактический дефолт Veo |
Лучший motion из i2v; 4 режима, мультикадр из одной генерации |
68 кред/с (1080p) · 30 (720p) · 20 (480p); входное видео +половина ставки |
| Кириллический текст на кадре |
никакая модель — текст оверлеем на монтаже |
Veo корёжит кириллицу в «иероглифы», а Sora, которой это лечили, выключается 24.09.2026 |
$0 (PIL/drawtext, см. battle-notes) |
| Cinematic 21:9 trailer с native аудио |
Veo 3.1 Full |
Native audio + 4K-grade composition |
$0.40/s |
| Быстрый 5-секундный motion для соцсетей |
Veo 3.1 Fast |
Дешевле Full в 4×, качество для шортсов достаточно |
$0.10/s |
| Image-to-video с lock'ом face/glyph |
Seedance + end_frame=first_frame |
Forces interpolation между identical — small detail changes only |
ставка Seedance (см. 1-ю строку) |
| Talking head владелец конфига |
HeyGen Avatar V (heygen skill) |
Готовый avatar_id + voice_id, lip-sync из коробки |
$0.0667/s |
| B-roll из готовой картинки без AI-генерации |
Ken Burns zoompan (ffmpeg) |
Бесплатно, мгновенно, для slow-pan «оживления» |
$0 |
| Multi-shot cinematic narrative |
Seedance 2.5 i2v + Nano Banana Pro keyframes |
Lock characters через reference image (1-2 лица); у 2.5 несколько сцен и ракурсов выходят ИЗ ОДНОЙ генерации, без склейки клипов |
ставка Seedance |
| 3–4 РЕАЛЬНЫХ лица в одном кадре |
GPT-Image-2.5 multi-ref → Seedance |
Nano держит 1-2, плывёт на 3-4; GPT /v1/images/edits мультиреференс точнее (до 16 референсов). См. references/keyframes-multiface.md |
ставка Seedance |
| Брендкит / UI-only workflow без API |
Playwright MCP browser fallback |
См. references/runway-seedance.md §8 |
по плану подписки (не $0 на free) |
Конфликт keyframing'а решён явно:
- Veo интерполирует motion → нужны РАЗНЫЕ first/end frame. (Раньше в этой строке рядом стояла Sora — её больше нет.)
- Seedance склонен мутировать мелкие детали →
end_frame=first_frame LOCK даёт anti-mutation для tattoos/глифов/лиц. Приём снят на 2.0; в 2.5 первый и последний кадр задаются режимом Keyframe, но работает ли там тот же трюк с ОДИНАКОВЫМИ кадрами — не проверено, доки такого не обещают.
Seedance 2.5 — что изменилось против 2.0 (снято с официальных страниц Runway 09.09.2026)
- Четыре режима, а не один:
Reference (комбинировать картинки, видео и аудио, у каждого входа своя роль; лимит 50 указан для генерации в целом, не для этого режима отдельно) · Keyframe (первый + последний кадр) · Edit (менять готовое видео промптом или наброском) · Extend (продлевать готовое видео вперёд ИЛИ назад).
- Вход: текст, картинка, видео, аудио. Длительность 4–30 с либо Auto. Кадры: Auto, 21:9, 16:9, 4:3, 1:1, 3:4, 9:16. Выход MP4/MOV.
- Референсы: до 50 за генерацию = 30 картинок + 10 видео (по 30 с) + 10 аудио. В режиме Keyframe первый и последний кадр идут дополнительно к этим 50.
- Кредиты: 1080p — 68/с, 720p — 30/с, 480p — 20/с; входное видео добавляет половину ставки (+34 / +15 / +10 за секунду входа).
- Звук встроенный, тумблер Audio есть во всех четырёх режимах. Апскейл — отдельным шагом после генерации.
- Мультикадр: несколько сцен, ракурсов и смен темпа выходят из ОДНОЙ генерации — склеивать отдельные клипы не нужно.
- ⚠️ Edit берёт у исходного видео и пропорции, и длину: управления длительностью нет, разрешение недоступно. Extend возвращает ТОЛЬКО новый кусок (продлил 30 с на 5 — получил клип на 5 с, оригинал не меняется), склейка на нас.
- ⚠️ Таймкоды в промпте задают темп, а не точку монтажа: действие встанет рядом с секундой, не на ней. Кадровая точность — только в посте.
- ⚠️ Наброски (sketch) в Edit/Extend попадают в промпт как
"@Image 1 at ss:SS"; в Edit работают лучше, чем в Extend.
- ⚠️ Разрешения противоречат сами себе: таблица спеков в справке даёт 480p/720p/1080p (и там же прайс за 1080p), а FAQ на продуктовой странице — «480p and 720p». Верить таблице, но держать в уме расхождение.
- ⚠️ API-идентификатора Seedance 2.5 официальные страницы НЕ называют — ни одного слага, только имена нод в интерфейсе («Seedance 2.5», «Seedance 2.5 (Edit/Extend Video)»). Не выдавай
seedance_2_5 за официальный ID; версию определяет runway_client.py через /v1/profile/features.
- ⚠️ Снята ли Seedance 2.0 — нигде не сказано. Известно только, что 2.5 — преемник 2.0.
- Доступна на всех платных планах; на free — нет. Это ещё одна причина проверять план ПЕРЕД генерацией.
Auth & credentials
Всё в ~/.claude/.credentials.master.env:
| Переменная |
Для чего |
GOOGLE_API_KEY |
Veo 3.1 (google-genai SDK) |
GEMINI_API_KEY |
КОНФЛИКТ с GOOGLE_API_KEY. os.environ.pop('GEMINI_API_KEY', None) ПЕРЕД import genai |
GOOGLE_CLOUD_PROJECT_ID |
Lyria 2 через Vertex AI |
GOOGLE_SERVICE_ACCOUNT_KEY_PATH |
Абсолютный путь к service-account JSON для Lyria (НЕ конфликт с GOOGLE_API_KEY) |
RUNWAY_JWT |
Runway internal API. 30 дней TTL, обновление ТОЛЬКО руками: app.runwayml.com → DevTools → Application → localStorage → RW_USER_TOKEN. ⚠️ Истёк 31.07.2026, лежит просроченным — все вызовы дают 401. Автоматики обновления нет нигде |
RUNWAY_TEAM_ID |
?asTeamId=<id> параметр для большинства endpoints |
ELEVENLABS_API_KEY |
TTS + Music |
OPENAI_API_KEY |
Кейфреймы gpt-image-2.5, транскрипция, TTS (→ openai-dalle). Для видео больше не годится: /v1/videos и обе sora-2* выключаются 24.09.2026 |
HEYGEN_API_KEY |
Avatar V (через heygen skill) |
SUBMAGIC_API_KEY |
EN-субтитры (x-api-key: sk-..., НЕ Bearer) |
Проверка JWT (день 31 = 401) — два шага, и порядок важен:
# 1) срок токена офлайн, без сети и без 401 в логах:
python ~/.claude/skills/video-generation/scripts/runway_client.py token-status
# 2) живой профиль И ПЛАН (free plan отказывает даже с валидным токеном):
python ~/.claude/skills/video-generation/scripts/runway_client.py profile
Гейт стоит и в runway_mcp.py (get_client()), и в /health у local-gateway — они честно
скажут «токен просрочен», а не отдадут 401 из середины генерации.
Pipeline overview — 6 фаз
1. Intake → бриф, длительность, аспект, платформа, бюджет, голос
2. Storyboard → текстовый сценарий по shot'ам, длительность каждого
3. Visual style → lock film vocabulary (см. §Visual lock), generate keyframes
4. Clip planning → выбор провайдера на каждый shot, prompts с motion+camera
5. Generation → parallel fan-out (Veo×3 / Seedance batch / TTS / Music)
6. Assembly → ffmpeg concat+xfade, amix+ducking, loudnorm, compression tier
Reference timeline для 77s 9:16 vertical:
- Keyframes: 45–60 sec (Nano Banana Pro batch до 4 parallel)
- Generation parallel: 120 sec (Veo 3 concurrent + voice + music)
- Assembly: 30–50 sec (concat -c copy 65x realtime + final loudnorm pass)
- Wall-clock: ~4 минуты
Детали фаз 3–5b (визуальный стиль, кейфреймы, генерация по провайдерам, поэтапный апрув, аудио, FFmpeg-сборка) — references/pipeline-phases.md. Открывай на нужной фазе.
Known gotchas — master table
| # |
Gotcha |
Provider |
Где детали |
| 1 |
GEMINI_API_KEY env conflict — pop ДО import |
Veo |
references/veo-direct.md |
| 2 |
Veo safety filter возвращает NoneType, не exception |
Veo |
references/veo-direct.md |
| 3 |
Veo types.Image(image_bytes=..., mime_type='image/png') — path string silently degrades |
Veo |
references/veo-direct.md |
| 4 |
Veo concurrent ceiling = 3, 5+ = RESOURCE_EXHAUSTED |
Veo |
references/veo-direct.md |
| 5 |
Veo всегда генерит native audio — -an strip для внешнего VO |
Veo |
references/veo-direct.md |
| 6 |
Sora > Veo для кириллицы — приём мёртв (Sora выключается 24.09.2026). Кириллица на кадре — только оверлеем в монтаже |
Veo |
references/windows.md (PIL-оверлей) |
| 7 |
Seedance CHARACTER moderation: girl/woman/девочка/имена → 400 |
Seedance |
references/runway-seedance.md |
| 8 |
Seedance end_frame=first_frame LOCK = anti-mutation |
Seedance |
references/runway-seedance.md |
| 9 |
API param = end_frame, UI label = last frame — НЕ путать |
Runway |
references/runway-seedance.md |
| 10 |
textPrompt hard cap 3500 chars |
Runway |
references/runway-seedance.md |
| 11 |
JFIF → JPG/PNG конвертация обязательна перед upload |
Runway |
references/runway-seedance.md |
| 12 |
Runway JWT 30-day TTL, day 31 = 401 |
Runway |
references/runway-seedance.md |
| 13 |
Mandatory headers: creationSource, numGenerations, X-Runway-Workspace |
Runway |
references/runway-seedance.md |
| 14 |
Start-frame-only 70-80% better motion (Seedance эмпирически) |
Seedance |
references/runway-seedance.md |
| 15 |
ONE action ONE camera per prompt |
Seedance |
references/runway-seedance.md |
| 16 |
Не повторять описание персонажа в i2v prompt — морфит face |
Seedance |
references/runway-seedance.md |
| 17 |
Unlimited subscription credits ≠ API billing pool |
Runway |
references/runway-seedance.md |
| 18 |
Nano Banana identity NOT preserved между calls — reference-chain |
Image |
nano-banana-pro skill |
| 19 |
Lyria 2 — service account ONLY, API key = 401 |
Audio |
references/audio.md |
| 20 |
Lyria 2: seed и sample_count>1 взаимоисключающи |
Audio |
references/audio.md |
| 21 |
Lyria 2 — 30s WAV per sample, длинные через acrossfade |
Audio |
references/audio.md |
| 22 |
ElevenLabs Music 30s hard cap |
Audio |
references/audio.md |
| 23 |
ElevenLabs Music named-artist → content_policy_violation |
Audio |
references/audio.md |
| 24 |
ffmpeg amix duration=longest обрезает по SHORTEST — apad + -t |
FFmpeg |
references/assembly.md |
| 25 |
ffmpeg concat дропает ВСЁ аудио если один клип без audio — anullsrc |
FFmpeg |
references/assembly.md |
| 26 |
ffmpeg amix normalize=0 обязательно |
FFmpeg |
references/assembly.md |
| 27 |
ffmpeg xfade принимает РОВНО 2 input |
FFmpeg |
references/assembly.md |
| 28 |
Windows subprocess: encoding='utf-8', errors='replace' |
Windows |
references/windows.md |
| 29 |
Windows ffmpeg drawtext + кириллица = крах, workaround через PIL |
Windows |
references/windows.md |
| 30 |
Yandex Disk multipart upload = 0-byte file, нужен raw PUT |
Delivery |
references/windows.md |
| 31 |
SubMagic «пайвот» → 🍺 на RU, обязательная trigger-word чистка |
Captions |
submagic skill |
| 32 |
Playwright MCP clipboard = navigator.clipboard.writeText() |
Browser |
references/windows.md |
| 33 |
ElevenLabs Music param = music_length_ms + force_instrumental=True + model_id='music_v1' (НЕ length_ms → TypeError) |
Audio |
references/audio.md §2 |
| 34 |
Runway кредит списывается при ОТПРАВКЕ, не скачивании; стоп раннера не «жжёт кадры»; SUCCEEDED добирается по task_id |
Runway |
references/runway-seedance.md §12 |
| 35 |
НЕ останавливать чужую идущую генерацию без спроса (user-trust); НЕ resubmit на client-timeout (THROTTLED≠failed) |
Runway |
references/runway-seedance.md §12 |
| 36 |
Nano держит 1-2 лица, плывёт на 3-4 → GPT-Image-2.5 multi-ref (до 16 референсов) для ансамбля; итеративно + вето |
Image |
references/keyframes-multiface.md |
| 37 |
Контактный лист для vision-ревью ≤ 2000px шириной (иначе read падает) |
Image |
references/keyframes-multiface.md |
| 38 |
RU TTS ударение через combining acute U+0301; print такой строки падает на cp1251 (numeric format) |
Audio/Win |
references/audio.md §3 |
| 39 |
Glyph-pulse trap: «pulsing sigil» → bloom в disc/медальон; форму держит только STEADY glow (без brightness-пульса) или post-composite |
Seedance |
references/runway-seedance.md §4 #1 |
| 40 |
Thrown/passed object левитирует и дрейфует; end_frame диктует resolved state → дай keyframe «объект уже в руках / действие завершено» |
Seedance |
references/runway-seedance.md §4 #8 + §5 |
Шаблоны потоков и таймлайны реальных проектов — references/workflow-templates.md.
Reference files (lazy-loaded)
references/pipeline-phases.md — фазы 3–5b целиком: визуальный стиль, кейфрейминг, рецепты по провайдерам, поэтапный апрув, аудиоблок, FFmpeg-сборка
references/capability-map.md — три уровня вызова, список флоу Higgsfield, таблица соседних навыков
references/workflow-templates.md — шаблоны потоков и таймлайны реальных проектов
references/higgsfield-flows.md — техники Higgsfield, вшитые в наши фазы (выжимка) → полный движок engines/higgsfield/ENGINE.md
engines/higgsfield/ENGINE.md — движок Higgsfield: 6-фаз оркестрация + 11 флоу + hf.exe CLI + scripts/{prompt_builders,router,assemble}.py + references/ (60+) + registries/ (real UUID)
references/runway-seedance.md — Runway JWT API + Seedance prompt engineering + browser fallback
references/veo-direct.md — Veo 3.1 Fast/Full (⚠️ раздел про Sora там устарел: эндпоинт OpenAI /v1/videos выключается 24.09.2026)
references/audio.md — Lyria 2 (your-server OAuth) + ElevenLabs Music/TTS voice IDs + Suno climax-cut + RU ударения
references/keyframes-multiface.md — несколько РЕАЛЬНЫХ лиц в кадре (GPT-Image-2.5 multi-ref vs Nano, биометрия, hero/ensemble)
references/director-rules.md — скелет промпта под кадр (7 слотов: Subject / Action / Scene / Style / Dialogue / Sounds / Negative), anti-cliché правила тона, audience cue под RU, self-check раскадровки
references/i2v-cost-lipsync-notes.md — image-to-video: стоимость, липсинк, ограничения провайдеров
references/color-grading.md — LUT (Kodak 2383) + teal-orange + film look + hald CLUT + color match
references/remotion-overlays.md — соц-UI оверлеи (Instagram/Telegram chrome) React→alpha webm→composite
references/motion-graphics.md — motion graphics 3 уровня: ffmpeg / movis / Manim
references/assembly.md — FFmpeg cookbook (amix, concat, xfade, loudnorm, per-line VO, compression)
references/windows.md — Windows-specific (subprocess encoding, PIL paths, Yandex multipart, кириллические paths)
references/case-studies.md — verbatim-конфиги прошлых проектов
Scripts
Полный состав scripts/ — 16 файлов, все перечислены ниже.
scripts/run.py — turnkey-оркестратор всего пайплайна (см. раздел TURNKEY выше)
scripts/direct_video.py — генерация напрямую у первоисточника, без посредников (models / gen / frame / plan); ровно главный принцип экономии этого хаба — начинай с него
scripts/runway_client.py — Python class RunwayClient (mig из runway-api/scripts/); token-status проверяет срок JWT офлайн, версия Seedance определяется автоматически через /v1/profile/features
scripts/runway_mcp.py — MCP server обёртка (8 runway_* tools); в get_client() стоит гейт на просроченный токен — отказ приходит сразу и по-человечески, а не 401 из середины генерации
scripts/veo_runner.py · scripts/veo_image_to_video.py — Veo t2v и i2v
scripts/nano_banana_keyframes.py — батч keyframes (Nano/Gemini)
scripts/broll_runner.py — B-roll пачкой
scripts/elevenlabs_voiceover.py · scripts/elevenlabs_music.py · scripts/lyria_music.py — озвучка и музыка
scripts/captions_ass.py — субтитры ASS
scripts/motion_graphics.py — motion graphics (см. references/motion-graphics.md)
scripts/ffmpeg_assemble.py — финальная сборка
scripts/climax_cut.py — climax-aware нарезка длинного аудио под короткий ролик (Suno/Lyria → 60s)
scripts/extract_chat_session.py — добыча знаний из прошлых JSONL-сессий по topic-regex (для апдейта скилла)
CLI quick check JWT (срок — офлайн, план — по сети):
python ~/.claude/skills/video-generation/scripts/runway_client.py token-status
python ~/.claude/skills/video-generation/scripts/runway_client.py profile
1---2name: video-generation3description: AI-видео хаб: Veo, Seedance 2.5, Runway, Kling. Триггеры: «сгенерь видео», «оживи картинку», «виральность». НЕ: монтаж→video-editor; промо→video-shotcraft; картинки gpt-image-2.5→openai-dalle.4---56# Video Generation — единый хаб для AI-видео78## КУДА ИДТИ: маршрут по всему видео-кластеру (читать ПЕРВЫМ)910На «сделай ролик» претендуют шесть входов, и они делают РАЗНОЕ. Выбор идёт по одному11вопросу: **откуда берётся картинка** — её рисует модель, она уже снята, её рисует браузер.12Ошибка выбора стоит не промаха в стиле, а всего пайплайна: конвейер ролями и turnkey-run.py13не совместимы по артефактам, переиграть на середине нельзя.1415| Что просят | Куда идти |16|---|---|17| «сгенерь видео / оживи картинку / сцена по описанию» — кадры рисует ИИ (Veo, Seedance 2.5, Runway, Kling) | **этот навык**, ниже по тексту |18| «вырежи паузы / склей / наложи субтитры / цветокор / сделай вертикалку» — футаж УЖЕ снят | `video-editor` |19| «собери рилс с нуля» 9:16 — бриф → сценарий → музыка → раскадровка → монтаж → приёмка, стадиями | `video-montage` (конвейер `workflows/reel-factory.js`; промпты стадий — `video-factory-pipeline`) |20| «промо продукта / видео из лендинга / шоурил» — кадры рисует браузер, Remotion + 153 рецепта | `video-shotcraft` |21| «выгрузи эту HTML-анимацию в MP4/GIF» — покадровый рендер готовой страницы | `video-export` |22| «нарежь шортсы из вебинара / шорт с владелец конфига» — SRT → HeyGen Avatar V → SubMagic → канал | `shorts-pipeline-владелец конфига` |23| «сделай полный ролик про X и выложи на YouTube» — тренд → сценарий → аватар → b-roll → загрузка | Agent `video-factory` |24| «сгенерь кейфрейм gpt-image-2.5 / отредактируй кадр по референсам / транскрипция / TTS у OpenAI» — нужна картинка или звук, не клип | `openai-dalle` |2526**Граница с `openai-dalle` больше НЕ проходит по видео.** До сентября 2026 Sora была описана в27обоих навыках, и правило звучало «вендор назван и нужен вызов → `openai-dalle`». Правило мертво:28**24.09.2026 OpenAI выключает `sora-2`, `sora-2-pro`, все снапшоты и сам эндпоинт `/v1/videos`**,29замены не предложено — это уход продукта, а не переименование, и кода Sora в `openai-dalle`30уже нет. Туда теперь ходят за **картинками** (`gpt-image-2.5`: генерация и edit до 16 референсов,31прозрачный фон) и за звуком того же ключа (транскрипция, TTS, embeddings) — то есть за32кейфреймами и озвучкой, а не за клипом. Любое «сгенерь видео / оживи картинку» — сюда, назван33вендор или нет.3435⚠️ **Приём «Sora, когда на кадре кириллица» больше невыполним.** Veo кириллицу корёжит, и36подменить его теперь нечем: единственное лечение — **не рисовать текст моделью**, а класть его37оверлеем на монтаже (PIL/drawtext поверх кадра, см. turnkey battle-notes ниже).3839⚠️ **Имя `video-factory` носят ДВЕ разные вещи.** Agent `video-factory` (+ команда40`/video-factory`) — конвейер тренд → YouTube с аватаром HeyGen. Внутри `video-montage`41лежал одноимённый файл конвейера ролями — он переименован в `workflows/reel-factory.js`,42чтобы «запусти video-factory» не означало две разные программы.4344Промпты стадий обоих конвейеров лежат в Skill `video-factory-pipeline`: сборка ролика —45`references/stage-1-brief.md` … `stage-8-qc.md`, тренд → YouTube —46`references/youtube-pipeline.md`. Отдельных агентов `vf-*` больше нет (сведены 2026-08-22).4748---4950Хаб, который выбирает провайдер, держит auth, оркестрирует шесть фаз, накладывает аудио, собирает финал. Детали по провайдерам — в `references/*.md`, чтобы не раздувать контекст.5152## Что умеет хаб5354Три уровня вызова: **(A) весь пайплайн под ключ** (`scripts/run.py --brief b.json [--execute]`) ·55**(B) отдельный флоу** движка Higgsfield · **(C) отдельный атом/инструмент**. Разбор всех уровней,56список флоу и таблица соседних навыков — `references/capability-map.md`.5758## Когда использовать5960Срабатывает на любую фразу про видео:61- "сгенерь видео / ролик / шортс / reels / TikTok / YouTube Short"62- "оживи картинку / image-to-video / animated illustration"63- "буктрейлер / cinematic trailer / living book cover"64- "Veo / Seedance / Runway / Kling / Pika" (Sora больше не вариант — эндпоинт OpenAI выключается 24.09.2026)65- "vertical / 9:16 / 21:9 / cinemascope / square"6667Когда НЕ использовать:68- Чистый text-to-speech без видео → `elevenlabs`69- Чистая генерация картинки → `nano-banana-pro` / `image-generation`70- Talking-head шортсы владелец конфига под YouTube → `shorts-pipeline-владелец конфига` (готовая обвязка Avatar V + SubMagic + триггер-чек)71- Чистый монтаж готовых клипов (без AI-генерации) → `video-editor`72- Ролик 9:16 «с нуля» конвейером ролей (бриф→сценарий→музыка→раскадровка→монтаж) → `video-montage`73- Промо-ролик продукта на Remotion (кадры рисует браузер, не модель) → `video-shotcraft`74- Удалить объект из существующего видео → `void-video`75- Скачать чужое видео → `video-downloader`7677## ROUTING-MAP — какую часть хаба грузить (читай только нужную ветку, остальное lazy)7879> **ПРИНЦИП ЭКОНОМИИ (главный):** генерируем МАКСимально через СВОИ прямые API / подписки / скиллы (дёшево или $0),80> а bundled `hf.exe` (токены/кредиты Higgsfield) дёргаем ТОЛЬКО для того, что напрямую невозможно (HF-эксклюзивы).81> `engines/higgsfield/scripts/router.py` это и делает: `route(jst)` → direct где можно, hf.exe только для 🔴.82831. **Прямая генерация (DEFAULT)** — Veo (GOOGLE_API_KEY) · Seedance 2.5 + Kling (Runway; ⚠️ **не $0**, см. ниже) · HeyGen Avatar · keyframes (Nano/GPT-Image) · аудио (ElevenLabs/Lyria/Suno) · монтаж (ffmpeg). → **остаёшься в этом SKILL.md + `references/*`** (6-фаз пайплайн, decision-tree ниже, 40-строчная gotcha-таблица, audio/assembly рецепты, scripts/*).84 ⚠️ Здесь стояло «Seedance 2.0 + Kling (Runway Unlimited = $0 marginal) · Sora (OpenAI)». Оба факта врали: Sora выключается 24.09.2026, а «$0 marginal» держался на подписке Unlimited, которая **ещё 22.06.2026 сваливалась на free plan** (разбор 22.06.2026: Runway отказывал и в explore, и в stable). Считать генерацию бесплатной по факту наличия ключа нельзя — **сначала план в `/v1/profile`, потом стоимость в кредитах**.852. **Структурный флоу Higgsfield** (его промпт-инжиниринг, но генерация — СВОИМИ провайдерами!) — cinematic-5, motion-design (highMD/productMD/typographyMD/infographicMD/classicMD), UGC/unboxing/tutorial/try-on, TV-ad, podcast, cartoon. → открой **`engines/higgsfield/ENGINE.md`** режим (A): `prompt_builders.py` строит промпт → `router.py` гонит через Runway/Veo/Replicate (НЕ hf) → `assemble.py`/`ffmpeg_assemble.py` собирает.863. **HF-эксклюзив (только тут тратим hf.exe)** — Soul Cast/Location/ID, Marketing Studio/DTC, Virality Predictor (brain_activity), Cinema Studio, ai_stylist, reframe, draw_to_video. → **`engines/higgsfield/ENGINE.md`** режим (B). Это единственное, чего нет напрямую.87 ⚠️ **Ветке (B) нужен вход в Higgsfield CLI.** Без него `./bin/hf.exe account status` отвечает `Error: Not authenticated`, а `~/.config/higgsfield/credentials.json` отсутствует. **`HIGGSFIELD_ACCESS_TOKEN` в окружении бинарь НЕ читает** — `router.py` его подкладывает, и всё равно приходит отказ авторизации, который выглядит как проблема модели. Перед первым HF-эксклюзивом: `cd engines/higgsfield && ./bin/hf.exe auth login` (Clerk device-flow, подтверждение в браузере), затем `./bin/hf.exe account status` для проверки плана и кредитов.8889**Приоритет провайдеров пересмотрен 09.09.2026 — «иначе всегда Runway $0» больше не действует.**90Раньше тут стояло: «Seedance доступен через hf.exe, но только как фолбэк когда Runway в throttle».91Сегодня Runway не в throttle, а **лежит**: `RUNWAY_JWT` истёк 31.07.2026 и провалялся просроченным9240 дней, все вызовы отдают 401. Порядок на сейчас:9394- **Veo (`GOOGLE_API_KEY`)** — единственная ветка, живая без ручных действий. Дефолт, пока Runway не восстановлен.95- **Runway / Seedance 2.5** — только после ручного обновления токена. ⚠️ **Обновление может НЕ помочь**, и96 это главная ловушка: 22.06.2026 подписка уже сваливалась на free plan, и Runway отказывал и в explore,97 и в stable — при полностью валидном токене. Поэтому порядок такой: **сперва убедиться, что план платный**98 (кабинет на app.runwayml.com или `/v1/profile` со свежим токеном), и лишь потом считать ветку рабочей —99 иначе новый `RW_USER_TOKEN` снят зря, а отказ выглядит как «проблема модели». Автоматики обновления нет100 нигде: только руками через localStorage. Срок токена офлайн — `runway_client.py token-status`.101- **hf.exe (Higgsfield)** — фолбэк, но и он **не залогинен** (см. ⚠️ в п.3 выше). Требует такого же ручного102 входа, поэтому «фолбэком на автомате» не является.103104## TURNKEY — одна команда под ключ (`scripts/run.py`)105106Не хочешь собирать вручную — дай бриф, и оркестратор прогонит весь пайплайн сам (intake → flow → промпт → route DIRECT-first → параллельный fan-out keyframes+clips → аудио → ffmpeg → платформенный экспорт), с **approval-гейтом** перед дорогой стадией клипов.107108```bash109# DRY-RUN (по умолчанию — строит ПЛАН, ничего не тратит, пишет out/plan.json):110python scripts/run.py --flow cinematic --story "сюжет" --aspect 21:9 --platform youtube --duration 24111python scripts/run.py --brief brief.json # полный бриф (flow/palette/voiceover_text/music_prompt/scenes)112# ЗАПУСК (keyframes → GATE → clips → audio → assemble; --yes снять гейт):113python scripts/run.py --brief brief.json --execute114```115Бриф (JSON): `{flow, brief, aspect, platform, duration, palette[], voiceover_text, voice, music_prompt, scenes[], out_dir}`. flow ∈ cinematic / highMD / productMD / typographyMD / infographicMD / classicMD / simple. Под капотом зовёт `prompt_builders` (промпт), `router` (DIRECT vs hf), `nano_banana_keyframes`/`runway_client`/`veo_image_to_video` (генерация своими ключами), `elevenlabs_voiceover`/`lyria_music` (аудио), `ffmpeg_assemble`+`engines/.../assemble.py` (сборка). hf.exe — только если флоу требует эксклюзив. Для сложного/творческого — оркеструй фазы сам по ROUTING-MAP ниже.116117⚠️ **Ловушка имени в плане (деньги за кадр).** В `plan.json` и в выводе `run.py` строка вида `Keyframes : DIRECT via google-genai (nano_banana_2)` означает **Nano Banana Pro** (`gemini-3-pro-image-preview`), а НЕ дешёвую NB2. Внутренние алиасы `router.py` не совпадают с каноном `config/models.md`: `nano_banana_2` = Pro (дорого), `nano_banana_flash` = «Nano Banana 2» / `gemini-3.1-flash-image-preview` (дефолт канона, дёшево). Читая план — сверяйся с этой парой, а не с именем.118119### Turnkey battle-notes (заработано боем на @your_channel, 2026-06)120- **Текст/числа в хуке → PIL-оверлей + Ken Burns, НЕ image-моделью и НЕ i2v.** Nano/Veo гарбят цифры; крупное «$48 000 000» компонуй PIL (arialbd) на затемнённый bg → `ken_burns` (без AI-морфа = текст чёткий). Виральный хук всегда = число/имя крупно в 1-ю секунду (топ-шортсы канала так и сделаны).121- **Runway → Veo фолбэк теперь на ДВА разных отказа, и путать их нельзя.** `429` — throttle (account-level, даже sequential), проходит сам, resubmit не нужен. `401` — мёртвая авторизация (истёкший JWT; отдельно возможен отказ по free-плану, но КАКОЙ код он отдаёт — не проверено, в записи 22.06.2026 стоит только «отказывал и в explore, и в stable»), и ожиданием не лечится: это ручной вход, а не «попробуй позже». Код различает их отдельно; фолбэк на Veo (свой `GOOGLE_API_KEY`) спасает в обоих случаях, но в 401 без человека Runway не вернётся.122- **Veo ID:** рабочий `veo-3.0-fast-generate-001` (stable). 3.1 ТОЛЬКО как `veo-3.1-*-preview` (НЕ `-001`) — и все три (`veo-3.1-generate-preview`, `veo-3.1-fast-generate-preview`, `veo-3.1-lite-generate-preview`) **в статусе Preview, не GA**: выпущены 15.10.2025 (full и fast) и 31.03.2026 (lite), дата снятия не объявлена. Preview означает, что ID может пропасть без предупреждения — держи `veo-3.0-fast-generate-001` как запасной. Veo `--duration` ∈ {4,6,8} (не 5). Veo 9:16 = 720×1280 (concat нормализует до 1080×1920).123- **brain_activity (virality) ≤16 секунд** — финал для проверки режь ≤15.5с.124- **Git Bash `$PWD` = POSIX `/c/...`** ffmpeg на Windows не откроет → в манифестах/путях всегда `C:/...` (или PowerShell).125- Цикл полировки: сделал → **контактка (ffmpeg tile) → смотреть глазами** → диагноз → фикс скрипта/скилла → пересобрать → virality-замер. Так v1 hook 27 → v2 hook 33.126127## Provider selection — decision tree128129| Задача | Провайдер | Почему | Цена |130|---|---|---|---|131| Default «просто оживи» | **Seedance 2.5** через Runway JWT — ⚠️ токен просрочен с 31.07.2026, до восстановления фактический дефолт **Veo** | Лучший motion из i2v; 4 режима, мультикадр из одной генерации | **68 кред/с** (1080p) · 30 (720p) · 20 (480p); входное видео +половина ставки |132| Кириллический текст на кадре | **никакая модель** — текст оверлеем на монтаже | Veo корёжит кириллицу в «иероглифы», а Sora, которой это лечили, выключается 24.09.2026 | $0 (PIL/drawtext, см. battle-notes) |133| Cinematic 21:9 trailer с native аудио | **Veo 3.1 Full** | Native audio + 4K-grade composition | $0.40/s |134| Быстрый 5-секундный motion для соцсетей | **Veo 3.1 Fast** | Дешевле Full в 4×, качество для шортсов достаточно | $0.10/s |135| Image-to-video с lock'ом face/glyph | **Seedance + end_frame=first_frame** | Forces interpolation между identical — small detail changes only | ставка Seedance (см. 1-ю строку) |136| Talking head владелец конфига | **HeyGen Avatar V** (`heygen` skill) | Готовый avatar_id + voice_id, lip-sync из коробки | $0.0667/s |137| B-roll из готовой картинки без AI-генерации | **Ken Burns zoompan** (ffmpeg) | Бесплатно, мгновенно, для slow-pan «оживления» | $0 |138| Multi-shot cinematic narrative | **Seedance 2.5 i2v + Nano Banana Pro keyframes** | Lock characters через reference image (1-2 лица); у 2.5 несколько сцен и ракурсов выходят ИЗ ОДНОЙ генерации, без склейки клипов | ставка Seedance |139| 3–4 РЕАЛЬНЫХ лица в одном кадре | **GPT-Image-2.5 multi-ref → Seedance** | Nano держит 1-2, плывёт на 3-4; GPT `/v1/images/edits` мультиреференс точнее (до 16 референсов). См. `references/keyframes-multiface.md` | ставка Seedance |140| Брендкит / UI-only workflow без API | **Playwright MCP browser fallback** | См. `references/runway-seedance.md` §8 | по плану подписки (не $0 на free) |141142Конфликт keyframing'а решён явно:143- **Veo** интерполирует motion → нужны РАЗНЫЕ first/end frame. (Раньше в этой строке рядом стояла Sora — её больше нет.)144- **Seedance** склонен мутировать мелкие детали → `end_frame=first_frame` LOCK даёт anti-mutation для tattoos/глифов/лиц. Приём снят на **2.0**; в 2.5 первый и последний кадр задаются режимом **Keyframe**, но работает ли там тот же трюк с ОДИНАКОВЫМИ кадрами — **не проверено**, доки такого не обещают.145146### Seedance 2.5 — что изменилось против 2.0 (снято с официальных страниц Runway 09.09.2026)147148- **Четыре режима, а не один**: `Reference` (комбинировать картинки, видео и аудио, у каждого входа своя роль; лимит 50 указан для генерации в целом, не для этого режима отдельно) · `Keyframe` (первый + последний кадр) · `Edit` (менять готовое видео промптом или наброском) · `Extend` (продлевать готовое видео вперёд ИЛИ назад).149- **Вход**: текст, картинка, видео, аудио. **Длительность** 4–30 с либо Auto. **Кадры**: Auto, 21:9, 16:9, 4:3, 1:1, 3:4, 9:16. Выход MP4/MOV.150- **Референсы**: до 50 за генерацию = 30 картинок + 10 видео (по 30 с) + 10 аудио. В режиме Keyframe первый и последний кадр идут **дополнительно** к этим 50.151- **Кредиты**: 1080p — 68/с, 720p — 30/с, 480p — 20/с; входное видео добавляет половину ставки (+34 / +15 / +10 за секунду входа).152- **Звук встроенный**, тумблер Audio есть во всех четырёх режимах. Апскейл — отдельным шагом после генерации.153- **Мультикадр**: несколько сцен, ракурсов и смен темпа выходят из ОДНОЙ генерации — склеивать отдельные клипы не нужно.154- ⚠️ **Edit** берёт у исходного видео и пропорции, и длину: управления длительностью нет, разрешение недоступно. **Extend** возвращает ТОЛЬКО новый кусок (продлил 30 с на 5 — получил клип на 5 с, оригинал не меняется), склейка на нас.155- ⚠️ **Таймкоды в промпте задают темп, а не точку монтажа**: действие встанет рядом с секундой, не на ней. Кадровая точность — только в посте.156- ⚠️ **Наброски (sketch)** в Edit/Extend попадают в промпт как `"@Image 1 at ss:SS"`; в Edit работают лучше, чем в Extend.157- ⚠️ **Разрешения противоречат сами себе**: таблица спеков в справке даёт 480p/720p/1080p (и там же прайс за 1080p), а FAQ на продуктовой странице — «480p and 720p». Верить таблице, но держать в уме расхождение.158- ⚠️ **API-идентификатора Seedance 2.5 официальные страницы НЕ называют** — ни одного слага, только имена нод в интерфейсе («Seedance 2.5», «Seedance 2.5 (Edit/Extend Video)»). Не выдавай `seedance_2_5` за официальный ID; версию определяет `runway_client.py` через `/v1/profile/features`.159- ⚠️ Снята ли Seedance 2.0 — **нигде не сказано**. Известно только, что 2.5 — преемник 2.0.160- Доступна на всех платных планах; на free — нет. Это ещё одна причина проверять план ПЕРЕД генерацией.161162## Auth & credentials163164Всё в `~/.claude/.credentials.master.env`:165166| Переменная | Для чего |167|---|---|168| `GOOGLE_API_KEY` | Veo 3.1 (google-genai SDK) |169| `GEMINI_API_KEY` | **КОНФЛИКТ** с GOOGLE_API_KEY. `os.environ.pop('GEMINI_API_KEY', None)` ПЕРЕД `import genai` |170| `GOOGLE_CLOUD_PROJECT_ID` | Lyria 2 через Vertex AI |171| `GOOGLE_SERVICE_ACCOUNT_KEY_PATH` | Абсолютный путь к service-account JSON для Lyria (НЕ конфликт с GOOGLE_API_KEY) |172| `RUNWAY_JWT` | Runway internal API. **30 дней TTL**, обновление ТОЛЬКО руками: app.runwayml.com → DevTools → Application → localStorage → `RW_USER_TOKEN`. ⚠️ **Истёк 31.07.2026, лежит просроченным — все вызовы дают 401.** Автоматики обновления нет нигде |173| `RUNWAY_TEAM_ID` | `?asTeamId=<id>` параметр для большинства endpoints |174| `ELEVENLABS_API_KEY` | TTS + Music |175| `OPENAI_API_KEY` | Кейфреймы `gpt-image-2.5`, транскрипция, TTS (→ `openai-dalle`). Для видео **больше не годится**: `/v1/videos` и обе `sora-2*` выключаются 24.09.2026 |176| `HEYGEN_API_KEY` | Avatar V (через `heygen` skill) |177| `SUBMAGIC_API_KEY` | EN-субтитры (`x-api-key: sk-...`, НЕ Bearer) |178179Проверка JWT (день 31 = 401) — **два шага, и порядок важен**:180181```bash182# 1) срок токена офлайн, без сети и без 401 в логах:183python ~/.claude/skills/video-generation/scripts/runway_client.py token-status184# 2) живой профиль И ПЛАН (free plan отказывает даже с валидным токеном):185python ~/.claude/skills/video-generation/scripts/runway_client.py profile186```187188Гейт стоит и в `runway_mcp.py` (`get_client()`), и в `/health` у `local-gateway` — они честно189скажут «токен просрочен», а не отдадут 401 из середины генерации.190191## Pipeline overview — 6 фаз192193```1941. Intake → бриф, длительность, аспект, платформа, бюджет, голос1952. Storyboard → текстовый сценарий по shot'ам, длительность каждого1963. Visual style → lock film vocabulary (см. §Visual lock), generate keyframes1974. Clip planning → выбор провайдера на каждый shot, prompts с motion+camera1985. Generation → parallel fan-out (Veo×3 / Seedance batch / TTS / Music)1996. Assembly → ffmpeg concat+xfade, amix+ducking, loudnorm, compression tier200```201202Reference timeline для 77s 9:16 vertical:203- Keyframes: **45–60 sec** (Nano Banana Pro batch до 4 parallel)204- Generation parallel: **120 sec** (Veo 3 concurrent + voice + music)205- Assembly: **30–50 sec** (concat -c copy 65x realtime + final loudnorm pass)206- **Wall-clock: ~4 минуты**207208Детали фаз 3–5b (визуальный стиль, кейфреймы, генерация по провайдерам, поэтапный апрув, аудио, FFmpeg-сборка) — `references/pipeline-phases.md`. Открывай на нужной фазе.209210## Known gotchas — master table211212| # | Gotcha | Provider | Где детали |213|---|---|---|---|214| 1 | `GEMINI_API_KEY` env conflict — pop ДО import | Veo | `references/veo-direct.md` |215| 2 | Veo safety filter возвращает NoneType, не exception | Veo | `references/veo-direct.md` |216| 3 | Veo `types.Image(image_bytes=..., mime_type='image/png')` — path string silently degrades | Veo | `references/veo-direct.md` |217| 4 | Veo concurrent ceiling = 3, 5+ = RESOURCE_EXHAUSTED | Veo | `references/veo-direct.md` |218| 5 | Veo всегда генерит native audio — `-an` strip для внешнего VO | Veo | `references/veo-direct.md` |219| 6 | ~~Sora > Veo для кириллицы~~ — приём мёртв (Sora выключается 24.09.2026). Кириллица на кадре — только оверлеем в монтаже | Veo | `references/windows.md` (PIL-оверлей) |220| 7 | Seedance CHARACTER moderation: girl/woman/девочка/имена → 400 | Seedance | `references/runway-seedance.md` |221| 8 | Seedance `end_frame=first_frame` LOCK = anti-mutation | Seedance | `references/runway-seedance.md` |222| 9 | API param = `end_frame`, UI label = `last frame` — НЕ путать | Runway | `references/runway-seedance.md` |223| 10 | textPrompt hard cap 3500 chars | Runway | `references/runway-seedance.md` |224| 11 | JFIF → JPG/PNG конвертация обязательна перед upload | Runway | `references/runway-seedance.md` |225| 12 | Runway JWT 30-day TTL, day 31 = 401 | Runway | `references/runway-seedance.md` |226| 13 | Mandatory headers: creationSource, numGenerations, X-Runway-Workspace | Runway | `references/runway-seedance.md` |227| 14 | Start-frame-only 70-80% better motion (Seedance эмпирически) | Seedance | `references/runway-seedance.md` |228| 15 | ONE action ONE camera per prompt | Seedance | `references/runway-seedance.md` |229| 16 | Не повторять описание персонажа в i2v prompt — морфит face | Seedance | `references/runway-seedance.md` |230| 17 | Unlimited subscription credits ≠ API billing pool | Runway | `references/runway-seedance.md` |231| 18 | Nano Banana identity NOT preserved между calls — reference-chain | Image | `nano-banana-pro` skill |232| 19 | Lyria 2 — service account ONLY, API key = 401 | Audio | `references/audio.md` |233| 20 | Lyria 2: seed и sample_count>1 взаимоисключающи | Audio | `references/audio.md` |234| 21 | Lyria 2 — 30s WAV per sample, длинные через acrossfade | Audio | `references/audio.md` |235| 22 | ElevenLabs Music 30s hard cap | Audio | `references/audio.md` |236| 23 | ElevenLabs Music named-artist → content_policy_violation | Audio | `references/audio.md` |237| 24 | ffmpeg `amix duration=longest` обрезает по SHORTEST — apad + -t | FFmpeg | `references/assembly.md` |238| 25 | ffmpeg concat дропает ВСЁ аудио если один клип без audio — anullsrc | FFmpeg | `references/assembly.md` |239| 26 | ffmpeg `amix normalize=0` обязательно | FFmpeg | `references/assembly.md` |240| 27 | ffmpeg xfade принимает РОВНО 2 input | FFmpeg | `references/assembly.md` |241| 28 | Windows subprocess: `encoding='utf-8', errors='replace'` | Windows | `references/windows.md` |242| 29 | Windows ffmpeg drawtext + кириллица = крах, workaround через PIL | Windows | `references/windows.md` |243| 30 | Yandex Disk multipart upload = 0-byte file, нужен raw PUT | Delivery | `references/windows.md` |244| 31 | SubMagic «пайвот» → 🍺 на RU, обязательная trigger-word чистка | Captions | `submagic` skill |245| 32 | Playwright MCP clipboard = `navigator.clipboard.writeText()` | Browser | `references/windows.md` |246| 33 | ElevenLabs Music param = `music_length_ms` + `force_instrumental=True` + `model_id='music_v1'` (НЕ `length_ms` → TypeError) | Audio | `references/audio.md` §2 |247| 34 | Runway кредит списывается при ОТПРАВКЕ, не скачивании; стоп раннера не «жжёт кадры»; SUCCEEDED добирается по task_id | Runway | `references/runway-seedance.md` §12 |248| 35 | НЕ останавливать чужую идущую генерацию без спроса (user-trust); НЕ resubmit на client-timeout (THROTTLED≠failed) | Runway | `references/runway-seedance.md` §12 |249| 36 | Nano держит 1-2 лица, плывёт на 3-4 → GPT-Image-2.5 multi-ref (до 16 референсов) для ансамбля; итеративно + вето | Image | `references/keyframes-multiface.md` |250| 37 | Контактный лист для vision-ревью ≤ 2000px шириной (иначе read падает) | Image | `references/keyframes-multiface.md` |251| 38 | RU TTS ударение через combining acute U+0301; print такой строки падает на cp1251 (numeric format) | Audio/Win | `references/audio.md` §3 |252| 39 | Glyph-pulse trap: «pulsing sigil» → bloom в disc/медальон; форму держит только STEADY glow (без brightness-пульса) или post-composite | Seedance | `references/runway-seedance.md` §4 #1 |253| 40 | Thrown/passed object левитирует и дрейфует; end_frame диктует resolved state → дай keyframe «объект уже в руках / действие завершено» | Seedance | `references/runway-seedance.md` §4 #8 + §5 |254255Шаблоны потоков и таймлайны реальных проектов — `references/workflow-templates.md`.256257## Reference files (lazy-loaded)258259- `references/pipeline-phases.md` — фазы 3–5b целиком: визуальный стиль, кейфрейминг, рецепты по провайдерам, поэтапный апрув, аудиоблок, FFmpeg-сборка260- `references/capability-map.md` — три уровня вызова, список флоу Higgsfield, таблица соседних навыков261- `references/workflow-templates.md` — шаблоны потоков и таймлайны реальных проектов262- `references/higgsfield-flows.md` — техники Higgsfield, вшитые в наши фазы (выжимка) → полный движок `engines/higgsfield/ENGINE.md`263- `engines/higgsfield/ENGINE.md` — **движок Higgsfield**: 6-фаз оркестрация + 11 флоу + hf.exe CLI + scripts/{prompt_builders,router,assemble}.py + references/ (60+) + registries/ (real UUID)264265- `references/runway-seedance.md` — Runway JWT API + Seedance prompt engineering + browser fallback266- `references/veo-direct.md` — Veo 3.1 Fast/Full (⚠️ раздел про Sora там устарел: эндпоинт OpenAI `/v1/videos` выключается 24.09.2026)267- `references/audio.md` — Lyria 2 (your-server OAuth) + ElevenLabs Music/TTS voice IDs + Suno climax-cut + RU ударения268- `references/keyframes-multiface.md` — несколько РЕАЛЬНЫХ лиц в кадре (GPT-Image-2.5 multi-ref vs Nano, биометрия, hero/ensemble)269- `references/director-rules.md` — скелет промпта под кадр (7 слотов: Subject / Action / Scene / Style / Dialogue / Sounds / Negative), anti-cliché правила тона, audience cue под RU, self-check раскадровки270- `references/i2v-cost-lipsync-notes.md` — image-to-video: стоимость, липсинк, ограничения провайдеров271- `references/color-grading.md` — LUT (Kodak 2383) + teal-orange + film look + hald CLUT + color match272- `references/remotion-overlays.md` — соц-UI оверлеи (Instagram/Telegram chrome) React→alpha webm→composite273- `references/motion-graphics.md` — motion graphics 3 уровня: ffmpeg / movis / Manim274- `references/assembly.md` — FFmpeg cookbook (amix, concat, xfade, loudnorm, per-line VO, compression)275- `references/windows.md` — Windows-specific (subprocess encoding, PIL paths, Yandex multipart, кириллические paths)276- `references/case-studies.md` — verbatim-конфиги прошлых проектов277278## Scripts279280Полный состав `scripts/` — 16 файлов, все перечислены ниже.281282- `scripts/run.py` — turnkey-оркестратор всего пайплайна (см. раздел TURNKEY выше)283- `scripts/direct_video.py` — **генерация напрямую у первоисточника, без посредников** (`models` / `gen` / `frame` / `plan`); ровно главный принцип экономии этого хаба — начинай с него284- `scripts/runway_client.py` — Python class `RunwayClient` (mig из `runway-api/scripts/`); `token-status` проверяет срок JWT офлайн, версия Seedance определяется автоматически через `/v1/profile/features`285- `scripts/runway_mcp.py` — MCP server обёртка (8 runway_* tools); в `get_client()` стоит гейт на просроченный токен — отказ приходит сразу и по-человечески, а не 401 из середины генерации286- `scripts/veo_runner.py` · `scripts/veo_image_to_video.py` — Veo t2v и i2v287- `scripts/nano_banana_keyframes.py` — батч keyframes (Nano/Gemini)288- `scripts/broll_runner.py` — B-roll пачкой289- `scripts/elevenlabs_voiceover.py` · `scripts/elevenlabs_music.py` · `scripts/lyria_music.py` — озвучка и музыка290- `scripts/captions_ass.py` — субтитры ASS291- `scripts/motion_graphics.py` — motion graphics (см. `references/motion-graphics.md`)292- `scripts/ffmpeg_assemble.py` — финальная сборка293- `scripts/climax_cut.py` — climax-aware нарезка длинного аудио под короткий ролик (Suno/Lyria → 60s)294- `scripts/extract_chat_session.py` — добыча знаний из прошлых JSONL-сессий по topic-regex (для апдейта скилла)295296CLI quick check JWT (срок — офлайн, план — по сети):297298```bash299python ~/.claude/skills/video-generation/scripts/runway_client.py token-status300python ~/.claude/skills/video-generation/scripts/runway_client.py profile301```