画像・動画生成

MacでLingBot-World V2を実行: 画像とカメラ経路から動画を作る

コミュニティのMac向け1.3B移植版で、カメラ移動を含むMP4を作ります。

LingBot-World V2は開始画像、カメラ操作経路、テキストprompt1を受け取り、続きの動画を生成します。Apple Silicon向け手順はPandacatAIのコミュニティ版PyTorch MPS2 forkを使い、1.3B DiT3と共通encoder・VAE4ファイルを準備してMP4を保存します。

実行条件と要点
  • 上流の1.3BパッケージはDiT重みのみのため、共通のT5・VAE・tokenizerファイルも準備します。
  • MLXは任意の8-bit text encoderだけに使い、動画生成本体はPyTorch MPSで動かします。

開始画像と操作経路から続きを生成します

LingBot-World V2は開始画像、カメラ移動を含む操作経路、場面promptを受け取り、後続フレーム5を生成するワールドモデルです。Mac経路ではApple Silicon上のPyTorch MPSが1.3B causal-fast DiTを実行し、結果をMP4として保存します。このガイドでは上流のCUDA6マルチGPU7方式ではなく、PandacatAIのApple Silicon forkを使います。

3つの入力のどれかを変えると生成場面も変わることがあります。最初はexamples/03の画像とカメラ経路をそのまま使い、promptを確認するとファイルとコマンドの接続を確かめやすくなります。

海岸沿いの道を走る自転車の人物を、開始画像と連続フレームで示している
開始画像とカメラ経路を固定すると、生成条件をそろえられます。

Mac用forkと依存関係を導入します

Apple Silicon MacとPython環境を準備します。以下ではHugging FaceからMPS forkのコードと設定を取得し、プロジェクトのrequirements.txtからCUDA専用のflash_attn行を除いて依存関係を導入します。macOSではこのパッケージをインストールしません。

MPS forkを導入
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -U pip huggingface_hub
hf download PandacatAI/lingbot-world-v2-mps --local-dir lingbot-world-v2-mps
cd lingbot-world-v2-mps
grep -v '^flash_attn$' requirements.txt > requirements-mps.txt
python -m pip install -r requirements-mps.txt
forkの依存関係から`flash_attn`を除いてmacOS環境を作ります。

requirements-mps.txtはCUDA packageを除いたローカル導入一覧です。hf: command not foundが出たら、有効な.venvでpython -m pip install -U huggingface_hubを実行してから取得を再開します。

1.3B DiTと共通encoder・VAEファイルをそろえます

1.3Bチェックポイント8には動画を生成するDiTの重みが入っています。プロンプトを処理するT5、動画を圧縮・復元するVAE、tokenizerもckptに用意します。以下は元のエンコーダと任意のMLX9 8-bitエンコーダを両方取得するため、保存容量に余裕を持たせてください。動画生成本体とVAEはPyTorch MPSで動きます。

checkpointファイルを取得
python -m pip install -U huggingface_hub
hf download robbyant/lingbot-world-v2-1.3b-causal-fast --local-dir ckpt/transformers
hf download Wan-AI/Wan2.1-T2V-14B Wan2.1_VAE.pth --local-dir ckpt
hf download google/umt5-xxl --local-dir ckpt/google/umt5-xxl
python -m pip install mlx
hf download PandacatAI/umt5-xxl-enc-mlx-q8 --local-dir ckpt/umt5-xxl-enc-mlx-q8
任意のMLX 8-bit encoderを使わない場合、最後の2行は省略します。

取得後、1.3B DiTがckpt/transformersにあり、Wan2.1_VAE.pthがckpt直下にあることを確認します。T5とtokenizerはckpt/google/umt5-xxlに置きます。8-bit encoderを導入した場合、自動選択にはckpt/umt5-xxl-enc-mlx-q8が必要です。元のbf1610 encoderを使う場合、生成コマンドに--t5_backend torchを追加します。

固定した例の入力からMP4を生成します

最初は例の画像とカメラ操作経路をそのまま使います。--frame_num 121で要求フレーム数を指定します。公開された同じ例では109フレームが保存されました。--size '480*832'は出力サイズ、--local_attn_size 18と--sink_size 6はcausal文脈を設定します。--save_fileで保存先を指定します。

MPSで例の動画を生成
mkdir -p output
python generate.py --task i2v-1.3B --size '480*832' --ckpt_dir ckpt --image examples/03/image.jpg --action_path examples/03 --frame_num 121 --local_attn_size 18 --sink_size 6 --prompt 'A serene lakeside scene with a lone tree standing in calm water, surrounded by distant snow-capped mountains under a bright blue sky with drifting white clouds, gentle ripples reflect the tree and sky, creating a tranquil, meditative atmosphere.' --save_file output/lingbot-mps-demo.mp4
生成が終わったら`output/lingbot-mps-demo.mp4`を再生して確認します。

完了メッセージに保存先が表示され、指定したMP4が作成されます。見つからない場合は、lingbot-world-v2-mpsを基準にckpt_dirと画像・操作pathが正しいか確認し、ckpt/transformersと共通T5/VAE directoryを調べます。

