187 lines
7.4 KiB
Markdown
187 lines
7.4 KiB
Markdown
---
|
||
name: guanghuclip-video-generate
|
||
description: 光湖视频AI · Seedance视频生成→新加坡面孔服务器部署→guanghuclip.cn 预览更新全链路。当需要从分镜脚本生成AI视频并部署到 guanghuclip.cn 时加载此技能。
|
||
trigger_keywords: 生成视频, 跑镜, 生成分镜, Seedance, guanghuclip, 视频部署, 视频预览, AI视频, shot
|
||
agent_created: true
|
||
created: D131 · 2026-06-12
|
||
tcs: ICE-GL-ZY001
|
||
---
|
||
|
||
# 光湖视频AI · 生成+部署技能包
|
||
|
||
全链路:读取分镜 → 调用 Seedance 2.0 API → 下载视频 → 部署到新加坡面孔服务器 → 更新 guanghuclip.cn 预览
|
||
|
||
## 前置条件
|
||
|
||
### 本地文件
|
||
- `~/guanghulab/video-ai-system/.env` — API Key 配置(JIMENG_API_KEY + ALIYUN_API_KEY)
|
||
- `~/guanghulab/video-ai-system/engines/video-api-adapter.js` — Seedance API 适配器
|
||
- `~/guanghulab/video-ai-system/engines/hldp-prompt.js` — HLDP→提示词转换器
|
||
- `~/guanghulab/video-ai-system/tools/run-shot1.js` — 单镜执行脚本(可复用模板)
|
||
|
||
### API 密钥
|
||
- `JIMENG_API_KEY=ark-xxx` — 火山方舟 API Key(在 video-ai-system/.env)
|
||
- 模型默认: `doubao-seedance-2-0-260128`(火山方舟控制台需开通)
|
||
|
||
### 服务器
|
||
- BS-SG-001 · 43.156.237.110 · Gatekeeper `GATEKEEPER_TOKEN_REDACTED`
|
||
- guanghuclip 前端根目录: `/root/guanghuclip/frontend/`
|
||
- 视频存放路径: `/root/guanghuclip/frontend/videos/`
|
||
- API 数据: `/root/guanghuclip/frontend/public/data/videos.json`
|
||
|
||
### 工具链组合
|
||
```
|
||
腾讯文档(读分镜) → hldp-prompt.js → video-api-adapter.js → gatekeeper → videos.json
|
||
↑MCP connector ↑本地引擎 ↑火山方舟API ↑直连3911 ↑sed修改
|
||
```
|
||
|
||
## 工作流
|
||
|
||
### Step 1: 读取分镜脚本
|
||
|
||
从腾讯文档读分镜(MCP connector: `tencent-docs`):
|
||
```
|
||
DeferExecuteTool → mcp__tencent-docs__get_content
|
||
file_id: "DTHhuWW5OQU9VbFVX"
|
||
```
|
||
|
||
提取镜号、提示词、时长信息。
|
||
|
||
### Step 2: 生成 Seedance 提示词
|
||
|
||
用 hldp-prompt.js 或直接从文档取提示词。提示词要求:
|
||
- 中文描述,100-200字
|
||
- 包含:场景、人物、动作、氛围、风格
|
||
- 后缀:`Seedance动态漫风格,电影级光影`
|
||
|
||
### Step 3: 调用 Seedance API 生成视频
|
||
|
||
使用 video-api-adapter.js 或复制 run-shot1.js 模板:
|
||
|
||
```javascript
|
||
const { generateVideo } = require('../engines/video-api-adapter');
|
||
|
||
const result = await generateVideo({
|
||
prompt: '修仙世界,百宗会广场,白天阳光明媚...',
|
||
duration: '5',
|
||
resolution: '1080p',
|
||
outputPath: path.resolve(__dirname, '../outputs/shots/ep01-shot01.mp4'),
|
||
});
|
||
```
|
||
|
||
**注意:**
|
||
- 模型名必须是 `doubao-seedance-2-0-260128`(不是 seedance-2-0)
|
||
- API 返回结构是 `{ content: { video_url: "..." } }`,不是 `output.video_url`
|
||
- 轮询最多120次×5秒=10分钟
|
||
- 每次约消耗 108,900 tokens
|
||
|
||
**常见错误:**
|
||
| 错误 | 原因 | 解决 |
|
||
|------|------|------|
|
||
| 404 model does not exist | 模型名错误 | 用 `doubao-seedance-2-0-260128` |
|
||
| 未开通模型服务 | 火山方舟未开通 | 去控制台开通 Seedance 2.0 |
|
||
| 安心体验已达上限 | 免费额度用完 | 关闭安心体验模式 |
|
||
| 任务完成但未返回视频地址 | 响应解析路径错误 | 检查 `data.content?.video_url` |
|
||
|
||
运行命令(后台):
|
||
```bash
|
||
cd ~/guanghulab/video-ai-system && \
|
||
/Users/bingshuolingdianyuanhe/.workbuddy/binaries/node/versions/22.22.2/bin/node tools/run-shot1.js
|
||
```
|
||
|
||
### Step 4: 下载视频到本地
|
||
|
||
```bash
|
||
curl -L -o outputs/ep01-shot01.mp4 "<Seedance返回的video_url>"
|
||
```
|
||
|
||
### Step 5: 部署到新加坡面孔服务器
|
||
|
||
#### 5a. 上传视频文件
|
||
|
||
新加坡服务器从 Seedance TOS 直拉(最快,约10秒):
|
||
```bash
|
||
curl -s -m 30 --noproxy '*' -X POST \
|
||
-H "Authorization: Bearer GATEKEEPER_TOKEN_REDACTED" \
|
||
-H "Content-Type: application/json" \
|
||
http://43.156.237.110:3911/exec \
|
||
-d '{"cmd":"mkdir -p /root/guanghuclip/frontend/videos && curl -L -o /root/guanghuclip/frontend/videos/ep01-shot01.mp4 \"<TOS_URL>\" && ls -la /root/guanghuclip/frontend/videos/ep01-shot01.mp4"}'
|
||
```
|
||
|
||
**关键:** 必须加 `--noproxy '*'` 否则新加坡 gatekeeper 超时。
|
||
|
||
如果 TOS URL 过期(24小时后),用本地文件 base64 分块上传(视频4MB≈480chunks×12000chars),或通过 COS 中转。
|
||
|
||
#### 5b. 更新 videos.json
|
||
|
||
```bash
|
||
curl -s -m 15 --noproxy '*' -X POST \
|
||
-H "Authorization: Bearer GATEKEEPER_TOKEN_REDACTED" \
|
||
-H "Content-Type: application/json" \
|
||
http://43.156.237.110:3911/exec \
|
||
-d '{"cmd":"cd /root/guanghuclip/frontend/public/data && cp videos.json videos.json.bak && sed -i '\''s|\"镜1·建立镜头\", \"duration\": 5[^}]*\"videoUrl\": null|\"镜1·建立镜头\", \"duration\": 5, \"prompt\": \"...\", \"videoUrl\": \"/videos/ep01-shot01.mp4\"|'\'' videos.json && grep -A2 \"镜1\" videos.json"}'
|
||
```
|
||
|
||
### Step 6: 验证
|
||
|
||
```bash
|
||
# 验证视频文件可访问
|
||
curl -s -o /dev/null -w '%{http_code} %{size_download}' --noproxy '*' http://guanghuclip.cn/videos/ep01-shot01.mp4
|
||
|
||
# 验证 JSON 更新
|
||
curl -s --noproxy '*' http://guanghuclip.cn/data/videos.json | python3 -c "import sys,json;d=json.load(sys.stdin);print(d['episodes'][0]['scenes'][0]['shots'][0])"
|
||
```
|
||
|
||
### Step 7: 人类预览
|
||
|
||
浏览器打开 http://guanghuclip.cn → 点进项目 → 镜1 卡片显示 ✅ 已生成 + 视频播放器。
|
||
|
||
## 服务器地图(BS-SG-001 · 43.156.237.110)
|
||
|
||
### guanghuclip.cn 请求路径
|
||
```
|
||
浏览器 → DNS(43.156.237.110) → Nginx(80) → guanghuclip.cn server块
|
||
├── / → /root/guanghuclip/frontend/index.html (静态SPA)
|
||
├── /api/* → proxy_pass 127.0.0.1:3000 (光湖语言世界API)
|
||
├── /videos/* → /root/guanghuclip/frontend/videos/ (静态视频文件)
|
||
├── /data/* → /root/guanghuclip/frontend/public/data/ (JSON数据)
|
||
└── /socket.io/* → proxy_pass 127.0.0.1:3000 (WebSocket)
|
||
```
|
||
|
||
### guanghubingshuo.com 主要路由
|
||
| 路径 | 服务 | 端口 | 用途 |
|
||
|------|------|------|------|
|
||
| / | 静态 | /var/www/html | 主页门户 |
|
||
| /code/ | Forgejo | :3001 | 代码仓库 |
|
||
| /console/ | console-server | :3920 | 管理控制台 |
|
||
| /desk/ | desk-system | :3921 | 桌面系统 |
|
||
| /brain-db/ | persona-brain-db | :3914 | 人设数据库 |
|
||
| /outline/ | Docker Outline | :3090 | Wiki |
|
||
| /juzi/aircraft/ | Python uvicorn | :8001 | 辰星飞行器 |
|
||
|
||
### 关键端口
|
||
- 3911: Gatekeeper引擎 (PM2 engine)
|
||
- 3000: guanghuclip后端
|
||
- 3001: Forgejo Git
|
||
- 3905: Repo MCP SG
|
||
- 3906: HLDP Gate MCP
|
||
|
||
## 注意事项
|
||
|
||
- 每次视频生成约消耗 108,900 tokens(¥0.28/万token → ≈¥3.05/镜)
|
||
- Seedance TOS URL 24小时后过期,需及时部署
|
||
- guanghuclip 后端(端口3000)未通过PM2管理,是直接 `node server.js` 运行
|
||
- guanghuclip.cn 有SSL证书但Nginx未启用HTTPS(仅80端口)
|
||
- videos.json 更新用sed时注意行内中文引号不变
|
||
- 每次更新前备份 videos.json → videos.json.bak
|
||
|
||
## 相关文件
|
||
|
||
- `~/guanghulab/video-ai-system/engines/video-api-adapter.js` — API适配器(已修复 content.video_url 解析)
|
||
- `~/guanghulab/video-ai-system/engines/hldp-prompt.js` — 提示词转换器
|
||
- `~/guanghulab/video-ai-system/tools/run-shot1.js` — 单镜执行模板
|
||
- `~/guanghulab/video-ai-system/.env` — API密钥(不推送仓库)
|
||
- `~/guanghulab/guanghuclip/frontend/index.html` — guanghuclip SPA
|
||
- `~/guanghulab/guanghuclip/frontend/public/data/videos.json` — 分镜数据
|
||
- 腾讯文档: `docs.qq.com/aio/DTHhuWW5OQU9VbFVX` (file_id: DTHhuWW5OQU9VbFVX)
|