The test host unpacked two values from load_media, and the gallery
test expected no stored selection although the gallery now stores the
folder it shows. Return and assert the folder instead.
- The Nodes 2.0 context menu converts litegraph items itself and only
renders submenu.options for entries flagged has_submenu, so the
"Custom Colors" entry was an inert label there; litegraph's own menu
accepts either flag, so set both
- Add a real-host test that drives the actual right-click menu in both
renderers through to the color dialog; the existing test invoked the
callbacks directly and bypassed the converter
- Assert has_submenu on the node and group entries in the browser suite
- New nodes started at a fixed 340×600, so one-entry size lists left a
large empty area between the list and the Swap button.
- The panel now reports its measured content height as both the minimum
and maximum DOM-widget height, and the extension sets the node height to
the host's computeSize() after every render, keeping the width.
- Hidden or detached panels are not measured, the first measurement is
retried for a few frames, and a ResizeObserver on the panel children
refits when the stylesheet arrives after the first render (the coverage
run exposed that race; a held-stylesheet regression test pins it).
- Workflows load at their saved width and are re-fitted on load; the spec
and docs describe the new sizing rule.
- workflows saved before the resolution widget load shifted by one slot
- onConfigure now maps exactly four widgets_values onto model, width,
height and batch_size and resets resolution to custom
- the host test stub applies widgets_values and calls onConfigure like LiteGraph
- family_labels() and the combo default now read the merged table, so an
appended family is selectable and a removed one is not offered
- an alias used as the override default is normalised to its label
- the frontend rebuilds the model options from the payload and keeps a
saved family that is no longer listed so old workflows still show it
- Set resolution to custom whenever the panel has no selection (wired,
failed, non-finite or loading) so a stale label cannot override width/height.
- Compute label megapixels with 1 MP = 1,048,576 px, matching the panel
header, with half-up rounding so Python and JS labels agree on ties.
- Add a native resolution COMBO (shipped sizes only) so a size can be picked
and saved in the workflow without the panel; custom or unparseable labels
fall back to width/height on both sides.
- Mirror the dropdown with the chips: options follow the active chip, the
value tracks the current size, and picking a label writes width/height.
- Draw a decorative ratio shape on each ratio chip and show the first
families warning in the status line.
- VALIDATE_INPUTS lets unknown family labels reach create()
- no size is listed under two chips; SD 1.5 3:4 gets true 3:4 sizes
- model change before the families payload loads is applied on load
- custom ratio: clear error on chip click, cap sides at 8192, accept X
- real-host assertions for model change and wired-in state
- render the static chip list in every state; payload only drives enabled/active
- re-derive size on model change via sizeOnModelChange
- validate custom ratio, keep last valid list, ignore repeated commits
- add swap, model change, custom ratio and route failure browser tests
- add coverage floors for the three picker files
- restore keyboard focus to the equivalent button after each render
- keep the accent background when hovering a pressed chip or size
- refresh the panel when input links change
- treat a size listed in the clicked chip as a no-op
- add resolution picker view with chip grid, size list and custom ratio input
- add extension that projects native widgets and writes sizes via callbacks
- add browser tests for rendering, theming, idempotent mount and disposal