mcpField
L
libtv-skill

libtv-skill

github.com/libtv-labsクリエイティブ・メディア1.2k4.6k 回インストール32 週間前に更新
リポジトリ

libtv-skill について

libtv-skill は、agent-im を通じて LibTV のメディア生成セッションを作成・管理するスクリプトを提供するスキルです。ユーザーの依頼を伝え、画像や動画の生成状況を確認して結果を取得するエージェント向けで、プロンプトの作成は行いません。

主な機能

  1. 01セッションの作成とメッセージ送信
  2. 02セッションメッセージによる進捗確認
  3. 03画像・動画ファイルのアップロード
  4. 04生成メディアの一括ダウンロード
  5. 05現在のプロジェクトの切り替え

活用シーン

  1. 01依頼内容から画像や動画を生成
  2. 02ローカルファイルのメディアを編集
  3. 03既存セッションへの追加依頼

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/libtv-labs/libtv-skills --skill libtv-skill

インストール後、Claude Code で/libtv-skillを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

scripts/
_common.py
change_project.py
create_session.py
download_results.py
query_session.py
upload_file.py

詳細

agent-im セッション(画像生成/動画生成)

agent-im の OpenAPI を通じてセッションを作成し、メッセージ(画像生成、動画生成、動画編集など)を送信して、画像/動画ファイルをアップロードし、セッションメッセージの進行状況を確認します。

LibTV は LiblibAI が提供する AI 動画制作プラットフォームで、人間のクリエイターとエージェントの両方のために設計されています。エージェントは Skill の入口からタスクを理解し、モデルを呼び出してワークフローを自動で編成します。

プラットフォームの主な機能:

  • 生成:テキストから画像を生成、テキストから動画を生成、画像から動画を生成、動画の続きを生成
  • 編集:部分的な変更、要素の置き換え、ショットの調整、スタイルの変換
  • 複雑な制作:一文から完全な短編ドラマを生成(脚本→絵コンテ→完成動画)、既存動画のスタイルを再現してTVC/プロモーション動画を制作、音楽からMVを生成、商品紹介動画を制作
  • モデル:Seedance 2.0、Kling 3.0/O3、Wan 2.6、NanoBanana、Midjourney、Seedream 5.0 などのトップクラスのモデル

ユーザーのあらゆる制作・編集の要望は、自然言語のメッセージを送信することで実現します。エージェントがワークフローを自律的に編成します。複雑なタスク(短編ドラマ、MV)は時間がかかるため、根気よくポーリングしてください。

機能

  1. セッションの作成/メッセージの送信 - 新しいセッションを作成するか、既存のセッションにメッセージを送信します(例:「アニメ動画を生成して」「紙の船をハートに置き換えて」)
  2. セッションの進行状況の確認 - sessionId を指定してセッションのメッセージ一覧を取得し、画像/動画生成の結果をポーリングします
  3. プロジェクトの切り替え - 現在の accessKey に紐付いたプロジェクトを新しいプロジェクトに切り替えます。以降の create_session では新しい projectUuid が使用されます
  4. ファイルのアップロード - 画像または動画ファイルを OSS にアップロードし、アクセス可能な OSS アドレスを返します(既存の動画/画像を編集する場合は、先にアップロードが必要です)
  5. 結果のダウンロード - セッションで生成された画像/動画をまとめてローカルにダウンロードし、URL を自動で抽出して名前を付けます

前提条件

export LIBTV_ACCESS_KEY="your-access-key"

任意:OPENAPI_IM_BASE または IM_BASE_URL。デフォルトは https://im.liblib.tv です。

追加の依存関係をインストールする必要はありません。Python 標準ライブラリのみを使用します。

使用方法

1. セッションの作成/メッセージの送信
# 创建新会话并发送「生一个动漫视频」
python3 {baseDir}/scripts/create_session.py "生一个动漫视频"

# 向已有会话发送消息
python3 {baseDir}/scripts/create_session.py "再生成一张风景图" --session-id SESSION_ID

