Skill #13 · Static creative pipeline coordinator

creative-orchestrator

Верхнеуровневый дирижёр для производства статики. Принимает бриф «сделай 5 постеров для apparatus» и сам прогоняет всё: enrichment → variants → multi-aspect → авто-QA → доставка. Опционально втягивает метрики из Meta API и выдаёт отчёт о победителях.

Путь
~/.claude/skills/creative-orchestrator/
Триггеры
запусти конвейер креативов, сделай N постеров, batch posters, A/B креативов, фабрика креативов
Зависит от
creative-poster (вызывает его скрипты), GOOGLE_API_KEY, опц. META_ACCESS_TOKEN
Пэйрится с
creative-poster (один-в-один как orchestrator → director), copywriter, clipgen (для refs)

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

Это video-orchestrator, но для постеров. Та же идея: ты не дёргаешь creative-poster напрямую и не пишешь bash-цикл по аспектам — ты говоришь «сделай 6 постеров под apparatus в 4:5 и 9:16», а orchestrator:

  1. Делает preflight — есть ли brand.yaml, есть ли референсы, есть ли ключ Gemini
  2. Обогащает бриф — если ты не передал offer/bullets, он сам подтягивает последний textover_hook из generated_texts или зовёт copywriter
  3. Взрывает варианты — N углов × M пресетов = матрица базовых 4:5 постеров (последовательно, с кулдауном 35с — Gemini любит 429)
  4. Multi-aspect outpaint — лучшие 4:5 раскатывает в 9:16 / 1:1 / 2:3
  5. Авто-QA — каждый постер прогоняет через Gemini Vision, который ставит score и список проблем
  6. Refinement loop — если score ниже порога, берёт suggested_fix от QA и зовёт refine.py. До --max-refine-loops попыток
  7. Доставка — сортирует по score, оставляет top-N, копирует в posters/ и опционально на Desktop
  8. Опционально — после открутки в Meta тянет метрики по Graph API, складывает в creative_performance и выдаёт «winners report»
Орк сам ничего не рисует. Под капотом все шаги — это вызовы скриптов из creative-poster. Orchestrator — это координация, retry, cooldown, QA-петля и сборка финальной папки.

Три режима работы

РежимЧто внутриКогда
quick Один-два постера с sensible defaults. Без QA-петли, без perf-импорта. Опц. multi-aspect. «Покажи как выглядит» — быстрый прототип, draft перед клиентским ревью
run (full) Variants × aspects + QA loop + refine-петля + top-N + delivery Боевой батч: «отправь 8 креативов на тест в Meta»
perf-import Meta Graph API insights → creative_performance → winners report по CPL/CTR После недели открутки — узнать какие шаблоны зашли, чтобы next batch шёл со seeded паттернами

Команды

Preflight (всегда первый шаг внутри run)

python ~/.claude/skills/creative-orchestrator/scripts/run.py preflight \
  --project apparatus

# Проверяет: project.yaml, brand.yaml, хоть 1 reference в библиотеке,
# GOOGLE_API_KEY в env, инициализирована ли creative_posters в director.db

Quick mode

python ~/.claude/skills/creative-orchestrator/scripts/run.py quick \
  --project apparatus \
  --offer "УВТ-кабинет под ключ" \
  --bullets "5 протоколов; 2-летняя гарантия; 30-дневная окупаемость" \
  --profits "доп. доход 2.4 млн ₸/мес" \
  --reference references/ref_eswt_t9.jpg

Full run

python ~/.claude/skills/creative-orchestrator/scripts/run.py run \
  --project apparatus \
  --offer "..." --bullets "..." --profits "..." \
  --reference references/ref_eswt_t9.jpg \
  --variants 6 \
  --explore-angles math,emotion,fear,curiosity,authority,benefit \
  --aspects feed,story \
  --qa-min-score 7 \
  --auto-refine \
  --max-refine-loops 2 \
  --keep-top 3

Performance learning loop

# Шаг 1: импорт метрик из Meta (требует META_ACCESS_TOKEN в env)
python ~/.claude/skills/creative-orchestrator/scripts/meta_perf.py import \
  --account-id act_1234567890 \
  --project apparatus \
  --since 30d

# Шаг 2: winners-отчёт
python ~/.claude/skills/creative-orchestrator/scripts/run.py winners \
  --project apparatus --metric cpl --top 5

