- A switch wired from a node the graph cannot read and off at run time
marks the node's run key, so an earlier run's tracker entry never
links this run's images.
- The scan reports such files as not_saved_wired ("only the run itself
can link it") instead of not_saved.
- Workflow-only metadata ignores muted and bypassed PromptManager nodes
and reads nodes inside subgraph definitions.
- The Focused, Split and Pair footer says when the switch comes from a
link.
Every PromptManager node (Classic, Text, Focused, Split, Pair) gets an
optional save_to_library BOOLEAN, default on and declared last. Off, the
node still returns its normal outputs but PromptManager ignores the run:
- the node saves, counts, tracks and records nothing;
- the queue hook reads the switch from the queued graph (literal, or a
linked PrimitiveBoolean), so a cached node is not counted either; a
switch wired from an unreadable node is left to the node itself;
- an opted-out node is no run prompt, so no tracker entry, run key,
embedded-metadata match or history attribution links its images, and
a run with any opted-out positive node links none of its files;
- the scan reports such files as not_saved (never stored or queued for
Needs review), and a file whose only opted-out node is its negative is
stored positive-only, without the pair;
- execution history records no prompt text for an opted-out role.
PromptSearchList only reads the library and gets no switch.
The switch takes the widget index older workflows used for the editor's
own DOM slot (''), so a configure step turns any non-boolean value on:
workflows saved before the switch load with it on and no earlier widget
value moves. The Focused, Split and Pair editors draw it as a "Save to
library" checkbox in their toolbar; Classic and Text show the native
toggle.
* feat(nodes): let a link drive the prompt text of every PromptManager node
The Focused, Split and Pair editors hide their widgets, and ComfyUI only
draws a widget's input socket while the widget is visible. `text` (and the
Pair's `negative_text`) therefore had no socket, and a STRING link dropped
on the editor fell through to the first free STRING input, `prepend_text`,
which is how #342's workflow was wired.
- Detach those inputs from their hidden widgets on create and after a
workflow load, so they are ordinary sockets in Classic and Nodes 2.0. The
schema, widget order and saved values are unchanged.
- A STRING link dropped on the editor body fills the main prompt, then the
negative, before the frontend's own choice.
- Each editor says when its text comes from a link; the typed text is kept
for disconnect. The Classic nodes now save the typed text under a link
instead of null, and "use prompt" no longer overwrites it while linked.
- Real-host tests: mouse drags in both renderers, a workflow saved before
this change, and executions proving the linked text is saved, counted,
recorded in history and linked to the run's image.
Closes#343
* test(coverage): floor for the linked-text module
* test(nodes): PromptSearchList text takes a dragged link like a core widget
* fix(nodes): linked text review round for #343
- A legacy frontend Primitive linked to an editor's text or the Pair's
negative now runs with its value: the graphToPrompt wrapper and the queue
hook fill it in (through virtual reroutes), in new and pre-#343 workflows.
- Moving a linked text and releasing it on the editor keeps it on `text`:
a link being moved counts as free, as the frontend counts it.
- A link dropped on a prompt box (or its link note) fills that box's input,
so the Pair's Negative prompt box takes `negative_text` (Classic through
getInputOnPos, Nodes 2.0 through the box's slot key).
- Only exact STRING links are steered; wildcards keep the frontend choice.
- A linked Classic text box gives its row back and gets it back on
disconnect; the PromptManagerText note uses the theme colour.
- The metadata parsers map positional widget values through the widget
table when an editor's widget-bound inputs do not line up with it.
- Real-host cases for the legacy Primitive (new and saved workflows, a real
Run), the moved link, the Negative box, paste/clone/undo and Split.
* fix(nodes): resolve a legacy Primitive's text like the host, once per run (#343)
- Inputs still bound to their widget (Classic PromptManager/PromptManagerText)
are left as the host resolved them; the injection no longer overwrites them.
- For the editors' detached text inputs, the Primitive's value goes through its
"Run widget replace on values" replacement and the hidden widget's own
serializer, so {a|b} wildcards and %date% tokens resolve as on main.
- Each queued output is filled once (graphToPrompt wrapper, or the queue hook
for an output that did not come through it): a wildcard is drawn once.
- Editors inside subgraphs are found under their <subgraph>:<inner> id.
- Real-host runPrompt installs its request route before the run starts.
- Shared parser case pins the widget-table fallback for a core KSampler.
* fix(nodes): pin the Classic wildcard behaviour and match queued ids by type (#343)
- Classic PromptManager/PromptManagerText expose _pmTextSerializerReady, settled
once their own text serializer is installed; the real-host specs wait on it
and assert the Classic text is queued as written, as on main.
- The Primitive fill only touches an output entry whose class_type matches the
graph node at that id.
- TESTING.md notes the host's harmless "Invalid widget" warning per Run.