From 3ce6552f43ce87b7dd3001fb8d40bc5a1ac9125c Mon Sep 17 00:00:00 2001 From: bymyself Date: Fri, 27 Feb 2026 18:12:10 -0800 Subject: [PATCH] feat: add timestamp to default filename_prefix for cache-busting MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change default filename_prefix on all previewable save nodes (image, video, audio, 3D, SVG) from 'ComfyUI' to 'ComfyUI_%year%%month%%day%-%hour%%minute%%second%'. This leverages the existing compute_vars template system in get_save_image_path — zero new backend code needed. Each output gets a unique filename per second, preventing browser cache from showing stale previews when files are overwritten. Users can customize or remove the template from the node widget. Existing workflows retain their saved prefix value (only new nodes get the new default). Custom nodes are unaffected — they define their own defaults independently. --- comfy_extras/nodes_audio.py | 6 +++--- comfy_extras/nodes_hunyuan3d.py | 2 +- comfy_extras/nodes_images.py | 6 +++--- comfy_extras/nodes_video.py | 4 ++-- nodes.py | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/comfy_extras/nodes_audio.py b/comfy_extras/nodes_audio.py index 43df0512f..caacff0d5 100644 --- a/comfy_extras/nodes_audio.py +++ b/comfy_extras/nodes_audio.py @@ -162,7 +162,7 @@ class SaveAudio(IO.ComfyNode): essentials_category="Audio", inputs=[ IO.Audio.Input("audio"), - IO.String.Input("filename_prefix", default="audio/ComfyUI"), + IO.String.Input("filename_prefix", default="audio/ComfyUI_%year%%month%%day%-%hour%%minute%%second%"), ], hidden=[IO.Hidden.prompt, IO.Hidden.extra_pnginfo], is_output_node=True, @@ -187,7 +187,7 @@ class SaveAudioMP3(IO.ComfyNode): category="audio", inputs=[ IO.Audio.Input("audio"), - IO.String.Input("filename_prefix", default="audio/ComfyUI"), + IO.String.Input("filename_prefix", default="audio/ComfyUI_%year%%month%%day%-%hour%%minute%%second%"), IO.Combo.Input("quality", options=["V0", "128k", "320k"], default="V0"), ], hidden=[IO.Hidden.prompt, IO.Hidden.extra_pnginfo], @@ -215,7 +215,7 @@ class SaveAudioOpus(IO.ComfyNode): category="audio", inputs=[ IO.Audio.Input("audio"), - IO.String.Input("filename_prefix", default="audio/ComfyUI"), + IO.String.Input("filename_prefix", default="audio/ComfyUI_%year%%month%%day%-%hour%%minute%%second%"), IO.Combo.Input("quality", options=["64k", "96k", "128k", "192k", "320k"], default="128k"), ], hidden=[IO.Hidden.prompt, IO.Hidden.extra_pnginfo], diff --git a/comfy_extras/nodes_hunyuan3d.py b/comfy_extras/nodes_hunyuan3d.py index df0c3e4b1..20ce1de63 100644 --- a/comfy_extras/nodes_hunyuan3d.py +++ b/comfy_extras/nodes_hunyuan3d.py @@ -637,7 +637,7 @@ class SaveGLB(IO.ComfyNode): ], tooltip="Mesh or 3D file to save", ), - IO.String.Input("filename_prefix", default="mesh/ComfyUI"), + IO.String.Input("filename_prefix", default="mesh/ComfyUI_%year%%month%%day%-%hour%%minute%%second%"), ], hidden=[IO.Hidden.prompt, IO.Hidden.extra_pnginfo] ) diff --git a/comfy_extras/nodes_images.py b/comfy_extras/nodes_images.py index 4c57bb5cb..e448ad10e 100644 --- a/comfy_extras/nodes_images.py +++ b/comfy_extras/nodes_images.py @@ -190,7 +190,7 @@ class SaveAnimatedWEBP(IO.ComfyNode): category="image/animation", inputs=[ IO.Image.Input("images"), - IO.String.Input("filename_prefix", default="ComfyUI"), + IO.String.Input("filename_prefix", default="ComfyUI_%year%%month%%day%-%hour%%minute%%second%"), IO.Float.Input("fps", default=6.0, min=0.01, max=1000.0, step=0.01), IO.Boolean.Input("lossless", default=True), IO.Int.Input("quality", default=80, min=0, max=100), @@ -227,7 +227,7 @@ class SaveAnimatedPNG(IO.ComfyNode): category="image/animation", inputs=[ IO.Image.Input("images"), - IO.String.Input("filename_prefix", default="ComfyUI"), + IO.String.Input("filename_prefix", default="ComfyUI_%year%%month%%day%-%hour%%minute%%second%"), IO.Float.Input("fps", default=6.0, min=0.01, max=1000.0, step=0.01), IO.Int.Input("compress_level", default=4, min=0, max=9, advanced=True), ], @@ -489,7 +489,7 @@ class SaveSVGNode(IO.ComfyNode): IO.SVG.Input("svg"), IO.String.Input( "filename_prefix", - default="svg/ComfyUI", + default="svg/ComfyUI_%year%%month%%day%-%hour%%minute%%second%", tooltip="The prefix for the file to save. This may include formatting information such as %date:yyyy-MM-dd% or %Empty Latent Image.width% to include values from nodes.", ), ], diff --git a/comfy_extras/nodes_video.py b/comfy_extras/nodes_video.py index 5c096c232..4177dd240 100644 --- a/comfy_extras/nodes_video.py +++ b/comfy_extras/nodes_video.py @@ -21,7 +21,7 @@ class SaveWEBM(io.ComfyNode): is_experimental=True, inputs=[ io.Image.Input("images"), - io.String.Input("filename_prefix", default="ComfyUI"), + io.String.Input("filename_prefix", default="ComfyUI_%year%%month%%day%-%hour%%minute%%second%"), io.Combo.Input("codec", options=["vp9", "av1"]), io.Float.Input("fps", default=24.0, min=0.01, max=1000.0, step=0.01), io.Float.Input("crf", default=32.0, min=0, max=63.0, step=1, tooltip="Higher crf means lower quality with a smaller file size, lower crf means higher quality higher filesize."), @@ -77,7 +77,7 @@ class SaveVideo(io.ComfyNode): description="Saves the input images to your ComfyUI output directory.", inputs=[ io.Video.Input("video", tooltip="The video to save."), - io.String.Input("filename_prefix", default="video/ComfyUI", tooltip="The prefix for the file to save. This may include formatting information such as %date:yyyy-MM-dd% or %Empty Latent Image.width% to include values from nodes."), + io.String.Input("filename_prefix", default="video/ComfyUI_%year%%month%%day%-%hour%%minute%%second%", tooltip="The prefix for the file to save. This may include formatting information such as %date:yyyy-MM-dd% or %Empty Latent Image.width% to include values from nodes."), io.Combo.Input("format", options=Types.VideoContainer.as_input(), default="auto", tooltip="The format to save the video as."), io.Combo.Input("codec", options=Types.VideoCodec.as_input(), default="auto", tooltip="The codec to use for the video."), ], diff --git a/nodes.py b/nodes.py index bf6ce5736..f0b21fad7 100644 --- a/nodes.py +++ b/nodes.py @@ -1638,7 +1638,7 @@ class SaveImage: return { "required": { "images": ("IMAGE", {"tooltip": "The images to save."}), - "filename_prefix": ("STRING", {"default": "ComfyUI", "tooltip": "The prefix for the file to save. This may include formatting information such as %date:yyyy-MM-dd% or %Empty Latent Image.width% to include values from nodes."}) + "filename_prefix": ("STRING", {"default": "ComfyUI_%year%%month%%day%-%hour%%minute%%second%", "tooltip": "The prefix for the file to save. This may include formatting information such as %date:yyyy-MM-dd% or %Empty Latent Image.width% to include values from nodes."}) }, "hidden": { "prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"