ComfyUIのワークフローをやめた——Claude Codeに話しかけるだけで動画が生成できた
はじめに
前回の記事で、WAN 2.2を使ってAnimaの静止画を動画にするところまで書いた。
ワークフローを組んで、画像を読み込んで、キューに投げて、50分待つ。それ自体は動いた。
ただ、毎回ワークフローを手で操作するのが面倒だと感じていた。パラメータを変えたいとき、別の画像を試したいとき、そのたびにComfyUIのGUIを操作する必要がある。
Pythonスクリプトで自動化できないか。
画像生成の方はすでにPython + ComfyUI APIで動いている。同じことを動画でもやる。Claude Codeに指示を出すだけでスクリプトができて、実際に動くまでの話を書く。
ComfyUI APIとは
ComfyUIにはHTTP APIが内蔵されている。GUIで「Queue Prompt」ボタンを押す操作は、内部的にはPOSTリクエストを `/prompt` に投げているだけだ。
Pythonから同じリクエストを送れば、GUIを操作せずに生成を走らせられる。
基本の流れはシンプルだ。
`POST /upload/image` — 入力画像をComfyUIにアップロード
`POST /prompt` — ワークフローJSON + パラメータを送信
`GET /history/{prompt_id}` — 完了を確認(ポーリング)
`GET /view` — 生成された動画ファイルを取得・保存
Claude Codeへの指示だけでスクリプトが生成された
画像生成用の既存スクリプト構成(`comfy_base.py`)を参考に渡して、動画生成版を作るよう指示した。
出てきたのが `wan_base.py`(コア処理)と `wan_test.py`(実行スクリプト)の2ファイル構成だ。
image_gen/wan_video/
├── wan_base.py # ComfyUI APIとのやり取り、ワークフロー定義
└── wan_test.py # テスト実行(入力画像・プロンプト・出力先の指定)`wan_base.py` の中で定義しているワークフロー構成は、前回記事で使ったものと同じだ。
UNETLoader、CLIPLoader、VAELoader(モデル読み込み)
CLIPTextEncode × 2(プロンプト処理)
LoadImage + Wan22ImageToVideoLatent(画像→潜在空間)
KSampler(生成)
VAEDecode + SaveAnimatedWEBP(出力)
これをPythonの辞書として定義してAPIに投げるだけだ。
デバッグ:2つのつまずきポイント
動かすまでに2つ問題があった。正直に書く。
1. ポートが8000じゃなかった
ComfyUIの設定では8000番ポートを指定していたが、実際のアクセス先は8001になっていた。
原因はComfyUIが2重起動していたこと。先に起動していたプロセスが8000を押さえていて、後から起動したプロセスが自動的に8001にフォールバックしていた。
起動ログに `To see the GUI go to: http://127.0.0.1:8001` と出ていたので気づけた。重複プロセスを終了させて再起動したら8000に戻った。
2. electronアプリのログ処理との競合
KSamplerが実行されると、内部でtqdmがプログレスバーを`\r`文字でstderrに書き出す。これがComfyUI Managerのstderrパッチ処理を経由して、electronアプリのloggerに渡るときに `[Errno 22] Invalid argument` で落ちる。
ComfyUIのGUI上から動かすと問題ないのに、APIから呼ぶと落ちる理由がこれだ。GUIから実行するときはWebSocket経由でプログレスが送られるためtqdmが抑制されるが、外部APIからだとtqdmが動いてしまう。
修正はシンプルだった。ComfyUI Managerの `prestartup_script.py` 内の該当箇所に `try/except OSError: pass` を追加するだけ。エラーを無視して処理を続けるようにした。
ここから先は
¥ 300
この記事が気に入ったらチップで応援してみませんか?
