Графика: почему говно и что делаем

Разбор по серверным логам за неделю и коду apple_gfx / реестра шаблонов. Претензии твои: невовремя · кривая-косая · смыслы хуйня · одни и те же шаблоны. Все четыре подтвердились цифрами.

45 из 55
слотов от правил — ОДИН шаблон num.tile («N пунктов»)
25
деградов за неделю: мозг смыслов умер об дневной лимит Groq
33/100
разнообразие в индексе графики — стабильно
0–28
ровность: биты кучкуются, полролика пустые
107
шаблонов в библиотеке — доступны только живой нейронке

1 Мозг смыслов сидит на бесплатном Groq — и он мёртв полдня

Пачки «какой шаблон на какую фразу» идут на бесплатный Groq: 100 тыс. токенов в сутки = 4–6 роликов. Дальше «нейронка не ответила на 12 слотов из 12» — и вся смысловая часть падает в тупые правила. Это корень «смыслы хуйня»: полдня графику выбирает не мозг, а регулярка.

  1. ✅ ВНЕДРЕНО: мёртвые пачки добираются через Claude (подписка, без дневного лимита). Цена ~10с платится только когда Groq уже отказал.
  2. → круг 2: кэш пачек по отпечатку фраз — пересборка того же ролика не тратит ни токена.
  3. → круг 2: ужать меню шаблонов в промпте вдвое (сейчас ~4 тыс. токенов на пачку) — лимита хватит на вдвое больше роликов.
  4. Платный тариф Groq dev — лимиты вырастают на порядки за копейки (себестоимость ролика сейчас 1.3 цента, +1–2 цента не роняют маржу).
  5. Gemini Flash бесплатным вторым фолбэком (свой лимит, отдельный от Groq).
  6. OpenRouter: бесплатные модели третьим эшелоном.
  7. Локальная Qwen на сервере — нулевая цена, ночной вариант (уже есть .venv-qwen3 наработка).
  8. Приоритизация: пачки с богатой речью (числа, списки) идут первыми, пока лимит жив.
  9. Бюджет-трекер токенов в боте: видеть в /stats, сколько лимита съедено сегодня.
  10. Деград — событие для сторожа: пинг тебе, если за день умерло больше 3 пачек.

2 Запасные правила знают 4 семейства из 22

Когда нейронка молчит, слоты добирает pair_by_rules — а он умеет: процент → кольцо, срок → часы, число → цифра, список → счётчик пунктов. Всё. Ни сравнений, ни схем, ни акцентов. Отсюда «одни и те же шаблоны»: num.tile 45 раз из 55.

  1. ✅ ВНЕДРЕНО: потолок num.tile — не больше 2 на ролик; третий и дальше отбрасываются ради разнообразия.
  2. → круг 2: правило «раньше/сейчас» в речи → семейство compare (сравнение) — ты это отдельно просил ещё 14.08.
  3. → круг 2: вопрос в фразе → семейство hook (крючок).
  4. → круг 2: ключевое слово фразы (_key_word уже считается) → chip/word-акцент.
  5. Шаги/этапы («сначала… потом…») → flow (схема со стрелками).
  6. Боль/страх в лексике → pain-семейство.
  7. Призыв в конце → cta.word (уже есть частично).
  8. Ротация 5 вариантов внутри семейства по хэшу фразы — даже одно семейство перестаёт выглядеть одинаково.
  9. Запрет одинакового семейства в соседних слотах (сейчас наоборот поощряется цепочка).
  10. Карта «признак речи → семейство» одним файлом — чтобы правило добавлялось строкой, а не веткой кода.

3 Разнообразие 33/100 даже при живой нейронке

