mcpField
A
aliyun-wan-animate-move

aliyun-wan-animate-move

github.com/cinienceクリエイティブ・メディア39657 回インストール11 週間前に更新
リポジトリ

aliyun-wan-animate-move について

DashScope の非同期 API で、参照動画の動作や表情を人物画像に反映して動画を生成するスキルです。静止画の人物を動かすクリエイティブな制作に利用できます。

主な機能

  1. 01参照動画の動きを人物画像に転写
  2. 02wan-std と wan-pro のモードに対応
  3. 03非同期タスクの送信と状態確認
  4. 04生成動画の URL 取得

活用シーン

  1. 01人物画像から動きのあるアニメーションを作成
  2. 02参照動画の表情をキャラクターに反映
  3. 03標準またはプロモードで動画を生成

インストール

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

$npx skills add https://github.com/cinience/alicloud-skills --skill aliyun-wan-animate-move

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

同梱ファイル

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

references/
api_reference.md
sources.md
scripts/
generate_animate_move.py

詳細

Wan 2.2 Animate Move(画像からモーションへ)

検証

mkdir -p output/aliyun-wan-animate-move
python -m py_compile skills/ai/video/aliyun-wan-animate-move/scripts/generate_animate_move.py && echo "py_compile_ok" > output/aliyun-wan-animate-move/validate.txt

合格条件:コマンドが終了コード 0 で終了し、output/aliyun-wan-animate-move/validate.txt が生成されること。

出力とエビデンス

  • タスク ID、ポーリング応答、最終的な動画 URL を output/aliyun-wan-animate-move/ に保存します。
  • トラブルシューティング用に、エンドツーエンドの実行ログを少なくとも 1 つ保持します。

前提条件

  • SDK をインストールします(venv の使用を推奨):
python3 -m venv .venv
. .venv/bin/activate
python -m pip install requests
  • 環境変数に DASHSCOPE_API_KEY を設定するか、~/.alibabacloud/credentials に dashscope_api_key を追加します。

重要なモデル名

  • wan2.2-animate-move -- 参照動画からキャラクター画像へのモーション転送に対応します

機能

機能説明必須の入力
モーション転送参照動画の動作や表情をキャラクター画像に転送しますimage_url + video_url

サービスモード

モード説明
wan-std標準モード。生成が速く、コスト効率に優れており、プレビューや基本的なアニメーションに適しています
wan-proプロフェッショナルモード。アニメーションがより滑らかで品質に優れていますが、処理時間が長くなります

API エンドポイント(非同期のみ)

POST https://dashscope.aliyuncs.com/api/v1/services/aigc/image2video/video-synthesis

必須ヘッダー:

  • Authorization: Bearer $DASHSCOPE_API_KEY
  • Content-Type: application/json
  • X-DashScope-Async: enable

シンガポールのエンドポイント:dashscope.aliyuncs.com を dashscope-intl.aliyuncs.com に置き換えます。

正規化されたインターフェース

リクエスト
  • image_url(文字列、必須)-- キャラクター画像のパブリック HTTP/HTTPS URL
  • video_url(文字列、必須)-- 参照モーション動画のパブリック HTTP/HTTPS URL
  • watermark(ブール値、任意)-- 透かしを追加するかどうか(デフォルト:false)
  • mode(文字列、必須)-- wan-std または wan-pro
  • check_image(ブール値、任意)-- 画像検出を実行するかどうか(デフォルト:true)
画像入力の制限
  • 形式:JPG、JPEG、PNG、BMP、WEBP
  • 解像度:1 辺あたり [200, 4096] ピクセル
  • アスペクト比:1:3 ~ 3:1
  • 最大サイズ:5MB
  • 内容:人物 1 人、カメラ正面向き、顔全体が見えていること、フレーム内で適度な大きさであること
動画入力の制限
  • 形式:MP4、AVI、MOV
  • 長さ:2~30 秒
  • 解像度:1 辺あたり [200, 2048] ピクセル
  • アスペクト比:1:3 ~ 3:1
  • 最大サイズ:200MB
  • 内容:人物 1 人、カメラ正面向き、顔全体が見えていること、フレーム内で適度な大きさであること
応答(タスク作成)
  • output.task_id(文字列)-- ポーリングに使用します。有効期間は 24 時間です
  • output.task_status(文字列)-- PENDING | RUNNING | SUCCEEDED | FAILED | CANCELED | UNKNOWN
  • request_id(文字列)
応答(タスク結果)
  • output.video_url(文字列)-- 生成された動画の URL
  • usage.video_count(整数)
  • usage.video_duration(整数)-- 秒単位の長さ

クイックスタート(Python + HTTP)

import os
import json
import time
import requests

API_KEY = os.getenv("DASHSCOPE_API_KEY")
BASE_URL = "https://dashscope.aliyuncs.com/api/v1"

def create_animate_move_task(image_url: str, video_url: str, mode: str = "wan-std") -> str:
    """Create an animate-move task and return task_id."""
    payload = {
        "model": "wan2.2-animate-move",
        "input": {
            "image_url": image_url,
            "video_url": video_url,
            "watermark": False,
        },
        "parameters": {
            "mode": mode,
        },
    }
    resp = requests.post(
        f"{BASE_URL}/services/aigc/image2video/video-synthesis",
        headers={
            "Authorization": f"Bearer {API_KEY}",
            "Content-Type": "application/json",
            "X-DashScope-Async": "enable",
        },
        json=payload,
    )
    resp.raise_for_status()
    data = resp.json()
    return data["output"]["task_id"]


def poll_task(task_id: str, interval: int = 15) -> dict:
    """Poll until task completes. Returns final response."""
    while True:
        resp = requests.get(
            f"{BASE_URL}/tasks/{task_id}",
            headers={"Authorization": f"Bearer {API_KEY}"},
        )
        resp.raise_for_status()
        data = resp.json()
        status = data["output"]["task_status"]
        if status in ("SUCCEEDED", "FAILED", "CANCELED"):
            return data
        time.sleep(interval)

エラー処理

エラー考えられる原因対処方法
401/403DASHSCOPE_API_KEY がないか、無効です環境変数または認証情報ファイルを確認します
400 InvalidParameterサポートされていない画像/動画形式、不正な寸法、必須フィールドの欠落パラメーターを検証します
"does not support synchronous calls"X-DashScope-Async: enable ヘッダーがありません必須ヘッダーを追加します
429レート制限またはクォータバックオフを入れて再試行します

出力先

  • デフォルトの出力先:output/aliyun-wan-animate-move/videos/
  • OUTPUT_DIR でベースディレクトリを変更できます。

避けるべきパターン

  • wan2.2-animate-move 以外のモデル名は使用しないでください。
  • この API を同期的に呼び出さないでください -- 非同期ヘッダーが必須です。
  • 画像や動画に複数の人物を含めないでください -- 人物は 1 人のみです。
  • 動画 URL は 24 時間後に期限切れになります。すぐにダウンロードして保存してください。
  • 顔が隠れている画像や、極端な比率の画像は使用しないでください。

ワークフロー

  1. ユーザーの意図を確認します:参照動画からキャラクター画像へモーションを転送します。
  2. サービスモードを選択します:wan-std(高速/低コスト)または wan-pro(高品質)。
  3. 有効な形式と寸法の画像 URL と動画 URL を用意します。
  4. 非同期タスクを作成し、結果をポーリングします。
  5. URL の有効期限が切れる前に、生成された動画をダウンロードして保存します。

参考資料

  • HTTP API の詳細については、references/api_reference.md を参照してください。
  • ソースリンクについては、references/sources.md を参照してください。

コメント