UI→API conversion assigns the wrong widget value when a node has a multi-type input
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
調査の方向性
保存したキャンバスワークフローを comfy --json run --workflow <saved.json> --print-prompt で使って問題を再現し、その後、UI-to-API 変換経路と comfy_extras/nodes_lt_audio.py の LTXVEmptyLatentAudio の入力を調べます。生成されたグラフを ComfyUI の Export (API) 出力と比較し、複数の型を持つ入力によって後続のウィジェット値がずれなくなっていることを確認し、バリデーション警告が同じ型処理経路を共有している場合はその警告にも対処します。
索引モデルが issue の本文から書いたものです。
説明
UI→API conversion assigns the wrong widget value when a node has a multi-type input
Environment
| comfy-cli | 1.18.0 |
| ComfyUI | 0.33.1 (Windows portable, python_embeded) |
| Python | 3.10.11 |
| OS / GPU | Windows, RTX 4090 |
| Workflow | ComfyUI built-in template Text to Video (LTX-2.5) |
Summary
When lowering a UI-format (canvas) workflow to API format, comfy-cli mis-assigns
widgets_values for nodes whose schema contains a multi-type input
(io.MultiType.Input, surfaced as a FLOAT,INT type). The multi-type input appears
to be skipped when building the ordered list of widget-capable inputs, so every
widget declared after it receives the value belonging to the previous one.
The result is a silently wrong graph that validates clean and then fails at runtime.
Concrete case
LTXVEmptyLatentAudio (comfy_extras/nodes_lt_audio.py) declares its inputs in this order:
frames_number : Int
frame_rate : MultiType(Float, [Int]) <-- multi-type
batch_size : Int
audio_vae : Vae
The frontend stores "widgets_values": [97, 25, 1]
(frames_number=97, frame_rate=25, batch_size=1).
In this workflow frames_number and frame_rate are both driven by links;
only batch_size uses its widget value.
Expected — ComfyUI's own Workflow > Export (API):
"405:366": {
"class_type": "LTXVEmptyLatentAudio",
"inputs": {
"frames_number": ["405:378", 1],
"frame_rate": ["405:359", 1],
"batch_size": 1,
"audio_vae": ["405:386", 0]
}
}
Actual — comfy --json run --workflow <canvas.json> --print-prompt:
"405:366": {
"class_type": "LTXVEmptyLatentAudio",
"inputs": {
"batch_size": 25,
"frames_number": ["405:378", 1],
"frame_rate": ["405:359", 1],
"audio_vae": ["405:386", 0]
}
}
batch_size receives 25, which is frame_rate's widget value.
The sibling node EmptyLTXVLatentVideo in the same graph — width, height,
length, batch_size, all plain Int, the first three linked — converts
correctly ("batch_size": 1). The only structural difference between the two
nodes is the multi-type input.
Consequence
The audio latent is built with batch size 25 while the video latent has batch size 1, and execution dies when the two are packed together:
node 405:344 SamplerCustomAdvanced RuntimeError: Sizes of tensors must match except in dimension 2. Expected size 1 but got size 25 for tensor number 1 in the list.
comfy/samplers.py:1282 in sample -> pack_latents(latent_image.unbind())
comfy/utils.py:1381 in pack_latents -> torch.cat(tensors, dim=-1)
Steps to reproduce
- Open the built-in template Text to Video (LTX-2.5) in the ComfyUI frontend and save it (canvas format).
- Run
comfy --json run --workflow <saved.json> --print-prompt. - Inspect the
LTXVEmptyLatentAudionode in the printed graph:batch_sizeis25instead of1. comfy runon the same file fails with the RuntimeError above. Pressing Run in the browser succeeds, and so does passing the frontend'sExport (API)output tocomfy run.
Possibly related
comfy workflow validate on the same graph reports, for the same field:
node 405:366, field frame_rate, code edge_type_mismatch
input 'frame_rate' expects FLOAT,INT but ComfyMathExpression[1] produces INT
INT is within the accepted set, so this warning is itself a false positive —
which suggests multi-type inputs are not fully modelled in the type-checking
layer either, not only in the widget-mapping path.
Workaround
Export the workflow with ComfyUI's Workflow > Export (API) and pass that file
to comfy-cli instead of the canvas-format file.
- 主要言語
- Python
- スター
- 1k
- フォーク
- 176
- 平均マージ
- 1日 11時間
- マージ済み PR(30日)
- 87
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
Comfy-Org/comfy-cli のほかの issue
-
test_file_utils umask tests assert against a umask the code never reads (import-time _UMASK), so they only pass on a 0o022 host対応中かも @neverbiasu が 10 日前に担当しました。 オープンbug
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 86/100
Comfy-Org/comfy-cli#907 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
bug
難易度 1/5 1時間未満 初心者へのやさしさ 92/100
Comfy-Org/comfy-cli#781 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
`comfy launch --background` fails with FileNotFoundError when comfy-cli is invoked by path対応中かも @RaphaelFakhri が 42 日前に担当しました。 オープンbug
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
Comfy-Org/comfy-cli#691 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
Comfy-Org/comfy-cli#670 · コメント 2 件 ·
メンテナーはふだん 1 日以内に返信
Comfy-Org/comfy-cli の issue をすべて見る
似ている issue
-
add entry to blockオープン
難易度 1/5 1時間未満 初心者へのやさしさ 65/100
StevenBlack/hosts#3299 ·
-
`garak --report` overwrites the input report when its name has no ".report"対応中かも @0z5a が今日担当しました。 オープンneeds-triage
難易度 2/5 半日 初心者へのやさしさ 72/100
メンテナーはふだん 2 日以内に返信
-
plot_graph crashes when a mesh node has no m2m edge対応中かも @tygvi が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
mllam/neural-lam#883 · コメント 1 件 ·
メンテナーはふだん 2 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
future-agi/future-agi#4092 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
transcript analytics: a text whose only protected spans the prose pass redacts is withheld wholeオープン
難易度 1/5 1時間未満 初心者へのやさしさ 82/100
WingedGuardian/GENesis-AGI#4641 ·
メンテナーはふだん 1 日以内に返信