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 を置いてワークフローを読み込むと、今度はノードが赤くなりました。
LTXVSamplerLTXVEmptyLatentVideo
最初は「ノードが古いのかな」と考えて、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 の運用記録としてまとめた本にも収録しています。
- ComfyUI 実戦記録(Mac Studio): https://zenn.dev/kemmm/books/comfyui-mac-studio
Discussion