木の机に大きさの異なるフィルムリール3個と風景のコンタクトプリントが置かれています。
フレーム数を増やすと、保存される動画の長さと生成時間も増えます。

公開Mac記録は条件と一緒に読みます

Mac向けforkの公開例では、短い動画の生成にも分単位の待ち時間がかかります。まずこの例の出力サイズとフレーム数で試すと、長い動画へ進む前に待ち時間とメモリ使用量を確かめられます。

M4 Pro 48GBの公開基準実行
項目結果
出力480×832・109フレーム・16fps
全体の生成時間14.4分
プロセスメモリのピーク16.1GB

M4 Pro 48GB・PyTorch MPS・1.3B causal-fast・MLX 8-bit text encoder・prompt cache hit・要求121/保存109フレーム・conditioning encode最適化前の測定。

その後、入力画像を処理するconditioning encodeが最適化されました。361フレーム要求の同一プロセス比較では、この段階が1,048.6秒から349.6秒に短縮しました。下表は変更前の全体生成記録です。現行版では取得と初期化が終わってからMP4が保存されるまでを計測してください。

入力pathとライセンスを確認します

PythonがMPSを検出しない場合、有効な環境でpython -c 'import torch; print(torch.backends.mps.is_available())'を実行します。TrueでなければApple Silicon向けPyTorch11の導入を確認します。checkpoint pathエラーではckpt/transformers、ckpt/Wan2.1_VAE.pth、ckpt/google/umt5-xxlを確認します。MP4を再生できない場合は完了ログとoutput/lingbot-mps-demo.mp4のファイルサイズを調べます。

元のLingBot-World V2とApple Silicon forkにはCC BY-NC-SA 4.0が適用されます。非営利利用、表示、改変物への同一ライセンス適用が必要です。再配布や派生物を予定する場合はライセンス全文を読み、モデルやデータごとの条件も確認してください。NVIDIAの実行条件はCosmos 3 Edgeガイドをご覧ください。

高さの異なるメモリブロックの横に小型デスクトップPCが2台置かれている
小型Macでも実行時の統合メモリ余裕を判断材料に含めます。

用語の注釈

  1. プロンプト — モデルに送る入力文です。生成モデルでは作りたい結果を説明する文になり、出力の構成や内容を大きく左右します。

    本文に戻る
  2. PyTorch MPS — PyTorchでApple GPUへ計算を送るバックエンドです。必要な演算やモデルがMPSに対応しているか確認します。

    本文に戻る
  3. DiT — Diffusion Transformerの略です。Transformer構造を使い、拡散過程でノイズを含む表現を段階的に整えるモデル構造です。

    本文に戻る
  4. VAE — Variational Autoencoderの略です。入力を圧縮した潜在表現に変換したり、その表現から出力を復元したりします。

    本文に戻る
  5. フレーム — 動画を構成する1枚の画像です。

    本文に戻る
  6. CUDA — NVIDIA GPUで汎用計算を行うソフトウェア基盤です。

    本文に戻る
  7. GPU — 多くの計算を並列に処理するプロセッサーです。AIモデルの実行ではモデル計算を担います。

    本文に戻る
  8. チェックポイント — 学習済みモデルの重みなどを保存したファイルです。同じモデル系列でも、版や用途によって異なるチェックポイントを使うことがあります。

    本文に戻る
  9. MLX — Appleが開発する機械学習フレームワークで、Apple SiliconのCPUとGPUが共有するメモリを使ってモデルを実行します。

    本文に戻る
  10. BF16 — モデルの数値に使う16ビット浮動小数点形式です。指数部はFP32と同じ幅で、同程度に広い値の範囲を表せます。

    本文に戻る
  11. PyTorch — AIモデルを作成・実行するソフトウェアフレームワークです。モデルと合わせて、対応するPyTorchの版やハードウェアも確認します。

    本文に戻る

よくある質問

この記事で最初に確認すべきことは何ですか?
LingBot-World V2は開始画像、カメラ操作経路、テキストpromptを受け取り、続きの動画を生成します。Apple Silicon向け手順はPandacatAIのコミュニティ版PyTorch MPS forkを使い、1.3B DiTと共通encoder・VAEファイルを準備してMP4を保存します。
必要なメモリはどのくらいですか?
Mac向けforkの公開例では、短い動画の生成にも分単位の待ち時間がかかります。まずこの例の出力サイズとフレーム数で試すと、長い動画へ進む前に待ち時間とメモリ使用量を確かめられます。
条件と出典はどこで確認できますか?
元のLingBot-World V2とApple Silicon forkにはCC BY-NC-SA 4.0が適用されます。非営利利用、表示、改変物への同一ライセンス適用が必要です。再配布や派生物を予定する場合は[ライセンス全文](https://github.com/robbyant/lingbot-world-v2/blob/main/LICENSE.txt)を読み、モデルやデータごとの条件も確認してください。NVIDIAの実行条件は[Cosmos 3 Edgeガイド](/guides/cosmos-3-edge-local-world-model-guide)をご覧ください。