Skip to content

Latest commit

 

History

129 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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
服务 地址
用户端 http://localhost:8080
管理后台 http://localhost:8081
API http://localhost:8000
OpenAPI http://localhost:8000/docs
健康检查 http://localhost:8000/api/health
角色 如何获得
普通用户 打开用户端 /auth 自行注册(邮箱 + 密码)
管理员 先注册,再在 deploy/.env.dockerADMIN_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

方式一:拉取镜像(推荐)

  1. 安装 Docker Desktop 或 Docker Engine 20.10+(含 Compose v2)。
  2. 复制环境文件并修改密码与 Key:
cp deploy/.env.docker.example deploy/.env.docker
  1. 启动:
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
  1. 打开 http://localhost:8080 注册;健康检查:
curl http://localhost:8000/api/health

ok 为 true 表示任务运行时与数据库可用。首次 upcreate_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_ORIGINSPUBLIC_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_pgdataprintfilm_redisdataprintfilm_media(成片与分镜落盘,FFmpeg 只读本地)。

生产注意

  • 反向代理到 8080 / 8081 时,把 PUBLIC_BASE_URLCORS_ORIGINS 改成真实域名。
  • 易支付回调 URL 不要包含 /api/(部分网关 WAF 会拦截)。用户端 nginx 已将 /epay/notify 转到 /api/billing/epay/notify
  • API 容器建议保持 --workers 1(镜像默认),避免多进程抢任务租约。
  • 本仓库开源路径以 Docker 全栈为准;现网机器部署手册不在公开仓库。

AI 服务配置

开源版图 / 视频 / 文字统一走 TokenFree New APIhttps://www.tokenfree.com/v1)。视频口播交给 Seedance 自行发挥,不必再配 TTS / 音色。

可在管理后台 系统设置 → 模型 填写渠道 Key 并拉取模型;deploy/.env.dockerbackend/.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。

常见问题

现象 处理方法
生成无响应或一直排队 检查 Key、余额、网络;看 /api/healthtask_runtime
401 / 鉴权失败 Key 无效、过期或渠道 Base URL 写错
超时 调大 ARK_VIDEO_POLL_TIMEOUT(默认 900 秒)
只要界面、先不调真模型 ARK_MOCK=true

操作手册

1. 系统概述

1.1 产品简介

PRINTFILM 面向创作者与运营:输入主题或剧本,按模板生成分镜、画面与成片。两条主产品线:

  • AI 漫剧:大纲 → 资产 → 分集分镜 → 画布,强调角色与场景一致性。
  • AI 短视频(科普):选模板 → 输入文案 → 风格 → 分镜流水线 → FFmpeg 合成。

另有独立 工具中心(文生图、图生图、文生视频等)和可选 按量钱包(易支付)。

1.2 核心能力

