Install
openclaw skills install huguanjin-libtv-skillagent-im 会话技能 - 通过 liblib.tv 的 AI 能力生成和编辑图片/视频,兼容 Gemini 文生图、Sora/Veo/Grok/豆包/Vidu 视频直连。 覆盖:文生图、文生视频、图生视频、视频编辑、风格迁移、视频续写、MV生成、短剧生成、分镜设计。 触发词:画、生成、做动画、改镜头、换风格、转绘、复刻、liblib、libtv、上传参考图。 当用户明确指定 Gemini 时走文生图兼容路径;指定 Sora/Veo/Grok/豆包/Vidu 时走视频直连路径。
openclaw skills install huguanjin-libtv-skill通过 agent-im 的 OpenAPI 创建会话、发送消息(生图、生视频、编辑视频等)、上传图片/视频文件,并查询会话消息进展。同时支持 Gemini 文生图直连、Sora/Veo/Grok/豆包 的 POST /v1/videos 视频直连,以及 Vidu 的 POST /v1/video/generations 直连。
LibTV 是 LiblibAI 推出的 AI 视频创作平台,同时为人类创作者和 Agent 设计。Agent 通过 Skill 入口理解任务、调用模型并自动编排工作流。
平台核心能力:
用户的所有创作和编辑需求都通过发送自然语言消息来完成,Agent 会自主编排工作流。复杂任务(短剧、MV)耗时较长,需耐心轮询。
只要用户请求涉及 AI 图片或视频的创作、生成、编辑、修改,无论措辞如何,都必须触发此技能。常见措辞包括:
gemini-3-pro-image-preview:generateContent,支持 aspectRatio 和 imageSizePOST /v1/videos,支持文生视频和图生视频(input_reference 可多张)POST /v1/video/generations(JSON 请求体,支持 duration/images/metadata)GET /v1/videos/{task_id} 轮询状态并提取视频地址export LIBTV_ACCESS_KEY="your-access-key"
可选:OPENAPI_IM_BASE 或 IM_BASE_URL,默认 https://im.liblib.tv。
所有直连接口共用同一组 API 地址和密钥:
export API_KEY="your-api-key" # 必填
export API_BASE_URL="https://your-api-host" # 必填(只写域名,不带路径)
各 provider 可选模型参数详见 .env 文件或 references/usage-guide.md。
无需安装额外依赖,仅使用 Python 标准库。
# 创建新会话并发送「生一个动漫视频」
python3 {baseDir}/scripts/create_session.py "生一个动漫视频"
# 向已有会话发送消息
python3 {baseDir}/scripts/create_session.py "再生成一张风景图" --session-id SESSION_ID
# 只创建/绑定会话,不发消息
python3 {baseDir}/scripts/create_session.py
# 查询会话消息列表
python3 {baseDir}/scripts/query_session.py SESSION_ID
# 增量拉取(只返回 seq 大于 N 的消息)
python3 {baseDir}/scripts/query_session.py SESSION_ID --after-seq 5
# 附带项目地址(传入 create_session 返回的 projectUuid,结果中带 projectUrl)
python3 {baseDir}/scripts/query_session.py SESSION_ID --project-id PROJECT_UUID
# 切换当前 accessKey 绑定的项目(后续创建会话将使用新项目)
python3 {baseDir}/scripts/change_project.py
当用户提供了参考的文件地址时,进行上传,仅支持图片、视频,文件大小必须在200M以下。
# 上传图片
python3 {baseDir}/scripts/upload_file.py /path/to/image.png
# 上传视频
python3 {baseDir}/scripts/upload_file.py /path/to/video.mp4
生成完成后,可以将会话中的所有图片/视频批量下载到本地。
# 从会话自动提取并下载所有结果
python3 {baseDir}/scripts/download_results.py SESSION_ID
# 指定输出目录
python3 {baseDir}/scripts/download_results.py SESSION_ID --output-dir ~/Desktop/my_project
# 指定文件名前缀(如 storyboard_01.png, storyboard_02.png ...)
python3 {baseDir}/scripts/download_results.py SESSION_ID --prefix "storyboard"
# 直接下载指定 URL 列表(不需要 session_id)
python3 {baseDir}/scripts/download_results.py --urls URL1 URL2 URL3 --output-dir ./output
python3 {baseDir}/scripts/gemini_generate_image.py "赛博朋克风格的城市夜景海报" --aspect-ratio 16:9 --image-size 2K
# 文生视频
python3 {baseDir}/scripts/sora_generate_video.py "猫咪听歌摇头晃脑" --model sora-2 --seconds 10
# 图生视频
python3 {baseDir}/scripts/sora_generate_video.py "让角色开始微笑" --input-reference ./ref.jpg --seconds 10
# Vidu 文生视频
python3 {baseDir}/scripts/vidu_generate_video.py "一个美女在雨中跳舞" --seconds 5
各 provider 别名入口(veo_generate_video.py、grok_generate_video.py、doubao_generate_video.py)和更多示例见 references/usage-guide.md。
# 单次查询
python3 {baseDir}/scripts/sora_query_video.py TASK_ID
# 轮询到完成
python3 {baseDir}/scripts/sora_query_video.py TASK_ID --wait --interval 5 --max-wait 900
别名查询入口:veo_query_video.py、grok_query_video.py、doubao_query_video.py、vidu_query_video.py。
详细工作流场景参见 references/workflows.md。
核心流程概要:
各脚本的详细 JSON 输出格式参见 references/output-format.md。
query_session 返回的 messages 中 assistant 消息的 content 或结果里的视频/图片 URL,即「返回的结果」。create_session 返回的 projectUrl,或自行拼接 https://www.liblib.tv/canvas?projectId= + projectUuid。查询进展时若传入 --project-id PROJECT_UUID,query_session 会直接返回 projectUrl,便于一并展示。gemini_generate_image.py 输出中的 saved 文件列表(该流程没有 projectUrl)。sora_query_video.py 或各别名查询脚本输出中的 videoUrl(该流程没有 projectUrl)。在 LibTV 任务完成时,同时给出:视频/图片结果链接 + 项目画布链接(projectUrl)。 在 Gemini 任务完成时,只给出:图片结果(saved 文件路径)。 在 Sora/Veo/Grok/豆包/Vidu 任务完成时,只给出:视频结果链接(videoUrl)。 过程中,不要给出 项目画布链接(projectUrl)。
该原则针对 LibTV 会话模式;Gemini 文生图直连模式为单次请求直接出图。
你(用户侧 Agent)的职责是搬运工,不是创作者。后端有专门的 Agent 负责理解需求、拆解分镜、编排工作流、选模型、写 prompt。你要做的只有三件事:
upload_file.py 拿到 OSS URLcreate_session.py绝对不要做的事:
后端 Agent 对模型能力、参数配置、prompt 工程远比用户侧更专业。用户侧越俎代庖只会降低生成质量,换个弱模型更是灾难。
正确示例:
用户说:「帮我推演后续的故事,来个分镜大爆炸,帮我出一个16:9的九宫格的图。新建一个任务。」
用户给了参考图:/path/to/ref.png
→ upload_file.py /path/to/ref.png → 拿到 oss_url
→ create_session.py "帮我推演后续的故事,来个分镜大爆炸,帮我出一个16:9的九宫格的图。参考图:{oss_url}"
→ 轮询 → 下载 → 展示
错误示例:
❌ 用户侧自己先写了个九宫格分镜表(对峙、交锋、危机...)
❌ 然后把自己编的描述发给后端
❌ 或者拆成9次 create_session 分别发送
Authorization: Bearer <LIBTV_ACCESS_KEY>message,仅创建/绑定会话,不会调用 SendMessage--after-seq 做增量拉取,便于轮询新消息(含 assistant 回复与生图/生视频结果)https://www.liblib.tv/canvas?projectId= + projectUuidhttps://libtv-res.liblib.art/claw/{projectUuid}/{uuid}{ext}/v1beta/models/gemini-3-pro-image-preview:generateContentkey;若中转接口要求,额外携带 Authorization: Bearer <token>generationConfig.imageConfig.aspectRatio 控制宽高比,通过 imageSize 控制清晰度(如 1K、2K、4K)POST /v1/videos,鉴权为 Authorization: Bearer <*_API_KEY>input_reference 上传多张图片;查询优先使用 GET /v1/videos/{task_id}VEO_* 环境变量别名,常用模型如 veo_3_1-fast,并支持 enable_upsample 参数GROK_* 环境变量别名,常见 size 为 720P/1080PDOUBAO_* 环境变量别名,常见 size 为 16:9/4:3/1:1/3:4/9:16/21:9/keep_ratio/adaptivePOST /v1/video/generations(JSON);图生/首尾帧使用 --image-urls,查询仍建议 GET /v1/videos/{task_id}