D131: guanghuclip-video-generate 技能包 · Seedance视频生成→gatekeeper部署→guanghuclip更新全链路
Some checks failed
自动更新代码和重启 / update-and-restart (push) Has been cancelled
CI检查 + 自动部署 / check (push) Has been cancelled
CI检查 + 自动部署 / deploy (push) Has been cancelled

This commit is contained in:
冰朔 2026-06-12 22:22:32 +08:00
parent a5d035e8e3
commit eab4b47191

View File

@ -0,0 +1,186 @@
---
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)