---
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 `zy_gtw_c38be341d65043eee0ba51a214a267832a9ae46dd73e423c`
- 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 zy_gtw_c38be341d65043eee0ba51a214a267832a9ae46dd73e423c" \
  -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 zy_gtw_c38be341d65043eee0ba51a214a267832a9ae46dd73e423c" \
  -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)
