PRINTFILM
开源项目:PRINTFILM
版本:0.2.0 | 更新:2026-09-17
模板驱动的 AI 短视频与漫剧创作平台:主题 / 剧本 → 分镜 → 生图 → 生视频 → 成片。口播由 Seedance 在出片时一并生成,无需单独配音。同一条生成能力,多套视觉风格;支持注册登录、按量计费、管理后台与开放 API。

| 层级 | 技术选型 |
|---|
| 后端 | Python 3.12 · FastAPI · SQLAlchemy · PostgreSQL |
| 用户端 | React 19 · TypeScript · Vite 8 |
| 管理端 | React 19 · Tailwind · shadcn/ui |
| AI | 文字 / 生图 / 生视频:TokenFree New API(Seedance 视频自带口播) |
| 任务 | 应用内 scheduler + executor + poller(随 FastAPI 进程启动) |
| 部署 | Docker 全栈镜像,或本机三个进程 + Postgres/Redis 容器 |
目录
快速开始
推荐用预构建镜像,本机只需 Docker。gcc 命名空间公开,拉取无需登录。
git clone https://github.com/yi1108/printfilm.git
cd printfilm
cp deploy/.env.docker.example deploy/.env.docker
# 请把 POSTGRES_PASSWORD、SECRET_KEY 改成自己的值
# 填入 TokenFree API Key(OPENAI_API_KEY 与 ARK_API_KEY 可用同一把)
docker compose --env-file deploy/.env.docker up -d
| 角色 | 如何获得 |
|---|
| 普通用户 | 打开用户端 /auth 自行注册(邮箱 + 密码) |
| 管理员 | 先注册,再在 deploy/.env.docker 写 ADMIN_BOOTSTRAP_EMAILS=你的邮箱,执行 docker compose --env-file deploy/.env.docker up -d --force-recreate api。不会造号 |
仓库没有内置演示账号。生产环境请立即改掉 SECRET_KEY、数据库密码与所有 API Key。无 Key 想先看界面时设 ARK_MOCK=true。
预构建镜像
gcc-registry.cn-hangzhou.cr.aliyuncs.com/gcc/printfilm-api:latest
gcc-registry.cn-hangzhou.cr.aliyuncs.com/gcc/printfilm-web:latest
gcc-registry.cn-hangzhou.cr.aliyuncs.com/gcc/printfilm-admin-web:latest
postgres:16-alpine
redis:7-alpine
项目结构
backend/ FastAPI、流水线、计费、任务运行时
frontend/ 用户端(工作台 / 漫剧 / 科普 / 工具)
admin/ 运营后台
deploy/ 环境变量示例、仅中间件 compose、发布说明
docs/ 规范、计费、发布记录
docker-compose.yml 拉取公开镜像一键启动
docker-compose.full.yml 从源码构建(开发 / 自建镜像)
源码地址:https://github.com/yi1108/printfilm
Docker 部署
适用于 GitHub 克隆后的自托管。业务镜像已推到阿里云 ACR 公开仓库;Postgres / Redis 用 Docker Hub 官方镜像。
浏览器 :8080 / :8081
│ /api · /static
▼
nginx(web / admin-web 镜像)
│
▼
FastAPI :8000(api 镜像,内含 FFmpeg 与中文字体)
├── PostgreSQL :15432
└── Redis :16379
方式一:拉取镜像(推荐)
- 安装 Docker Desktop 或 Docker Engine 20.10+(含 Compose v2)。
- 复制环境文件并修改密码与 Key:
cp deploy/.env.docker.example deploy/.env.docker
- 启动:
docker compose --env-file deploy/.env.docker pull
docker compose --env-file deploy/.env.docker up -d
docker compose --env-file deploy/.env.docker ps
- 打开 http://localhost:8080 注册;健康检查:
curl http://localhost:8000/api/health
ok 为 true 表示任务运行时与数据库可用。首次 up 会 create_all 并写入缺失模板,约需数十秒。
方式二:从源码构建
改过前端或后端、或无法拉取 ACR 时:
cp deploy/.env.docker.example deploy/.env.docker
docker compose --env-file deploy/.env.docker -f docker-compose.full.yml up -d --build
用户端镜像构建时强制 VITE_API_BASE=(空字符串),由 nginx 同源反代 /api 与 /static,不要把本机 http://127.0.0.1:8000 打进 dist。
端口
| 容器 | 宿主机 | 说明 |
|---|
| web | 8080 | 用户端 SPA + 反代 API |
| admin-web | 8081 | 管理端 SPA + 反代 API |
| api | 8000 | FastAPI / OpenAPI |
| postgres | 15432 | 仅调试用;应用走容器网络 postgres:5432 |
| redis | 16379 | 仅调试用;应用走 redis:6379 |
若端口冲突,改 docker-compose.yml 左侧宿主机端口,并同步 CORS_ORIGINS、PUBLIC_BASE_URL。
必改配置
编辑 deploy/.env.docker:
| 变量 | 说明 |
|---|
POSTGRES_PASSWORD | 数据库密码;compose 会用它拼 DATABASE_URL |
SECRET_KEY | JWT 签名,生产必须换成长随机串 |
OPENAI_API_KEY / ARK_API_KEY | TokenFree Key(可填同一把) |
PUBLIC_BASE_URL | 用户访问的站点根,默认 http://localhost:8080 |
CORS_ORIGINS | 浏览器来源,逗号分隔 |
ADMIN_BOOTSTRAP_EMAILS | 已注册用户提权邮箱 |
ARK_MOCK | true 时用本地 mock 素材,不调上游 |
密钥也可以启动后再到管理后台 系统设置 → 模型 填写,不必写进环境文件。
常用命令
# 日志
docker compose --env-file deploy/.env.docker logs -f api
# 只重启 API(改环境变量后)
docker compose --env-file deploy/.env.docker up -d --force-recreate api
# 更新到最新镜像
docker compose --env-file deploy/.env.docker pull
docker compose --env-file deploy/.env.docker up -d
# 停止(保留数据库与成片卷)
docker compose --env-file deploy/.env.docker down
# 停止并删除数据卷(清库)
docker compose --env-file deploy/.env.docker down -v
数据卷:printfilm_pgdata、printfilm_redisdata、printfilm_media(成片与分镜落盘,FFmpeg 只读本地)。
生产注意
- 反向代理到 8080 / 8081 时,把
PUBLIC_BASE_URL 和 CORS_ORIGINS 改成真实域名。
- 易支付回调 URL 不要包含
/api/(部分网关 WAF 会拦截)。用户端 nginx 已将 /epay/notify 转到 /api/billing/epay/notify。
- API 容器建议保持
--workers 1(镜像默认),避免多进程抢任务租约。
- 本仓库开源路径以 Docker 全栈为准;现网机器部署手册不在公开仓库。
AI 服务配置
开源版图 / 视频 / 文字统一走 TokenFree New API(https://www.tokenfree.com/v1)。视频口播交给 Seedance 自行发挥,不必再配 TTS / 音色。
可在管理后台 系统设置 → 模型 填写渠道 Key 并拉取模型;deploy/.env.docker 或 backend/.env 仅作首次导入。
环境变量
OPENAI_API_KEY=sk-你的密钥
OPENAI_BASE_URL=https://www.tokenfree.com/v1
MODEL_LLM=kimi-k2.6
ARK_MOCK=false
ARK_API_KEY=sk-你的密钥
MODEL_IMAGE=doubao-seedream-5-0-260128
MODEL_VIDEO=doubao-seedance-2-5-260628
| 变量 | 说明 |
|---|
OPENAI_API_KEY | 文字模型 Key,勿提交到 Git |
OPENAI_BASE_URL | OpenAI 兼容根地址;开源版固定 TokenFree |
MODEL_LLM | 对话 / 分镜脚本模型 |
ARK_API_KEY | 生图 / 生视频 Key(与文字可用同一把 TokenFree Key) |
ARK_MOCK | true 时走本地 mock 素材,便于无 Key 联调 |
MODEL_IMAGE / MODEL_VIDEO | 生图 / 生视频模型 ID |
验证
curl http://localhost:8000/api/health
返回 JSON 中 ok 表示任务运行时健康;models 为当前 LLM / 图像 / 视频模型;ark_mock 为是否 mock。
常见问题
评论0
登录 后才能发表评论。提交后需管理员审核才会公开。
还没有公开评论。登录后可以提交,审核通过后会出现在这里。