218 lines
8.9 KiB
Markdown
218 lines
8.9 KiB
Markdown
# StoryForge
|
||
|
||
StoryForge 现在拆成独立项目目录,和 `AI-glasses` 分开维护。
|
||
|
||
仓库边界和维护约束见:[StoryForge 仓库边界说明](./docs/STORYFORGE_REPO_BOUNDARY_2026-03-26.md)。
|
||
拆分治理方案见:[StoryForge / AI Glasses 拆分评估方案](./docs/STORYFORGE_SPLIT_ASSESSMENT_2026-03-26.md)。
|
||
当前项目状态见:[StoryForge 当前项目状态](./docs/CURRENT_PROJECT_STATE_2026-03-26.md)。
|
||
阶段性版本更新记录见:[StoryForge Changelog](./CHANGELOG.md)。
|
||
`AI-glasses` 独立代码仓库已单独维护在 [krisolo/ai-glasses](https://git.hyzq.site/krisolo/ai-glasses)。
|
||
|
||
## 目录
|
||
|
||
- `collector-service/`:FastAPI 后端,负责用户体系、项目、Agent、任务、内容分析和对外能力接入
|
||
- `web/storyforge-web-v4/`:正式 Web 工作台,承接多平台运营、对标、跟踪、生产和复盘入口
|
||
- `n8n/`:工作流导出文件,作为流程编排中枢
|
||
- `docker-compose.yml`:本地 `collector + n8n + cli-proxy-api` 编排
|
||
- `Common/`:项目约束和架构说明
|
||
- `data/collector/`:SQLite、任务文件、下载产物
|
||
- `docs/`:审计、实施计划、联调说明、当前 MVP 状态
|
||
|
||
## CI
|
||
|
||
仓库里的最小 GitHub/Gitea Actions workflow 位于 [`.github/workflows/ci.yml`](/Users/kris/code/StoryForge-gitea/.github/workflows/ci.yml),会在 `push`、`pull_request` 和 `workflow_dispatch` 时运行基线检查、后端单元测试和 Web Node 测试。
|
||
|
||
## 产品手册
|
||
|
||
- [新媒体运营中台产品逻辑手册](./docs/PRODUCT_LOGIC_NEW_MEDIA_OPERATING_SYSTEM_2026-03-22.md)
|
||
- [新媒体运营平台 UI 参考包](./output/ui/new-media-ops-reference-2026-03-22/README.md)
|
||
- [Web V4 UI 原型](./output/ui/storyforge-web-v4-html-prototype-2026-03-22/README.md)
|
||
- [Web V4 前端骨架](./web/storyforge-web-v4/README.md)(国内平台 UI 承载,当前已接上 `douyin / xiaohongshu / bilibili / kuaishou / wechat_video` 统一工作台)
|
||
- [Mobile V4 UI 原型](./output/ui/storyforge-mobile-v4-html-prototype-2026-03-22/README.md)(仅 UI 原型,不代表当前仓库承载 Android 工程)
|
||
|
||
## Douyin Browser Capture
|
||
|
||
```bash
|
||
cd /Users/kris/code/StoryForge-gitea
|
||
./scripts/start_douyin_workbench.sh
|
||
```
|
||
|
||
业务页:
|
||
|
||
```text
|
||
http://127.0.0.1:3618/workbench
|
||
```
|
||
|
||
完整采集控制台:
|
||
|
||
```text
|
||
http://127.0.0.1:3618
|
||
```
|
||
|
||
常用脚本:
|
||
|
||
```bash
|
||
./scripts/start_douyin_workbench.sh
|
||
./scripts/status_douyin_workbench.sh
|
||
./scripts/stop_douyin_workbench.sh
|
||
./scripts/cleanup_debug_ui.sh
|
||
```
|
||
|
||
如果第一次使用,还需要先安装浏览器依赖:
|
||
|
||
```bash
|
||
cd /Users/kris/code/StoryForge-gitea/scripts/douyin-browser-capture
|
||
npm install
|
||
npx playwright install chromium
|
||
```
|
||
|
||
当前本地页面已经拆成两个入口:
|
||
|
||
- `/workbench`:业务优先的 `Douyin Workbench`,可直接查看账号列表、商业化账号分析、快照详情、相似账号和对标关系
|
||
- `/`:完整浏览器辅助采集控制台,同时保留工作台能力
|
||
- 作品工作台支持按 `高分作品 / 最新作品 / 全部作品` 切换,并可按综合分、受欢迎程度、商业价值、发布时间、播放、点赞、分享、评论排序
|
||
- 作品列表支持 `视频 / 图文` 类型筛选,并可直接打开原作品链接
|
||
- 高分作品支持自动化分析,每条作品卡片下都会展示商业判断、复刻计划、运营动作和风险提醒
|
||
|
||
或者继续用命令行:
|
||
|
||
```bash
|
||
cd /Users/kris/code/StoryForge-gitea/scripts/douyin-browser-capture
|
||
npm run capture -- \
|
||
--profile-url https://www.douyin.com/user/your_account \
|
||
--storyforge-username storyforge-admin \
|
||
--storyforge-password 'your_admin_password'
|
||
```
|
||
|
||
说明:
|
||
|
||
- 这是“真实浏览器 + 人工登录/过挑战 + 自动提取 + 回写 StoryForge”的辅助采集工具
|
||
- 默认输出到 `output/playwright/douyin/`
|
||
- 本地控制台模式会把每次运行保存到 `output/playwright/douyin/control-panel/`
|
||
- 控制台支持“开始采集 -> 浏览器登录 -> 网页点继续 -> 自动同步”的点击式流程
|
||
- 详细说明见 `scripts/douyin-browser-capture/README.md`
|
||
|
||
## Collector Service
|
||
|
||
```bash
|
||
cd /Users/kris/code/StoryForge-gitea/collector-service
|
||
python3 -m venv .venv
|
||
source .venv/bin/activate
|
||
pip install -r requirements.txt
|
||
uvicorn app.main:app --host 0.0.0.0 --port 8081 --reload
|
||
```
|
||
|
||
## Docker Compose
|
||
|
||
```bash
|
||
cd /Users/kris/code/StoryForge-gitea
|
||
cp .env.example .env
|
||
docker compose up -d --build
|
||
```
|
||
|
||
首次启动前,至少补齐这些配置:
|
||
|
||
```bash
|
||
ORCHESTRATOR_SHARED_SECRET=your_strong_shared_secret
|
||
BOOTSTRAP_SUPERADMIN_USERNAME=storyforge-admin
|
||
BOOTSTRAP_SUPERADMIN_PASSWORD=your_strong_admin_password
|
||
```
|
||
|
||
如果希望 Web 端打开后直接自动建会话,不让用户手动输入账号密码,再额外打开:
|
||
|
||
```bash
|
||
WEB_AUTOLOGIN_ENABLED=1
|
||
WEB_AUTOLOGIN_ACCOUNT_USERNAME=your_existing_approved_username
|
||
```
|
||
|
||
推荐直接指定一个已经存在且已审批通过的账号用户名,服务端会直接为该账号签发自动会话,不需要额外保存该账号密码。
|
||
|
||
如果你更希望复用 bootstrap 超级管理员口令,或者切到专门账号,也可以继续走密码模式:
|
||
|
||
```bash
|
||
WEB_AUTOLOGIN_USERNAME=your_autologin_username
|
||
WEB_AUTOLOGIN_PASSWORD=your_autologin_password
|
||
```
|
||
|
||
如果要让本机模型网关 `cli-proxy-api` 自动提供 `GLM-5`,建议在启动前确保本机环境里存在:
|
||
|
||
```bash
|
||
export DASHSCOPE_API_KEY=your_dashscope_key
|
||
```
|
||
|
||
或者把它写进本地 `.env`。`./scripts/start_business.sh` 会自动生成 `data/cliproxyapi/config.yaml` 并把 `glm-5 -> GLM-5` 映射到本机网关。
|
||
|
||
如果 `collector` 跑在 Docker 里,建议保留:
|
||
|
||
```bash
|
||
COLLECTOR_N8N_BASE_URL=http://n8n:5678
|
||
```
|
||
|
||
如果你单独在宿主机启动 `collector-service`,它读取的仍然是:
|
||
|
||
```bash
|
||
N8N_BASE_URL=http://127.0.0.1:5670
|
||
```
|
||
|
||
默认会启动:
|
||
|
||
- `collector-service`:`http://127.0.0.1:8081`
|
||
- `n8n`:`http://127.0.0.1:5670`
|
||
- `cli-proxy-api`:`http://127.0.0.1:8317`
|
||
- 公网入口:`https://storyforge.hyzq.net/`
|
||
|
||
公网维护常用脚本:
|
||
|
||
```bash
|
||
./scripts/smoke_public_storyforge.sh
|
||
./scripts/deploy_public_storyforge.sh
|
||
```
|
||
|
||
首次启动时,如果数据库里还没有 `super_admin`,`collector-service` 会按
|
||
`BOOTSTRAP_SUPERADMIN_USERNAME / BOOTSTRAP_SUPERADMIN_PASSWORD / BOOTSTRAP_SUPERADMIN_DISPLAY_NAME`
|
||
创建最高权限账号。未配置时不会再自动写入默认口令账号。
|
||
|
||
如果开启了 `WEB_AUTOLOGIN_ENABLED=1`,前端会在启动时直接请求 `/v2/auth/auto-session` 自动建会话,不再显示用户名 / 密码 / token 输入流程。推荐优先使用 `WEB_AUTOLOGIN_ACCOUNT_USERNAME`,只在必须时才使用 `WEB_AUTOLOGIN_USERNAME / WEB_AUTOLOGIN_PASSWORD`。
|
||
|
||
## 当前架构
|
||
|
||
- `collector-service` 负责:
|
||
- 用户账号、多项目、多 Agent、多任务、多内容源数据边界
|
||
- 调用下载器、本地 ASR、本机 OpenAI 兼容模型
|
||
- 调用 Windows `cutvideo` 和 `huobao-drama`
|
||
- 持久化任务、分镜、分析结果、事件日志
|
||
- `n8n` 负责:
|
||
- 触发 `analysis_pipeline`
|
||
- 触发 `content_source_sync_pipeline`
|
||
- 触发 `real_cut_pipeline`
|
||
- 触发 `ai_video_pipeline`
|
||
- 历史旧运行链已完成移除,当前运行时只保留 StoryForge 自身服务与外部执行引擎
|
||
- 当前公网接入采用“云服务器 HTTPS 入口 + 云服务器本地 collector + 本地桥接执行引擎”模式:
|
||
- `https://storyforge.hyzq.net/` 由云服务器 `nginx` 提供 HTTPS 入口
|
||
- `/` 静态页由云服务器本地 `StoryForge Web V4` 直出
|
||
- `/v2/*`、`/openapi.json`、`/healthz` 反向代理到云服务器本地 `collector-service`
|
||
- 业务数据库已上云,当前路径为云服务器本地 `storyforge.db`
|
||
- `n8n / cutvideo / huobao / 本机模型 / ASR / NAS 录制` 继续由本机和局域网执行链提供,并通过受控桥接暴露给云上的 `collector-service`
|
||
|
||
## 说明
|
||
|
||
- 新注册账号默认 `pending`
|
||
- 主管理员审批后才可使用核心业务接口
|
||
- 支持 `user -> project -> knowledge base / assistant(agent) / job / content source` 的多租户边界
|
||
- 素材入口支持文字、视频链接、视频上传;内容源账号通过 `content_sources` 建模持久化,并可派生父子分析任务
|
||
- `cutvideo` 继续运行在 Windows 机器,本系统通过 API 调度
|
||
- fnOS / 局域网调试环境下,`cutvideo` 建议通过 NAS SSH 隧道接入,默认入口为 `http://192.168.31.188:19186`
|
||
- `huobao-drama` 继续作为 AI 生成视频主链的核心引擎
|
||
- 详细审计、阶段计划和联调步骤见 `docs/`
|
||
- Windows `cutvideo` 的恢复与常驻维护见 [`WINDOWS_CUTVIDEO_OPERATIONS_2026-03-27.md`](/Users/kris/code/StoryForge-gitea/docs/WINDOWS_CUTVIDEO_OPERATIONS_2026-03-27.md)
|
||
|
||
fnOS / NAS 局域网交付默认三步:
|
||
|
||
```bash
|
||
./scripts/deploy_fnos_cutvideo_tunnel.sh
|
||
./scripts/deploy_fnos_storyforge_lan_stack.sh
|
||
./scripts/smoke_fnos_storyforge_lan.sh
|
||
```
|
||
|
||
这套顺序会先把 Windows `cutvideo` 通过 NAS SSH 隧道暴露到 `19186/19181`,再把 StoryForge 的 NAS 侧联调用默认主链切到 `http://192.168.31.188:19186`,最后用一键 smoke 校验整条链路。
|