Jellyfish:把角色一致性当一等问题的 AI 短剧工作台,React + FastAPI
项目地址:https://github.com/Forget-C/Jellyfish
文档站:https://forget-c.github.io/Jellyfish
协议:Apache-2.0
定位:不是生成器,是「制作工作台」
Jellyfish 自称 AI Short Drama Studio,但它不是又一个「文生图/图生视频」的小工具。它的做法是围绕五个环节建工作台:剧本理解、镜头准备、资产一致性、生成执行、任务追踪。
一句话概括它和同类产品的差别:把一致性当成一等公民,把长耗时生成当成可追踪的任务。
仓库 6360 Star、1098 Fork,前端 React + Vite,后端 FastAPI,Python 主力。
主工作流:准备和生成分开
它的核心流程是这样一条链:
剧本拆解 → 镜头准备 → 候选确认 → 镜头就绪 → 生成工作区
「就绪」(prepared)和「正在生成」(currently generating)是两个明确区分的状态,这点在批量生产时很重要——你能先确认哪些镜头准备好了,再统一丢进生成队列。
脚本理解部分做的事:
- 把章节剧本拆成镜头;
- 抽取角色、场景、道具、服装、对白;
- 做剧本优化、简化与一致性检查;
- 支持角色肖像、场景细节这类定向分析。
镜头准备阶段可以:刷新抽取出的资产/对白候选、接受或忽略候选、把已有角色/场景/道具/服装关联进来、修正镜头级基础信息,最后靠统一的就绪状态决定这个镜头能不能开工。
一致性怎么做
系统维护一套跨镜头共享的实体模型:角色 / 演员、场景、道具、服装。资产可以在镜头间复用,风格和身份随之稳定。名字存在性检查会提示你复用已有资产,避免同一个角色在库里出现三份。
这是它区别于「抽卡式生成」的关键:先沉淀资产,再用资产约束每一个镜头的生成。
统一异步任务中心
文本、图像、视频三类任务都走同一套异步任务系统,支持:
- 统一的任务状态、结果、耗时追踪;
- 任务取消;
- 全局任务中心,可以带着上下文跳回对应的项目 / 章节 / 镜头。
视频生成动辄几分钟到十几分钟,单个任务要不要取消、跑到哪了、能不能跳回现场,这些细节决定了批量生产的可用性。
快速跑起来
Docker Compose
仓库自带 deploy/compose/ 的可直接运行配置。
cp deploy/compose/.env.example deploy/compose/.env
docker compose --env-file deploy/compose/.env -f deploy/compose/docker-compose.yml up --build
端口分配:
- 前端:
http://localhost:7788 - 后端:
http://localhost:8000(/docs是 Swagger) - MySQL:
localhost:${MYSQL_PORT:-3306} - Redis:
localhost:${REDIS_PORT:-6379} - RustFS:
http://localhost:${RUSTFS_PORT:-9000}
注意对象存储用的是 RustFS,不是 MinIO。
本地开发
后端:
cd backend
cp .env.example .env
uv sync
uv run uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
前端:
cd front
pnpm install
pnpm dev
前端类型由 OpenAPI 生成
前端请求辅助函数和类型是从后端 OpenAPI spec 生成的,输出在 front/src/services/generated/,缓存的 spec 在 front/openapi.json。后端开发服务跑在 http://127.0.0.1:8000 时:
cd front
pnpm run openapi:update
前后端契约用 OpenAPI 驱动,接口改了前端类型跟着重生成,这个做法比手写 request 稳。
其它基础设施能力
- 多供应商 / 多模型管理,可按类别设默认模型;
- 提示词模板管理(图像、视频、镜头三类);
- 文件与生成媒体管理,可预览、关联、复用;
- 以 OpenAPI 驱动的前后端契约,方便后续扩展 AI 工作流。
适合谁
- 要批量产出垂直短剧、对角色一致性有硬要求的工作室;
- 个人创作者做垂直短剧,想要一套能自己部署的工作台;
- 教育培训团队做课程视频、电商团队做故事化推广片。
Apache-2.0 协议,商用约束比 CC BY-NC-SA 那类宽松,适合拿来改。短板是 README 里没有放出成片效果的量化数据,实际出片质量仍取决于你接的模型。