🎬

LTX-VideoがComfyUIで動かない — ノード非互換とtext encoderの罠(Mac Studio実測)

に公開

結論

Mac Studio(M1 Max / 64GB)に LTX-Video を ComfyUI で入れようとして、三段階で詰まりました。同じところで止まっている人向けに、最初に結論を置いておきます。

  • 存在しないバージョン番号を追いかけない。普通に手に入るのは v0.9.1 で、v0.9.7 を探しても落ちてこない。
  • ノードが赤くなるのは、ノードのバージョンだけの問題ではない。最新の ComfyUI-LTXVideo が新世代モデル前提に作り替えられていて、0.9.1 系とかみ合っていない。
  • size mismatch (256384 vs 32128) は text encoder の取り違え。LTX には専用の encoder が必要。

このどれも、原因が分かるまでは延々と時間を溶かすタイプの罠でした。順に書いていきます。

環境

  • Mac Studio M1 Max / メモリ 64GB
  • ComfyUI(Python 3.11)
  • 目的:LTX-Video をローカルで動かして I2V / T2V を試す

詰まり① 存在しないバージョンを追いかけた

最初の事故はダウンロードでした。新しそうだからと ltx-video-2b-v0.9.7.safetensors を落とそうとしたのですが、数バイトで終わる。中身を確認すると 15 バイトしかありません。

ls -lh ~/ComfyUI/models/checkpoints/
# ltx-video-2b-v0.9.7.safetensors  15B  ← 本来は数GBあるはず

数バイトで終わる safetensors は、回線でもサーバー混雑でもなく、ほぼ「URL が存在せずエラーページを掴んでいる」状態です。実際、追いかけていた v0.9.7 というファイル名はそもそも存在しておらず、探すだけ無駄でした。

公式(Lightricks/LTX-Video)から普通に手に入るのは ltx-video-2b-v0.9.1.safetensors(約 5.7GB)のほうです。

python3.11 -c "from huggingface_hub import hf_hub_download; hf_hub_download(repo_id='Lightricks/LTX-Video', filename='ltx-video-2b-v0.9.1.safetensors', local_dir='~/ComfyUI/models/checkpoints/LTX-Video')"

ダウンロードが数バイトで止まったら、回線を疑う前に「その URL とファイル名が本当に存在するか」を確認するのが早いです。

詰まり② ノードが赤くなる(LTXVSampler / LTXVEmptyLatentVideo)

正しい 0.9.1 を置いてワークフローを読み込むと、今度はノードが赤くなりました。

  • LTXVSampler
  • LTXVEmptyLatentVideo

最初は「ノードが古いのかな」と考えて、ComfyUI-LTXVideo を過去のコミットに戻してみました。

cd ~/ComfyUI/custom_nodes/ComfyUI-LTXVideo
git log --oneline -10
git checkout <古いコミットのハッシ>

ところが戻しても赤いまま。ここで「ノードのバージョン問題」という仮説が崩れます。

example_workflows を覗くと理由が見えました。

ls ~/ComfyUI/custom_nodes/ComfyUI-LTXVideo/example_workflows/

入っているサンプルが全部、新世代モデル前提のワークフローでした。つまり今インストールされている ComfyUI-LTXVideo は新世代モデル向けに作り替えられていて、0.9.1 系のノード構成とはもう一致していない、という状態です。少しコミットを戻したくらいでは追いつかない、構造的なズレでした。

詰まり③ size mismatch(256384 vs 32128)

ここが一番、同じエラーで検索して着地してほしいところです。text encoder を取り違えると、こういうエラーで落ちます。

RuntimeError: Error(s) in loading state_dict for T5:
size mismatch for shared.weight:
copying a param with shape torch.Size([256384, 4096]) from checkpoint,
the shape in current model is torch.Size([32128, 4096]).

原因は単純で、別のモデル用の text encoder を読ませていたことでした。

  • umt5_xxl(語彙 256384)→ Wan 系の動画モデル用
  • t5xxl_fp16(語彙 32128)→ LTX-Video が必要とするもの

256384 という数字が出たら「これは LTX 用ではない encoder を読ませている」とすぐ判断できます。LTX には標準の t5xxl_fp16.safetensors(約 9.7GB)を使います。

cd ~/ComfyUI/models/clip
curl -L "https://huggingface.co/comfyanonymous/flux_text_encoders/resolve/main/t5xxl_fp16.safetensors" -o t5xxl_fp16.safetensors

Wan と LTX のように複数の動画モデルを同じ ComfyUI に同居させていると、この encoder の取り違えは本当に起きやすいです。

LTXVLoader は存在しない。CheckpointLoaderSimple で読む

ワークフローを組み直す段で、もう一つ思い込みが崩れました。「LTX 専用のローダーノードがあるはず」と探したのですが、ありません。ComfyUI に問い合わせて確認したところ、実際に存在するのは周辺ノードだけでした。

curl http://127.0.0.1:8188/object_info 2>/dev/null | \
  python3 -c "import sys,json; d=json.load(sys.stdin); print([k for k in d.keys() if 'LTX' in k])"

LTXVLoader は無く、モデル本体は通常の CheckpointLoaderSimple で読むのが正解でした。

CheckpointLoaderSimple
  ├─ MODEL → KSampler
  ├─ CLIP  → CLIPTextEncode(positive / negative)
  └─ VAE   → VAEDecode

専用ローダーを探して迷子になるより、標準ノードで普通に組むほうが近道です。

まとめ

LTX-Video を Mac の ComfyUI に入れるときの落とし穴は、突き詰めると次の四つでした。

  • バージョン番号を推測しない。ダウンロードが数バイトで止まったら URL の存在を疑う。
  • ノードが赤いときは「ノードのバージョン」だけでなく「カスタムノード自体が別世代のモデル前提に変わっていないか」を疑う。
  • size mismatch (256384 vs 32128) は text encoder の取り違え。LTX は t5xxl_fp16 を使う。
  • LTXVLoader は存在しない。CheckpointLoaderSimple で読む。

正直に書くと、ここまでで原因の切り分けはできたものの、新世代モデルへ移行するか 0.9.1 系の環境を別途整えるかは、その後の運用判断になります。少なくとも上の四つを潰せば、エラーの正体に振り回される時間はだいぶ減るはずです。

関連

同じ Mac Silicon × ローカル動画 AI のシリーズで、こちらも書いています。

今回触れた text encoder の取り違え(umt5 と t5xxl)や、複数の動画モデルを同居させたときに起きる引数・接続まわりの事故は、Apple Silicon × ComfyUI の運用記録としてまとめた本にも収録しています。

Discussion