πͺ Primitive string
Primitive String (Crystools)
- string
A single-line text primitive - sibling to Primitive string multiline, but this one's field is a single row, so it's built for short values: a filename, a short tag, a label, a checkpoint name you're passing to something that wants plain text.
Why you'd reach for it
Same reasoning as the rest of Crystools' primitives: define a short string once - a checkpoint filename, a fixed keyword you're reusing across three different concat nodes - and change it in one place instead of five. It's also just the right fit anywhere a STRING input clearly isn't meant to hold a paragraph: a filename_prefix-style field, or one slot feeding into List of strings.
It also pairs naturally with the pack's debug tools - wire it into Show any while you're building a graph to confirm a hardcoded value is actually reaching the node you think it is, then leave it in place once things work, since it costs nothing to keep around.
How it works
Nothing beyond passing the widget's text straight to the output - no multiline flag, so it's a single row in the UI.
Inputs and outputs
One required field: string (default empty, single-line). One output: string. Nothing else configurable on the node.
Installing it
Same install as every other node in the pack - there's no per-node setup step for something this simple, it just works the moment the pack itself is installed. Through ComfyUI Manager, search crystools. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/crystian/ComfyUI-Crystools.git
cd ComfyUI-Crystools
pip install -r requirements.txt
Restart ComfyUI. No models or extra dependencies needed.
Common issues
If you paste text with real line breaks into this node's single-line field, it can behave oddly depending on your ComfyUI frontend - visually squashed, or accepted in a way that doesn't look right. That's the whole reason Primitive string multiline exists as a separate node rather than this one having a toggle: if what you're storing genuinely has line breaks, use that one instead. Otherwise, this node has no real failure modes of its own - it's about as low-risk as a node in this pack gets, which is also why it shows up in so many graphs without anyone thinking twice about it. If a value you set here doesn't seem to be reaching a downstream node, the fault is almost never this node itself; check the wire is actually connected to the socket you think it is, since a dangling or misrouted link is the far more common culprit.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| string | STRING | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| string | STRING | β |