Промпт просит «бери разные», но квоты нет — модель склонна повторять надёжное. Плюс соседние слоты одного семейства нарочно склеиваются в цепочку — это давало «перетекание», а на выходе даёт монотонность.

  1. → круг 2: квота: одно семейство максимум дважды на ролик (кроме text — тому одна).
  2. → круг 2: в промпт пачки передавать «уже использованы: …» — модель видит, что занято.
  3. Температура выше только на выборе id внутри семейства (смысл стабилен, вариант гуляет).
  4. Сид по плану: тот же ролик собирается так же, разные — по-разному.
  5. Гейт: разнообразие < 50 → пересборка слотов с жёсткой квотой.
  6. Штраф в score за повтор семейства подряд.
  7. Пул «редких» семейств с бонусом (geo, matrix, progress не выпадают никогда).
  8. Разнообразие подач: duo/split/blur квотами (сейчас в структуре block 6 / всё остальное 0).
  9. А/Б замер: индекс разнообразия в недельном отчёте.
  10. Витрина: раз в неделю авто-галерея карточек ролика — глазами видно, что повторяется.

4 Ровность 0–28: биты кучкуются в начале, хвост голый

Метрика ровности штрафует длинную дыру без графики — и она у нас почти нулевая: биты лепятся там, где нейронка нашла фактуру, а не распределяются по ролику. Зритель видит салют в первые 10 секунд и пустоту дальше.

  1. → круг 2: целевая сетка: 1 бит на каждые N секунд; дыра больше 2N — бит переносится в неё принудительно.
  2. _fill_gaps агрессивнее: в дыру идёт слабый кандидат вместо никакого (с порогом качества).
  3. Балансировка на финальном проходе «карта» (он уже видит весь ролик целиком).
  4. Резерв битов: не тратить все сильные карточки на первую треть.
  5. Гейт по ровности < 40 → перекладка слотов.
  6. Дыры закрывать дешёвыми подачами (chip/word), а не полноэкранными.
  7. Равномерность считать по СЕКУНДАМ, а не по слотам (фразы разной длины).
  8. Хвост ролика (после 70%) — минимум один бит обязателен, кроме CTA-зоны.
  9. Печатать карту дыр в лог сборки (есть _gap_report — включить всегда).
  10. Недельный отчёт: медиана ровности по всем роликам.

5 «Невовремя»: биты живут по сетке субтитров, не по смыслу

Карточка появляется на границе фразы из распознавания, а не на ударном слове. Для карточек снап уже подкручен (SNAP_EARLY 0.35 — ты сверял с ручной сборкой), но остальные подачи появляются по слоту.

  1. → круг 2: распространить снап к своему слову на ВСЕ подачи (блоки, plates, duo), не только карточки.
  2. Появление на вдохе: если перед фразой пауза ≥ 0.3с — бит входит в паузе, а не по первому слову.
  3. Уход бита ДО начала следующей мысли, а не по таймеру.
  4. Ударное слово от нейронки: в пачке уже спрашивать «на каком слове показывать».
  5. Судья таймингов: второй проход «бит не опаздывает?» (судья речи уже есть — расширить).
  6. Числа появляются точно на произнесении числа (слово-триггер, не фраза).
  7. Минимальная жизнь бита 1.8с — мигание короче не читается.
  8. Запрет входа бита в последние 0.5с фразы.
  9. Синхрон с музыкой: вход бита на долю (bpm уже считается для нарезки).
  10. Замер: доля битов, вошедших в пределах 0.2с от своего слова, — в индекс графики.

6 «Кривая-косая»: рендерим вслепую, результат никто не видит

После рендера ни одна проверка не смотрит на пиксели: длинное слово вылезло за плашку, перенос порвал цифру, текст упёрся в safe-зону — узнаёт об этом только зритель. Все сторожа стоят ДО рендера, на данных.

  1. → круг 3: пиксельный линтер: 3–4 кадра с графикой → проверка «текст не обрезан краем плашки, ничего не вылезает за safe 170…1560».
  2. → круг 3: авто-пере-рендер виновной карточки кеглем −15% (одна итерация).
  3. Зрение (Groq vision) на контрольных кадрах: «читается? криво?» — вердикт в лог.
  4. Запрет переносов внутри чисел и коротких заголовков (CSS white-space на уровне шаблона).
  5. Эталонные скрины всех 107 шаблонов с длинными строками — регресс при правке темы.
  6. Лимит длины текста на шаблон в реестре (fields уже описаны — добавить max).
  7. Замер ширины текста ДО рендера (canvas measureText в Node) — брак до Chromium.
  8. Общая линия посадки для соседних битов (прыжки базовой линии — «косо»).
  9. Галерея-витрина после сборки тебе по кнопке — глазами за 10 секунд.
  10. Жалоба юзера «графика кривая» голосом → карточка и кадр в мой разбор автоматически.

7 Все подачи схлопнулись в одну: block 6 / split 0 / duo 0 / blur 0

Структурный лог показывает: живёт только блочная подача. Кружки, сплиты, размытия, дуо — по нулям, хотя движок их умеет. Причина — деграды (п.1) убивают структурный проход раньше, чем он распределит подачи.

  1. ✅ лечится п.1: живой мозг вернёт структурному проходу материал для split/duo/blur.
  2. → круг 2: квоты подач от длины: до минуты — минимум 1 не-блочная; дальше по дозировке кружков.
  3. Партитура подач по драматургии: хук — чисто, середина — плотно, CTA — пусто (частично есть).
  4. Duo на «раньше/сейчас» автоматически (связка с причиной 2).
  5. Blur-подача на длинных статичных планах (детект статичности есть в offcam).
  6. Не давать одной подаче два слота подряд.
  7. Показ подач в превью стилей (человек выбирает глазами — уже просили юзеры).
  8. Тема задаёт доступные подачи (glass любит плиты, neo — плашки) — сейчас всем одно.
  9. Метрика «подачность» в индекс (доля не-блочных).
  10. Витрина структуры в логе после каждой сборки (уже печатается — добавить в недельный отчёт).

8 Инструменты: чем добрать качество — ресёрч рынка

Смотрел код-first движки, банки анимаций и AE-автоматизацию. Вывод: ядро не менять, докупить готовую анимацию.

инструментчто этовердикт для нас
Remotion (текущий)React → видео, наши 107 шаблонов и 14 темОСТАВИТЬ. Проблема не в движке, а в мозге выбора и статичности шаблонов
Lottie + @remotion/lottieбанк из тысяч ПРОФЕССИОНАЛЬНЫХ анимаций (LottieFiles), рендерится прозрачным слоем прямо в RemotionБРАТЬ — круг 3. Готовые стрелки, подчёркивания, счётчики, взрывы уровня моушн-дизайнера бесплатно; закрывает «кривая-косая» на анимациях
Riveинтерактивные векторные анимации, свой редакторОверкилл: силён в интерактиве, которого в видео нет; экспорт в наш пайплайн кружной
Revideo / Motion Canvasкод-first альтернативы (Revideo — форк под автоматизацию)Миграция ради миграции: те же шаблоны пришлось бы писать заново, качество определяет не движок
Plainly / Creatomate / Shotstackрендер After Effects/шаблонов по APIНЕТ: сторонний рендер по нашему же ресёрчу убивает маржу (−130…−317%); только in-house
Jitter / AutoAEдизайнерские браузерные тулзыРучные, в конвейер не встают; годятся один раз нарисовать референсы для наших тем

Комбо — что уже в бою и что дальше

Круг 1 — внедрено сегодня: мёртвые пачки добираются Claude (главная причина «смыслов-хуйни» закрыта) · потолок num.tile 2 на ролик (обои из «N пунктов» кончились). Проверка — твои следующие ролики: в логе появятся «🧠 пачки добраны через Claude» и упадёт доля num.tile.

Круг 2 (следующий): правила на compare/hook/chip + квоты семейств и подач + равномерность по секундам + снап всех подач к своему слову + кэш пачек + ужать меню в промпте.

Круг 3: Lottie-банк про-анимаций поверх Remotion + пиксельный линтер с авто-пере-рендером + эталонные скрины 107 шаблонов в регресс.

Мерило одно: индекс графики (сейчас 43–53) — цель после круга 2: стабильно 70+, после круга 3: 80+.

Reel$$$hot · Монтажёр · разбор графики №2 · 18.08.2026. Данные: bot.log за неделю (55 слотов, 25 деградов, индексы 43/49/53), apple_gfx.py, реестр remotion-studio/src/pro/lib (22 семейства). Ресёрч инструментов: wireflow.ai, pkgpulse.com, autoae.online, videoflow.dev (сводки Remotion-альтернатив 2026).