PRINTFILM — платформа для генерации AI-короткометражек и сериалов в стиле комикса

· 2 мин чтения
video-generation image-generation python fastapi self-hosting
📂 Исходный код на GitHub

Открытая платформа с открытым кодом для AI-комикс-драм и AI-короткометражек: от темы или сценария через раскадровку, генерацию картинок и роликов до готового видео. Дикторский голос генерируется моделью Seedance вместе с картинкой. Лицензия MIT.

PRINTFILM — платформа для генерации AI-короткометражек и сериалов в стиле комикса

PRINTFILM — платформа с открытым кодом, которая превращает тему или готовый сценарий в короткометражный ролик. Путь простой: текст разбивается на кадры, для каждого кадра генерируются картинка и видео, а в конце всё склеивается в один файл. Голос диктора модель генерирует сама, отдельная озвучка не нужна. Лицензия MIT, проект написан на Python.

Автор проекта — разработчик из Китая. Его формулировка задачи звучит так: «сделать из истории ролик, который можно показать зрителю». Снять ролик можно двумя способами: как сериал в стиле комикса или как короткое видео для рекламы и популярных объяснений.

Две продуктовые линейки

Сериал в стиле комикса

Линейка для длинных историй, разбитых на эпизоды. Берёте одну фразу — получаете готовый сериал.

  • пишете описание сюжета, краткий пересказ или полный сценарий;
  • заводите библиотеку персонажей, сцен и предметов, чтобы они не менялись от серии к серии;
  • текст разбирается на отдельные сцены, дальше вы правите раскадровку на холсте;
  • подробные правила по эпизодам лежат в docs/EPISODE_RULES.md.

Библиотека объектов здесь самое главное. Персонаж или комната, добавленные один раз, дальше переиспользуются во всех сериях, поэтому герой не превращается в другого человека от серии к серии.

Короткие ролики

Линейка для рекламных и обучающих видео. Здесь всё проще: выбираете шаблон из более чем 20 встроенных стилей и проходите тот же путь по кадрам.

Два режима сборки:

Режим Что делает Когда брать
full картинка, видео и финальная склейка когда нужен «настоящий» движущийся ролик
image_text только статичные картинки с текстом когда важно быстро и дёшево

Один кадр можно перерисовать или сгенерировать заново, не трогая остальные. Задачи не останавливаются, когда вы закрываете вкладку: генерация идёт на сервере, прогресс виден на странице истории.

Финальный файл собирается через FFmpeg.

Инструменты и открытый API

Если не нужно проходить всю сборку, есть отдельные мелкие инструменты: генерация картинки из текста, картинки из картинки, картинки товара, видео из текста, видео из видео и коллаж для электронной коммерции.

Наружу есть открытый раздел /api/v1 с методами генерации картинок и видео. Доступ проверяется заголовком Bearer или X-Api-Key. То есть платформу можно использовать как генератор из своего кода, не заходя в веб-интерфейс.

В админке управляют пользователями, заказами, шаблонами, задачами и моделями.

Как устроен процесс

ввод темы или сценария
    → раскадровка
    → генерация картинок
    → генерация видео (Seedance сразу с голосом)
    → склейка через FFmpeg

Ключевая черта: обе линейки работают через один и тот же генератор. Сериал и короткий ролик отличаются только интерфейсом и набором экранов, а к моделям идут одинаковые запросы. Это заметно сокращает код и делает поведение предсказуемым — новая линейка не требует нового слоя генерации.

Технические решения

Задачи выполняются внутри приложения. Планировщик задач, исполнитель и код, который опрашивает статусы генерации, работают внутри того же процесса, где крутится API. Отдельный воркер на Celery не нужен.

Модели меняются без правки кода. Ключ и названия моделей задаются в админке или в файле окружения. Формат обращения к провайдеру один и тот же, в примере настройки это OpenAI-совместимый шлюз TokenFree.

Запуск — одна команда. Образ лежит в публичном хранилище Alibaba Cloud, логиниться для скачивания не нужно.

Оплата по умолчанию выключена. Если включить, списание идёт по факту использования. Подробности в docs/BILLING.md.

Стек

Слой Что используется
Бэкенд Python 3.12, FastAPI, SQLAlchemy, PostgreSQL, Redis
Фронтенд React 19, TypeScript, Vite 8; админка на Tailwind и shadcn
Модели TokenFree New API — текст, картинки, видео
Развёртывание полный Docker-образ или три процесса локально плюс контейнеры со СУБД

Быстрый старт

Нужен только Docker Desktop (или Docker Engine с Compose).

git clone https://github.com/yi1108/printfilm.git
cd printfilm