# 只创建/绑定会话,不发消息
python3 {baseDir}/scripts/create_session.py
2. セッションの進行状況の確認
# 查询会话消息列表
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
3. プロジェクトの切り替え
# 切换当前 accessKey 绑定的项目(后续创建会话将使用新项目)
python3 {baseDir}/scripts/change_project.py
4. ファイルのアップロード

ユーザーから参照ファイルのアドレスが提供された場合はアップロードします。画像と動画のみ対応しており、ファイルサイズは200M未満である必要があります。

# 上传图片
python3 {baseDir}/scripts/upload_file.py /path/to/image.png

# 上传视频
python3 {baseDir}/scripts/upload_file.py /path/to/video.mp4
5. 結果のダウンロード

生成完了後、セッション内のすべての画像/動画をまとめてローカルにダウンロードできます。

# 从会话自动提取并下载所有结果
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

代表的なワークフロー

ユーザーの要望に応じて上記のスクリプトを適切に組み合わせるには、これらのワークフローを理解する必要があります。

シナリオ 1:ユーザーが画像/動画の生成を要求する(最も一般的)
1. create_session.py "用户的描述"  →  拿到 sessionId + projectUuid
2. 每隔 8 秒调用 query_session.py SESSION_ID --after-seq 0 轮询
3. 检查 messages:当出现 assistant 角色的消息且包含图片/视频 URL → 任务完成
4. 自动下载:download_results.py SESSION_ID --output-dir ~/Downloads/项目名 --prefix 有意义的前缀
5. 向用户展示:本地文件列表 + projectUrl(画布链接)

生成完了後は自動でダウンロードを実行し、ユーザーに追加で依頼してもらう必要はありません。ダウンロード先のディレクトリとプレフィックスは、タスクの内容に応じて自動で命名します(例:絵コンテには storyboard、キャラクター設定には character など)。

シナリオ 2:ユーザーが編集・変更を求める画像/動画を提供する(例:「紙の船をハートに置き換えて」)
1. upload_file.py /path/to/video.mp4  →  拿到 OSS URL
2. create_session.py "把四周的纸船都换成白色的纸爱心 参考视频:{oss_url}"
3. 后续同场景 1 的步骤 2-5

ユーザーがファイルパスと編集指示を提供した場合は、まずファイルをアップロードし、編集指示と OSS URL を一緒に送信します。

シナリオ 3:ユーザーが参照画像/動画を提供し、新しいコンテンツの生成を求める
1. upload_file.py /path/to/ref.png  →  拿到 OSS URL
2. create_session.py "根据参考图生成xxx,参考图:{oss_url}"
3. 后续同场景 1 的步骤 2-5
シナリオ 4:既存のセッションに新しい要望を追加する
1. create_session.py "新的描述" --session-id SESSION_ID
2. 后续同场景 1 的步骤 2-5
ポーリング戦略
  • 間隔:8 秒ごとに 1 回確認します
  • 差分取得:初回は --after-seq 0 を使用し、以降は前回取得した最大の seq 値を使用します
  • 完了の判定:messages に assistant メッセージがあり、content に結果 URL(画像/動画のアドレス)が含まれている
  • タイムアウト:3 分間連続でポーリングしても結果がない場合は、「生成に時間がかかっています。後ほどプロジェクトキャンバスのリンクからご確認いただけます」とユーザーに伝え、ポーリングを終了します
  • エラー時の再試行:1 回のクエリ失敗につき 1 回再試行できます。3 回連続で失敗した場合は停止し、ユーザーに伝えます

出力形式

create_session の戻り値:

{
  "projectUuid": "aa3ba04c5044477cb7a00a9e5bf3b4d0",
  "sessionId": "90f05e0c-...",
  "projectUrl": "https://www.liblib.tv/canvas?projectId=aa3ba04c5044477cb7a00a9e5bf3b4d0"
}

query_session の戻り値:

