PRINTFILM — платформа для генерации AI-короткометражек и сериалов в стиле комикса
📂 Исходный код на GitHubОткрытая платформа с открытым кодом для AI-комикс-драм и AI-короткометражек: от темы или сценария через раскадровку, генерацию картинок и роликов до готового видео. Дикторский голос генерируется моделью Seedance вместе с картинкой. Лицензия MIT.
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