๐บ Output Filename String
A namespaced, timestamped output name โ built for a fleet of workers
- string
What do you name a render so that a hundred machines producing files simultaneously never collide, and anyone can tell at a glance who made it, when, and for what? Nilor Output Filename String is their answer: four text fields in, one namespaced string out, with a timestamp baked in. It's an output node whose whole job is to produce a deterministic-in-structure, unique-in-practice filename, and it only makes real sense in a context where many workers write to shared storage.
How it works
Four inputs, all strings: client (default nilor), project (default research), section (default test-1), and name (default out-1). It builds a string with the current time - formatted %y%m%d-%H%M%S, i.e. 260811-153042 style - and glues everything together into a path-like string like:
nilor_research/test-1/260811-153042_test-1/260811-153042_nilor_research_test-1_out-1
That's the exact format from the source, and yes, it repeats fields - the timestamp appears twice and section appears three times. It's verbose by design: every component of the identity (who, what, when, which) is embedded in the string, so the filename is self-describing without needing a database. The function is called notify and the node is marked OUTPUT_NODE - it's meant to be a terminal node that hands the string to a save step or reports it to the UI. It also has a TODO in the source about making a live preview widget work, so don't expect the widget to show the result until a run executes.
The honest read
This node is the fingerprint of the pack's origin. The README and source describe a distributed setup: workers pull jobs from a queue, normalize path formatting between Windows and Linux, and write results somewhere shared. In that world, a timestamped, namespaced output name generated inside the graph - not hardcoded in a save node - is how you keep artifacts from colliding and traceable. For a solo local user, the same string is mostly ceremony: the timestamp makes every run unique (good), but the doubled section and repeated segments are just noise you could trim in a text node.
Use it if you want zero-thought unique output names across many runs, or if you're replicating a pipeline where filenames must encode provenance. Skip it if you just want "render_001.png" - a plain ๐บ Random String or ComfyUI's built-in save filename counter is simpler. One nice property worth stealing either way: it generates the name inside the graph, so the same graph can be saved and re-run anywhere and the output name stays correct without manual edits.
Install
ComfyUI Manager (search "Nilor Nodes") or:
cd ComfyUI/custom_nodes
git clone https://github.com/nilor-corp/nilor-nodes
cd nilor-nodes && pip install -r requirements.txt
Restart ComfyUI; it's under Nilor Nodes ๐บ โ Utilities. No dependencies beyond datetime (the pack's scipy import aside).
Bottom line
A provenance-encoding filename generator built for fleets of workers, offered to everyone. The string format is what it is - learn to read the client_project/section/timestamp_section/timestamp_client_project_section_name layout once and it's self-explanatory after that. For local use it's optional; for anything that shares storage across machines, it's the difference between "which file is mine?" and never asking.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| client | STRING | nilor | โ |
| project | STRING | research | โ |
| section | STRING | test-1 | โ |
| name | STRING | out-1 | โ |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| string | STRING | โ |