Nodes/Kinburg-Nodes/Date String
ComfyUI Node

Date String

Timestamp your filenames without the 'what day is it' math

By Kinburg·Created 3 months ago·Updated 6 days ago· 1
Date String
    • text
    text
    date_formatYYYY-MM-DD
    custom_date_format%Y-%m-%d
    include_timefalse
    time_formatHH-MM
    custom_time_format%H-%M-%S
    separator/

    The dumbest problem in ComfyUI is naming your outputs so you can find them later. Save Image prefixes with a filename you typed once, and a week of runs all pile into the same folder with different random suffixes. Date String stamps the current date (and optionally time) onto a base text string, so every run lands in a fresh, meaningful slot - my_workflow/2026-08-27/00001.png instead of my_workflow/whatever_00001.png. It's the kind of node you dismiss until you've lost an afternoon hunting for yesterday's best run, and then it's the first thing you install.

    Mechanically it's a string builder: it takes text, appends the date via separator, and appends the time if include_time is on. The details are in the two formatting inputs:

    • date_format - YYYY-MM-DD (default), YYYY_MM_DD, YYYY/MM/DD, DD-MM-YYYY, YYYY-MM, YYYYMMDD, none, or custom for an arbitrary strftime pattern in custom_date_format.
    • include_time + time_format - HH-MM-SS, HH-MM (default), HH, HH:MM:SS, or custom strftime.

    The separator is the sneaky-powerful one. separator joins text / date / time, and the pack's own tooltip is worth quoting because it's the whole trick: "/ creates subfolders in a save path; use _ or - for a flat name." With text = "sweep", separator = "/", and YYYY-MM-DD, you get sweep/2026-08-27 - a folder per day, which is exactly how you want a Save Image prefix to behave. With separator = "_" you get sweep_2026-08-27, one flat filename. Same node, two totally different organizational schemes, and it's all just the character between the parts.

    Output is a single text STRING, wired into any Save Image / Save Video filename_prefix (via convert-to-input if the widget isn't already a socket). No optional inputs, no list handling, nothing to configure after setup. It computes on every run, so the timestamp reflects the run, not the last time you edited the workflow.

    Installing

    Ships in Kinburg-Nodes: ComfyUI Manager → search "Kinburg-Nodes", or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/Kinburg/Kinburg-Nodes
    # restart ComfyUI
    

    The README calls this one out explicitly: "The Image Compare and Date String nodes need nothing extra." No models, no pip installs, no llama-cpp anything. It's a pure utility in a pack that otherwise demands real infrastructure, which makes it one of the few nodes in the pack you can hand to someone who only wants the timestamp.

    Gotchas

    The only real trap is the separator, and it's also the feature: forget that / creates subfolders and you'll start generating a folder tree inside your output directory. If you want one flat file, reach for _. And if you're stamping a filename that goes through Windows, avoid : in the time format - HH:MM:SS produces colons, which Windows refuses in filenames. The HH-MM default dodges that; use it unless you're on a filesystem that doesn't care.

    CategoryKinburg-Nodes/util

    Inputs (7)

    NameTypeDefaultDescription
    textSTRINGBase text/path; the date (and time) is appended via 'separator'. Can be empty.
    date_formatCOMBOYYYY-MM-DD8 options: YYYY-MM-DD, YYYY_MM_DD, YYYY/MM/DD, DD-MM-YYYY, YYYY-MM, YYYYMMDD, +2
    custom_date_formatSTRING%Y-%m-%dstrftime pattern, used when date_format = custom
    include_timeBOOLEANfalse
    time_formatCOMBOHH-MM5 options: HH-MM-SS, HH-MM, HH, HH:MM:SS, custom
    custom_time_formatSTRING%H-%M-%Sstrftime pattern, used when time_format = custom
    separatorSTRING/Joins text / date / time. '/' creates subfolders in a save path; use '_' or '-' for a flat name.

    Outputs (1)

    NameTypeDescription
    textSTRING