{
  "messages": [
    {"id": "msg-xxx", "role": "user", "content": "生一个动漫视频"},
    {"id": "msg-yyy", "role": "assistant", "content": "..."}
  ],
  "projectUrl": "https://www.liblib.tv/canvas?projectId=..."
}

(projectUrl は --project-id を渡した場合のみ存在します)

change_project の戻り値:

{
  "projectUuid": "新项目UUID",
  "projectUrl": "https://www.liblib.tv/canvas?projectId=新项目UUID"
}

upload_file の戻り値:

{
  "url": "https://libtv-res.liblib.art/claw/{projectUuid}/{uuid}.png"
}

download_results の戻り値:

{
  "output_dir": "/Users/xxx/Downloads/libtv_results",
  "downloaded": ["/Users/xxx/Downloads/libtv_results/01.png", "..."],
  "total": 9
}

ユーザーへの最終表示(OpenClaw)

  • 動画アドレス:query_session の戻り値に含まれる messages 内の assistant メッセージの content、または結果に含まれる動画/画像 URL(「返された結果」)を使用します。
  • プロジェクトアドレス:create_session の戻り値に含まれる projectUrl を使用するか、https://www.liblib.tv/canvas?projectId= + projectUuid を組み立てます。進行状況の確認時に --project-id PROJECT_UUID を渡すと、query_session が projectUrl を直接返すため、結果とあわせて表示できます。

タスクが完了したら、動画/画像の結果リンクと**プロジェクトキャンバスのリンク(projectUrl)**を両方提示します。 作業中は、**プロジェクトキャンバスのリンク(projectUrl)**を提示しないでください。

基本原則:ユーザー側では制作せず、伝達だけを行う

あなた(ユーザー側のエージェント)の役割は運び役であり、クリエイターではありません。バックエンドには、要望の理解、絵コンテへの分解、ワークフローの編成、モデルの選定、プロンプトの作成を担う専用エージェントがいます。あなたが行うのは次の 3 つだけです。

  1. アップロード:ユーザーからローカルファイルが提供されたら、upload_file.py で OSS URL を取得します
  2. 伝達:ユーザーの元の説明と OSS URL を、そのまま create_session.py に送信します
  3. 取得:結果をポーリングし、ローカルにダウンロードして、ユーザーに表示します

絶対にしてはいけないこと:

  • ユーザーのプロンプトを膨らませたり、推敲したり、翻訳したりしないでください(ユーザーが「絵コンテを考えて」と言ったら、そのまま「絵コンテを考えて」と伝えます。自分で先に絵コンテ表を作成し、項目ごとに送信してはいけません)
  • タスクの手順を自分で分解しないでください(例:「絵コンテ画像を 9 枚生成して」を 9 回の独立したリクエストに分ける)
  • ショットの説明、ストーリーの展開、スタイル分析を自分で編成しないでください
  • メッセージに自分で考えたプロンプトを追加しないでください(「超写実的なスタイル、映画のような照明、8K 解像度」などの描写語)

バックエンドのエージェントは、モデルの能力、パラメーター設定、プロンプトエンジニアリングにおいて、ユーザー側よりはるかに専門的です。ユーザー側が出しゃばると生成品質が下がるだけです。弱いモデルに変更するのは、さらに大きな問題です。

正しい例:

用户说:「帮我推演后续的故事,来个分镜大爆炸,帮我出一个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= + projectUuid
  • プロジェクトを切り替えると Redis キャッシュが更新され、次回の create_session では新しい projectUuid が使用されます
  • アップロードできるのは画像(image/)と動画(video/)のみです。それ以外の種類は拒否されます。ファイルサイズは 200MB 未満である必要があります
  • アップロードで返される OSS アドレスの形式は https://libtv-res.liblib.art/claw/{projectUuid}/{uuid}{ext} です
  • 生成中はユーザーに「生成中です」とだけ伝え、projectUrl を先に提示しないでください。タスク完了後に、**結果リンク(画像/動画 URL)とプロジェクトキャンバスのリンク(projectUrl)**をあわせて提示します

コメント