Контент Завод Bonimed
Дашборд контент-завода для косметики Bonimed: бриф, товары с импортом Wildberries, видео на Veo 3.1 / Wan 2.7 / Seedance / Kling, автопубликация и СММ-ферма (уникализация ролика и раскладка по пачке аккаунтов через Upload-Post). Форк zavod-order. Посты, карусели и аватары намеренно не заводим.
ревьюS1 · Каркас, бриф, товары10/10
Цель: Поднять форк на cfru:3150 без постов и аватаров, завести бриф компании и раздел Товары с автоимпортом карточек Wildberries.
В РАБОТЕS2 · Видео и контент-план10/16
Цель: Ролик генерится руками и по плану, расход считается по факту, лимиты денег работают.
В РАБОТЕS3 · СММ-ферма2/10
Цель: Одно готовое видео превращается в пачку уникальных копий и расходится по аккаунтам с разносом по времени.
планS4 · Автопилот и аналитика0/8
Цель: Завод работает без ручного участия, видно отдачу по каждому аккаунту.
Ворклог (места остановки)
Добавлена ручная генерация по образцу Навесов, под аспекты Bonimed: только ролики и товары с ВБ. Раздел в меню, форма создания с выбором товара, модели, длительности, качества и звука, карточка шагов кадр-съёмка-подпись, каждый шаг с примерной ценой до запуска и переделкой по отдельности. Появилась таблица ManualStep с историей попыток и списаний, кнопка Сделать ролик в карточке товара, модуль оценки цены сверен с каталогом Kie. Звук вынесен в настройки и включён по просьбе владельца.
→ Перенести тот же раздел в Альфа центр (zavod-order) с их аспектами: их товары для стройки и их типы контента. Владелец сам прогонит ролик со звуком и сравнит модели.
Поля в формах выровнены: ряд переписан с flex по нижнему краю на сетку с одинаковыми колонками, поэтому подписи и контролы стоят по одной линии, а подсказки больше не двигают соседей. Звук ролика вынесен в настройки (был выключен константой ради цены): каждая модель объявляет, умеет ли она звук, у Wan звука нет, у Veo он всегда внутри, у Kling и Seedance включается и стоит примерно в полтора раза дороже. Миграция 0004.
→ Владелец решает, включать ли звук по умолчанию: Kling 5 секунд со звуком примерно 100 кредитов против 70 без. Если нужен звук дёшево, выгоднее Veo Lite: 8 секунд со звуком около 30 кредитов.
Проход по панели глазами владельца. Убрана разметка модели из текстов (чистка на входе плюс разовая чистка базы), ошибки в интерфейсе стали человеческими, техника ушла в логи. Ролик теперь открывается по клику из списка с плеером и скачиванием, в карточке видео перестало растягиваться на весь экран. Списания по моделям показывают только оплаченные генерации и человеческие названия. Бейдж ошибок переехал на Видео, кнопка публикации гаснет без подключённых сетей, в карточке добавлена кнопка Опубликовать. Чекбоксы и списки перекрашены под тему, на телефоне поправлены шапка и превью. Агентам и модели видео запрещены надписи на экране: в прошлом ролике модель нарисовала плашку с ценой.
→ Решить с владельцем, убирать ли из интерфейса имя сервиса публикации (по общему правилу провайдеров в UI не показываем, но здесь ключ вводит сам клиент). Прогнать Veo живьём. Материал 3 признака ждёт перезапуска генерации. Публикация по-прежнему ждёт ключей клиента.
Генерация видео не работала ни на одной модели: Kling падал на This field is required (нет sound, mode, multi_shots, multi_prompt, длительность нужна строкой), Wan и Seedance молча игнорировали aspect_ratio и image_url, Veo терял пропорции. Теперь у каждой модели своя сборка тела запроса, имена сверены с документацией, Veo разделён на Lite, Fast и Quality (цена отличается до восьми раз). Добавлен пайплайн первого кадра: фото товара в jpeg, загрузка в хранилище Kie, gpt-image-2 собирает кадр 9:16 по идее с запретом на текст и коллаж, кадр уходит первым в видео. У фото товара своя пометка в кадр. В настройках появилось качество ролика, модель первого кадра, подсказки по моделям. Проверено живьём: кадр 941x1672 за 6 кредитов, ролик 720x1280 за 70 кредитов, оба сохранены и играют в панели.
→ Проверить ветку Veo живьём (Lite 8 секунд, 30 кредитов) и прогнать полный круг на идее планировщика со сценарием. Публикация ждёт ключей клиента: Upload-Post, VK, Telegram. Тот же баг повторов и те же имена полей у моделей надо проверить в форках zavod-order и navesy-zavod.
Планы и тексты переведены с прямого OpenAI на Kie: один ключ на всё. Новый lib/providers/text.ts (каталог gpt-5-2 и gemini-3-7-flash, адреса проверены живым запросом), модель текста выбирается селектом в настройках, поле Ключ OpenAI из панели убрано, расход на текст пишется в Spend из credits_consumed ответа Kie. Побочно найден и починен баг повторов: новая запись Job на каждую неудачу (1724 мёртвые строки за сутки, блокировали enqueueOnce). Обновлены README, ARCHITECTURE, HANDOVER, DECISIONS, .env.example, миграция 0002.
→ Владелец сам запускает генерацию ролика Полезный кнопкой в панели (Kling 3.0 10 с, примерно 140-200 кредитов из 1080). Осталось: решить, удалять ли из базы старую строку секрета OPENAI_API_KEY (в ней копия ключа Kie), и проверить тот же баг повторов в форках zavod-order и navesy-zavod.
По замечаниям владельца. 1) Починил фото с Wildberries: файловых серверов у площадки больше 30 (карточка 799170196 лежит на basket-36), перебор шёл до 30 и молча отдавал товар без фото. Теперь до 70 и пачками параллельно, плюс скачивание не обрывается на первом промахе. У крема для ног дотянулись 10 фото, описание и характеристики. 2) Добавил загрузку своих фото, удаление фото с сохранением обложки и полное удаление товара с очисткой файлов (архив остался для товаров с материалами). 3) Сделал раздел Ферма с подключением соцсетей по образцу Контент Завода: панель создаёт профиль в Upload-Post и уводит на их страницу входа, после возврата сама сверяет что привязалось. Проверено полным циклом на нашем кабинете, тестовый профиль удалён. Вписал ключ OpenAI владельца, проверил боем через прокси.
→ Спринт 2: каталог моделей с единицей тарификации, ручная генерация ролика с ценой до запуска, учёт расхода по балансу Kie. Нужен ключ Kie в панели. Спринт 3 дальше: уникализатор ffmpeg, кнопка Масштабировать, разброс времени публикации.
Завёл проект bonimed-zavod: роадмап в Atlas (4 спринта, 36 задач), форк «Альфа центра» с вычисткой постов и аватаров, схема БД с товарами и фермой, раздел Товары с импортом карточек Wildberries, подписанная отдача медиа наружу. Стенд живой на cfru:3150, импорт товара проверен на реальной карточке: цена, оценка, остаток, описание, характеристики и фото на месте. Механику уникализации нашёл в n8n «Ферма» на сервере bonimed и разобрал, переносим в код в спринте 3. Проверено фактом: первый комментарий у Upload-Post работает через поле first_comment при публикации (Instagram в списке, TikTok нет), профилями можно управлять по API.
→ Спринт 2: каталог моделей с единицей тарификации (Veo за ролик, Wan/Seedance/Kling за секунду), ручная генерация ролика с оценкой стоимости до запуска, учёт расхода по балансу, календарь и автоплан. Перед первой платной генерацией согласовать бюджет с владельцем. Долги спринта 1 в docs/SCOPE-CUTS-LOG.md: товар в карточке ролика, загрузка своих фото, HTTPS вместо голого IP.