OpenStoryline Usage Skill
你负责在“已安装完成”的前提下,执行 OpenStoryline 的实际剪辑流程。
OpenStoryline 是一个剪辑 Agent,用户可使用自己的素材,通过自然语言对话的方式剪辑视频。内置素材搜索、内容理解、生成字幕、文字转语音等功能,用户可以多次提出具体的剪辑/修改意见。
目标是:使用已有脚本,稳定地完成一次从启动服务到产出视频的闭环;并且支持在同一个 session_id 上继续对话、二次编辑、重新生成新视频。
Scope
此技能只处理“使用与剪辑”:
- 1. 检查并修改
config.toml 的必要字段。 - 启动 MCP server。
- 启动
uvicorn agent_fastapi:app。 - 创建 session 并发送剪辑请求。
- 等待并验证输出视频产物。
- 在同一个
session_id 上继续对话,执行二次编辑。 - 验证二次编辑后是否生成了新的
output_*.mp4。
不处理完整安装流程(依赖安装、模型下载、资源下载等),那是安装技能的范围。如果在启动时遇到问题,怀疑是安装问题,再去查看安装Skill openstoryline-install
Core Rules
- 1. 默认只监听
127.0.0.1,不要主动暴露到局域网。 - 优先复用现有脚本,不要重复造轮子:
- 修改配置脚本:位于代码仓库
scripts/update_config.py
- Web 服务桥接脚本位于当前 skill 目录下的
scripts/bridge_openstoryline.py。请先定位当前 skill 目录,再拼接
scripts/bridge_openstoryline.py
- 3. 长驻服务(MCP / Web)必须按“长驻进程”方式启动,并持续观察日志;不要把启动命令当成一次性探测命令。
- 不要在启动命令后面追加这些包装:
-
| head
-
| tail
-
grep
-
timeout
-
sleep
-
pkill
- 以及其它会截断日志、提前退出、强行杀进程的包装
- 5. 询问用户需要剪辑哪些素材及其路径。
- 第一轮创建 session 后返回的
session_id 必须保存;后续继续对话、二次编辑都依赖它。 - 如果服务端提示“上一条消息尚未完成,请稍后再发送”,不要新建 session;优先等待,必要时只终止卡住的本地 bridge 进程,然后继续复用原
session_id 重试。 - 不要在任务执行中途主动终止 MCP / Web 服务,除非用户明确要求停止,或者服务本身已经确认失活。
- 每次完成任务后,都要向用户明确返回:
-
session_id
- 最终视频
.mp4 的完整路径
- 如有二次编辑,还要说明是否生成了新的输出文件
- 10. 下面的示例命令都使用
source .venv/bin/activate作为示例,你需要根据用户实际使用的环境,替换成正确的命令(例如conda activate )。 - 遇到端口被占用的情况,优先换一个端口。
OpenClaw Execution Strategy (Important)
如果你是OpenClaw,一定注意以下关键点:
长驻服务怎么跑
对于以下两类命令:
- - INLINECODE21
- INLINECODE22
必须按“长驻进程”处理:
- 1. 用
exec 启动,并开启 PTY(如果工具支持 pty: true,就开启)。 - 启动后不要立刻判失败,MCP Server启动需要几分钟的时间。
- 用
process poll / process log 持续观察返回的内容,一定不要急着杀掉进程。 - 看到成功日志再继续下一步。
一次性命令怎么跑
以下命令适合普通一次性
exec:
- - 修改 INLINECODE28
- 创建 session
- 在现有
session_id 上继续对话 - 查找 INLINECODE30
- 查看文件大小
观察哪个日志最有用
实测中,
Web 服务日志 最适合看剪辑进度。
常见正常流程节点包括:
- - INLINECODE31
- INLINECODE32
- INLINECODE33
- INLINECODE34
- INLINECODE35
如果 bridge 脚本还在等待,不代表系统没在工作;可能只是服务端还在处理。
Standard Workflow (OpenClaw)
0) 确认仓库根目录
后续命令中的 <repo-root> 指向 OpenStoryline 仓库根目录,例如:
CODEBLOCK0
所有命令都默认在这个目录下执行,并先激活环境。
1) 进入项目根目录并配置
必填配置
在开始剪辑前,以下 6 个字段必须有值,否则模型调用会失败。你必须先向用户询问这些字段的具体值,然后用脚本进行修改:
- - INLINECODE37
- INLINECODE38
- INLINECODE39
- INLINECODE40
- INLINECODE41
- INLINECODE42
直接可用命令(在仓库根目录执行,以.venv为例):
CODEBLOCK1
选填配置
以下是常见可选项,按需设置:
1. MCP 端口(端口冲突时)
CODEBLOCK2
2. 素材检索(Pexels)
CODEBLOCK3
3. TTS(如果需要配音)
在以下 3 家中选一家填写即可:
CODEBLOCK4
2) 启动 MCP Server
注意 MCP Server 的启动可能需要几分钟,务必耐心等待,不要急着 kill 掉进程。
macOS/Linux:
CODEBLOCK5
Windows:
CODEBLOCK6
看到类似以下日志,视为成功:
CODEBLOCK7
3) 启动 Web 服务(uvicorn)
macOS/Linux:
CODEBLOCK8
出现以下日志即成功:
CODEBLOCK9
4) 创建剪辑会话
注意把地址替换为上一步启动 Web 服务时的真实地址。
curl -s -X POST "http://127.0.0.1:8005/api/sessions"
这一步会创建一个剪辑会话,拿到一个
session_id,
非常重要!只要 Web 服务还活着,你就可以拿着这个
session_id进行上传素材、多轮对话,务必保留。
5) 上传素材
方案1:
CODEBLOCK11
方案2:对于大文件,建议直接走本地copy
CODEBLOCK12
6) 开始剪辑对话(自动创建 session)
使用 Skill 自带 bridge 脚本.
- skills-root: 当前 skill 所在目录。
- session-id: 填写上一步拿到的 session_id
- base-url 填写 Web 服务的 url
- prompt 用户的剪辑需求
- lang 用户使用的语言类型,目前仅支持 zh / en,设置一次即可。
CODEBLOCK13
7) 等待并观察剪辑进度
有时剪辑Agent会先询问剪辑需求;有时会直接开始剪辑,剪辑可能需要几分钟,尤其是带文案、配音、渲染时。
正确做法
- 1. 持续
poll 当前 bridge 脚本对应的进程会话。 - 同时查看 Web 服务日志。剪辑 Agent 会实时更新自己的进度。
- 只要 Web 服务日志仍在推进,就继续等待,不要随便重启服务。
实战经验
如果 bridge 命令还没返回,但 Web 服务日志里已经在跑节点,这通常说明服务端仍在正常工作,不要误判为失败。
8) 第二轮:在同一个 session 上继续聊天
根据助手回复,继续向它发出剪辑要求。例如,助手制定了一个剪辑计划,请求确认。那么:
CODEBLOCK14
或者需要调整:
CODEBLOCK15
9) 检查首轮产物
一般来说,剪辑agent的输出会直接写出剪辑产物的路径。
如果没有,优先检查:
CODEBLOCK16
判定标准
有
output_*.mp4 即认为剪辑成功。
10) 发送视频
将生成的视频发送给用户观看,询问用户反馈。
OpenClaw + 飞书 APP 场景视频发送指南
如果你是 OpenClaw 且用户使用手机飞书 APP,使用如下专属指南。要求:
- - Python 3.6+
- 已安装 INLINECODE48
python3 -m pip install requests
运行脚本示例如下,此脚本会自动从 ~/.openclaw/openclaw.json 读取飞书凭证。
receive-id 的选择
- - ocxxx -> chatid:发到群聊或当前单聊会话,优先推荐
- ouxxx -> openid:发给指定用户
- onxxx -> userid:仅当明确拿到的是 user_id 时再使用
CODEBLOCK18
11) 二次编辑
在已经生成视频的情况下,如果用户对视频内容不满意,可以复用同一个 session_id 继续修改视频,并生成新的 output_*.mp4。
示例:修改文案风格
CODEBLOCK19
- - 同一个
session_id 下,系统会重新跑相应节点,然后重新渲染. - 同一个
session_id 下会出现新的 render_video_* 目录。 - 新目录里会生成新的
output_*.mp4。
Security Note
只有当用户明确要求手机 / LAN 访问时,才改为 --host 0.0.0.0。
同时提醒:仅在可信网络使用,避免开放到公共网络。
OpenStoryline 使用技能
你负责在“已安装完成”的前提下,执行 OpenStoryline 的实际剪辑流程。
OpenStoryline 是一个剪辑 Agent,用户可使用自己的素材,通过自然语言对话的方式剪辑视频。内置素材搜索、内容理解、生成字幕、文字转语音等功能,用户可以多次提出具体的剪辑/修改意见。
目标是:使用已有脚本,稳定地完成一次从启动服务到产出视频的闭环;并且支持在同一个 session_id 上继续对话、二次编辑、重新生成新视频。
范围
此技能只处理“使用与剪辑”:
- 1. 检查并修改 config.toml 的必要字段。
- 启动 MCP server。
- 启动 uvicorn agentfastapi:app。
- 创建 session 并发送剪辑请求。
- 等待并验证输出视频产物。
- 在同一个 sessionid 上继续对话,执行二次编辑。
- 验证二次编辑后是否生成了新的 output_*.mp4。
不处理完整安装流程(依赖安装、模型下载、资源下载等),那是安装技能的范围。如果在启动时遇到问题,怀疑是安装问题,再去查看安装Skill openstoryline-install
核心规则
- 1. 默认只监听 127.0.0.1,不要主动暴露到局域网。
- 优先复用现有脚本,不要重复造轮子:
- 修改配置脚本:位于代码仓库scripts/update_config.py
- Web 服务桥接脚本位于当前 skill 目录下的 scripts/bridge
openstoryline.py。请先定位当前 skill 目录,再拼接scripts/bridgeopenstoryline.py
- 3. 长驻服务(MCP / Web)必须按“长驻进程”方式启动,并持续观察日志;不要把启动命令当成一次性探测命令。
- 不要在启动命令后面追加这些包装:
- | head
- | tail
- grep
- timeout
- sleep
- pkill
- 以及其它会截断日志、提前退出、强行杀进程的包装
- 5. 询问用户需要剪辑哪些素材及其路径。
- 第一轮创建 session 后返回的 sessionid 必须保存;后续继续对话、二次编辑都依赖它。
- 如果服务端提示“上一条消息尚未完成,请稍后再发送”,不要新建 session;优先等待,必要时只终止卡住的本地 bridge 进程,然后继续复用原 sessionid 重试。
- 不要在任务执行中途主动终止 MCP / Web 服务,除非用户明确要求停止,或者服务本身已经确认失活。
- 每次完成任务后,都要向用户明确返回:
- session_id
- 最终视频 .mp4 的完整路径
- 如有二次编辑,还要说明是否生成了新的输出文件
- 10. 下面的示例命令都使用source .venv/bin/activate作为示例,你需要根据用户实际使用的环境,替换成正确的命令(例如conda activate )。
- 遇到端口被占用的情况,优先换一个端口。
OpenClaw 执行策略(重要)
如果你是OpenClaw,一定注意以下关键点:
长驻服务怎么跑
对于以下两类命令:
- - PYTHONPATH=src python -m openstoryline.mcp.server
- uvicorn agentfastapi:app --host 127.0.0.1 --port 8005
必须按“长驻进程”处理:
- 1. 用 exec 启动,并开启 PTY(如果工具支持 pty: true,就开启)。
- 启动后不要立刻判失败,MCP Server启动需要几分钟的时间。
- 用 process poll / process log 持续观察返回的内容,一定不要急着杀掉进程。
- 看到成功日志再继续下一步。
一次性命令怎么跑
以下命令适合普通一次性 exec:
- - 修改 config.toml
- 创建 session
- 在现有 session_id 上继续对话
- 查找 .mp4
- 查看文件大小
观察哪个日志最有用
实测中,
Web 服务日志 最适合看剪辑进度。
常见正常流程节点包括:
- - filterclips
- groupclips
- generatescript
- generatevoiceover
- render_video
如果 bridge 脚本还在等待,不代表系统没在工作;可能只是服务端还在处理。
标准工作流程(OpenClaw)
0) 确认仓库根目录
后续命令中的 指向 OpenStoryline 仓库根目录,例如:
bash
/Users/yourname/Desktop/code/Openstoryline/FireRed-Openstoryline
所有命令都默认在这个目录下执行,并先激活环境。
1) 进入项目根目录并配置
必填配置
在开始剪辑前,以下 6 个字段必须有值,否则模型调用会失败。你必须先向用户询问这些字段的具体值,然后用脚本进行修改:
- - [llm].model
- [llm].baseurl
- [llm].apikey
- [vlm].model
- [vlm].baseurl
- [vlm].apikey
直接可用命令(在仓库根目录执行,以.venv为例):
bash
cd && source .venv/bin/activate && python scripts/updateconfig.py --config ./config.toml --set llm.model=REPLACEWITHREALMODEL
cd && source .venv/bin/activate && python scripts/updateconfig.py --config ./config.toml --set llm.baseurl=REPLACEWITHREAL_URL
cd && source .venv/bin/activate && python scripts/updateconfig.py --config ./config.toml --set llm.apikey=sk-REPLACEWITHREAL_KEY
cd && source .venv/bin/activate && python scripts/updateconfig.py --config ./config.toml --set vlm.model=REPLACEWITHREALMODEL
cd && source .venv/bin/activate && python scripts/updateconfig.py --config ./config.toml --set vlm.baseurl=REPLACEWITHREAL_URL
cd && source .venv/bin/activate && python scripts/updateconfig.py --config ./config.toml --set vlm.apikey=sk-REPLACEWITHREAL_KEY
选填配置
以下是常见可选项,按需设置:
1. MCP 端口(端口冲突时)
bash
cd
&& source .venv/bin/activate && python scripts/updateconfig.py --config ./config.toml --set localmcp_server.port=8002
2. 素材检索(Pexels)
bash
cd && source .venv/bin/activate && python scripts/updateconfig.py --config ./config.toml --set searchmedia.pexelsapikey=REPLACEWITHPEXELS_KEY
3. TTS(如果需要配音)
在以下 3 家中选一家填写即可:
bash
minimax
cd && source .venv/bin/activate && python scripts/updateconfig.py --config ./config.toml --set generatevoiceover.providers.minimax.baseurl=https://api.minimax.chat/v1/t2av2
cd && source .venv/bin/activate && python scripts/updateconfig.py --config ./config.toml --set generatevoiceover.providers.minimax.apikey=REPLACEWITHMINIMAXKEY
bytedance
cd && source .venv/bin/activate && python scripts/updateconfig.py --config ./config.toml --set generatevoiceover.providers.bytedance.uid=REPLACE_UID
cd && source .venv/bin/activate && python scripts/updateconfig.py --config ./config.toml --set generatevoiceover.providers.bytedance.appid=REPLACE_APPID
cd && source .venv/bin/activate && python scripts/updateconfig.py --config ./config.toml --set generatevoiceover.providers.bytedance.accesstoken=REPLACEACCESS_TOKEN
302
cd && source .venv/bin/activate && python scripts/updateconfig.py --config ./config.toml --set generatevoiceover.providers.302.baseurl=https://REPLACEBASE_URL
cd && source .venv/bin/activate && python scripts/updateconfig.py --config ./config.toml --set generatevoiceover.providers.302.apikey=REPLACEAPI_KEY
2) 启动 MCP Server
注意 M