cp deploy/.env.docker.example deploy/.env.docker

В файле deploy/.env.docker нужно задать минимум три значения:

Переменная Зачем
POSTGRES_PASSWORD пароль базы, значение из примера использовать нельзя
SECRET_KEY случайная длинная строка для сессий и шифрования ключей
OPENAI_API_KEY / ARK_API_KEY ключ TokenFree, в оба поля достаточно вписать один и тот же

Ключа нет, а посмотреть интерфейс хочется — поставьте ARK_MOCK=true. Тогда платформа запустится с заглушками, но реально картинки и видео не сгенерирует.

Запуск:

docker compose --env-file deploy/.env.docker up -d

Через примерно полминуты, после того как пройдёт проверка состояния API, поднимутся остальные сервисы:

Сервис Адрес
Пользовательская часть http://localhost:8080
Админка http://localhost:8081
API и документация http://localhost:8000, /docs
Проверка состояния http://localhost:8000/api/health

Обновление до свежего образа:

docker compose --env-file deploy/.env.docker pull
docker compose --env-file deploy/.env.docker up -d

Если вы правили код или образ недоступен, соберите его сами:

docker compose --env-file deploy/.env.docker -f docker-compose.full.yml up -d --build

Кто есть кто в системе

Обычный пользователь регистрируется по email через раздел /auth в пользовательской части. Администратора вручную не создают: сначала заводите тот же аккаунт, потом вписываете его email в ADMIN_BOOTSTRAP_EMAILS и пересоздаёте контейнер API. После этого аккаунт получает права администратора. Демонстрационных учёток в репозитории нет.

Ключи TokenFree

В открытой версии текст, картинки и видео идут через TokenFree New API — шлюз, совместимый с OpenAI. Ключ можно задать тремя способами.

Через файл окружения — при первом самостоятельном развёртывании:

OPENAI_API_KEY=sk-ваш_ключ
OPENAI_BASE_URL=https://www.tokenfree.com/v1
ARK_API_KEY=sk-ваш_ключ
ARK_MOCK=false
MODEL_LLM=kimi-k2.6
MODEL_IMAGE=seedream-5-0-pro
MODEL_VIDEO=seedance-2-5

Две переменные с ключом заполняются одним и тем же значением. Дальше пересоздайте контейнер API, чтобы переменные применились.

Через админку — удобнее для повседневной работы. Заходите в «Системные настройки → Модели», вносите ключ в канал TokenFree и сохраняете. Там же меняются модели по умолчанию, изменения применяются сразу. Сохранённый ключ шифруется и попадает в базу — при переезде на другую машину базу нужно взять с собой, иначе ключ придётся вводить заново.

Разбор типовых ошибок:

Что видите Что делать
Ошибка «ключ не настроен» при генерации проверьте, не остался ли в .env.docker пример replace-me, и заполнен ли ключ в админке
В ответе на проверку состояния ark_mock: true выключите ARK_MOCK и пересоздайте контейнер API
401 или нехватка средств посмотрите в консоли TokenFree, включён ли ключ и хватает ли баланса
404 на названии модели возьмите идентификатор из списка моделей, которые действительно есть в шлюзе

Кому пригодится

  • Рекламные и обучающие ролики: превращаете оффер в короткое видео для размещения.
  • Сериалы в стиле комикса: доводите описание сюжета до эпизодов с постоянными героями и декорациями.
  • Разовые картинки и ролики: берёте один инструмент из центра, без всей сборки.
  • Своё железо: поднимаете платформу на своём сервере через Docker.

Документация проекта

Документ О чём
docs/STANDARDS.md инженерные правила
docs/BILLING.md оплата и подключение платёжной системы
docs/EPISODE_RULES.md правила сборки эпизодов
docs/SEEDANCE_2_5.md параметры модели Seedance
deploy/README.md локальные СУБД и эксплуатация
LICENSE текст лицензии MIT

Перед отправкой правок пройдите линтеры: npm run lint во фронтенде и админке, pytest в бэкенде. Ключи, файлы .env и сгенерированные медиа в коммит не кладут. Автор ведёт чат в WeChat — аккаунт gitpp88, в описании нужно указать, что вы прочитали проект и хотите обсудить развёртывание.

Проект на GitHub собрал около 4 тысяч звёзд. Это не значит, что платформа готова к боевой эксплуатации: она молодая, а без ключа TokenFree работает только в режиме заглушек. Но как основа для собственной видеостудии или как образец того, как собрать видео-пайплайн на FastAPI и React, проект выглядит цельно.

Источник: https://github.com/yi1108/printfilm