Как я написал AI-генератор коротких видео (Shorts/Reels) на Python с Clean Architecture
Привет, Хабр! ????
В этой статье я хочу поделиться опытом разработки пет-проекта, который превратился в полноценный инструмент для автоматической генерации коротких видео (Shorts, Reels, TikTok). Идея проста: на входе — тема (например, "История Римской Империи за 1 минуту"), на выходе — готовый видеоролик с озвучкой, субтитрами и сгенерированным видеорядом.
Но вместо того, чтобы накидать "спагетти-код" в одном файле main.py, я решил подойти к задаче как инженер и построить систему на принципах Clean Architecture.
???? Зачем?
Генерация видео — это сложный пайплайн:
1. Написать сценарий.
2. Придумать визуальный стиль.
3. Сгенерировать картинки (Midjourney, Flux).
4. Оживить картинки в видео (Kling, Runway, Sora).
5. Озвучить текст (TTS).
6. Собрать всё вместе с субтитрами.
API меняются, модели выходят новые каждую неделю. Сегодня лучший визуал у Flux, завтра у Midjourney v7. Сегодня видео делаем в Runway, завтра в Kling. Жесткая привязка к конкретным API убила бы проект через месяц.
Поэтому Clean Architecture здесь не роскошь, а необходимость.
???? Архитектура
Проект разбит на слои, следуя классической "луковой" архитектуре:
1. Domain (Entities): Pydantic-модели, описывающие суть (VideoScript, Scene, Character). Они ничего не знают о внешнем мире.
2. Interfaces: Абстрактные классы (VideoGenerator, ScriptGenerator). Контракты, которые должны соблюдать внешние сервисы.
3. Services (Use Cases): Бизнес-логика. Здесь живут "Агенты": Сценарист, Арт-директор, Режиссер монтажа.
4. Infrastructure: Реализации интерфейсов (API клиентов Comet, Yandex, OpenAI и т.д.).
Читать далее