Use this skill when OpenStoryline is already installed and the user wants to start the local MCP/Web services, create or continue a session, send editing ins...
你负责在“已安装完成”的前提下,执行 OpenStoryline 的实际剪辑流程。 OpenStoryline 是一个剪辑 Agent,用户可使用自己的素材,通过自然语言对话的方式剪辑视频。内置素材搜索、内容理解、生成字幕、文字转语音等功能,用户可以多次提出具体的剪辑/修改意见。
目标是:使用已有脚本,稳定地完成一次从启动服务到产出视频的闭环;并且支持在同一个 session_id 上继续对话、二次编辑、重新生成新视频。
此技能只处理“使用与剪辑”:
config.toml 的必要字段。uvicorn agent_fastapi:app。session_id 上继续对话,执行二次编辑。output_*.mp4。不处理完整安装流程(依赖安装、模型下载、资源下载等),那是安装技能的范围。
127.0.0.1,不要主动暴露到局域网。scripts/update_config.pyscripts/bridge_openstoryline.py~/.openclaw/workspace/skills/openstoryline-use/scripts/bridge_openstoryline.py| head| tailgreptimeoutsleeppkillsession_id 必须保存;后续继续对话、二次编辑都依赖它。session_id 重试。session_id.mp4 的完整路径source .venv/bin/activate作为示例,你需要根据用户实际使用的环境,替换成正确的命令(例如conda activate )。对于以下两类命令:
PYTHONPATH=src python -m open_storyline.mcp.serveruvicorn agent_fastapi:app --host 127.0.0.1 --port 8005必须按“长驻进程”处理:
exec 启动,并开启 PTY(如果工具支持 pty: true,就开启)。process poll / process log 持续观察返回的 session。以下命令适合普通一次性 exec:
config.tomlsession_id 上继续对话.mp4实测中,Web 服务日志 最适合看剪辑进度。
常见正常流程节点包括:
filter_clipsgroup_clipsgenerate_scriptgenerate_voiceoverrender_video如果 bridge 脚本还在等待,不代表系统没在工作;可能只是服务端还在处理。
后续命令中的 <repo-root> 指向 OpenStoryline 仓库根目录,例如:
/Users/yourname/Desktop/code/Openstoryline/FireRed-Openstoryline
所有命令都默认在这个目录下执行,并先激活环境。
在开始剪辑前,以下 6 个字段必须有值,否则模型调用会失败。你必须先向用户询问这些字段的具体值,然后用脚本进行修改:
[llm].model[llm].base_url[llm].api_key[vlm].model[vlm].base_url[vlm].api_key直接可用命令(在仓库根目录执行,以.venv为例):
cd <repo-root> && source .venv/bin/activate && python scripts/update_config.py --config ./config.toml --set llm.model=REPLACE_WITH_REAL_MODEL
cd <repo-root> && source .venv/bin/activate && python scripts/update_config.py --config ./config.toml --set llm.base_url=REPLACE_WITH_REAL_URL
cd <repo-root> && source .venv/bin/activate && python scripts/update_config.py --config ./config.toml --set llm.api_key=sk-REPLACE_WITH_REAL_KEY
cd <repo-root> && source .venv/bin/activate && python scripts/update_config.py --config ./config.toml --set vlm.model=REPLACE_WITH_REAL_MODEL
cd <repo-root> && source .venv/bin/activate && python scripts/update_config.py --config ./config.toml --set vlm.base_url=REPLACE_WITH_REAL_URL
cd <repo-root> && source .venv/bin/activate && python scripts/update_config.py --config ./config.toml --set vlm.api_key=sk-REPLACE_WITH_REAL_KEY
以下是常见可选项,按需设置:
cd <repo-root> && source .venv/bin/activate && python scripts/update_config.py --config ./config.toml --set local_mcp_server.port=8002
cd <repo-root> && source .venv/bin/activate && python scripts/update_config.py --config ./config.toml --set search_media.pexels_api_key=REPLACE_WITH_PEXELS_KEY
在以下 3 家中选一家填写即可:
# minimax
cd <repo-root> && source .venv/bin/activate && python scripts/update_config.py --config ./config.toml --set generate_voiceover.providers.minimax.base_url=https://api.minimax.chat/v1/t2a_v2
cd <repo-root> && source .venv/bin/activate && python scripts/update_config.py --config ./config.toml --set generate_voiceover.providers.minimax.api_key=REPLACE_WITH_MINIMAX_KEY
# bytedance
cd <repo-root> && source .venv/bin/activate && python scripts/update_config.py --config ./config.toml --set generate_voiceover.providers.bytedance.uid=REPLACE_UID
cd <repo-root> && source .venv/bin/activate && python scripts/update_config.py --config ./config.toml --set generate_voiceover.providers.bytedance.appid=REPLACE_APPID
cd <repo-root> && source .venv/bin/activate && python scripts/update_config.py --config ./config.toml --set generate_voiceover.providers.bytedance.access_token=REPLACE_ACCESS_TOKEN
# 302
cd <repo-root> && source .venv/bin/activate && python scripts/update_config.py --config ./config.toml --set generate_voiceover.providers.302.base_url=https://REPLACE_BASE_URL
cd <repo-root> && source .venv/bin/activate && python scripts/update_config.py --config ./config.toml --set generate_voiceover.providers.302.api_key=REPLACE_API_KEY
macOS/Linux:
cd <repo-root> && source .venv/bin/activate && PYTHONPATH=src python -m open_storyline.mcp.server
Windows:
cd <repo-root>
. .venv\Scripts\Activate.ps1
$env:PYTHONPATH="src"
python -m open_storyline.mcp.server
看到类似以下日志,视为成功:
Uvicorn running on http://127.0.0.1:8001
macOS/Linux:
cd <repo-root> && source .venv/bin/activate && uvicorn agent_fastapi:app --host 127.0.0.1 --port 8005
出现以下日志即成功:
INFO: Started server process [PID]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:8005 (Press CTRL+C to quit)
启动后继续用 process poll / process log 观察是否稳定存活。
注意把地址替换为上一步启动 Web 服务时的真实地址。
curl -s -X POST "http://127.0.0.1:8005/api/sessions"
这一步会创建一个剪辑会话,拿到一个session_id,非常重要!只要 Web 服务还活着,你就可以拿着这个session_id进行上传素材、多轮对话,务必保留。
curl -s -X POST "http://127.0.0.1:8005/api/sessions/{session_id}/media" -F "files=@/absolute/path/input.mp4"
cp path/to/source.mp4 <repo-root>/outputs/{session_id}/media
使用 Skill 自带 bridge 脚本.
session_idcd <repo-root> && source .venv/bin/activate && python ~/.openclaw/workspace/skills/openstoryline-use/scripts/bridge_openstoryline.py \
--session-id <session_id> \
--base-url http://127.0.0.1:8005 \
--prompt "剪一个小红书风格视频" \
--lang "zh"
有时剪辑Agent会先询问剪辑需求;有时会直接开始剪辑,剪辑可能需要几分钟,尤其是带文案、配音、渲染时。
poll 当前 bridge 脚本对应的进程会话。如果 bridge 命令还没返回,但 Web 服务日志里已经在跑节点,这通常说明服务端仍在正常工作,不要误判为失败。
根据助手回复,继续向它发出剪辑要求。例如,助手制定了一个剪辑计划,请求确认。那么:
cd <repo-root> && source .venv/bin/activate && python ~/.openclaw/workspace/skills/openstoryline-use/scripts/bridge_openstoryline.py \
--base-url http://127.0.0.1:8005 \
--session-id <上一步session_id> \
--prompt "开始剪辑"
或者需要调整:
cd <repo-root> && source .venv/bin/activate && python ~/.openclaw/workspace/skills/openstoryline-use/scripts/bridge_openstoryline.py \
--base-url http://127.0.0.1:8005 \
--session-id <上一步session_id> \
--prompt "使用欢快的BGM"
一般来说,剪辑agent的输出会直接写出剪辑产物的路径。 如果没有,优先检查:
cd <repo-root> && find .storyline/.server_cache/<session_id> -name "output_*.mp4" 2>/dev/null
有 output_*.mp4 即认为剪辑成功。
将生成的视频发送给用户观看,询问用户反馈。 优先使用 channel 自带的视频发送接口。如果不可用,先询问用户是否接受将视频上传生成url进行预览。得到用户许可后,尝试以下备用方案,将获取的url发送给用户。
该命令的有效期可调 1h / 12h / 24h / 72h,上传限制 1GB
curl -fsS \
-F 'reqtype=fileupload' \
-F 'time=72h' \
-F 'fileToUpload=@"path/to/output_video.mp4"' \
https://litterbox.catbox.moe/resources/internals/api.php
命令会返回一个3天后过期的视频url,上传限制 4GB。
curl -fsS -F 'file=@"path/to/output_video.mp4"' https://temp.sh/upload
该命令会返回一个永久有效的视频url,上传限制 200 MB。
curl -fsS -F 'reqtype=fileupload' -F 'fileToUpload=@"path/to/output_video.mp4"' https://catbox.moe/user/api.php
在已经生成视频的情况下,如果用户对视频内容不满意,可以复用同一个 session_id 继续修改视频,并生成新的 output_*.mp4。
cd <repo-root> && source .venv/bin/activate && python ~/.openclaw/workspace/skills/OpenStoryline-use/scripts/bridge_openstoryline.py \
--base-url http://127.0.0.1:8005 \
--session-id <session_id> \
--prompt "帮我把文案换成更欢乐、更有活力的风格"
session_id 下,系统会重新跑相应节点,然后重新渲染.session_id 下会出现新的 render_video_* 目录。output_*.mp4。只有当用户明确要求手机 / LAN 访问时,才改为 --host 0.0.0.0。
同时提醒:仅在可信网络使用,避免开放到公共网络。
ZIP package — ready to use