Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
37 KiB
Дорожная карта видеофич — Техническая консультация 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 удалён полностью (Whisper заменён Deepgram) | |
| Нет тяжёлого ML — стандартный воркер на 4 ГБ | |
| Один лёгкий образ | |
| Весь ML — через API | |
| Нет PyTorch | |
| Нет локальных моделей (кроме MediaPipe, ~2 МБ) | |
| Не нужно |
Новые проблемы
Ничего бесплатного не бывает. Вот что появилось взамен:
| Проблема | Приоритет | Митигация |
|---|---|---|
| Управление 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 для анализа громкости (смех, повышенный голос) как дополнение.
Пайплайн:
- Транскрипция Deepgram с
diarize=true+sentiment=true-> таймстемпы + спикеры + сентимент - Конвертация ответа Deepgram в существующую схему
Document(segments, lines, words) - GigaChat анализирует текст транскрипции + данные сентимента -> кандидаты в вирусные клипы
- Постобработка: привязка границ к краям сегментов, вычисление композитных скоров
- Сохранение клипов в таблицу
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 мин (без изменений) |
| Включено в 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.
Спецификация кропа:
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 (апгрейд) ████████
Почему именно так:
- Шаблоны первыми — готовы к реализации, нулевой риск, моментальная польза для пользователей
- Вирусная детекция второй — самый быстрый ROI с API-first подходом (3-5 дней MVP), валидирует спрос
- 9:16 MVP третьим — создаёт композицию
ShortsVideo, полезна сама по себе - Трекинг лица последним — всё ещё самая сложная фича, но теперь намного проще без pyannote/GPU
- Апгрейд 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 справляется со всем.
Новые настройки
# 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.
Расширение движков транскрипции
# Расширяем существующий выбор движка:
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 удалён полностью | |
| Нет тяжёлого ML локально | |
| Один лёгкий образ | |
| Весь ML — через API | |
| Нет 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 подходом.