FF Text
It's called FF Text, but it's really a timestamp node
- text
Let's get the naming out of the way: "FF Text" sounds like a general-purpose text node, and it is not one. It takes a format string, reads the current date and time, and spits out a formatted string. That's the whole job. There are no static labels, no concatenation, no prompt templating here. What it is genuinely good for is one very common ComfyUI need: stamping the moment of generation onto something, so a filename never silently overwrites your previous output.
How it works
You give it one input, format_string (a multiline text box, default %yyyy-MM-dd HH:mm:ss%), using FF-Text's own %token% syntax:
%yyyy%→ 4-digit year,%yy%→ 2-digit year%MM%→ month,%dd%→ day%HH%→ 24-hour,%mm%→ minutes,%ss%→ seconds
The node scans for %...% blocks, converts them to Python's strftime codes, then formats the current time. Default input gives you something like 2026-08-16 14:23:45. The important implementation detail: it returns NaN from IS_CHANGED, so it always re-executes on every run. You get the time at generation, never a cached value from an earlier queue - which is exactly what you want from a timestamp.
What you wire it into
One output: text (STRING). Feed it into any string input on the canvas - the obvious one is Save Image's filename_prefix, so your outputs carry a unique timestamp and you never clobber yesterday's file. It also works as a run-time note into a display/text node, or as part of a dynamic prompt if you like your prompts timestamped. For filename stamping, that's basically the whole use case, and it does it with zero extra dependencies.
Gotchas
- It can't emit arbitrary text. Need a node that just holds "Hello world" or pastes a paragraph? Use a plain text/ShowText node. This one formats time, period.
- Case matters and it's easy to flip.
%MM%is the month,%mm%is minutes - the opposite of what your muscle memory from other tools might guess. And%yyyy%vs%yy%is 4-digit vs 2-digit year. - Watch your literal percent signs. Only
%...%blocks get converted; everything else passes straight to strftime, and an unpaired%in ordinary text (say, "50% off") raises aValueErrorthat turns the node red. Keep stray percents out of the format. - It's 24-hour with no AM/PM token. Fine for filenames, worth knowing if you wanted a 12-hour clock.
- Colons vs Windows. The default
%HH:%mm:%ss%embeds:in the output - ComfyUI's prefix field is fine with that, but Windows filenames are not. If you're stamping filenames on Windows, use%yyyy-MM-dd HH-mm-ss%(dashes for the time part) or saving will fail.
Install
Part of fredhopp/comfyui-flipflopnodes - ComfyUI Manager (search "comfyui-flipflopnodes") or:
cd ComfyUI/custom_nodes
git clone https://github.com/fredhopp/comfyui-flipflopnodes.git
Restart ComfyUI. No models, and the declared requirements.txt deps (pillow/numpy/torch/piexif) are either already in ComfyUI or unused - this node only needs the Python standard library's datetime.
It's a tiny utility from a tiny pack, and "one light trick done well" is the right way to think about it. If you save files without timestamps and keep overwriting them, this is a five-second fix. If you needed a real text node, this isn't it - and knowing the difference is half the battle.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| format_string | STRING | %yyyy-MM-dd HH:mm:ss% | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |