Контент завод (навесы)
ревьюS1 · Каркас, бриф под навесы, прайс10/10
Цель: Поднять форк на cfru под своими портами, назвать продукт, завести схему под четыре типа контента и аватаров, заполнить бриф фактурой клиента и включить показ цены с наценкой 15 процентов.
В РАБОТЕS2 · ИИ-аватары9/10
Цель: Раздел на десять аватаров: создание лица по описанию, утверждение или переделка, русский голос, и полный пайплайн говорящего ролика 15 секунд через кадр под навесом, озвучку и липсинк.
В РАБОТЕS3 · Ролики, посты, карусели, тексты под сети8/9
Цель: Veo Lite как основа роликов и Wan 2.7 как премиум, посты и карусели с русским текстом, отдельный текст под каждую сеть, примеры работ и банк референсов.
В РАБОТЕS4 · Соцсети, календарь, автопилот1/11
Цель: Подключение соцсетей кнопкой изнутри панели, публикация в Upload-Post плюс прямые ВКонтакте и Телеграм, контент-план с одобрением и автопилот, который генерит заранее и публикует сам.
планS5 · Аналитика и сдача0/7
Цель: Цифры из Upload-Post по профилю и по каждому посту, расход за период, прогон ревьюера, инструкция переноса и чистка тестовых данных.
В РАБОТЕS6 · Свои фото, очередь и режимы работы33/36
Цель: Клиент загружает настоящие фото навесов и людей, десятки роликов не наслаиваются, и есть три режима работы от ручного до полностью автоматического.
В РАБОТЕS7 · Движок исполнения (ENGINE.md)35/37
Цель: Нажал кнопку, результат гарантирован: единый движок задач, очередь в Postgres, запасные маршруты провайдеров, семь состояний карточки. Спека docs/ENGINE.md, утверждена 19.09.
В РАБОТЕS9 · Проверки по сроку1/3
Цель: Отложенные проверки: вернуться и убедиться, что сработало.
Ворклог (места остановки)
Аватар 8b480af0 готов: OmniHuman 1.5 с первой попытки, 9,5 с, 121,5 руб, липсинк и сабы проверены, ready в кабинете, выложен на /lab/navesy-primery. Все 4 примера готовы: ролик 8 с, пост, карусель 3 слайда, аватар 10 с. Kie за день 6847 → 6394 кредита (около 227 руб, потолок 280).
→ «Да» владельца на выкат 5 правок кода (video.ts число дублей, subtitles.ts, media.ts inlineText, openrouter.ts диапазоны, manual.ts превью карусели) по DEPLOY-ENGINE.md; после выката закрыть проверку 72417ae2. Решение: перевести озвучку стенда на eleven_v4.
Ролик 45bbe593 переделан: в первом кадре две белые машины стояли вплотную, Veo при облёте их сливал (владелец заметил). Новый кадр: три машины раздельно (контролёр стенда сам забраковал первый вариант с перекрытием), съёмка 8 с медленным наездом вместо облёта, машины стабильны до конца, сабы верные («Навес на три машины…»), материал ready в кабинете, на странице /lab/navesy-primery заменён. Аватар 8b480af0: липсинк запущен в OmniHuman 1.5 (задача f476c91c, попытка kie:omnihuman-1-5), рендер идёт. Расход за сессию ≈ 110 руб Kie до липсинка, с липсинком ≈ 240 руб.
→ 1) Дождаться рендера OmniHuman (задача f476c91c), проверить глазами и звуком, выложить на /lab/navesy-primery. 2) «Да» владельца на выкат 5 правок (video.ts дубли, subtitles.ts, media.ts inlineText, openrouter.ts диапазоны, manual.ts превью карусели). 3) Урок для движка: облёт камерой порождает новые машины, для роликов с машинами по умолчанию наезд.
Примеры для клиента: страница myvisionagency.ru/lab/navesy-primery (9 отобранных старых роликов + новые). Через студию стенда по фото клиента сделаны пост (терраса), карусель 3 слайда (зима, 180 кг, призыв), ролик 8 с одним дублем (навес на три машины, ночь, снег), аватар: кадр Сергея у односкатного навеса + озвучка ElevenLabs v4 9,4 с (через /opt/gen/elevensay.py, вписана версией 3). Kie 6847→6679 кредитов (~84 руб). Найдено и починено ЛОКАЛЬНО, tsc зелёный: 16 с снимались тремя дублями Veo (22 с, лишнее продление, брак в третьем отрезке) при цене за два; сабы печатали расшифровку «На вес» вместо реплики; stripAiTells делал «15–35» → «15, 35»; надпись «Крупная надпись «…»» из памятки не ловилась; превью карусели = старая версия последнего слайда. Подписи ИИ с опечатками, написаны вручную. docs/ENGINE.md обновлён.
→ 1) «Да» владельца на озвучку v4 → липсинк OmniHuman ~127 руб → собрать аватар. 2) «Да» на выкат 5 правок (video.ts, subtitles.ts, media.ts, openrouter.ts, manual.ts) по DEPLOY-ENGINE.md, потом кнопкой «Субтитры» пересобрать ролик 45bbe593 и finishDraft. 3) Решение: перевести озвучку стенда на eleven_v4 (ELEVENLABS_MODEL) после пробы. 4) Проверка по сроку 72417ae2 закрыть после выката (продление работает, число дублей было неверным).
Живой прогон 2 на стенде (студия от фото клиента + автомат: пост, карусель, ролик). Найдено и починено 12 дыр, выкаты 9–13: шаг prepare в рецептах автомата (подпись, речь) и перечитывание материала перед шагом; фото клиента без обрезки в модель и судье; судья переведён на gpt-5-mini по стенду scripts/judge-bench.ts (gpt-4o-mini и gemini выдумывали ошибки на правильной картинке); заголовок агента без потолка токенов и закреплён за шагом (как и закадровая реплика); сценарий без реплик не читается вслух, реплику пишет агент под длину; первый кадр по первой сцене, сцены делятся между дублями; промпт продления Veo в 120 символов с целой репликой, запасной заход без речи при AUDIO_FILTERED; продление Veo отдаёт только отрезок 7 с и склеивается (раньше браковалось «7 с вместо 16»); субтитры автомата; кнопки «Да, за N ₽» после ответа. Подтверждено глазами: пост от фото повторяет навес клиента точь-в-точь (арка, фермы, кирпичный столб), автокарусель по эталону, автопост с заголовком из хука. Экзамены 17/19 (Э1.3 номер шага после prepare, Э2.8 запасной маршрут дешевле). Расход ≈ 125 ₽ при плане 75–100.
→ 1) Владелец: нажать «Повторить» на ролике «Как выбрать навес: 5 признаков» (15 ₽) и проверить 15 с + заставка + субтитры; 2) решение по экзаменам Э1.3 (искать шаг по виду) и Э2.8; 3) заменить пробный логотип «НАВЕСЫ» на логотип клиента; 4) замер по балансу при параллельных попытках приписывает чужие списания отказам (клиент видит «сервис взял оплату»); 5) аватар; 6) показ клиенту по docs/STUDIO-GUIDE.md.
22.09, вторая половина. Возвращены две системы цен (клиенту прайс панели, себестоимость движку, в UI не выводится). Живой прогон студии на стенде через интерфейс: 2 поста, 2 карусели по 3 слайда, 2 ролика Veo с заставкой, субтитрами и логотипом, подписи; настройки (загрузка логотипа, положение) сохраняются. Расход себестоимости около 145 руб, сошёлся с балансом Kie. Найдено и починено вживую: Veo читал вслух текст задания и субтитры это печатали (речь только явная в кавычках или после говорит:, без реплики ролик без голоса); контролёр браковал хорошие картинки за пятки и раскосы (правило кодом, узлы мягкие); клиенту показывался промпт переделки; карточка прятала задачи, ждущие решения, кроме самой свежей; после Оставить как есть карточка не перечитывалась; подпись спорила с тезисом клиента; цена пересъёмки не совпадала с ценой шага; gpt-image-2 по факту 3 руб за картинку. Шесть выкатов, три из них посреди живых задач: движок восстановился без повторных отправок. Отчёт docs/QA-STUDIO-2026-09-22.md.
→ 1) Аватар: прогон озвучка → кадр → липсинк на стенде, потом закрытие проекта на встрече. 2) Заменить пробный логотип НАВЕСЫ на логотип клиента в настройках. 3) Решение владельца по экзамену Э2.8. 4) Э4.3 и Э5.4 закрыть по итогам прогона.
22.09. Прогон студии через интерфейс (Playwright, fake-режим): ролик, пост, карусель доходят до результата, состояние переживает обновление страницы. Найдено и починено: две системы цен (кнопка 9 руб, списание 3,45) сведены к studioPrice движка, gpt-image-2 по замеру стенда 6 руб; карусель считалась готовой после первого слайда, теперь только целиком; подпись в fake-режиме падала на ключ, теперь подставные тексты и текст клиенту без раздела ключей; себестоимость шага 0 в истории вариантов; тексты по типу материала, тире, плитка делается, 409 на первом слайде. Отчёт docs/QA-STUDIO-2026-09-22.md. Экзамены: движок 18/19 (Э2.8 красный: запасной маршрут теперь дешевле основного, экзамен ждёт правки владельцем), приложение 9/9. ВЫКАЧЕНО НА СТЕНД по docs/DEPLOY-ENGINE.md: бэкап, сборка, миграции 0007-0009, 3 контейнера без redis, воркер с циклами движка. Старые исполнители со стенда перенесены в /opt/navesy-zavod-old-src.
→ 1) Живой прогон студии на стенде (пост, карусель 2 слайда, ролик Veo 8 с, хаос с рестартом воркера) ≈ 50 руб: ждёт «трачу?» владельца. 2) Решение по экзамену Э2.8 (смягчить проверку себестоимости). 3) Аватар: прогон озвучка → кадр → липсинк, потом закрытие проекта на встрече. 4) Э4.3 руками и Э5.4 после живого прогона.
ОТК спринта Э, три круга. Круг 1: сверка со спекой (24 есть / 5 частично / 2 руками) и критик (18 находок). Главная дыра: сверщик закрывал результат Kie как готово без приёмки кодом; теперь попытка становится ready, приёмку делает шаг. Круг 2: критик подтвердил 15 из 18 правок, 14 новых находок; главная: безусловное пробуждение задачи могло отдать её второму воркеру (две оплаты). Круг 3: пробуждение и итог шага условные, просроченные попытки наблюдаются сутки, settling без хозяина возвращается, ошибки опроса ждут провайдера, наценка из Settings, тексты клиенту без имён моделей. Проверка: 28/28 экзаменов (spec:engine при остановленном приложении, spec:app с fake-режимом), масштаб 60 задач: 60 готовы, 80 отправок, 80 строк расхода, 480 руб, список задач за 15 мс. Спека ENGINE.md выправлена под код (3.1, 3.3, 3.6, 5, 7, 10, 11), ACCEPTANCE и SCOPE-CUTS обновлены. Стенд ещё на старом коде.
→ Ждёт «да» владельца на выкат по docs/DEPLOY-ENGINE.md (tar, бэкап pg_dump, build app+worker, prisma migrate deploy, up -d). После выката: хаос на стенде (убить контейнер посреди задачи), Э4.3 руками, Э5.4 прогон по экранам. Решение владельца: заводить ли критерии Э2.13-Э2.15 (опоздавший вариант, потолок в quickCall, повторное нажатие в обёртках) и экзамены к ним.
Очереди: разобрал, почему слайд карусели делался пять раз. Сама очередь здорова (тяжёлые задания по одному, дублей Job нет), но ручные шаги идут не через очередь, а прямо в запросе, и два нажатия запускали две платные генерации. Защита в три слоя, решает нижний: частичный уникальный индекс ManualStep_one_running по status=running. Проверено тремя одновременными запросами: один 200, два 400 с понятным текстом. Просмотр материалов: в карточке ручника вкладки Просмотр и Работа, карусель листается, готовое открывается результатом. Материалы, собранные автоматом, подхватываются в шаги (раньше готовый ролик выглядел как несделанный). Плитка считает уникальные слайды, а не версии (было 4 из 3). Альфа центр: видео падало Image fetch failed из-за middleware, не пропускавшего подписанные ссылки, теперь 200 снаружи и 403 без подписи; карусель добавлена в контент-план; технические ошибки провайдера заменены человеческим текстом; в карточку добавлен выбор фото объекта и стили для него.
→ Ждёт решения владельца: перезапуск второго упавшего материала Альфы (Veo 3.1, 250 кредитов за ролик, баланс 525) и смена модели на более дешёвую. В навесах остаётся платный прогон ручника целиком и отдельный ключ Kie. Не доделано: агент графики применяется только к роликам, длинная склейка в ручнике не проверена вживую.
Речь: числа и сокращения раскрываются словами до синтеза, lib/speech.ts, самопроверка 27 фраз. Приёмщик речи слушает дорожку ДО липсинка и переписывает смятые цифры: Scribe, доли рубля, двойное прослушивание против ложных тревог, три дубля и стоп. Субтитры: тайминги приходят с озвучкой бесплатно, alignTimings показывает свой текст с цифрами; у обычных роликов речь распознаётся из готового файла за 0.1 руб, иначе субтитры не совпадали с речью. Графика: lib/video/motion.ts, оживление фото наездом и панорамой, плашки с четырьмя стилями, позицией и превью кадра до наложения, всё ffmpeg за ноль. Слои плашек, субтитров и логотипа пересобираются от чистого ролика и кладутся на готовый без пересъёмки. Ручник: создание сведено к названию и дате, остальное на шагах; карусель по новому пайплайну, первый слайд эталон стиля, следующие получают две картинки, стиль и объект; слайд стал карточкой с растущим полем и редактируемым промптом; выбор голоса, образа аватара, логотипа, загрузка готовой картинки. Уроки для ИИ: раздел в настройках, попадают во все промпты. Гардероб аватаров: образы с проверкой лица двумя картинками. Надёжность: подбор потерянных заданий вытащил оплаченный ролик, висевший пять дней; номера задач пишутся до ожидания; пороги зависших шагов по видам; деплой собирает оба образа.
→ Живой платный прогон ручника целиком и склейки длинного ролика за владельцем. Отдельный ключ Kie под навесы. Тексты под соцсети и раздел Примеры закрыты.
Ручная генерация переделана по разбору UX: форма без дублирующих промптов, объект переключателем, название само; рабочий экран это степпер с состояниями, ценами и причинами блокировки; итог по материалу всегда на виду; у аватара озвучка идёт первой и цена липсинка считается по фактической длине речи; появились «Ещё вариант» с лентой вариантов и бесплатным возвратом, своё фото первым кадром за ноль, раскладка слайдов карусели с фото и текстом на каждый слайд, копия материала. Всё проверено прощёлкиванием без единой платной генерации.
→ Осталось из плана: предпросмотр карусели как в ленте, история промптов с кнопкой взять, отмена длинного шага, автосохранение черновика в базу, мобильный вид таблицы слайдов, агент графики и точные тайминги озвучки для караоке. Живой платный прогон одного материала руками ждёт отмашки владельца.
Ручная генерация доведена до управляемой: выбор модели и длительности ролика, число слайдов карусели, своё фото на каждый слайд, дата постановки в контент-план. Пошаговая карточка: кадр смотрят до съёмки, озвучку слушают до липсинка, слайды делаются по одному, любой шаг переделывается отдельно и показывает цену заранее.
→ Осталось по документу: история вариантов с возвратом к прошлому шагу без оплаты, дорисовка недостающих слайдов карусели пачкой, агент графики и точные тайминги озвучки для ровного караоке. Живой платный прогон ручной сборки ждёт отмашки владельца.
Сделан первый шаг ручной генерации: раздел с четырьмя подкатегориями и плитками свежим вперёд, таблица ManualStep с историей вариантов, пять ручек. Промпт человека уходит в модель как есть, панель добавляет техтребования, формат кадра, стоп-темы и контролёра. Каждый платный шаг спрашивает цену до запуска. Плюс раньше в этой сессии: субтитры (раздел настроек, наложение ASS через ffmpeg, кнопка на готовом ролике) и логотип (раздел настроек, наложение на посты, слайды, ролики и аватары).
→ Шаг 2 по документу: карусель целиком (несколько своих фото с назначением по слайдам, недостающие слайды дорисовываем, число слайдов меняется руками) и пошаговая карточка материала с переделкой отдельного шага. Ещё ждёт: точные тайминги озвучки от ElevenLabs для ровного караоке.
Добавлен логотип: раздел в настройках (файл, положение, размер в процентах ширины кадра, плотность, ставить всегда) и наложение в конце генерации на посты, каждый слайд каруселей, ролики и ролики с аватаром. У материала своя галочка, которая важнее общей настройки, её переиспользует ручной режим. Логотип накладывается ffmpeg бесплатно, моделью не рисуется.
→ Ждёт отмашки на ручную генерацию: первый шаг это таблица ManualStep, ручки и раздел с подкатегориями и плитками свежим вперёд. Живьём логотип проверить на следующей генерации материала.
Корневая причина горизонтальных роликов: в запрос на генерацию по фотографии уходил aspect_ratio auto, и модель повторяла пропорции телефонного снимка. Исправлено правильно: формат задаётся до генерации, исходник режется под нужные пропорции, auto в коде больше нет. Аварийная проверка размеров осталась, но теперь режет, а не подкладывает размытые поля. Документ ручной генерации обновлён под решения владельца: подпись пишет ИИ с правкой, число слайдов меняется руками, недостающие слайды карусели дорисовываются, караоке-субтитры везде включая обычные ролики. Плюс закрыты стабильность звука и техничка в интерфейсе.
→ Начинать ручную генерацию с первого шага: таблица ManualStep, ручки, раздел с подкатегориями и плитками свежим вперёд. Живьём проверить вертикаль на следующем ролике с аватаром по своему фото.
Из интерфейса убрана вся техничка провайдеров: номера задач, кредиты, токены, имена моделей и английские ответы чужого API заменены одной фразой «Ой, что-то сломалось», понятные человеку сообщения остались. Проверено в браузере на всех страницах: ноль упоминаний. Усилена устойчивость агентов: кривой JSON от модели больше не роняет материал (одна строгая повторная попытка), упавший агент описаний не отменяет съёмку. Написано предложение по разделу «Ручная генерация» (docs/MANUAL-STUDIO.md): пошаговая студия, где виден результат каждого шага и цена следующего, переделка одного слайда или кадра вместо всего материала.
→ Жду решения по трём вопросам в конце документа: отдельный раздел или кнопка в существующих разделах, пускать ли в ручную генерацию с пустой темой, нужен ли выбор из трёх вариантов картинки. После ответа начинаю с таблицы шагов и ручек без интерфейса.
Разбор жалоб владельца и ревизия архитектуры. Корень проблем один: повтор без памяти. При неудаче воркер создавал НОВОЕ задание, а слоты отправленных задач живут внутри задания, поэтому съёмка начиналась заново и оплачивалась второй раз (в журнале два списания 135 и 156 рублей за один материал), а на один материал накопилось до четырёх заданий. Починено: повтор возвращает то же задание, погашены 8 дублей, отменённое задание больше не оживает из очереди Redis. Та же болезнь закрыта ещё в трёх местах: премиальная ветка Wan снимала отрезки без слотов, публикация не помнила куда уже ушло (грозило дублями в ленте клиента), уборка медиа сносила файлы опубликованных материалов. Причина отказа Kie теперь читается из обоих форматов ответа (у veo это errorMessage и errorCode), при падении продления материал отдаётся коротким роликом вместо потери. Три оплаченных ролика, потерянных из-за дублей, найдены по parentTaskId в архиве провайдера и заведены материалами.
→ Не проверялись живьём: публикация в соцсети и аналитика (нужен реальный аккаунт и пост наружу, спрошу отдельно). Ролики с аватаром ждут, пока у ByteDance поднимется OmniHuman (их 500, списаний нет). Остаётся отдельный ключ Kie под навесы.
Прогон тестера: восемь находок закрыты (часовой пояс ронял план в 500, мобильная вёрстка, двойной клик, английские ошибки, Esc, мелкие цели, дубль кнопок, сборка плана по дням). Перепроверено после правок: страницы отвечают, тройной клик даёт один запрос, Esc закрывает окно, горизонтальной прокрутки на телефоне нет.
→ Ждут отмашки платные прогоны: ролик 8 секунд около 26 руб, склейка Wan 45 секунд около 90 руб. Отдельный ключ Kie под навесы.
Разделы разложены по дням: заголовок даты с числом материалов и переключатель порядка, без даты отдельной группой в конце. Плюс фикс: сценарий не влезал в длину ролика. Сценаристу и планировщику теперь передаётся длина съёмки числом, число сцен и потолок слов; при 15 секундах сценарий вышел на две сцены 0:00-0:08 и 0:08-0:15 вместо прежних 0-50.
→ Ждут отмашки платные прогоны: ролик 8 секунд с русской речью около 26 руб, склейка Wan 45 секунд около 90 руб. Отдельный ключ Kie под навесы.
Карточка материала стала объяснять сама себя: подписи полей по формату, у карусели список слайдов с картинками и текстами. Плюс фикс выбора аватара: в форме создания начальное значение бралось из всех аватаров вместо утверждённых, и в ролик уходил чужой (падало «Аватар Аня не утверждён», хотя выбирали Сергея). Добавлена проверка на сервере при создании. Материал владельца перепривязан на Сергея.
→ Ждут отмашки платные прогоны: ролик 8 секунд с русской речью около 26 руб, склейка Wan 45 секунд около 90 руб. Отдельный ключ Kie под навесы.
Разнообразие и деньги владельца. План теперь помнит последние сто тем и не повторяет их, повторы дополнительно ловятся кодом; у каждого материала свой угол подачи с ротацией по базе, у каруселей свои углы (виды, чем кроют, узлы, факты, сравнение, чек-лист, словарь, эксплуатация). Доводы про компанию раздаются по одному на материал: раньше в каждый промпт уходил весь список преимуществ, и каждый пост пересказывал производство и сроки. Режимы работы стали настоящими: ручной запрещает ИИ придумывать темы, автомат сам мешает форматы и выпускает идеи одобренными. Добавлен скрытый потолок 20000 руб в месяц по себестоимости и недельная сводка владельцу в Телеграм ботом Лии, плюс ручка по ключу. Починены карточка (карусель показывала пустой видеоплеер, вертикальное фото растягивало модалку) и обзор (готовые материалы без обложек и без клика). Массовое одобрение больше не откатывает статус готовым: 11 материалов восстановлены в ready.
→ Ждут отмашки платные прогоны: ролик 8 секунд с русской речью около 26 руб и склейка Wan 45 секунд около 90 руб. Отдельный ключ Kie под навесы. Проверить на живом плане, что углы не повторяются на горизонте месяца.