feat: migrate orchestration to n8n and validate lan mvp
This commit is contained in:
134
docs/AUDIT_2026-03-18.md
Normal file
134
docs/AUDIT_2026-03-18.md
Normal file
@@ -0,0 +1,134 @@
|
||||
# StoryForge 现状审计
|
||||
|
||||
日期:2026-03-18
|
||||
|
||||
## 结论
|
||||
|
||||
当前应以 `/Users/kris/code/StoryForge-gitea` 作为主工作区继续推进,而不是 `/Users/kris/code/Fastgpt`。后者更像一次不完整的导入快照,前者才是可持续开发的真实仓库。
|
||||
|
||||
## 现有功能归位
|
||||
|
||||
### 1. `collector-service` 之前承担的功能
|
||||
|
||||
- 账号注册、登录、审批
|
||||
- 本地模型配置
|
||||
- 知识库、智能体、任务管理
|
||||
- 视频链接/上传视频/文本三类入口
|
||||
- 下载器、ffmpeg、whisper.cpp 风格的本地处理调用
|
||||
- Android OTA 查询/发布
|
||||
|
||||
### 2. FastGPT 实际承担的功能
|
||||
|
||||
- 仅承担“数据集/文档同步”的外部依赖角色
|
||||
- 代码痕迹集中在:
|
||||
- `collector-service/app/fastgpt.py`
|
||||
- `docker-compose.yml`
|
||||
- 若干 `fastgpt_*` 字段
|
||||
|
||||
结论:FastGPT 并不是业务内核,适合迁移后整体删除。
|
||||
|
||||
### 3. n8n 适合接管的功能
|
||||
|
||||
- 任务触发
|
||||
- 工作流分流
|
||||
- 外部能力编排入口
|
||||
- 任务执行顺序控制
|
||||
|
||||
不适合承载:
|
||||
|
||||
- 用户、项目、Agent、知识库、任务、历史记录的主数据
|
||||
- 业务状态唯一真相源
|
||||
|
||||
结论:应采用“业务状态在 `collector-service`,流程编排在 `n8n`”的分层。
|
||||
|
||||
## 多用户与数据边界
|
||||
|
||||
当前已明确采用:
|
||||
|
||||
- `accounts`
|
||||
- `projects`
|
||||
- `knowledge_bases`
|
||||
- `assistants`
|
||||
- `content_sources`
|
||||
- `jobs`
|
||||
- `job_events`
|
||||
|
||||
推荐模型:`user + project`。
|
||||
|
||||
理由:
|
||||
|
||||
- 只做 `user` 级隔离,会导致一个用户内部不同内容工作流难以再分边界
|
||||
- `project` 可以自然承接“一个创作者方向 / 一个客户 / 一个账号矩阵 / 一个内容实验”
|
||||
- `assistant`、`knowledge_base`、`job`、`content_source` 都能挂到 `project`,便于后续扩展协作空间
|
||||
|
||||
## 外部链路审计
|
||||
|
||||
### 1. 下载器
|
||||
|
||||
- 已存在,不需要重写
|
||||
- 现阶段通过 `yt-dlp` 命令集成
|
||||
|
||||
### 2. ASR
|
||||
|
||||
- 现有实现已部署,但入口未完全标准化
|
||||
- 当前后端支持 `ffmpeg + whisper.cpp` 风格接入
|
||||
- 若需要接现有常驻 ASR 服务,后续只需把 `transcribe_media()` 改成 HTTP/RPC 适配即可
|
||||
|
||||
### 3. Windows `cutvideo`
|
||||
|
||||
- 仓库:`/Users/kris/code/cutvideo`
|
||||
- 具备清晰 API:
|
||||
- `POST /api/jobs`
|
||||
- `GET /api/tasks/{task_id}`
|
||||
- `GET /api/runs/{run_id}`
|
||||
- 适合集成为“由 StoryForge 后端授权调用的局域网剪辑能力”
|
||||
|
||||
当前限制:
|
||||
|
||||
- 现有 `cutvideo` API 主要接受 `input_dir`
|
||||
- 对“用户上传实拍素材后直接推送到 Windows 机器”这一步,还缺一层文件转运方案
|
||||
|
||||
### 4. `huobao-drama`
|
||||
|
||||
- 旧改版位置:`/Users/kris/code/huobaoduanju/huobao-drama-master`
|
||||
- 最新 upstream:`/Users/kris/code/huobao-drama-upstream`
|
||||
- 旧改版主要多了一套 `ad_workflow` 方向,和当前 StoryForge MVP 不完全对齐
|
||||
- 最新版已具备:
|
||||
- `POST /api/v1/dramas`
|
||||
- `POST /api/v1/images`
|
||||
- `GET /api/v1/images/{id}`
|
||||
- `POST /api/v1/videos`
|
||||
- `GET /api/v1/videos/{id}`
|
||||
- `reference_mode=first_last`
|
||||
|
||||
本次真实联调里,旧改版为了兼容 `qnaigc` 需要补 4 个点:
|
||||
|
||||
- `pkg/image/openai_image_client.go`
|
||||
- `application/services/image_generation_service.go`
|
||||
- `pkg/video/openai_sora_client.go`
|
||||
- `application/services/video_generation_service.go`
|
||||
|
||||
核对结果:
|
||||
|
||||
- 以上 4 个文件与本机 upstream 同名文件在补丁前没有明显结构分叉
|
||||
- 当前差异基本就是 `qnaigc` 图片异步查询、Kling 视频 JSON 协议、结果 URL 解析、远程首尾帧 URL 保留这几处兼容逻辑
|
||||
|
||||
结论:这批补丁是可移植补丁,MVP 已在旧改版实例上验证通过;下一步应把同样补丁迁到最新版 `huobao-drama-upstream`,而不是继续在旧目录长期演进。
|
||||
|
||||
## 当前已完成迁移面
|
||||
|
||||
- FastGPT 运行时依赖已从 `collector-service` 主代码中剥离
|
||||
- 数据库已支持 `project/content_source/job_events`
|
||||
- `collector-service` 已增加:
|
||||
- `n8n` 触发
|
||||
- `cutvideo` 集成 client
|
||||
- `huobao-drama` 集成 client
|
||||
- 内部编排接口
|
||||
- `docker-compose.yml` 已改为 `collector + n8n + cli-proxy-api`
|
||||
- `n8n` 工作流导出文件已纳入仓库
|
||||
|
||||
## 当前主要风险
|
||||
|
||||
1. `cutvideo` 的素材传输还未完整闭环
|
||||
2. 本地 ASR 的“最终生产入口”仍需按你现有部署方式再绑一次
|
||||
3. `huobao-drama` 已在本机旧改版实例上跑通,但兼容补丁尚未迁到 upstream 仓库并形成正式提交
|
||||
97
docs/IMPLEMENTATION_PLAN_2026-03-18.md
Normal file
97
docs/IMPLEMENTATION_PLAN_2026-03-18.md
Normal file
@@ -0,0 +1,97 @@
|
||||
# StoryForge 分阶段实施计划
|
||||
|
||||
日期:2026-03-18
|
||||
|
||||
## Phase 0: 审计与基线收拢
|
||||
|
||||
- 确认主工作区
|
||||
- 识别 FastGPT 真实职责
|
||||
- 识别多用户、多项目需要的主数据模型
|
||||
- 对比 `huobao-drama` 旧改版与 upstream
|
||||
- 审计 `cutvideo` 接口能力
|
||||
|
||||
状态:已完成
|
||||
|
||||
## Phase 1: 业务后端改造成主状态中心
|
||||
|
||||
- 引入 `projects`
|
||||
- 引入 `content_sources`
|
||||
- 引入 `job_events`
|
||||
- 让 `knowledge_bases / assistants / jobs` 全部 project 化
|
||||
- 去掉 `collector-service` 中的 FastGPT 运行时逻辑
|
||||
- 增加 `agents` 别名接口,统一 Agent 语义
|
||||
|
||||
状态:已完成首版
|
||||
|
||||
## Phase 2: n8n 接管流程编排
|
||||
|
||||
- 公共任务创建接口只负责建任务并触发工作流
|
||||
- `n8n` 负责分发:
|
||||
- `analysis_pipeline`
|
||||
- `real_cut_pipeline`
|
||||
- `ai_video_pipeline`
|
||||
- 业务步骤落在 `collector-service` 内部接口,保证状态统一入库
|
||||
|
||||
状态:已完成首版
|
||||
|
||||
## Phase 3: 内容分析主线 MVP
|
||||
|
||||
- 支持文本
|
||||
- 支持视频链接
|
||||
- 支持上传视频
|
||||
- 接下载器
|
||||
- 接本地 ASR
|
||||
- 接本地 LLM
|
||||
- 产出:
|
||||
- transcript
|
||||
- style_summary
|
||||
- analysis
|
||||
- rewrite
|
||||
- storyboards
|
||||
|
||||
状态:已完成首版
|
||||
|
||||
## Phase 4: 实拍自动剪辑主线 MVP
|
||||
|
||||
- 建立 `real_cut` 任务类型
|
||||
- 通过 `n8n -> collector -> cutvideo` 调度 Windows 机器
|
||||
- 记录 `task_id / run_id / 结果产物`
|
||||
|
||||
状态:已完成 API 级集成
|
||||
|
||||
待补:
|
||||
|
||||
- 用户上传素材到 Windows 侧的文件转运闭环
|
||||
|
||||
## Phase 5: AI 自动生成视频主线 MVP
|
||||
|
||||
- 建立 `ai_video` 任务类型
|
||||
- 从分析结果或直接 brief 生成分镜
|
||||
- 调 `huobao-drama`:
|
||||
- 创建 drama
|
||||
- 生成首帧
|
||||
- 生成尾帧
|
||||
- 基于首尾帧生成视频
|
||||
- 结果回写任务
|
||||
|
||||
状态:已完成 API 级集成
|
||||
|
||||
## Phase 6: 删除 FastGPT 运行依赖
|
||||
|
||||
- 删除代码依赖
|
||||
- 删除 compose 服务
|
||||
- 删除环境变量
|
||||
- 删除 README 说明
|
||||
|
||||
状态:已完成主仓库首版
|
||||
|
||||
## Phase 7: 联调与验证
|
||||
|
||||
- Python 语法检查
|
||||
- Compose 配置检查
|
||||
- `collector-service` 本地启动
|
||||
- `n8n` workflow 导入
|
||||
- Windows `cutvideo` 局域网调度
|
||||
- `huobao-drama` 本机调用
|
||||
|
||||
状态:进行中
|
||||
146
docs/LAN_E2E_GUIDE_2026-03-18.md
Normal file
146
docs/LAN_E2E_GUIDE_2026-03-18.md
Normal file
@@ -0,0 +1,146 @@
|
||||
# StoryForge 本地 / 局域网联调说明
|
||||
|
||||
日期:2026-03-18
|
||||
|
||||
## 1. 准备 `.env`
|
||||
|
||||
复制:
|
||||
|
||||
```bash
|
||||
cd /Users/kris/code/StoryForge-gitea
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
至少确认这些变量:
|
||||
|
||||
- `N8N_BASE_URL=http://127.0.0.1:5670`
|
||||
- `ORCHESTRATOR_SHARED_SECRET=storyforge-local-secret`
|
||||
- `CUTVIDEO_BASE_URL=http://<windows-lan-ip>:7860`
|
||||
- `CUTVIDEO_API_KEY=` 如果 Windows 服务启用了鉴权
|
||||
- `HUOBAO_BASE_URL=http://127.0.0.1:5678`
|
||||
- `WHISPER_BIN=` 指向你现有本地 ASR 可执行文件时填写
|
||||
|
||||
说明:
|
||||
|
||||
- 如果你单独重建 `collector`,要确保运行时仍带上 `CUTVIDEO_BASE_URL`,否则容器会退回空值
|
||||
- 当前已验证可用的 Windows `cutvideo` 地址是 `http://192.168.31.18:7860`
|
||||
|
||||
## 2. 启动基础服务
|
||||
|
||||
```bash
|
||||
cd /Users/kris/code/StoryForge-gitea
|
||||
docker compose up -d --build
|
||||
```
|
||||
|
||||
检查:
|
||||
|
||||
- `collector-service`:`http://127.0.0.1:8081/healthz`
|
||||
- `n8n`:`http://127.0.0.1:5670`
|
||||
- `cli-proxy-api`:`http://127.0.0.1:8317`
|
||||
- 本机 `huobao-drama`:`http://127.0.0.1:5678/health`
|
||||
|
||||
## 3. 导入 n8n workflows
|
||||
|
||||
从 `n8n/workflows/` 导入:
|
||||
|
||||
- `storyforge-analysis.json`
|
||||
- `storyforge-real-cut.json`
|
||||
- `storyforge-ai-video.json`
|
||||
|
||||
导入后:
|
||||
|
||||
- 检查每个 HTTP Request 节点的 `X-Orchestrator-Secret`
|
||||
- 如果你改了 `.env` 的 secret,这里必须同步
|
||||
|
||||
## 4. 登录与审批
|
||||
|
||||
默认超级管理员:
|
||||
|
||||
- 用户名:`kris`
|
||||
- 密码:`Asd123456.`
|
||||
|
||||
新用户注册后,需要用超级管理员审批。
|
||||
|
||||
## 5. 内容分析链路验证
|
||||
|
||||
### 文本
|
||||
|
||||
调用 `POST /v2/explore/text`
|
||||
|
||||
预期:
|
||||
|
||||
- 任务创建成功
|
||||
- `n8n` webhook 被触发
|
||||
- 任务最终进入 `completed`
|
||||
- 知识库文档里出现 transcript / style_summary / analysis / storyboards
|
||||
|
||||
已验证样例:
|
||||
|
||||
- `job_203bc8e9b20f4b1cbbc6cf7da79e46f4`
|
||||
|
||||
### 视频链接
|
||||
|
||||
调用 `POST /v2/explore/video-link`
|
||||
|
||||
前提:
|
||||
|
||||
- `yt-dlp` 可用
|
||||
- `ffmpeg` 可用
|
||||
- ASR 可调用
|
||||
|
||||
### 上传视频
|
||||
|
||||
调用 `POST /v2/explore/upload-video`
|
||||
|
||||
预期与视频链接类似,但素材来源为本地上传
|
||||
|
||||
## 6. `cutvideo` 实拍剪辑链路验证
|
||||
|
||||
调用 `POST /v2/pipelines/real-cut`
|
||||
|
||||
当前 MVP 前提:
|
||||
|
||||
- `input_dir` 必须是 Windows `cutvideo` 机器可访问的目录
|
||||
- 该目录中的素材已准备好
|
||||
|
||||
预期:
|
||||
|
||||
- 任务创建成功
|
||||
- `n8n` 调用 `collector-service` 内部 real-cut step
|
||||
- 后端记录 `provider_task_id`
|
||||
- 最终任务写回 `cutvideo_run`
|
||||
|
||||
已验证样例:
|
||||
|
||||
- `job_5ebd829c3f2144bca5c941183e75bdcd`
|
||||
- Windows 返回 `task_id=8d8f4a0cd5d9`
|
||||
- 运行目录 `20260318-093520-Windows cutvideo 联调样例`
|
||||
|
||||
## 7. `huobao-drama` AI 视频链路验证
|
||||
|
||||
调用 `POST /v2/pipelines/ai-video`
|
||||
|
||||
推荐方式:
|
||||
|
||||
- 先完成一个分析任务
|
||||
- 再把该分析任务的 `source_job_id` 传给 AI 视频任务
|
||||
|
||||
预期:
|
||||
|
||||
- 创建 drama
|
||||
- 每个分镜生成首帧、尾帧
|
||||
- 每个分镜生成视频
|
||||
- 最终 `job.result.rendered_scenes` 有完整结果
|
||||
|
||||
已验证样例:
|
||||
|
||||
- `job_01828c40377747cf914b51be360cc333`
|
||||
- `provider_task_id=10`
|
||||
- `video.task_id=qvideo-1380265978-1773799215825814468`
|
||||
- 最终视频已回写到 `job.result.rendered_scenes[0].video.video_url`
|
||||
|
||||
## 8. 当前已知卡点
|
||||
|
||||
- `cutvideo` 端到端“上传素材后自动送到 Windows 机器”还未彻底闭环
|
||||
- ASR 如果不是命令行模式,而是你现有常驻服务模式,需要再做一次入口绑定
|
||||
- `huobao-drama` 目前跑通依赖本地旧改版中的 qnaigc 兼容补丁,下一步要迁到 upstream 仓库
|
||||
41
docs/MVP_STATUS_2026-03-18.md
Normal file
41
docs/MVP_STATUS_2026-03-18.md
Normal file
@@ -0,0 +1,41 @@
|
||||
# StoryForge MVP 状态
|
||||
|
||||
日期:2026-03-18
|
||||
|
||||
## 已跑通或已完成代码接通
|
||||
|
||||
- 多用户账号体系
|
||||
- 审批机制
|
||||
- `user -> project -> assistant / knowledge base / job / content source` 数据模型
|
||||
- 文本 / 视频链接 / 上传视频 三类分析任务创建
|
||||
- `n8n` 工作流导入、激活与触发接口
|
||||
- 本地下载器调用
|
||||
- 本地 `ffmpeg` / `whisper` 风格入口封装
|
||||
- 本地大模型内容分析、二创文案、分镜生成
|
||||
- Windows `cutvideo` API 调度与结果回写接口
|
||||
- 本机 `huobao-drama` API 调度、首尾帧生成、视频生成与结果回写接口
|
||||
- FastGPT 运行时依赖删除
|
||||
|
||||
## 已验证的真实任务
|
||||
|
||||
- 分析链路:`job_203bc8e9b20f4b1cbbc6cf7da79e46f4`
|
||||
- 实拍剪辑链路:`job_5ebd829c3f2144bca5c941183e75bdcd`
|
||||
- AI 视频链路:`job_01828c40377747cf914b51be360cc333`
|
||||
|
||||
## 已实现但仍待环境验证
|
||||
|
||||
- 现有 ASR 部署入口与 `collector-service` 的最终绑定
|
||||
|
||||
## 尚未完全跑通
|
||||
|
||||
- 用户上传实拍素材后,自动把素材转运到 Windows `cutvideo` 机器的闭环
|
||||
- 对“抖音 / bilibili / 小红书账号级内容源”的批量抓取与分析调度
|
||||
- `huobao-drama` 本地兼容补丁向 upstream 仓库的迁移、分支化和提交
|
||||
|
||||
## 下一步优先级
|
||||
|
||||
1. 把 `huobao-drama` 本地兼容补丁迁到 `/Users/kris/code/huobao-drama-upstream`
|
||||
2. 绑定你的真实 ASR 入口
|
||||
3. 决定实拍素材转运方案:共享目录优先,上传 API 作为备选
|
||||
4. 补账号级内容源抓取调度
|
||||
5. 把改动整理成提交并推送
|
||||
Reference in New Issue
Block a user