ComfyUI + Mochi 1 をローカルで動かしてみた

# ComfyUI + Mochi 1

Mochi 1 を使ってみたので, 手順と感想など

## 動作環境

- OS: Ubuntu Server 22.04.5 LTS
  - NVIDIA ドライバ: nvidia-driver-565-server
- CPU: AMD Ryzen 3700X
- RAM: DDR4 64GB
- GPU: NVIDIA RTX 3090 FE

## 環境構築

参考文献: https://highreso.jp/edgehub/moviegenerationai/mochi1.html

### ComfyUI のインストール

公式ドキュメント: https://github.com/comfyanonymous/ComfyUI

1. リポジトリを clone

   ```sh
   git clone https://github.com/comfyanonymous/ComfyUI.git
   ```

2. pip インストール

   ```sh
   pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu124
   pip install -r requirements.txt

   # 注: Mochi のカスタムノード import に失敗したため, 以下を追加
   pip install opencv-python imageio-ffmpeg
   ```

3. Mochi のカスタムノードをインストール

   ```sh
   cd /path/to/ComfyUI/custom_nodes/
   git clone https://github.com/kijai/ComfyUI-MochiWrapper.git
   git clone https://github.com/kijai/ComfyUI-KJNodes.git
   git clone https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite.git
   ```

4. 適当な CLIP ファイルをダウンロードして配置

   ```sh
   cd /path/to/ComfyUI/models/clip/
   wget https://huggingface.co/comfyanonymous/flux_text_encoders/blob/main/t5xxl_fp8_e4m3fn.safetensors
   ```

5. Mochi-1 のワークフローファイル (json) をダウンロードして, 適当な場所に置いておく (後で WebUI を通じてアップロードする)

   https://openart.ai/workflows/datou/mochi-1-t2v/IL31UAdoK45d4VBi43F9

   ![](mochi-workflow.png)
   ![mochi-workflow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191898/5fa11638-db0f-ab30-0a2d-4a2e16d40753.png)

6. ComfyUI 起動

   ```sh
   python main.py --listen
   ```

7. ワークフローファイルをドラッグ&ドロップ

8. CLIP Node の `clip_name` をクリックして `t5xxl_fp8_e4m3fn.safetensors` を指定

   ![](clip_node.png)
   ![clip_node.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191898/481bca4d-c6da-a66d-c35e-92836ead7776.png)

9. 実行

   ![](comfyui-execution.png)
   ![comfyui-execution.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191898/9ee1d4e1-8a4a-475f-9ac4-ee5d9d8d4780.png)

   以下のエラーが出た.

   ```
   TypeError: object of type 'float' has no len()
   ```

   [Issue](https://github.com/kijai/ComfyUI-MochiWrapper/issues/88) によると MochiSampler Node を作りなおす必要があるとのこと.

   (何もないところで右クリック) > Add Node > MochiWrapper > Mochi Sampler で新しく Node を作成し, 既存のものと同じ構造になるようにエッジをつなぎなおす.

   ![](mochi-sampler.png)
   ![mochi-sampler.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191898/56f2fb72-4f33-43c1-e3c3-1a93a4f70bdd.png)

   ※最終的な Workflow は以下のようになった.

   ![](mochi-workflow-edited.png)
   ![mochi-workflow-edited.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191898/79404128-b1d2-aece-2b61-0cc115412f08.png)

### 実行結果

一つの動画を生成するのにおよそ 10 分程度かかった.

※GIF アニメーション画像に変換している過程で, 色が 256 色になってしまっています.
(Qiita mp4 サポートしてくれ…)

#### Example 1

```
A cute girl is dancing
```

![Mochi_preview_00018.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191898/8c4f3c7a-ac76-fc64-1169-3ab7bb8d2563.gif)

#### Example 2

```
A woman is singing
```

![Mochi_preview_00019.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191898/1977de78-b601-568a-4b4e-1d9a4635b8ad.gif)

#### Example 3

```
A site engineer monitoring different aspects of a construction project
```

![Mochi_preview_00014.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191898/f7f39045-da9b-02fa-38ea-bebc588cb7d0.gif)

#### Example 4

```
A voyager conveying his canoe from the Athabasca river bank to Ottawa in Canada
```

![Mochi_preview_00013.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191898/432313f7-6198-950d-6aa8-b46d52c6f859.gif)

#### Example 5

```
A cat and a dog fighting outdoors.
```

![Mochi_preview_00008.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191898/6a1421b6-b9c5-8bef-4925-4c8943f87bf6.gif)

#### Example 6

```
A serene, mystical landscape of a bygone era, where towering, ancient trees stretch towards the sky, their canopies a vibrant tapestry of greens, sheltering a vast, sun-drenched plain teeming with life. In the foreground, a gentle Diplodocus roams, its long neck bending as it grazes on the lush, emerald grass, its massive body a testament to the wonders of a long-lost world. Nearby, a pair of majestic Dynasaries, their scales glinting in the soft, ethereal light, move quietly, their eyes watchful, yet peaceful, as they too feed on the abundant flora. The air is alive with the songs of ancient birds, and the sweet scent of blooming wildflowers wafts on the breeze, transporting us to a time when magic was woven into the very fabric of existence.
```

![Mochi_preview_00010.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191898/1dd57515-2e9c-7a81-b74c-c8ac4fa7e9a9.gif)

## 感想

- AnimateDiff と比べて, 挙動がリアルに (体の動きに対する服や髪の動きなど)
- 動画の途中で人物がだんだんかわってしまう問題も解決している!?
- 欠点は生成に少々時間がかかること.