Every handle on a node has a data type. The editor uses it to color the handle, to decide whether two nodes can connect, and to label what flows along a line. For the canvas itself, see the Workflow Editor. For the ideas behind nodes and connections, see Key Concepts.
Data types
The table groups types that share a handle color. Hover a handle to see its type name and description.
| Type | What it holds | Handle color | Example nodes |
|---|---|---|---|
Text (str, text) |
Labels, prompts, and multi-line text | amber #FFA808 |
String Input, String |
| Message, Thread | A chat message with a role, or a conversation thread | amber #FFA808 |
Create Thread |
Integer (int) |
A whole number | #0891B2 |
Integer Input, Integer |
Float (float) |
A decimal number | cyan #18E0F8 |
Float Input, Float |
Boolean (bool) |
True or false | emerald #0DD49A |
Boolean Input, Bool |
| Image | A picture (PNG, JPEG, WebP, and others) | fuchsia #E838FF |
Image Input, Image |
| Audio | Sound for playback, processing, or generation | sky #08B8FF |
Audio Input, Audio |
| Video | A clip (MP4, WebM, and others) | violet #9460FF |
Video Input, Video |
| Model 3D | A 3D model (GLB or glTF) | blue #3888FF |
Model 3D Input, Model 3D, Transform 3D |
| Document | Text content with metadata, such as a PDF or DOCX | blue #3888FF |
Document Input, Document |
| List | An ordered collection of items | yellow #FFD612 |
Text List Input, List, Collect |
Dictionary (dict), Object, JSON |
Key-value data and nested structures | yellow #FFD612 |
Dict |
| Dataframe | A table of rows and columns | yellow #FFD612 |
Dataframe Input, Data Frame, For Each Row |
| Chunk | One piece of a streaming response | yellow #FFD612 |
Summarizer |
| CV | A control-voltage stream for audio synthesis | rose #FF3060 |
LFO |
| Any | Accepts or produces any type | slate #6880A0 |
For Each |
The color names come from the palette comments in the source. The Integer color has no name there.
Other types follow the same scheme. Asset, file, folder, bytes, font, and model references (language, embedding, image, video, and so on) are blue #3888FF. A sketch is lime #B0F030, a timeline and storyboard are violet #9460FF, a script is sky #08B8FF, and an entity is fuchsia #E838FF. The full list is in web/src/config/data_types.ts.
A type the editor does not know gets a color derived from its name. A handle with no declared type uses grey #A7B1BF.
Tip: Hold the pointer over a handle to see its type and a short description. When two ends have different colors, the line between them blends from the source color to the target color.
Making connections
To connect two nodes, drag from an output handle on the right of a node to an input handle on the left of another. Release on the handle to connect. The Workflow Editor covers releasing on empty canvas, which opens a menu of nodes that match the type you dragged.
One output can feed many inputs. An input takes one line, so connecting a second line to the same input replaces the first.
Collect inputs
An input typed list[T] is a collect input. It accepts several lines at once, as long as each source produces T (or a list[T]). Use it to gather several images into one image list, for example. The exception is list[any], which takes a single line.
Which connections are accepted
The editor checks every connection against these rules. A connection that fails does not attach.
- Same type connects. An
imageoutput connects to animageinput. - Any connects to anything. A handle of type
anyon either end is always accepted. - int and float are separate types. There is no automatic conversion between them, so an integer output does not connect to a float input.
- A single value connects to a list of that type. An
imageoutput connects to alist[image]input. Typed lists connect when their element types are compatible. Lists with no stated element type connect without a check. - A list does not connect to a single value. To turn a list into items, use For Each.
- Dictionaries compare keys and values.
dictconnects todictwhen both the key type and the value type are compatible. - Unions match any member. A union source connects if any of its members fits the target, and a union target accepts any source that fits one of its members.
- Text and enum. Text connects to an enum input and an enum connects to a text input. Two enums connect only when they are the same enum.
- Object accepts structured types. An
objectinput takes any source except text, numbers, booleans, null, enums, lists, dictionaries, unions, and tuples. - CV and chunk interchange. A
cvoutput connects to achunkinput and the reverse, so an LFO can drive a streaming audio input. CV does not connect to audio or float directly.
The editor also refuses a connection that would form a cycle, and it refuses an exact duplicate of an existing line. The one exception is the feedback input of a Loop node. See the Loop node reference.
Note: A node whose type metadata is not loaded, such as a placeholder for a missing node pack, accepts connections without a type check.
Streaming
Some nodes produce their output in pieces. A text model emits chunks as it generates, and For Each emits one list item at a time. The node keeps running while the pieces travel down the line, so downstream nodes can start before the upstream node finishes.
How a downstream node reacts depends on the node:
- Per-item nodes run once for each value that arrives. Everything between For Each and the end of its branch runs once per item.
- Streaming-input nodes read values as they arrive instead of waiting for all of them. The LFO is one.
- Collect waits for the stream to end and returns every item as one list.
Use For Each to split a list into items, and Collect to join them back. To repeat a step until a condition is met, use the Loop node.
Edge states
While a workflow runs, the editor shows what each line is doing.
- Moving dashes: a line animates with flowing dashes while its source node is starting or running, and while a message is crossing it.
- Item count: when more than one value has crossed a line, a small badge shows the count. Hover it to see how many items streamed.
- Selected: a selected line gets a thicker stroke and a soft glow in the source type color.
Control lines, which let an agent trigger other nodes, are drawn with a separate style.