Comfy-Org / Comfy-Org/comfy-cli

UI→API conversion assigns the wrong widget value when a node has a multi-type input

Open
#790 1 comment 0 reactions 0 assignees View on GitHub
bug
Dominant language
Python
Stars
968
Forks
151
Avg merge
1d 9h
Merged PRs (30d)
77

Description

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]
}
}

Actualcomfy --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



  1. Open the built-in template Text to Video (LTX-2.5) in the ComfyUI frontend
    and save it (canvas format).

  2. Run comfy --json run --workflow <saved.json> --print-prompt.

  3. Inspect the LTXVEmptyLatentAudio node in the printed graph:
    batch_size is 25 instead of 1.

  4. comfy run on the same file fails with the RuntimeError above.
    Pressing Run in the browser succeeds, and so does passing the frontend's
    Export (API) output to comfy 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.

Contributor guide

Open the contributing guide

Research direction

Reproduce the issue with the saved canvas workflow using `comfy --json run --workflow --print-prompt`, then inspect the UI-to-API conversion path and the `LTXVEmptyLatentAudio` inputs in `comfy_extras/nodes_lt_audio.py`. Compare the generated graph with ComfyUI's Export (API) output and verify that multi-type inputs no longer shift later widget values, while the validation warning is addressed if it shares the same type-handling path.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
cli
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
68/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.