Simple String Repository (IO)
Your best tags, stored in one text box and picked by number
- parsed_string
Simple String Repository is a glorified multiline text box with a number pad bolted on. You paste a collection of tags into the string field - one per line - then each target input selects an entry by index and the node hands you back the joined result as a string. No API, no key, no model files. It's the kind of node you could rebuild in an afternoon, and the author basically did: this started as his first ComfyUI node, published in late 2024 with a README that owns the "quick and dirty" label without apology.
Where it earns its keep is prompt building. If you've ever rebuilt the same base prompt over and over - swapping lighting, rotating artists, changing the mood - you know the two ends of the wildcard spectrum: type everything by hand each time, or load a massive randomizer like sd-dynamic-prompts and let it gamble for you. This node sits in the middle. You keep a small, curated collection per "slot" (art styles here, atmosphere there, color scheme somewhere else), then pick exactly what you want. That's a genuinely different workflow from wildcards, and for repeatable, project-specific prompts it's the one a lot of people end up preferring.
How it works
The string input is a newline-separated list, and each line is one option. It can carry an explicit index:
1.cinematic lighting
2.golden hour
3.neon-noir
4.moody overcast
Leave the index off and the line number (1-based) is assigned at runtime. The target widgets - there are five here - select entries: target1 = 2 pulls "golden hour". strength wraps the selected tag in ComfyUI's weight syntax, so 1.2 becomes (golden hour:1.2) in the output and 0 drops the entry entirely. random only matters if an entry is written in dynamic-prompts syntax like {warm|moody|punchy}: -1 (the default) picks one at random each run, a specific number forces that option. delimiter just decides whether selected entries are joined with a comma or a space.
The output is a single parsed_string. Because the node is an output node, it also prints the assembled prompt right on the node body - genuinely handy for checking what got selected before it reaches the sampler. Wire it into a prompt-builder like String Function Tree, a concat node, or straight into a CLIP Text Encode node.
Install
Use ComfyUI Manager (search "Simple String Repository") or clone it manually:
cd ComfyUI/custom_nodes
git clone https://github.com/IgalOgonov/ComfyUI_Simple_String_Repository
Restart ComfyUI. There's no requirements.txt and no model download - pure Python plus a small JavaScript extension, so nothing heavy sneaks into your environment.
Where people get burned
- Dots break entries. The parser splits lines on
., so an unindexed entry containing a dot can crash with aValueError, and an indexed one gets truncated at the second dot. Keep punctuation out of the entries - "No. 1" is a landmine. - Duplicate indexes. Only the first occurrence is selectable; the rest are silently dropped. If you've been mixing indexed and unindexed lines, run the "Add Missing Indexes" button on the node to clean up.
- No caching. The node always re-runs, so random selections re-roll every time you queue. That's a feature if you're after batch variation, a surprise if you expected a locked prompt.
Do you need it? Honestly, maybe not - Impact Pack ships the same {a|b|c} wildcard syntax, and plenty of text nodes assemble prompts. But if you work with a short list of hand-picked tags you reuse constantly, an always-visible curated list beats remembering which wildcard file holds "cinematic lighting". Zero dependencies, zero risk, and it's free.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| string | STRING | — | |
| delimiter | COMBO | 2 options: ,, | |
| target1opt | INT | 0–100000000 | — |
| strength1opt | FLOAT | 1.000–10 | — |
| random1opt | INT | -1-1–1000 | — |
| target2opt | INT | 0–100000000 | — |
| strength2opt | FLOAT | 1.000–10 | — |
| random2opt | INT | -1-1–1000 | — |
| target3opt | INT | 0–100000000 | — |
| strength3opt | FLOAT | 1.000–10 | — |
| random3opt | INT | -1-1–1000 | — |
| target4opt | INT | 0–100000000 | — |
| strength4opt | FLOAT | 1.000–10 | — |
| random4opt | INT | -1-1–1000 | — |
| target5opt | INT | 0–100000000 | — |
| strength5opt | FLOAT | 1.000–10 | — |
| random5opt | INT | -1-1–1000 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| parsed_string | STRING | — |