之前做的 AI 视频平台,这次把源码公开了!Vue 3 + Spring Boot !
之前在编程导航分享过我做的 AI 视频平台「星帧」,当时主要介绍了工作台怎么用、怎么选择模型,以及生成视频时的体验。
上一篇在这里:之前的项目介绍。
这次来更新一个进展:星帧的平台主服务和前端源码已经公开到 Gitee 了。
原来的线上体验站已经下线,想了解项目的朋友可以直接看仓库,或者按照 README 在本地搭建。
先把地址放前面:
也先说明授权:项目目前采用 PolyForm Noncommercial 1.0.0,带有非商业用途限制。本文用“源码公开”描述这次发布;它不属于 OSI 定义下的开源软件。使用、修改和分发请遵守仓库的 [LICENSE],商业用途需要另行获得授权。
星帧是一个什么项目?
星帧是一个可以自行部署的 AI 图片、视频生成平台,包含用户端、管理端和 Open API。
用户侧的基本体验是:选择模型,写提示词,上传参考素材,调整比例和时长,查看估价,提交生成,最后预览、下载或者继续创作。
围绕这条生成链路,项目里还做了会话、画布、素材、提示词、钱包、任务状态、管理后台和开放接口。
如果你正在用 Vue 和 Java 做 AI 应用,或者想看一个生成任务从提交到交付是怎么组织的,可以从这个项目入手。
模型本身不在仓库里。 实际可用模型取决于部署者配置的 Provider、模型目录、上游权限和额度;克隆代码不会附带模型调用额度。
这次公开了哪些内容?
主要是这几部分:
| 部分 | 包含内容 |
|---|---|
| 用户端 | 对话创作、无限画布、图片与视频生成、素材库、提示词、充值兑换、订单、个人中心和工单 |
| 管理端 | 用户、任务、模型与 Provider、计费配置、账户流水、公告、工单、内容安全和平台设置 |
| 平台主服务 | 登录权限、任务编排、模型能力、估价计费、资产交付、Open API 与终态通知 |
| 工程配套 | Dockerfile、Compose、数据库初始化与 Flyway、CI、测试、配置样例和接入规范 |
前端用户页面和管理页面在同一个 Vue 工程里,按路由与权限组织。后端业务模块集中在 Spring Boot 主服务中,Worker 和 Scheduler 也在同一进程内运行。
号池需要独立自建
这一点单独说明,避免大家下载之后产生误解:account-pool 的实现不随本仓库分发。
平台主服务负责用户、任务、账务、模型目录快照和成片交付;外部号池负责上游账号调度、厂商适配,以及它自己的内部状态和数据。
两边通过 HTTP 协议连接,不共享数据库或业务表。仓库里提供了自建号池接入规范,说明模型目录、任务提交、任务查询和可选回调的接口约定。
你可以按协议实现自己的号池,也可以配置项目支持的其它兼容 HTTP Provider。实际生成前,需要准备可用的上游服务和凭证,并完成模型与计费配置。
项目目前有哪些功能?
用户端:把创作过程保留下来
创作可以放在对话式工作台里,也可以使用画布组织素材和节点。参考素材、提示词和生成结果有对应的保存位置,后续可以继续调整。
围绕创作,还有这些页面和能力:
- 素材库:管理参考素材与生成资产。
- 提示词广场、我的提示词:查看、保存和复用提示词。
- 模型状态:查看模型运行情况。
- 成片预览、下载与分享。
- 充值与兑换、订单与发票、个人资料和支持工单。
管理端:维护平台的日常业务
管理端可以配置模型与 Provider,维护模型能力和计费规则,查看用户、生成任务和账户流水,也能处理公告、工单、内容安全和平台配置。
真实部署时,这些配置决定了平台能提供什么模型、按什么规则计费,以及任务和用户问题如何处理。
Open API:让其它程序也能创建任务
除了网页入口,项目还提供模型目录、估价、任务创建与查询、取消、批量任务、工作流和终态 Webhook 等接口。
网页提交与 API 调用复用平台的任务和计费能力。开发者可以管理 API Key,并按接口文档接入自己的程序。
具体路径和请求格式见仓库 README 与 Open API 文档页。
从四张图看项目的结构
这次整理源码时,我也把架构文档补成了业务、产品、应用、数据四个视角。看图时可以先分清:业务能力、页面功能、应用模块和数据存储,是四个不同层面。
业务架构:平台承担哪些业务责任?
服务对象主要是内容创作者、API 接入方和平台运营方。核心能力围绕创作生产、创作组织、内容资产与开放接入展开,下面由模型供给、资金结算和运营服务提供支撑。

