# Дорожная карта видеофич — Техническая консультация v2 (API-First) **Дата:** 22 марта 2026 **Консультанты:** ML/AI-инженер, Backend-архитектор, Remotion-инженер, Frontend-архитектор, DevOps-инженер, Инженер по производительности **Ревизия:** v2 — переход на API-first архитектуру: Deepgram, GigaChat, DeepInfra --- ## Что изменилось по сравнению с v1 Одно принципиальное решение перевернуло всю архитектуру: вместо локальных ML-моделей — управляемые API-сервисы. PyTorch, GPU-инфраструктура, разделение ML-воркеров, большинство проблем с памятью и временем обработки — всё это просто исчезло. ### Замены API | v1 (локальный ML) | v2 (API-First) | Эффект | |---|---|---| | Локальный Whisper (PyTorch, 20-60 мин на CPU) | **Deepgram Nova-3** API (~30 сек) | PyTorch больше не нужен вообще | | Локальный pyannote.audio (PyTorch, 15-30 мин CPU) | **Deepgram** `diarize=true` (включено в вызов транскрипции) | pyannote + torchaudio — удалены | | Gemini 2.5 Flash / GPT-4o-mini для вирусной детекции | **GigaChat Pro** (нативная русскоязычная LLM от Сбера) | Лучше понимает русский юмор, культурный контекст, сленг | | librosa для анализа энергии аудио | **Deepgram** `sentiment=true` (посегментно) | Сентимент заменяет анализ энергии в большинстве сценариев | | Нет | **DeepInfra** (Llama, Mistral, Qwen через API) | Фоллбэк / A/B-тестирование LLM-анализа | ### Как изменились ключевые метрики Цифры говорят сами за себя: | Метрика | v1 | v2 | Изменение | |---|---|---|---| | Размер Docker-образа | 1.72 ГБ | **~400-500 МБ** | -75% (нет PyTorch) | | Пиковое потребление RAM воркера | 8-16 ГБ | **~400 МБ** (только MediaPipe) | -95% | | Время обработки (30-мин видео, полный пайплайн) | 35-80 мин (CPU) | **5-10 мин** | -85% | | Стоимость за видео | $0.11 | **$0.20** | +80% (стоимость API) | | Месячная стоимость (100 видео) | $11 вычисления + сервер + $0-380 GPU | **$20 API + сервер** | Проще, дешевле при малых объёмах | | Нужен GPU? | Фаза 2 для диаризации | **Никогда** | Полностью исключён | | Новые Python-зависимости | ~310-340 МБ | **~40 МБ** (mediapipe + HTTP-клиенты) | -88% | | Общий срок всех MVP | 26-34 dev-дня | **20-27 dev-дней** | -20-25% | Образ в четыре раза легче. RAM в сорок раз меньше. Обработка в шесть-восемь раз быстрее. Цена за единицу чуть выше, но инфраструктурные расходы сжимаются до нуля. Неплохой обмен. ### Проблемы, которых больше нет Эти сквозные проблемы из v1 перестали существовать: | Проблема из v1 | Почему исчезла | |---|---| | ~~Переключить PyTorch на CPU-only индекс~~ | PyTorch удалён полностью (Whisper заменён Deepgram) | | ~~OOM воркера на параллельных ML-джобах~~ | Нет тяжёлого ML — стандартный воркер на 4 ГБ | | ~~Отдельный Docker-образ для ML-воркера~~ | Один лёгкий образ | | ~~Планирование GPU-инфраструктуры~~ | Весь ML — через API | | ~~Конфликты версий PyTorch~~ | Нет PyTorch | | ~~Скачивание моделей при первом запуске~~ | Нет локальных моделей (кроме MediaPipe, ~2 МБ) | | ~~Разделение ML через Docker Compose profiles~~ | Не нужно | ### Новые проблемы Ничего бесплатного не бывает. Вот что появилось взамен: | Проблема | Приоритет | Митигация | |---|---|---| | Управление API-ключами (Deepgram, GigaChat, DeepInfra) | Высокий | Хранить в settings через env-переменные, никогда в коде | | Rate limit'ы API | Высокий | Retry с exponential backoff в акторах | | Зависимость от вендора (vendor lock-in) | Средний | Абстрагировать за интерфейсами движков (как уже сделано: `engine: "whisper" \| "google"`) | | Зависимость от сети (API упал = обработка встала) | Средний | Оставить Whisper как опциональный фоллбэк-движок | | Более высокая стоимость за видео ($0.20 vs $0.11) | Низкий | Компенсируется нулевыми инфраструктурными расходами; прибыльно на любом SaaS-тарифе | --- ## Общая картина | # | Фича | Сложность | MVP | Полная версия | Доп. инфраструктура | |---|-------|-----------|-----|---------------|---------------------| | 1 | Продвинутые шаблоны Remotion | Легко-средне | 3-4 дня | 3-4 дня | Ничего — можно начинать хоть сейчас | | 2 | Детекция вирусных моментов | Средне | **3-5 дней** | 6-10 дней | API-ключи (GigaChat, Deepgram) | | 3 | Авто-монтаж и трекинг лица | Сложно | **8-10 дней** | 20-30 дней | Только MediaPipe (CPU, ~30 МБ) | | 4 | Конвертация в вертикальные Shorts (9:16) | Средне | 6-8 дней | +3-4 дня после #3 | Ничего | | **Итого** | | | **20-27 дней** | **35-47 дней** | | Реалистичный прогноз для одного разработчика: **5-7 недель** (все MVP) или **2-3 месяца** (полные версии). --- ## Фича 1: Продвинутые шаблоны Remotion **Без изменений по сравнению с v1.** Эта фича не зависит от ML. **Статус:** Спецификация и план реализации уже написаны. Бери и делай. - Спецификация: `docs/superpowers/specs/2026-03-21-advanced-remotion-templates-design.md` - План: `docs/superpowers/plans/2026-03-21-advanced-remotion-templates.md` **Что делаем:** Расширяем `CaptionStyleSchema` четырьмя новыми стилями подсветки (pop_in, karaoke, bounce, glow_pulse), двумя переходами (zoom_in, drop_in), тремя полями (word_entrance, highlight_rotation_deg, text_transform). Два системных пресета: "Shorts" и "Podcast". **Где трогаем код:** Расширение схемы в Remotion + бэкенде, логика рендеринга в `Captions.tsx`, Alembic-миграция для пресетов, контролы в StyleEditor на фронте. --- ## Фича 2: Детекция вирусных моментов ### Архитектура (v2 — API-First) В v1 мы планировали гонять LLM по тексту и считать энергию аудио через librosa. В v2 подход элегантнее: один вызов Deepgram даёт транскрипцию, разметку спикеров и сентимент-анализ — три результата за одну цену. А текст анализирует GigaChat, которому русский язык родной. **Транскрипция:** Deepgram Nova-3 API с `diarize=true` + `sentiment=true`. Один API-вызов возвращает пословные таймстемпы, метки спикеров и оценку сентимента по каждому высказыванию. Стоимость: $0.0053/мин ($0.16 за 30-минутное видео). Обработка: ~30 секунд. **LLM-анализ:** GigaChat Pro (от Сбера) — нативная русскоязычная LLM, обученная на русском интернете. Лучше ловит русский юмор, культурные отсылки, сленг и вирусные паттерны, чем модели, для которых русский — второй язык. Фоллбэк: DeepInfra (Llama 3.1 70B или Qwen) для A/B-тестирования. **Аудио-подкрепление:** Посегментные оценки сентимента от Deepgram заменяют анализ энергии через `librosa` в большинстве случаев. Высокий сентимент коррелирует с вирусными моментами. Опционально: librosa для анализа громкости (смех, повышенный голос) как дополнение. **Пайплайн:** 1. Транскрипция Deepgram с `diarize=true` + `sentiment=true` -> таймстемпы + спикеры + сентимент 2. Конвертация ответа Deepgram в существующую схему `Document` (segments, lines, words) 3. GigaChat анализирует текст транскрипции + данные сентимента -> кандидаты в вирусные клипы 4. Постобработка: привязка границ к краям сегментов, вычисление композитных скоров 5. Сохранение клипов в таблицу `clips` ### Бэкенд **Новый модуль:** `clips` (models, schemas, repository, service, router) — хранит найденные клипы со связями project/file/job. **Модель клипа:** ``` Clip { project_id: UUID (FK projects) source_file_id: UUID (FK files) job_id: UUID? (FK jobs) title: str start_ms: int end_ms: int score: float source_type: "viral_detected" | "user_created" | "auto_generated" status: "pending" | "approved" | "rejected" | "exported" meta: JSON? (рассуждения LLM, теги, хэштеги, данные сентимента) } ``` **Новый тип джоба:** `VIRAL_DETECT` в `JobTypeEnum`. Актор вызывает GigaChat API через `httpx` из Dramatiq-воркера. **Расширение движков транскрипции:** Добавляем `"deepgram"` к существующему выбору (`engine: "whisper" | "google" | "deepgram"`). Deepgram становится дефолтом для новых транскрипций. Whisper остаётся как фоллбэк. **Интеграция с LLM:** - GigaChat API через `httpx` (OAuth2 token auth через Sber ID) - DeepInfra как фоллбэк (OpenAI-совместимый API) - Промпты хранятся в `cpv3/infrastructure/prompts/viral_detection_v1.txt` - Активная версия контролируется через `LLM_VIRAL_PROMPT_VERSION` - Новые настройки: `GIGACHAT_CLIENT_ID`, `GIGACHAT_CLIENT_SECRET`, `DEEPINFRA_API_KEY`, `DEEPGRAM_API_KEY` ### Фронтенд - Новый `ViralClipsStep` в визарде проекта (features/project/) - Список клипов с превьюшками, скорами, заголовками, кнопками принять/отклонить - Модалка редактирования клипа с видео-превью (воспроизведение в диапазоне start/end) - Новый тип джоба `VIRAL_DETECT` в обработке нотификаций (через существующую WebSocket-инфраструктуру) ### Ключевые цифры | Метрика | v1 | v2 | |---|---|---| | Время транскрипции | Зависит от Whisper (уже готово) | ~30 сек (Deepgram, если ещё не транскрибировано) | | Время LLM-анализа | 10-20 сек | 10-20 сек (без изменений) | | Общее время обработки | 10-20 сек (после транскрипции) | **40-50 сек** (включая транскрипцию Deepgram) | | Стоимость за видео | ~$0.005 (только LLM) | **~$0.17** ($0.16 Deepgram + $0.01 GigaChat) | | Точность (precision) | 50-70% | **60-80%** (GigaChat лучше на русском + данные сентимента) | | Новые зависимости | `google-generativeai` + `librosa` (~30 МБ) | **Только HTTP-клиент** (~0 МБ нового) | | Срок MVP | 5-7 дней | **3-5 дней** | Стоимость за видео выросла с полкопейки до семнадцати центов — но зато ноль зависимостей, ноль локальных моделей и на два дня быстрее в разработке. ### Риски - **Доступность GigaChat API** — у Сбера uptime может быть ниже, чем у Google/OpenAI. Митигация: фоллбэк на DeepInfra. - **Structured output GigaChat** — проверить, что JSON mode / function calling работает стабильно для извлечения клипов. Тестировать рано. - **WER Deepgram на русском** — ~10-12% WER (Nova-3). Сопоставимо с Whisper `medium`. Достаточно для вирусной детекции. - **Визуальные моменты** по-прежнему не ловятся (~20-30%) — то же ограничение, что и в v1. ### MVP vs Полная версия - **MVP (3-5 дней):** Транскрипция Deepgram + анализ GigaChat. Возвращает клипы со скорами. Пользователь ревьюит и принимает/отклоняет. Без анализа энергии аудио. - **Полная (6-10 дней):** Добавляем скоринг с весами сентимента, few-shot тюнинг промпта по фидбеку пользователей, пакетную обработку, прямой экспорт клипов в 9:16, A/B-тестирование через DeepInfra. --- ## Фича 3: Авто-монтаж и трекинг лица В v1 эта фича была монстром: pyannote на CPU 30 минут жуёт аудио, PyTorch конфликтует с Whisper, GPU-воркеры, 16 ГБ RAM. В v2 всё, что касалось диаризации, ушло в один API-вызов Deepgram. Осталась только детекция лиц через MediaPipe — лёгкая библиотека, работающая на CPU за минуту-две. ### Архитектура (v2 — API-First) **Детекция лиц:** MediaPipe BlazeFace (без изменений). Apache 2.0, модель ~2МБ, 30-60 FPS на CPU. Сэмплируем на 3 FPS. **Это единственный оставшийся локальный ML-компонент.** Зависимость: `mediapipe` (~30МБ). **Диаризация спикеров:** **Deepgram API** с `diarize=true` (~30 секунд на 30-минутное видео). Полностью заменяет pyannote.audio. Диаризация включена в вызов транскрипции — никаких дополнительных расходов на API. **Маппинг лицо-спикер:** - **Фаза 1:** Эвристика по временнОй корреляции — сопоставляем треки лиц с сегментами спикеров Deepgram по максимальному пересечению во времени. 70-85% точности для видео с двумя спикерами. Ноль дополнительных зависимостей. ~100 строк Python. - **Фаза 2:** TalkNet-ASD — если понадобится повысить точность. Единственный сценарий, где GPU мог бы вернуться в повестку, но можно откладывать бесконечно, если временная корреляция + ручная коррекция пользователем достаточны. **Видео-композитинг:** Как в v1 — Remotion-композиции с CSS transform crop. Без изменений. **Новые Remotion-композиции:** Как в v1. | Композиция | Назначение | Фаза | |---|---|---| | `CaptionedVideo` (существует) | Наложение субтитров на нативное видео | Текущая | | `ShortsVideo` (новая) | Статический/ключевой кроп + субтитры в 9:16 | Фича 4 | | `AutoEditVideo` (новая) | Кроп с трекингом лица + монтаж + субтитры | Фича 3 (полная) | **Формат данных кропа:** Как в v1 (ключевые кадры с нормализованными координатами 0-1). ### Бэкенд **Новые типы джобов:** `FACE_DETECT` в `JobTypeEnum`. `SPEAKER_DIARIZE` **больше не нужен как отдельный джоб** — диаризация приходит от Deepgram в составе транскрипции. **Отделение ML-сервиса:** **Не требуется.** MediaPipe лёгкая (~30МБ, ~400МБ RAM). Работает в стандартном Dramatiq-воркере. **Изменения в Remotion-сервисе:** Как в v1 — параметр `compositionId`, пропсы `crop`/`outputWidth`/`outputHeight`. ### Время обработки (30-минутное 1080p видео) Вот где разница между v1 и v2 ощущается физически: | Шаг | v1 (CPU) | v2 (API-First) | |---|---|---| | Транскрипция + диаризация Deepgram | Нет | **~30 сек** | | Детекция лиц (MediaPipe, 3 FPS) | 1-2 мин | 1-2 мин (без изменений) | | ~~Диаризация спикеров (pyannote)~~ | ~~15-30 мин~~ | **Включено в Deepgram** | | Маппинг лицо-спикер | < 1 сек | < 1 сек | | Рендер Remotion (кроп + субтитры) | 10-30 мин | 10-30 мин (без изменений) | | **Итого (с параллелизацией)** | **35-80 мин** | **12-33 мин** | **Бутылочное горлышко в 15-30 минут на диаризацию — полностью ликвидировано.** ### Требования к памяти | Конфигурация | v1 | v2 | |---|---|---| | Пиковое потребление RAM | 8-16 ГБ | **~400 МБ** (только MediaPipe) | | Конфигурация воркера | `--threads 1`, лимит 16 ГБ | Стандартный воркер, лимит 4 ГБ | С 16 гигабайт до 400 мегабайт. В сорок раз. Это не оптимизация — это другая категория задач. ### Фронтенд Без изменений по сравнению с v1: - Превью трекинга лица: видеоплеер с наложением bounding box через canvas - Трек спикеров в TimelinePanel - Контролы: слайдер зума, скорость перехода, выбор спикера - Переключатель сравнения «до/после» ### Ключевые цифры | Метрика | v1 | v2 | |---|---|---| | Время диаризации | 15-30 мин (CPU) / 1-2 мин (GPU) | **~30 сек** (API) | | Время детекции лиц | 1-2 мин | 1-2 мин (без изменений) | | Общее время анализа | 17-33 мин (CPU) | **~2 мин** | | Полный пайплайн (с рендером) | 35-80 мин (CPU) | **12-33 мин** | | Пиковое потребление RAM | 8-16 ГБ | **~400 МБ** | | Новые зависимости | ~280 МБ (mediapipe + pyannote + torchaudio) | **~30 МБ** (только mediapipe) | | GPU нужен? | Фаза 2 — рекомендуется | **Никогда** | | Срок MVP | 12-15 дней | **8-10 дней** | ### Риски - **Точность маппинга лицо-спикер** не изменилась (70-85% с эвристикой) — по-прежнему самая сложная подзадача - **Точность диаризации Deepgram** — DER может быть чуть хуже, чем у pyannote 3.1 (~12-15% vs ~10%). Приемлемо для нашего кейса. - **Потеря качества при кропе** — без изменений - **TalkNet-ASD отложен** — если временная корреляция недостаточно точна, TalkNet потребует GPU. Разберёмся, когда дойдём. ### MVP vs Полная версия - **MVP (8-10 дней):** Детекция лиц на сэмплированных кадрах. Deepgram предоставляет метки спикеров. Временная корреляция привязывает лица к спикерам. Пользователь может поправить вручную. Статический кроп на выбранное лицо. - **Полная (20-30 дней):** Динамический кроп, следующий за активным спикером. Плавные переходы. Сплит-скрин. Мульти-спикер. Опциональный TalkNet-ASD для повышения точности. --- ## Фича 4: Конвертация в вертикальные Shorts (9:16) **Без изменений по сравнению с v1.** Эта фича не зависит от ML. ### Архитектура **Пайплайн:** Сначала кроп, потом субтитры — всегда. Один проход рендеринга в Remotion через новую композицию `ShortsVideo`. **Позиционирование субтитров:** Новые поля в схеме не нужны. Бэкенд корректирует `font_size`, `padding_px`, `max_width_pct` в `styleConfig` под 9:16. **Спецификация кропа:** ```typescript type CropConfig = { mode: "static" | "keyframe"; staticCrop?: { x: number; y: number; zoom: number }; keyframes?: Array<{ time: number; x: number; y: number; zoom: number }>; interpolation?: "linear" | "ease" | "smooth"; }; ``` ### Бэкенд **Новый тип джоба:** `ASPECT_CONVERT` в `JobTypeEnum`. Новая функция `crop_to_vertical()` в `media/service.py`. **Новый тип артефакта:** `VERTICAL_VIDEO` в `ArtifactTypeEnum`. ### Фронтенд - Превью кропа: перетаскиваемый прямоугольник 9:16 поверх видеоплеера - Переключатель side-by-side превью - Кнопка «Конвертировать в Short» на каждом одобренном вирусном клипе - Автозаполнение кропа из данных детекции лица (когда доступны) ### Время обработки | Подход | Время (30-мин видео) | |---|---| | FFmpeg кроп (без субтитров) | 12-36 мин | | Remotion кроп + субтитры (один проход) | 11-45 мин | | FFmpeg с NVENC (аппаратное кодирование) | 3-5 мин | ### MVP vs Полная версия - **MVP (6-8 дней):** Ручной выбор региона кропа с превью. Remotion-композиция `ShortsVideo`. - **Полная (+3-4 дня после Фичи 3):** Авто-кроп из данных детекции лица. Конвертация в один клик. Пакетный экспорт. --- ## Рекомендуемый порядок разработки ``` Неделя 1-2: Фича 1 (Шаблоны) ████████ Неделя 2-3: Фича 2 (Вирусная детекция) ██████████ Неделя 3-5: Фича 4 MVP (9:16 кроп) ████████████████ Неделя 5-10: Фича 3 (Трекинг лица) ██████████████████████████████ Неделя 10-11: Фича 4 (апгрейд) ████████ ``` **Почему именно так:** 1. **Шаблоны первыми** — готовы к реализации, нулевой риск, моментальная польза для пользователей 2. **Вирусная детекция второй** — самый быстрый ROI с API-first подходом (3-5 дней MVP), валидирует спрос 3. **9:16 MVP третьим** — создаёт композицию `ShortsVideo`, полезна сама по себе 4. **Трекинг лица последним** — всё ещё самая сложная фича, но теперь намного проще без pyannote/GPU 5. **Апгрейд 9:16** — тривиален, когда трекинг лица даёт данные о позициях --- ## Анализ стоимости ### Стоимость обработки одного видео (30-мин, все фичи) | Компонент | v1 (локальный ML) | v2 (API-First) | |---|---|---| | Транскрипция + диаризация | $0.07 вычисления | **$0.16** (Deepgram) | | LLM вирусная детекция | $0.005 (Gemini) | **$0.01** (GigaChat) | | Детекция лиц | $0.002 вычисления | $0.002 вычисления (без изменений) | | FFmpeg/Remotion рендер | $0.02 вычисления | $0.02 вычисления | | **Итого за видео** | **$0.11** | **$0.20** | Двадцать центов. За полный пайплайн: транскрипция, диаризация, поиск вирусных моментов, детекция лиц, рендер. Двадцать центов. ### Сравнение месячных расходов | Масштаб | v1 (локальный ML) | v2 (API-First) | |---|---|---| | 100 видео/месяц | $11 вычисления + сервер + $0-380 GPU | **$20 API + сервер** | | 500 видео/месяц | $55 + $200-380 GPU = $255-435 | **$100 API + сервер** | | 1 000 видео/месяц | $110 + $380 GPU = $490 | **$200 API + сервер** | | 5 000 видео/месяц | $550 + $380 GPU = $930 | **$1 000 API + сервер** | **Точка безубыточности:** ~2 000-3 000 видео/месяц. Ниже этого порога API дешевле. А учитывая, что не нужно думать о GPU, обслуживать ML-инфраструктуру и чинить OOM-крэши — реальный breakeven ещё выше. ### Предлагаемые тарифы SaaS | Тариф | Цена | Ограничения | Себестоимость | Маржа | |---|---|---|---|---| | Free | $0 | Видео до 10 мин, 5/месяц | ~$0.07/видео | Маркетинг | | Pro | $15-30/мес | Видео до 30 мин, 50/месяц | ~$0.20/видео | 50-70% | | Business | $50-100/мес | Видео до 60 мин, 200/месяц | ~$0.35/видео | 65-80% | --- ## Инфраструктура (v2 — упрощённая) ### Архитектура ``` Фронтенд → Backend API → Dramatiq-воркер (лёгкий: только MediaPipe) ↕ ↕ ↕ PostgreSQL Deepgram API GigaChat API Redis (транскрипция (вирусная S3/MinIO + диаризация) детекция) Remotion DeepInfra (фоллбэк LLM) ``` Сравните с v1: нет ML-воркера, нет GPU, нет Docker Compose profiles. Один воркер обрабатывает всё. ### Docker-образ | | v1 | v2 | |---|---|---| | База | python:3.11-slim + PyTorch + Whisper + CUDA libs | python:3.11-slim + mediapipe | | Размер | 1.72 ГБ | **~400-500 МБ** | | RAM | 16 ГБ рекомендовано | **4 ГБ достаточно** | **Можно удалить из `pyproject.toml`:** `openai-whisper` (и транзитивно PyTorch) — если Deepgram полностью заменяет Whisper. Оставить Whisper как опциональную зависимость (`uv sync --group whisper`) для фоллбэка. ### Разделение ML-сервиса не требуется При том, что локально работает только MediaPipe (~30МБ, ~400МБ RAM), не нужны: - Отдельный контейнер ML-воркера - Docker Compose profiles для ML - GPU-инфраструктура - Выделенные очереди Dramatiq для ML Стандартный воркер с `--processes 1 --threads 2` справляется со всем. ### Новые настройки ```python # Deepgram deepgram_api_key: str = Field(default="", alias="DEEPGRAM_API_KEY") # GigaChat (Сбер) gigachat_client_id: str = Field(default="", alias="GIGACHAT_CLIENT_ID") gigachat_client_secret: str = Field(default="", alias="GIGACHAT_CLIENT_SECRET") # DeepInfra (фоллбэк LLM) deepinfra_api_key: str = Field(default="", alias="DEEPINFRA_API_KEY") # Конфигурация LLM llm_provider: str = Field(default="gigachat", alias="LLM_PROVIDER") # gigachat | deepinfra llm_viral_prompt_version: str = Field(default="v1", alias="LLM_VIRAL_PROMPT_VERSION") ``` --- ## Сводка по технологическому стеку ### Новые зависимости (v2) | Пакет | Размер | Назначение | Фича | |---|---|---|---| | `mediapipe` | ~30 МБ | Детекция лиц (CPU) | 3 | | `httpx` | Уже установлен | API-вызовы к Deepgram, GigaChat, DeepInfra | 2, 3 | | **Итого новых зависимостей** | **~30 МБ** | | | ### Удалённые зависимости (по сравнению с v1) | Пакет | Сэкономлено | Для чего использовался | |---|---|---| | ~~`openai-whisper`~~ | ~50 МБ + PyTorch ~2 ГБ | Транскрипция (заменён Deepgram) | | ~~`pyannote-audio`~~ | ~200 МБ | Диаризация (заменён Deepgram) | | ~~`torchaudio`~~ | ~50-80 МБ | Зависимость pyannote | | ~~`librosa`~~ | ~20 МБ | Энергия аудио (заменён сентиментом Deepgram) | | **Итого удалено** | **~2.3 ГБ** | | Добавили 30 мегабайт. Удалили 2.3 гигабайта. Соотношение 1:77. ### Новые бэкенд-модули | Модуль | Назначение | Фича | |---|---|---| | `clips` | CRUD клипов, воркфлоу ревью | 2 | ### Новые Remotion-композиции | Композиция | Назначение | Фича | |---|---|---| | `ShortsVideo` | Статический/ключевой кроп + субтитры в 9:16 | 4 | | `AutoEditVideo` | Динамический кроп с трекингом лица + субтитры | 3 | ### Новые типы джобов | Тип джоба | Назначение | Фича | |---|---|---| | `VIRAL_DETECT` | Анализ транскрипции через GigaChat | 2 | | `ASPECT_CONVERT` | 9:16 кроп + пере-кодирование | 4 | | `FACE_DETECT` | Детекция bounding box лиц (MediaPipe) | 3 | Обратите внимание: `SPEAKER_DIARIZE` **больше не является отдельным типом джоба** — диаризация включена в транскрипцию Deepgram. ### Расширение движков транскрипции ```python # Расширяем существующий выбор движка: engine: Literal["whisper", "google", "deepgram"] = "deepgram" ``` Deepgram становится дефолтом. Whisper остаётся как опциональный фоллбэк (требует `uv sync --group whisper`). --- ## Сквозные проблемы (v2) ### Остались из v1 | Проблема | Приоритет | Действие | |---|---|---| | `_get_job_status_sync()` течёт соединениями к БД | Высокий | Починить до добавления новых акторов | | `tasks/service.py` — 1 674 строки, скоро перевалит за 2К | Средний | Вынести бойлерплейт акторов | | Дефолт `REMOTION_SERVICE_URL` в воркере неверный | Средний | Исправить на `http://remotion:3001` | | Ни на одном Docker-сервисе нет лимитов ресурсов | Средний | Добавить memory/CPU лимиты | | Нет очистки временных файлов при OOM-крэше | Средний | Добавить периодическую очистку | | Проверка `isCurrent` слова в Captions.tsx хрупкая | Низкий | Сравнивать по индексу | ### Новые в v2 | Проблема | Приоритет | Действие | |---|---|---| | Управление API-ключами (3 сервиса) | Высокий | Всё через env-переменные в settings, никогда в коде | | Обработка rate limit'ов API | Высокий | Retry с exponential backoff во всех акторах | | Зависимость от вендора | Средний | Абстрагировать за интерфейсом движков (существующий паттерн) | | Зависимость от сети (API недоступен) | Средний | Оставить Whisper как опциональный фоллбэк | | Конвертация Deepgram -> схема Document | Средний | Построить конвертер под существующую структуру `Document` | | Обновление OAuth2-токена GigaChat | Средний | Кэширование токена с авто-обновлением в `infrastructure/` | ### Ликвидированные из v1 | ~~Проблема~~ | Почему исчезла | |---|---| | ~~PyTorch CPU-only индекс~~ | PyTorch удалён полностью | | ~~OOM воркера на ML-джобах~~ | Нет тяжёлого ML локально | | ~~Docker-образ ML-воркера~~ | Один лёгкий образ | | ~~GPU-инфраструктура~~ | Весь ML — через API | | ~~Конфликты версий PyTorch~~ | Нет PyTorch | | ~~Скачивание моделей при первом запуске~~ | Нет локальных моделей | --- ## Отчёты специалистов Полные выводы специалистов доступны в стенограмме сессии. Ключевые файлы, которые изучал каждый: - **ML-инженер:** `cpv3/modules/transcription/service.py`, `cpv3/modules/tasks/service.py`, `pyproject.toml` - **Backend-архитектор:** `cpv3/modules/tasks/service.py`, `cpv3/modules/jobs/schemas.py`, `cpv3/modules/media/service.py`, `cpv3/modules/captions/service.py`, `docker-compose.yml` - **Remotion-инженер:** `remotion_service/src/components/Composition.tsx`, `Captions.tsx`, `Root.tsx`, `useCaptions.ts`, `useVideoMeta.ts`, все определения типов - **Frontend-архитектор:** `src/widgets/TimelinePanel/`, `src/features/project/FragmentsStep/`, `src/shared/context/WizardContext.tsx`, `src/shared/store/notifications/` - **DevOps-инженер:** `docker-compose.yml`, `Dockerfile`, `pyproject.toml`, `uv.lock` - **Инженер по производительности:** `cpv3/modules/tasks/service.py`, `cpv3/modules/media/service.py`, `cpv3/modules/transcription/service.py`, `docker-compose.yml` Примечание: Отчёты специалистов подготовлены для архитектуры v1 (локальный ML). Их рекомендации по Remotion-композициям, дизайну бэкенд-модулей, фронтенд-компонентам и форматам данных кропа остаются актуальными в v2. Рекомендации по инфраструктуре и ML-моделям заменены API-first подходом.