Krea 2's text encoder is Qwen3-VL-4B-Instruct, which has no thinking
mode. With thinking off, ComfyUI appends an empty think block and the
model often ends its turn at once, so Krea 2 Prompt from Image could
return no text. The five examples that caption with Qwen3-VL now keep it
on; the Krea notes explain it instead of blaming greedy sampling.
A native select draws its option list itself, so hovering a name gave
nothing to go on: you picked by filename alone. Load Image + Pad, Load
Video and the crop / rotate / pad editors now open a list that shows the
hovered picture, or plays the hovered clip muted with its size and
length, and filters as you type; arrow keys, Enter and Escape work.
The picker (js/shared/media_picker.mjs) only reads the combo widget's
options and writes the chosen value back, so saved workflows, undo and
the API are unchanged. Pure parts live in media_list.mjs with tests.
The mode only rewrites the seed after a queue, so the first queue after
switching from Fixed to Random reused the last seed and ComfyUI returned
the cached result. Entering Random now rolls a new seed right away, and
leaving Fixed for Step takes the first step; flipping Step's direction
leaves the number alone. Checked live on a CPU instance: a Fixed run used
12345, clicking Random showed a new seed, and the next run used it.
Adds a line before Install linking the Civitai workflows and X with a star
ask, a short For workflow creators section (Workflow Note, Image Compare,
Seed, Run Timer, Save Image) and its row in the Find a node table.
With the budget at 0 a large photo kept its full size, and on a 4 MP
canvas Krea 2 painted the new sky a shade darker, creased at the corners
and cut invented limbs at the old edge. A 16-run matrix on two sky
photos (VLM on/off, feather 64/96, full size vs 1.6 MP) and a budget
sweep put the cause on canvas size alone: 1.6 and 2 MP were clean, 2.5 MP
began to band and 1 MP went blotchy. The example now uses the 1.6 MP
budget the Klein outpaint already had; the note and thumbnail follow.
Video Crop + Rotate + Pad -> Frame had gained its four resize inputs as
required, so an API prompt saved before them stopped validating. They
are optional now; the widget order is unchanged.
tests/test_node_api.py loads the pack the way ComfyUI does and holds every
node to tests/fixtures/node_api.json: inputs and outputs may only be
appended, never renamed, reordered, removed or newly required. Its rule
tests need only the standard library and run in CI.
Load Video, Select Every Nth, Image Resize and Align Image turn the pier
clip into nine 768 x 1344 frames, and Save Image writes each with a
caption sidecar and size-and-counter names. No models.
The rowboat PNG's painted mask goes through Mask Refine, Crop For Inpaint,
LaMa Inpaint and Stitch Inpaint, with Compare against the source: the
first LaMa example that needs no other pack, only big-lama.pt.
The pier clip is cropped to a square on the Clip node, Frame Interpolate
doubles its frames with blend, and Save Video plays them at the source
rate for 2x slow motion; Select Frame and Compare check an in-between.
No models, and it runs in seconds on a CPU.
The three Crop + Rotate + Pad nodes now share one canvas row (Fill,
Feather in px, Resize) and an Open editor | Reset crop | Reset row, the
image and frame nodes report width and height, the frame node resizes,
and Load Image + Pad has a Reset padding button. Their pages still
described the old image quick row and outputs.
Help pages named the raw widget (divisible_by, max_frames, color_match)
where the card shows a label (Multiple, Limit, Tone match), so a reader
could not find the control. Each such control now reads as the visible
label with the widget name beside it, and option values show the text
on the segment (match a, hist, cover, guided).
Both badges floated above the right end of the title bar, the spot where
the frontend draws its own node-source badge, so turning them on hid one
behind the other. They sit above the left end now.
The tour's Select Every Nth sat at nth 1, doing nothing, because it could
not carry the frame rate. Load Video now decodes every frame and Select
Every Nth keeps every other one and hands the halved rate to Frame
Interpolate; the output is unchanged: three seconds, 72 frames at 24 fps.
The workflow contract now fails an example whose named widget values
disagree with the values it loads, whose id is not a random UUID, whose
saved zoom is too low to draw widget text, whose download info names a
file its loader does not select, or whose save node writes into a
folder.
The frontend saves each node's widget values twice, by position and by
name, and restores by name when its experimental Restore widget values
by name setting is on. Nine example nodes had a stale named copy: the
watermark example would have loaded a different source clip and trim
window, two MiniMax H3 samplers would have randomized their seed, and
three copies had the wrong keys. Each now mirrors its loaded values.
The 2.1.0 refresh reset Krea 2 Encode to its defaults when it wired the
prompt in, which switched VLM reference off; the example's own note, the
README and the patch's help page all describe the AnyPaint recipe with
it on. The node's tooltips and help page described only Registered
Outpaint; they now name both setups, as the card already did.
ausboss_pier_9x16.mp4 has no audio stream, so the node tour, LTX and
watermark setup cards now say Save Video keeps the source audio when the
clip has a track.
Drop cg-use-everywhere's ue_properties and ue_links/links_added_by_ue,
comfyui_mcp workflow ids and VideoHelperSuite's VHS_* settings. None of
these packs is part of the examples; extra.ds and the pack's own node
properties stay.
Fourteen examples saved a view scale between 0.41 and 0.51, under the
frontend's default level-of-detail cutoff (about 0.57), so they opened
with blank widget faces. Raise those to 0.6 and keep each offset, so the
view still starts at the graph's top-left corner.
These loaders were saved before on_missing existed, so their stored
[stack, separator, panel] values put the panel's "" into the on_missing
combo. Store the current order with the default "error".
Eleven examples saved the maintainer's local subfolders (Flux.2 Klein 9B/,
Krea 2/, LTX/, minimax-h3/, Upscale-Models/ ...), so the files the setup
cards link to showed up as "Value not in list". Every core loader now
selects the basename of its download URL, carries a matching
properties.models entry, and the Krea cards name the official
krea2_turbo_fp8_scaled.safetensors their link fetches.
The image and clip transform nodes could resize their output to a pixel
budget; the frame picker, whose single frame often feeds an image or
video model, could not. It takes the same appended resize inputs, off by
default, and its face and editor show them like the other two.
The image node had a feather on/off checkbox and no fill colour on its
face while the video nodes showed a fill swatch and a feather amount,
and only the image node had a full Reset. All three now show the same
canvas row (fill, feather in px, and the resize budget where the node
has one) and the same Open editor | Reset crop | Reset buttons.
Load Image + Pad, Image Resize, Align Image and the Clip node all hand
their width and height to the next node; Image Crop + Rotate + Pad and
Video Crop + Rotate + Pad → Frame did not, so sizing a latent from them
took an extra Image Size node. Both append width and height outputs.
A transport stream seeks to whichever packet precedes the target, not
to a keyframe, so after a seek the decoder dropped everything up to the
next keyframe: a trimmed load began late or, on a clip with a single
keyframe, found no frames at all, and the preview showed and reported
a later frame than the one asked for - frame 0 included, since a seek
to the stream's own start lands past its first keyframe.
decode_from checks the first frame out of a seek and, when it lands
after the target, seeks again from further back and from the top last.
Load Video, the clip decode and the frame previews all seek through it.