Filename ckpt+seed (Arrssenne)
Name your saves `model_seed` without a three-node chain
- filename
Ever stared at an output folder full of ComfyUI_00042_.png and wished the files just told you what made them? That's the whole reason this node exists. It takes a checkpoint name and a seed and builds you one clean string: modelname_seed. Feed it to a save node's filename prefix and suddenly every render is self-documenting.
It's a Text-category plumbing node - pure string building, no pixels touched. It exists because the author was tired of wiring RegexReplace → SomethingToString → JoinStrings just to produce a filename, and collapsed all three into one node.
How it works
It does three cleanup passes on the checkpoint name, then one join:
- strips any folder prefix (handles both
/and\, so it's Windows and Linux safe), - strips the file extension (
.safetensors,.ckpt, …), - strips a trailing
_NNNNN_counter suffix - the kind ComfyUI itself appends when a filename collides.
Then it joins the cleaned name with the seed using _. So models/characters/pixel_v3_00012_.safetensors + seed 1337 becomes pixel_v3_1337.
The name is a mild lie, by the way: it doesn't rename or save anything. It only produces the string. You still have to feed that string to a SaveImage or an Image Saver node, which is the honest job of a filename node in ComfyUI.
The two inputs and the one output
Everything that matters fits in one line:
- checkpoint_name (STRING) - the checkpoint's name. Both fields are
forceInput, meaning you can't just type into them; you wire them. Typically you'd take thecheckpoint_nameoutput of the pack's loaders (ArrssenneLoader/ArrssenneLoaderCkpt) and feed it straight in, which is the wiring this pack was designed around. - seed (INT) - wire from your KSampler (or a Primitive seed). Convert-widget-to-input on either field flips it back to a typed box if you prefer.
- Output filename (STRING) - drop it on the
filename_prefixinput of a save node, or into an Image Saver's prefix.
One expectation to set before you're disappointed: SaveImage's prefix isn't a full filename - ComfyUI appends _00001_.png (the auto-incrementing counter) to disambiguate batches, so you'll get pixel_v3_1337_00001_.png. That's correct and desirable; it's the same counter mechanism the node strips on the way in.
Install
The pack is tiny - pure Python, no models, no API keys. Via ComfyUI Manager, search "ComfyUI-Arrssenne". Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/arrssenne/comfyui-arrssenne
Then restart ComfyUI. The node appears under Arrssenne/Text. Its only real dependency is Pillow (in the pack's requirements.txt even though the README claims none), which your ComfyUI almost certainly already has.
The gotcha that actually bites
Because both inputs are forceInput, a beginner double-clicks this node, finds grey input sockets instead of text boxes, and assumes it's broken. It isn't - it wants wires. If you don't have a loader handy, drop a primitive string/seed node on it, or right-click a widget and pick "Convert widget to input" to turn it back into a typeable box. Otherwise this is about as frictionless as a filename node gets: wire two things, get one string.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| checkpoint_name | STRING | — | |
| seed | INT | 00–18446744073709550000 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| filename | STRING | — |