产品架构:这些能力体现在哪些功能里?
用户端、管理端和 Open API 分别面向不同使用者,底层复用登录权限、模型能力与价格、钱包结算、资产交付等能力。
应用架构:功能由哪些模块承载?
前端与后端分开,主服务采用模块化单体结构。业务模块共用一个进程,外部号池独立部署。

数据架构:数据分别存在哪里?
MySQL 保存用户、任务、账务和模型目录等业务记录;Redis 承担缓存、锁、幂等与任务协调;本地文件或对象存储保存素材、成片和派生媒体。外部号池拥有自己的数据存储。

代码里可以重点看什么?
1. 异步生成任务如何管理
生成视频通常需要等待,服务端必须持续记录任务状态,并处理上游查询、回调、超时和失败。
项目把生成任务组织成状态机,由 Worker 推进提交和查询,通过回调或轮询获得上游结果,随后处理资产入库和交付。
看代码时,可以沿着“创建任务—执行任务—接收结果—终态收口”这条链路读,重点看重复请求、重复回调以及资源释放是怎样处理的。
2. 估价、冻结与实际结算怎样对应
项目在提交前提供估价,创建任务时冻结相应金额,成功后按实际结果结算,失败或取消时释放冻结或执行相应退款处理。
除了余额,还要看账务流水、任务状态和幂等处理之间怎样配合。对于想做按量付费 AI 应用的朋友,这部分可以和任务代码一起研究。
3. 模型与 Provider 如何接入
不同上游的请求、状态和返回结果可能不一样。主服务通过 Provider 适配接口对接具体实现,模型目录则描述可用能力与计费信息。
“能同步到模型目录”和“能够成功提交生成任务”需要分别配置和验证,不能把两件事混为一谈。
4. 成功生成后如何交付媒体
拿到上游结果之后,还涉及存储、预览、下载和访问控制。项目支持本地文件及 S3 / COS 存储实现,并使用 FFmpeg 处理 HLS、海报等派生媒体。
读这部分代码,可以顺着任务结果、资产记录和实际媒体文件之间的关系往下看。
使用的技术栈
| 范围 | 技术 |
|---|---|
| 前端 | Vue 3、TypeScript、Vite、Element Plus、Pinia、Vue Router |
| 图表、画布与播放 | ECharts、Vue Flow、hls.js |
| 后端 | Java 17、Spring Boot 3.2、MyBatis-Plus、Sa-Token |
| 数据与协调 | MySQL、Redis、Flyway |
| 媒体与存储 | FFmpeg、Local / S3 / COS |
| 构建与验证 | Maven、Docker Compose、GitHub Actions、ESLint、vue-tsc、Vitest |
这次也整理了几个比较大的前端文件,把播放器、登录页和管理设置页中的展示、状态、请求处理及常量拆开,并补充相关回归测试。想看前端重构的朋友,也可以从这些模块开始读。
怎么在本地跑起来?
先按照仓库 README 准备 Node.js、Docker 和 Docker Compose,再执行:
▼bash复制代码git clone https://github.com/Thorleying/ai-video.git cd ai-video cp .env.example .env docker compose up -d --build cd frontend npm ci npm run dev
也可以从 Gitee 克隆同一项目。
本地前端地址是 http://127.0.0.1:5174,主服务端口是 9017。Compose 启动主服务、MySQL 和 Redis,前端在本机通过 Vite 运行。
启动平台和接通真实生成是两步。 上面的命令用于启动平台环境;提交真实生成任务前,还需要配置可用的号池或兼容 Provider、模型、上游凭证和计费规则。
管理员权限、签密配置、存储及生产环境要求,请一起查看 README 和 .env.example。本地开发配置不能直接当作生产配置使用。
欢迎看看代码,也欢迎提问题
这次把源码和文档整理出来,希望能给正在做类似项目的朋友提供一份可以对照阅读的实现:从 Vue 页面,到 Java 任务编排,再到账务和媒体交付,能顺着一条业务链路往下看。
大家使用中如果发现问题,欢迎带上复现步骤、运行环境和脱敏日志提 Issue。对功能、架构或代码组织有建议,也欢迎讨论和提交 PR。
写在最后
这个项目目前由我一个人开发和维护。代码不一定写得足够好,一些实现和设计也难免有考虑不周的地方,后续还会继续整理和完善。 如果你在使用或阅读代码时发现了问题,或者有更好的实现思路,欢迎直接指出来,一起交流讨论。希望这份代码能给大家提供一点参考,也希望在交流中把项目做得更好。 有问题想讨论,或者想交流 AI 应用开发,可以联系我:coder_Thorleying。