模块 说明
工作台 首页选择漫剧 / 短视频 / 工具入口
AI 短视频 20+ 内置模板;full(含视频)或 image_text(静图+字幕)
分镜工作台 单张重绘、单镜重生视频、编辑后继续生成
漫剧 剧本摘要、资产库、分集、画布(React Flow)
工具 文生图 / 图生图 / 图生产品 / 文生视频 / 视频生视频 / 电商拼图
资产库 角色、场景、道具
定价与钱包 可选;关闭计费时本地可免费试用
个人中心 账号、项目、工具记录、API Key
管理后台 用户、订单、财务、项目、模板、任务、模型路由
开放 API /api/v1 生图 / 生视频(Bearer 或 X-Api-Key

1.3 技术架构

浏览器 (8080 用户端 / 8081 管理端;开发时 5173 / 5174)
        │  /api  ·  /static
        ▼
   FastAPI :8000
        │
        ├── 任务运行时(scheduler / executor / poller)
        ├── PostgreSQL
        ├── Redis(找回密码、缓存等)
        ├── TokenFree(图 / 视频 / 文本;Seedance 出片自带口播)
        └── 本地 static/generated + 可选阿里云 OSS
                    │
                    ▼
                 FFmpeg 合成成片

工程约定见 docs/STANDARDS.md


2. 环境要求

要求
Docker 部署 Docker 20.10+、Compose v2、磁盘数 GB(成片)
本机开发 Python 3.12、Node.js 20+、FFmpeg 在 PATH
字体(本机 Linux 成片) fonts-wqy-zenhei;API 镜像已内置
磁盘 建议预留数 GB(分镜图、视频片段、成片)

3. 安装与启动

3.1 Docker(推荐)

见上文 Docker 部署

3.2 本机开发

只把 Postgres / Redis 跑在容器里,API 与两个前端在宿主机:

cp deploy/.env.prod.example deploy/.env.prod
# 修改 POSTGRES_PASSWORD
docker compose -f deploy/docker-compose.yml --env-file deploy/.env.prod up -d

cd backend
python -m venv .venv
# Windows: .\.venv\Scripts\activate
# Linux / macOS: source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
# DATABASE_URL 密码与 deploy/.env.prod 一致;填入模型 Key
uvicorn app.main:app --reload --port 8000

另开两个终端:

cd frontend
npm install
npm run dev
cd admin
npm install
npm run dev
服务 地址
用户端 http://localhost:5173
管理后台 http://localhost:5174
API http://127.0.0.1:8000

注意:

  1. deploy/.env.prod 的数据库密码必须与 backend/.envDATABASE_URL / DATABASE_URL_SYNC 一致。
  2. 用户端开发时 不要 设置 VITE_API_BASE(未设置则访问当前主机 :8000)。生产 / Docker 构建必须 VITE_API_BASE= 空字符串。
  3. CORS 默认允许 localhost:5173localhost:5174,以及局域网私有 IP。
  4. 本机需安装 FFmpeg;Linux 成片字幕需中文字体。

3.3 生产自托管(非 Docker 镜像)

线上站点也可由 nginx + 进程管理器托管前后端静态资源与 API。OSS 只用于成片 / 分镜等媒体,不要把 SPA 丢到 OSS 当唯一发布方式。中间件与本机进程说明见 deploy/README.md


4. 登录与账号

路径/auth(管理端为 /login

元素 说明
注册 邮箱、昵称、密码;成功后直接登录(JWT,默认 7 天)
登录 邮箱 + 密码
找回密码 依赖 Redis;未配好 Redis 时该流程不可用
管理员 User.role=admin;用 ADMIN_BOOTSTRAP_EMAILS 提升已有用户

计费开启时,新用户可获赠 BILLING_SIGNUP_GRANT_FEN(示例默认 500 分 = ¥5.00)。Docker 与本机默认 BILLING_ENABLED=false


5. 界面与模块导航

用户端顶栏(中 / 英可切换):

菜单 路由 说明
工作台 / 产品入口与流程介绍
漫剧 /drama 漫剧项目列表
AI短视频 /history 科普项目历史与进度
工具 /tools 单点生成能力
资产 /assets 全局资产库
定价 /pricing 套餐与充值
帮助 /help 上手步骤与 FAQ
个人中心 /settings 账号、项目、API Key

管理端侧栏:仪表盘、用户管理、订单流水、财务列表、科普项目、作品审核、漫剧(项目 / 资产 / 分集 / 分镜)、模板管理、任务中心、系统设置。


6. 业务模块操作指南

6.1 工作台

路径/

功能概述:选择「AI 漫剧」或「AI 短视频」,或进入工具。

元素 说明
开始创作 未登录跳转 /auth;已登录弹出产品选择
产品卡片 分别进入 /drama 或科普创建流

6.2 AI 短视频(科普)

路径/studio/new/studio/:id/style/studio/:id/studio/:id/editor;列表在 /history

功能概述:主题 / 口播文案经模板拆镜后,生成分镜图与视频(可选),再 FFmpeg 合成。口播由 Seedance 出片时生成,不再单独配音。

元素 说明
模板 启动时写入库;含剪纸、绘本、粉笔、拼贴、像素、水墨,以及开源展示、真人、电影感等
管线模式 full:图 + 视频 + 合成;image_text:静图 + 字幕,更快更省
进度 服务端状态机:SCRIPTINGIMAGINGVIDEOINGCOMPOSINGDONE
离开页面 任务继续跑;回历史页看进度
成片位置 本地 backend/static/generated/p{id}/(Docker 卷 printfilm_media);开启 OSS 后 DB 存公网 URL

科普历史

分镜工作台

成片预览

6.3 漫剧

路径/drama/drama/projects/:projectId/drama/projects/:projectId/episodes/:episodeId/drama/projects/:projectId/canvas

功能概述:从大纲到分集成片,资产可复用到各集。

元素 说明
项目列表 封面卡片、状态筛选、搜索;可进资产库或自由画布
分集工作台 原始创意 / 剧情摘要 / 剧本内容;解析成镜后进入分镜
剧本解析 对白、画面、配乐定调拆到镜(口播由 Seedance 出片时生成)
分镜编辑 时间轴、角色/场景/道具引用、预览与整片合成
资产库 角色 / 场景 / 道具;可选生图模型,不绑音色
后端 /api/drama/*(项目、剧本、资产、分集、生成、画布、Skill)

漫剧项目列表

分集工作台

剧本解析

分镜编辑

漫剧资产库

细则见 docs/EPISODE_RULES.mddocs/SHOT_SPLITTING.md

6.4 创作工具

路径/tools/tools/:toolId

功能概述:不走完整短视频流水线的单点生成。

工具 ID 能力
t2i 文生图
i2i 图生图
i2p 图生产品(白底 / 场景 / 详情)
t2v 文生视频(先静帧再 Seedance)
v2v 视频生视频
ecom 电商拼图

生图走统一任务平台;生视频返回任务 ID 供前端轮询。记录在个人中心「工具创作」。

6.5 定价与钱包

路径/pricing

功能概述:按上游真实用量(或估价)计费;开源默认按 TokenFree 官方成本、不再加价。充值走易支付。

本地与 Docker 默认关闭。开启后详见 docs/BILLING.md

BILLING_ENABLED=true
BILLING_MARKUP=1.0
EPAY_API_URL=https://pay.gitcc.com
EPAY_PID=
EPAY_KEY=
# 生产 notify 不要带 /api/
# EPAY_NOTIFY_URL=https://your-site.example.com/epay/notify

6.6 个人中心与开放 API

路径/settings

Tab 说明
账号 / 安全 资料、改密
漫剧 / 科普 / 工具 项目与创作记录、下载
API 创建 API Key,调用 /api/v1/images/generations/api/v1 视频接口
团队 / 通知 占位,尚未开放

鉴权:Authorization: Bearer <token>X-Api-Key


7. 典型业务流程

7.1 做一条科普短视频

注册登录 → 工作台选 AI 短视频 → 选模板与管线
  → 填写主题 / 文案 → 风格配置 → 开始生成
  → 分镜页审阅(可单镜重绘 / 重生)
  → 合成完成后在历史页下载

7.2 做一部漫剧

/drama 新建项目 → 分集工作台(创意 / 摘要 / 剧本)
  → 资产库(角色 / 场景 / 道具)
  → 解析成镜 → 分镜编辑出片

7.3 只要一张图或一段视频

/tools 选能力 → 填提示词或上传参考 → 生成
  → 个人中心回看与下载

8. 系统管理

独立前端。Docker 端口 8081,本机开发 5174。管理员与用户共用登录接口,需 role=admin

路径 功能
/ 仪表盘:用量趋势、分布、头部用户
/users 用户列表与详情(服务端分页)
/orders /finance 订单与财务流水
/projects /works 科普项目、作品审核
/drama-projects 漫剧项目 / 资产 / 分集 / 分镜
/templates 模板管理
/queues 任务中心(统一任务平台)
/settings 模型路由、运行参数、OSS、支付计费、站点 / FFmpeg 路径

密钥在后台保存时加密入库;留空再保存表示不修改原值。

管理后台仪表盘


9. 日常运维

9.1 健康检查

curl http://localhost:8000/api/health

关注 oktask_runtimedb_poolmodels

9.2 日志与重启

  • Docker:docker compose --env-file deploy/.env.docker logs -f api
  • 开发:看 uvicorn / Vite 终端
  • 仅中间件:docker compose -f deploy/docker-compose.yml --env-file deploy/.env.prod logs -f
  • 重启 API 即可重载大部分环境变量;管理员提权必须重建 / 重启一次 API 容器或进程

9.3 备份

  • Postgres 卷:printfilm_pgdata(本机开发中间件为 ai_movie_pgdata
  • Redis 卷:printfilm_redisdata
  • 成片:printfilm_mediabackend/static/generated/
  • down 不删数据;清库才加 -v

9.4 并发与存储

变量 含义
TASK_RUNTIME_MAX_CONCURRENCY 全站进程内 Worker 槽位
TASK_USER_MAX_CONCURRENCY 单用户同时占用的槽位
PIPELINE_IMAGE_CONCURRENCY 单项目内图 / 视频 / 音频并发
OSS_ENABLED 成片与分镜上传对象存储;FFmpeg 仍读本地文件

9.5 更新

  • Docker:docker compose --env-file deploy/.env.docker pull && docker compose --env-file deploy/.env.docker up -d
  • 源码:拉代码 → pip install / npm install → 重启 API。启动时会跑 schema 补丁、模板 seed 与管理员 bootstrap。

10. 常见问题与排查

类别 现象 处理
Docker 用户端能开但接口 502 等 API healthy(首次建表约数十秒);logs -f api
Docker pull access denied 确认镜像名含公开命名空间 gcc;无需登录
访问 前端能开但接口失败 开发时确认 API 在 8000,且未误设生产空 VITE_API_BASE
登录 管理端 403 账号尚未 admin;写入 ADMIN_BOOTSTRAP_EMAILS 后重建 api
部署 数据库连不上 Docker 应用应连 postgres:5432;本机开发连 127.0.0.1:15432
部署 Redis 连不上 Docker 用 redis:6379;本机示例为 16379
AI 分镜/视频失败 Key、模型 ID、额度;先看任务中心与 api 日志
成片 有视频无中文字幕 本机安装中文字体后重新合成;Docker 镜像已带文泉驿
支付 回调失败 notify URL 不要包含 /api/,用 /epay/notify
安全 误提交密钥 轮换 Key;确认 .envdeploy_kepu.py.tmp/ 在 gitignore 中

11. 附录

11.1 环境变量速查

变量 默认 / 示例 说明
SECRET_KEY dev-secret-change-me JWT 签名,生产必改
DATABASE_URL Docker 下由 compose 注入 postgres:5432 异步库
DATABASE_URL_SYNC 同上 同步库
REDIS_URL Docker:redis://redis:6379/0 缓存 / 找回密码
CORS_ORIGINS http://localhost:8080,…8081 逗号分隔
PUBLIC_BASE_URL http://localhost:8080 对外回链根
ADMIN_BOOTSTRAP_EMAILS (空) 启动提权邮箱
ARK_* / OPENAI_* / MODEL_* 见示例文件 模型
BILLING_* / EPAY_* 默认关闭计费 钱包与支付
OSS_* 默认关闭 对象存储
FFMPEG_PATH / FFPROBE_PATH ffmpeg / ffprobe 镜像内已安装

完整列表以 deploy/.env.docker.examplebackend/.env.example 为准。不要把真实 Key 写入文档或 Git。

11.2 Docker 镜像地址

服务 镜像
api gcc-registry.cn-hangzhou.cr.aliyuncs.com/gcc/printfilm-api:latest(亦可钉 v0.2.0
web gcc-registry.cn-hangzhou.cr.aliyuncs.com/gcc/printfilm-web:latest
admin-web gcc-registry.cn-hangzhou.cr.aliyuncs.com/gcc/printfilm-admin-web:latest
postgres postgres:16-alpine
redis redis:7-alpine

11.3 相关文档

文档 内容
docs/STANDARDS.md 工程规范
docs/BILLING.md 计费公式与易支付
docs/EPISODE_RULES.md 漫剧分集规范
docs/SEEDANCE_2_5.md Seedance 参数
deploy/README.md 中间件与本机运维

11.4 截图索引

界面 文件
工作台 docs/images/image-20260910-home.png
漫剧项目列表 docs/images/image-20260917-drama-list.png
分集工作台 docs/images/image-20260917-drama-episode.png
剧本解析 docs/images/image-20260917-drama-script.png
分镜编辑 docs/images/image-20260917-drama-storyboard.png
漫剧资产库 docs/images/image-20260917-drama-assets.png
科普历史 docs/images/image-20260910-history.png
分镜工作台(科普) docs/images/image-20260910-studio.png
成片预览 docs/images/image-20260910-preview.png
管理后台 docs/images/image-20260910-admin.png

贡献

欢迎 Issue 与 Pull Request。提交前请对照 docs/STANDARDS.md

  • 用户可见文案用简体中文;函数 / 组件顶部加功能注释
  • 列表筛选与分页走服务端
  • 不要提交 .env、密钥、deploy/scripts/deploy_kepu.py.tmp/、生成媒体
  • 单文件尽量不超过 500 行,公共逻辑放到 lib/ / services/ / components/
cd frontend && npm run lint
cd ../admin && npm run lint
cd ../backend && pytest

开源许可

本项目采用 MIT License


PRINTFILM
文档版本:0.2.0 | 2026-09-17

About

PRINTFILM:AI 科普视频与漫剧创作平台

Resources

Stars

573 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages