printfilm:用 Python 搭一条 AI 短视频与漫剧的生产流水线
如果你正在做 AI 视频方向的工程,应该清楚这类系统最费劲的部分往往不是调用模型本身,而是怎么把「文案 → 分镜 → 生图 → 生视频 → 合成」串成一条能稳定跑通、能容忍失败重试的流水线。printfilm 这个开源项目,恰好把这条链路完整搭了出来,而且技术选型非常主流:后端 Python 3.12 + FastAPI,前端 React 19 + TypeScript,数据库 PostgreSQL + Redis。
本文从工程实现角度拆解它,重点讲流水线设计、任务编排、模型接入和部署边界,帮助判断它是否适合作为自建 AI 视频工具的起点。
一、它到底解决什么问题
典型的 AI 视频工作流,人工介入点非常多:写文案、切分镜、逐张生成图片、逐段生成视频、配音、拼片。printfilm 把这一串变成「模板驱动」的自动流程:创作者选定主题或剧本,系统自动产出分镜脚本、配图、视频片段,再用 FFmpeg 合成最终成片。
两条产品线——AI 短视频与 AI 漫剧——共用同一套生成能力,只是业务外壳不同。这种「一套内核、两个前端产品」的设计,对想复用的团队是加分项。
二、核心架构与技术栈
项目分成四个目录,职责清晰:
backend:Python 3.12 + FastAPI + SQLAlchemy,承担业务逻辑与模型编排frontend:React 19 + TypeScript + Vite,用户端界面admin:React 管理后台,含模板、用户、订单、任务队列等运营能力deploy:Docker 与部署配置
后端依赖值得留意:fastapi、sqlalchemy、asyncpg(异步 PostgreSQL)、redis、celery、httpx、oss2、edge-tts。默认配置里USE_CELERY=false,任务在进程内跑,用不上 Celery 也能工作;需要横向扩展时再打开。
模型层接入 TokenFree New API,文字、生图、生视频、TTS 共用一把 Key,通过环境变量OPENAI_API_KEY与OPENAI_BASE_URL配置。默认模型包括 kimi-k2.6(文字)、seedream-5-0-pro(生图)、seedance-2-5(生视频)、qwen-tts(配音)。
三、流水线是怎么设计的
项目把「生成」抽象成模板驱动的流程,几个关键点值得参考:
- 主题到剧本:输入主题后,模型生成结构化的剧本,包括序幕、发展、转折、高潮、结局。
- 分镜拆分:剧本被拆成分镜(Beat / Fragment),每个分镜有画面描述、旁白台词、时长。
- 并行生成:图片与视频生成有并发上限(
PIPELINE_IMAGE_CONCURRENCY、PIPELINE_VIDEO_CONCURRENCY),在模型 API 限流内尽量并行。 - 成片合成:所有分镜片段通过 FFmpeg 拼合,字幕用中文字体渲染。
进程内任务平台的设计思路是:把每个生成阶段当作一个可重试的任务单元,失败单独重跑,不阻塞整条流水线。这个抽象对没有专职运维的团队尤其友好——不需要额外起 worker,单进程即可串起来。
四、前端与后台
前端基于 React 19 + Vite,用@xyflow/react做流程图、jszip处理分镜打包,整体是标准现代前端栈。管理后台负责用户、订单、任务队列、模型切换、模板管理等运营功能,前后端分离,nginx 反代/api与/static。
分镜工作台能直观看到文案大纲、分镜列表、每个分镜的台词与生成状态,是理解整套产品形态最快的入口:
五、部署与边界
官方提供两条启动路径:
- Docker 全栈:
docker compose --env-file deploy/.env.docker up -d,一条命令拉起 PostgreSQL、Redis、API、前端、后台。 - 源码模式:按 deploy 说明启动 PostgreSQL / Redis,后端
uvicorn app.main:app,前端npm run build后用 nginx 托管。
需要留意的边界:
- 模型全走第三方 TokenFree 网关,API Key 需要自己申请,离线不可用。
- 计费模块默认关闭(
BILLING_ENABLED=false),内置易支付网关的商户号需自行申请,接入前评估支付合规。 - 默认密钥均为占位符,部署前必须更换
SECRET_KEY与数据库密码。
六、小结
printfilm 的工程价值,在于把一条复杂的多模型生成链路做成可扩展、可观测的生产系统,而不只是模型调用的演示 Demo。它的任务编排、前后端分离、模板驱动设计,值得做 AI 视频或 AIGC 应用的人读一遍源码。
想在自己环境跑通的话,git clone https://github.com/yi1108/printfilm后按 deploy 说明操作即可。后续我会再拆「分镜拆分」与「成片合成」这两个子模块的实现细节。
本文来源:https://github.com/yi1108/printfilm