# Шаг 3: следующий батч с учётом победивших паттернов
python ~/.claude/skills/creative-orchestrator/scripts/run.py run \
  --project apparatus --learn-from-winners

Внутренности

Скрипты

ФайлЧто делает
scripts/run.pyГлавный entrypoint. 4 подкоманды: preflight / quick / run / winners. Внутри — вызовы creative-poster/scripts/*.py в нужном порядке с обработкой ошибок и кулдаунами.
scripts/meta_perf.pyТянет insights через Meta Graph API. Подкоманда import — pull за период; матчит FB ad name → poster_id; складывает в creative_performance.

Таблицы БД

ТаблицаДействиеЗачем
creative_postersRead/WriteРегистрация каждого сгенерированного постера + результат QA (qa_score, qa_notes)
creative_performanceWriteМетрики из Meta: spend / impressions / clicks / leads / cpl / ctr / cpa, привязка к poster_id
generated_textsReadПодтягивает последний textover_hook от copywriter если бриф не передан явно
brand_libraryReadБерёт brand.yaml проекта для inject в каждый промпт

Конфиг из project.yaml

В ~/video-projects/<project>/project.yaml orchestrator смотрит блок creative и опц. meta:

creative:
  default_aspects: [feed, story]    # feed=4:5, story=9:16, square=1:1
  default_variants: 6
  qa_min_score: 7
  max_refine_loops: 2
  cooldown_seconds: 35              # пауза между Gemini вызовами для 429
  keep_top: 3
  desktop_drop: true                # копировать ли финал на ~/Desktop

meta:
  account_id: act_1234567890        # для perf-import
  # token берётся из env META_ACCESS_TOKEN

Стоимость одного полного прогона

Для дефолта --variants 6 --aspects feed,story --qa-min-score 7 --auto-refine:

ШагКол-воЦена/штИтого
Базовые 4:5 через Gemini Image6$0.04$0.24
Outpaint 4:5 → 9:166$0.08$0.48
QA review (Gemini Flash Vision)12$0.001$0.012
Refinement (в среднем 1.3 из 12)~1.3$0.04$0.05
Итого:~$0.78

Perf-import через Meta Graph API бесплатный.

Output

~/video-projects/<project>/posters/        ← все сгенерированные постеры с meta
~/video-projects/<project>/out/posters/    ← top-N после QA, готовые к выгрузке
~/Desktop/<project>_drop/                  ← опционально, копия для клиента

Каждый постер сопровождается preview-HTML с payload-сайдбаром (GR-1).

Gotchas и tips

Cooldown 35 секунд — не баловство. Gemini Image любит 429 если бомбардировать. Уменьшать cooldown_seconds ниже 30 — это гарантированно поймать rate-limit на середине батча и сорвать прогон.
QA-петля не бесконечная. --max-refine-loops 2 = максимум 2 попытки исправить. Если после 2 итераций score всё ещё ниже порога, постер всё равно регистрируется (с пометкой qa_failed) и не попадает в top-N для delivery.
perf-import — это окупаемость скилла. Без него ты гонишь батчи вслепую. С ним: открутил неделю → понял какие пресеты и углы зашли → следующий батч уже seeded победителями. CPL падает на 20-40% за 3-4 итерации цикла.
quick-mode — для драфтов. Не запускай full run если просто хочешь показать клиенту «вот как будет выглядеть направление». quick = $0.04 + 30 секунд. Full = $0.78 + 5-10 минут.
Не вызывать без brand.yaml. Если у проекта не инициализирована брендбук-библиотека — orchestrator не запустится (preflight упадёт). Сначала: creative-poster brand init или --from-project-yaml.

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

Открой Showcase → posters — там Полный pipeline output: 9 постеров + 3 финальных видео-объявления — типичная коробка деливери клиенту. Все примеры — реальные production-runs, embedded локально (работают офлайн).

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

copywriter creative-orchestrator creative-poster QA loop delivery Meta Ads perf-import

Orchestrator стоит над poster-скиллом так же, как video-orchestrator стоит над director. Это координационный слой: бриф снаружи → готовые постеры внутри.

Если ты дёргаешь скилл напрямую и хочешь ручной контроль над каждым промптом — иди в creative-poster. Если хочешь «сделай 5 креативов, я через 10 минут вернусь» — это сюда.