Стадии: topics → new → research → script → storyboard → voice → subs → render → thumbs → upload.
Три человеческих чекпоинта вшиты в конвейер: выбор темы (после topics), правка сценария (после script), disclosure + публикация (после upload — видео заливается ПРИВАТНЫМ черновиком).
- LLM (research/script/storyboard): конвейер вызывает установленный Claude Code в официальном headless-режиме (
claude -p) — работает твоя OAuth-подписка, ключ не нужен. Требование:claudeустановлен и один раз выполнен вход. Расход идёт из лимитов подписки. - Голос: Edge TTS (нейроголоса Microsoft, бесплатно, без ключа):
pip install edge-tts. Голос по умолчанию — en-US-AndrewMultilingualNeural; варианты: ChristopherNeural, GuyNeural, en-GB-RyanNeural (python -m edge_tts --list-voices). - Порядок после voice в бесплатном режиме:
subs(строит subs.srt и duration.txt) ->sync(подгоняет тайминги сцен под реальную длину озвучки) ->render. - Для продакшена рекомендация прежняя: клон СВОЕГО голоса в ElevenLabs (сильный анти-слоп сигнал); Edge — для тестов и черновиков.
- Node.js 20+ (проверка:
node -v). npm installв папке проекта (ставит Remotion; первый рендер докачает headless-браузер).- (опционально)
cp .env.example .env— ключи нужны только для ElevenLabs/API/upload:ANTHROPIC_API_KEY— console.anthropic.com (ресёрч, сценарий, раскадровка);ELEVENLABS_API_KEY+ELEVENLABS_VOICE_ID— elevenlabs.io → Voices (лучше клон своего голоса: вкладка Voice Cloning, ~20 минут чистой записи);YT_CLIENT_ID/SECRET— нужны только для стадии upload: Google Cloud Console → создать проект → включить YouTube Data API v3 → OAuth client (Desktop app).
- Для upload дополнительно:
npm i googleapis.
node pipeline.mjs status 2026-07-lego # что уже есть на конвейере
node pipeline.mjs render 2026-07-lego # out/2026-07-lego.mp4 (пока без озвучки)
node pipeline.mjs thumbs 2026-07-lego # 3 обложки в out/
npm run studio # живой предпросмотр сцен в браузере
С ключом ElevenLabs добавь озвучку и пересобери:
node pipeline.mjs voice 2026-07-lego && node pipeline.mjs subs 2026-07-lego && node pipeline.mjs render 2026-07-lego
node pipeline.mjs topics # 5 кандидатов недели -> topics.md [ТЫ: выбери]
node pipeline.mjs new costco "Costco's $1.50 hot dog economics"
node pipeline.mjs research costco # факт-лист с источниками
node pipeline.mjs script costco # черновик в фирменном стиле [ТЫ: правка]
node pipeline.mjs storyboard costco # сценарий -> scenes.json
node pipeline.mjs voice costco && node pipeline.mjs subs costco
node pipeline.mjs render costco && node pipeline.mjs thumbs costco
node pipeline.mjs upload costco # приватный черновик [ТЫ: disclosure + publish]
| бэкенд | что это | когда |
|---|---|---|
| cosyvoice | Fun-CosyVoice 3 (Alibaba, open-source): zero-shot клон ТВОЕГО голоса с 10-30-сек записи, кросс-языковой (референс по-русски -> речь по-английски твоим тембром), локально и бесплатно | лучший анти-слоп вариант; нужен GPU ~8GB (CPU работает, но медленно) |
| edge | нейроголоса Microsoft без ключа | тесты и черновики |
| elevenlabs | платный клон/голоса по API | если не хочешь поднимать локальный сервер |
Поднять CosyVoice (на Windows — через WSL2, нативно мешает sox/pynini):
git clone --recursive https://github.com/FunAudioLLM/CosyVoice.git && cd CosyVoice
conda create -n cosyvoice -y python=3.10 && conda activate cosyvoice
pip install -r requirements.txt
python -c "from huggingface_hub import snapshot_download; snapshot_download('FunAudioLLM/Fun-CosyVoice3-0.5B-2512', local_dir='pretrained_models/Fun-CosyVoice3-0.5B')"
python runtime/python/fastapi/server.py --model_dir pretrained_models/Fun-CosyVoice3-0.5B --port 50000
Команды из доков репо — сверься с их README (и с лицензией моделей перед коммерческим использованием). Затем запиши 10-30с своего голоса, укажи COSYVOICE_REF_AUDIO/REF_TEXT в .env и запускай voice как обычно: чанки, паузы, субтитры и sync конвейер соберёт сам. Если сервер вернёт 422 — сверь имена полей с runtime/python/fastapi/server.py своей версии.
Третий бэкенд openai говорит с любым OpenAI-совместимым API: OpenRouter, Z.ai (GLM-5.2), DeepSeek, а также локальные Ollama/vLLM — меняется только OPENAI_BASE_URL и OPENAI_MODEL. Бэкенды смешиваются по стадиям через LLM_BACKEND_: стадия research требует веб-поиска, поэтому её держим на claude-code (или api), а script/storyboard/illustrate можно гнать на дешёвой открытой модели. Качество зависит от модели: скрипт и SVG-иллюстрации — самые требовательные стадии, для них нужен фронтир-класс (GLM-5.2 подходит, мелкие локальные модели — нет).
Storyboard теперь расставляет заготовки VectorScene (2-5 на видео) с описанием визуальной метафоры. Команда node pipeline.mjs illustrate <slug> генерит по ним плоские векторные иллюстрации в фирменном стиле: LLM пишет SVG по скиллу .claude/skills/svg-scenes/SKILL.md, валидатор отбрасывает опасное/невалидное (одна повторная попытка встроена), рендер анимирует через классы draw/fade/rise/float/pulse. Скилл двойного назначения: пайплайн вшивает его в промпт, а Claude Code сам подхватывает из .claude/skills/, когда работаешь с проектом интерактивно. Порядок: storyboard -> illustrate -> voice -> subs -> sync -> render.
Полный порядок теперь такой: topics -> new -> research -> script -> lint -> critique -> storyboard -> illustrate -> voice -> subs -> sync -> mix -> render -> thumbs -> shorts -> upload -> analytics.
- Guard от перезаписи: research/script/storyboard не затирают твои правки — только с
--force. - lint — механика: цифры без [S:n] (с учётом меток в конце группы предложений), запрещённые слова, темп (сцены >12с, однообразие, средняя длительность). critique — свежий LLM-контекст судит хук/темп/механику/доказательность и даёт 5 конкретных правок в critique.md.
- Скрипт теперь выдаёт
# HOOKS— 3 альтернативных холодных открытия на выбор. Storyboard делает 50–100 микро-сцен по 3–8с и пишет каждойanchor— первые слова речи в момент сцены. - sync при наличии якорей снапит границы сцен к реальным фразам (кадр-в-кадр), без якорей — старый пропорциональный режим.
- mix — музыкальная подложка (своя, из assets/music, бесплатная сгенерированная в комплекте) с автодакингом по паузам речи из субтитров + вуш на смену сцен;
--captionsвключает кинетические подписи (цифры подсвечены). - shorts — 2–3 вертикальных нарезки 35–60с с вжатыми субтитрами (LLM выбирает сегменты;
--from N --to M— ручной режим без LLM). - analytics retention.csv — экспорт удержания из YouTube Studio превращается в карту провалов по сценам + запись в lessons.md (журнал уроков). Время стадий пишется в .telemetry.csv.
- Сценарий использует только цифры из facts.md с метками [S:n]; claims со статусом inferred смягчаются или выкидываются.
- Каждая сцена несёт плашку источника на экране (SourceTag).
- Никакого чужого футажа: весь визуал — собственная программная графика.
- Перед публикацией в Studio: галочка «Altered/synthetic content» (синтетический голос) — стадия upload напомнит.
- Substance каждого видео материально другой (требование YouTube inauthentic-policy).
LLM-стадии ~$0.5–2 (Sonnet), ElevenLabs ~9–10k символов (тариф Creator), рендер — бесплатно, локально. Итого доллары, не десятки.
config/style.json — голос канала, запрещённые слова, структура, палитра. Меняешь там — меняется весь конвейер. channelName замени после выбора названия.
Если рендер падает на слабой машине: RENDER_CONCURRENCY=1 node pipeline.mjs render
MIT — see LICENSE.
Pull requests welcome. See CONTRIBUTING.md for the pipeline architecture and code style.
Report vulnerabilities privately: see SECURITY.md.