Skip to content

Prompt, converter & output

Most graphs start with text, reshape it, and land it somewhere. These three nodes cover that spine.


A pure source: free text out, no input handle.

Type in the node body. At run time threadle substitutes {{param:name}} from the workflow’s ≔ params, then validates the result against the node’s declared value type.

The header dropdown picks that type — a ComfyUI-style primitive:

TypeAccepts
textanything (default)
int^[+-]?\d+$
floatany finite number
booltrue / false / 1 / 0
jsonmust JSON.parse

A mismatch fails the node: prompt is typed int but not an int: "…".

Types also gate wiring. A source may feed a target when the types match, when the target is text, or when int widens to float. Anything else is refused at connect time.

{{param:…}} placeholders that name no declared param are left visible rather than blanked.


The converter wraps inbound text in a template. It requires an input — an unwired converter is a loose end.

Multiple inbound wires are joined with a blank line before templating. {{param:…}} is substituted in the template too.

TemplateResult
contains {{input}}every {{input}} replaced with the joined text
non-empty, no {{input}}template + blank line + input (append)
emptyinput passes through unchanged

New converters are dropped with {{input}} already in the box.

Review this diff and list only blocking problems:
{{input}}

A sink for results. It stores the text on the node (content), so a finished graph still shows its answers after a reload.

  • Render modeauto · text · markdown · html · svg. auto sniffs the content: a leading <svg, a leading <!doctype html> / <html>, the first fenced block that looks like SVG or HTML, markdown syntax, else plain text. The detected mode shows as a badge next to the title.
  • HTML renders inside a sandbox="" iframe; SVG renders inline.
  • Resizable — drag the corners when selected; the size persists on the node.
  • pulls the last assistant message from a session node wired into it, without running the graph.
  • Output re-emits its text, so you can chain one onward. Captured text is capped at 200,000 chars.

Output refuses a few inbound types on purpose — prompt, skill, rules and context cannot wire straight into it. Output is for results; convert first, or route through an agent.


✎ Prompt ──▶ ⇄ Text → Prompt ──▶ ⟨/⟩ Agent ──▶ ⇤ Output
"auth.ts" "Review this…" claude markdown

The prompt supplies the raw subject, the converter turns it into an instruction, the agent runs it through a provider CLI, and the output captures the reply.

Drop a Knot in front of the output to merge several branches, or an Iterator in front of the agent to run it once per line.