Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

allow current timestamp in save image prefix #4030

Merged

Conversation

mcmonkey4eva
Copy link
Collaborator

@mcmonkey4eva mcmonkey4eva commented Jul 16, 2024

Example:
image

Just set filename prefix to eg %year%-%month%-%day%/ComfyUI,
this will save as eg ComfyUI/output/2024-07-15/ComfyUI_00001_.png

Supercedes #3402 but with cleaner code and a more configurable usage

The benefit is, of course, more ways to organize files.

Arguably more vars would be useful, eg prompt and wotnot, but that would require text processing nodes linking together, which is possible with some custom node packs.
Date/time however is easily inserted directly.

I also added an if "%" in filename_prefix: guard to prevent redundant calculations when the user doesn't want them.

@mcmonkey4eva mcmonkey4eva added Feature A new feature to add to ComfyUI. Good PR This PR looks good to go, it needs comfy's final review. labels Jul 16, 2024
@shawnington
Copy link
Contributor

shawnington commented Jul 16, 2024

This method is very prone to typos, and at the very least reducing it from %year% to %y% or something less prone to typos seems preferable, as this implementation requires manually typing out the path structure, it requires knowledge of the feature, which will not be readily apparent to new users that its a feature that even exists, without tool tips implemented.

I still am of the opinion that a default implementation that is not subject to typos is preferable, such as an implementation that has a list of format options that follow basic standard image management practices such as the nested format year/month/day/filename or year-month-day/filename

A single typo can potentially create a huge mess of a folder structure when done the way you suggest.

For example, if nested folders are desired and there is a typo in the form of %year%/%moth%/%day%/filename you just spawn a folder called moth that if not caught quickly can create an organizational mess, same applies to the format %year%-%moth%-%day%/filename

I don't see any benefit that is conferred by requiring manual entry over having a list that allows switching between standardized formats when the goal is to create a simple means of organizing images for users.

@shawnington
Copy link
Contributor

shawnington commented Jul 16, 2024

Screenshot 2024-07-16 at 3 14 15 PM

A simple method like this is should be included in the implementation. It's simple, self documenting, user facing, and hardened against user error, but also allows the flexibility of your implementation to be used manually.

@classmethod
    def INPUT_TYPES(s):
        return {"required": 
                    {"images": ("IMAGE", ),
                     "filename_prefix": ("STRING", {"default": "ComfyUI"}),
                     "organize_by": (["none", "year/month/day", "year-month-day"],),
                     },
                "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"},
                }

    RETURN_TYPES = ()
    FUNCTION = "save_images"

    OUTPUT_NODE = True

    CATEGORY = "image"

    def save_images(self, images, filename_prefix="ComfyUI", organize_by, prompt=None, extra_pnginfo=None):
        if organize_by == "year-month-day":
            filename_prefix = "%year%-%month%-%day%" + "/" + filename_prefix
        if organize_by == "year/month/day":
            filename_prefix = "%year%/%month%/%day%" + "/" + filename_prefix

It can also easily be implemented without any changes to folder_paths.py like this, as this works with the current folder_paths.py implementation.

        if organize_by == "year-month-day":
            filename_prefix = time.strftime("%Y-%m-%d") + "/" + filename_prefix
        if organize_by == "year/month/day":
            filename_prefix = time.strftime("%Y/%m/%d") + "/" + filename_prefix

The structures that result from this implementation using the simple list selection look as follows:
year/month/day
Screenshot 2024-07-17 at 12 01 55 PM

year-month-day
Screenshot 2024-07-17 at 12 13 10 PM

@shawnington
Copy link
Contributor

shawnington commented Jul 16, 2024

Another problem with the manual input method.

As currently implemented, available text space in the file name field is finite and including the organizational formatting in the file name causes clipping with quite short file names. This would also suggest that using %y%-%m%-%d%/filename is a better implementation, short of changing front end behavior of how the field space is calculated.

Screenshot 2024-07-16 at 4 08 16 PM

Resizing the node does not give more space.

@teward
Copy link
Contributor

teward commented Jul 16, 2024

This method is very prone to typos, and at the very least reducing it from %year% to %y% or something less prone to typos seems preferable, as this implementation requires manually typing out the path structure, it requires knowledge of the feature, which will not be readily apparent to new users that its a feature that even exists, without tool tips implemented.

I would be very careful defining it as "y" because if we look at strftime type date identification codes (which follows the libc standard and the accepted strftime defaults according to that and Python's implementation) would get us 24 right now instead of 2024. It's also unclear what format someone wants to use if we are giving them such a short name.

I'd suggest that it'd be easier to allow people to define their own datetime formats, ala a %dt:FMTSTR or just %dt% that uses a default option based off of the user's locale/system (or uses the ISO standard for date definitions) and then apply it accordingly.

@shawnington
Copy link
Contributor

shawnington commented Jul 16, 2024

This method is very prone to typos, and at the very least reducing it from %year% to %y% or something less prone to typos seems preferable, as this implementation requires manually typing out the path structure, it requires knowledge of the feature, which will not be readily apparent to new users that its a feature that even exists, without tool tips implemented.

I would be very careful defining it as "y" because if we look at strftime type date identification codes (which follows the libc standard and the accepted strftime defaults according to that and Python's implementation) would get us 24 right now instead of 2024. It's also unclear what format someone wants to use if we are giving them such a short name.

I'd suggest that it'd be easier to allow people to define their own datetime formats, ala a %dt:FMTSTR or just %dt% that uses a default option based off of the user's locale/system (or uses the ISO standard for date definitions) and then apply it accordingly.

Thats fair, it should follow a standard format, like strftime %Y, but a shortened standard that doesn't cause the filename to be truncated in the display would be ideal. Im assuming the reason for having the individual year-month-day is to allow flexibility in formatting so that you can do nested folders with year/month/day or even just do a dated file with year-month-day-filename or filename-year-month-day however you want to do it.

My preferred implementation is just a multiple format selection for user friendliness since this is useful enough that it should be a forward facing feature, not something that you need to dig through the documentation to find exists. However, having the ability to also do the custom formatting still included is also beneficial.

@teward
Copy link
Contributor

teward commented Jul 16, 2024

My preferred implementation is just a multiple format selection for user friendliness since this is useful enough that it should be a forward facing feature, not something that you need to dig through the documentation to find exists. However, having the ability to also do the custom formatting still included is also beneficial.

I agree, having the ease of customization to extract the specific bits works great, but lets be careful how we name them. "%year%" is more understandable than "%y%" in my opinion because "plain text reading" is easier. Not opposed to a "common" set of options to use if you want to use %date% or such as a replacement. But, if all else fails, follow ISO standard (Year-Month-Day with zero-padding))

Note that I was inspired here by your PR to make #4037 which is not yet ready for review that lets people have much more control over the output format ala strftime formatting like I recommended. (Note that #4037 will stay in draft state until we determine how this one goes, so I can do a rebase and sync with master where needed.)

(Yes, I'm one of those people. Even if the wider user-base doesn't use it, it doesn't necessarily hurt to have the more complicated functionality available for those who want that fine-grained control).)

@shawnington
Copy link
Contributor

My preferred implementation is just a multiple format selection for user friendliness since this is useful enough that it should be a forward facing feature, not something that you need to dig through the documentation to find exists. However, having the ability to also do the custom formatting still included is also beneficial.

I agree, having the ease of customization to extract the specific bits works great, but lets be careful how we name them. "%year%" is more understandable than "%y%" in my opinion because "plain text reading" is easier. Not opposed to a "common" set of options to use if you want to use %date% or such as a replacement. But, if all else fails, follow ISO standard (Year-Month-Day with zero-padding))

Note that I was inspired here by your PR to make #4037 which is not yet ready for review that lets people have much more control over the output format ala strftime formatting like I recommended. (Note that #4037 will stay in draft state until we determine how this one goes, so I can do a rebase and sync with master where needed.)

(Yes, I'm one of those people. Even if the wider user-base doesn't use it, it doesn't necessarily hurt to have the more complicated functionality available for those who want that fine-grained control).)

If we had to vote on a standard format, id go with the strftime way of %Y-%m-%d simply for the reason that most of the users who will be using the feature manually, will be familiar with python, and time is the most commonly used library for this in python. I also believe that format being shorter is beneficial owing to the finite field space.

@teward
Copy link
Contributor

teward commented Jul 17, 2024

strftime way of %Y-%m-%d

AKA ISO 8601 format. strftime likes ISO 8601 too :) It is after all an International standard of time representation.

Agreed if we had a dropdown to select that'd be great, but we'd still need to define a 'standard' or use Python to query the current locale and use its date generation. I say this because we also see day-month-year formats and month-day-year formats depending on locales. ISO8601 exists for this reason.

Fully agree though it also helps having items like %year%, etc. to replace as well.

@shawnington
Copy link
Contributor

shawnington commented Jul 17, 2024

strftime way of %Y-%m-%d

AKA ISO 8601 format. strftime likes ISO 8601 too :) It is after all an International standard of time representation.

Agreed if we had a dropdown to select that'd be great, but we'd still need to define a 'standard' or use Python to query the current locale and use its date generation. I say this because we also see day-month-year formats and month-day-year formats depending on locales. ISO8601 exists for this reason.

Fully agree though it also helps having items like %year%, etc. to replace as well.

I suggested localization in the original pr #3402 but it seems people want to adhere to unix standard 8601 format, and not localize. I like your PR idea of having a single short %dt to do date time for use in a way like filename-%dt in which I still think localization seems like a good idea for, as well as more granular control.

I agree 8601 for nested folders (although technically YYYY/MM/DD is not 8601, but would be processed by folder_paths.py as a nested file tree). Im agnostic about 8601 or localization for a folder that is just the current date, and I like localization as an option for inclusion in the file name like you suggest.

Definitely need a standard way of doing things going forward though so users know what to expect.

@teward
Copy link
Contributor

teward commented Jul 17, 2024

I like your PR idea of having a single short %dt to do date time for use in a way like filename-%dt in which I still think localization seems like a good idea for, as well as more granular control.

Added to my PR in draft #4037 with %dt% being locale handled for 'automation' cases, with a caveat that if the 'locale' version has slashes it turns things into a folder structure as indicated, and %dt:iso% being a specific declarer of ISO 8601 format datetime. With %dt:FMT% (where FMT is a format string readable by strftime) to handle those specific cases, but I still agree with this PR that we should be interpreting things like %year%, etc. for more user-friendly controls.

Hope you don't mind me building up that with additional functionality as we discuss here :)

@shawnington
Copy link
Contributor

I like your PR idea of having a single short %dt to do date time for use in a way like filename-%dt in which I still think localization seems like a good idea for, as well as more granular control.

Added to my PR in draft #4037 with %dt% being locale handled for 'automation' cases, with a caveat that if the 'locale' version has slashes it turns things into a folder structure as indicated, and %dt:iso% being a specific declarer of ISO 8601 format datetime. With %dt:FMT% (where FMT is a format string readable by strftime) to handle those specific cases, but I still agree with this PR that we should be interpreting things like %year%, etc. for more user-friendly controls.

Hope you don't mind me building up that with additional functionality as we discuss here :)

my only real issue with %year% is that the space for the filename is finite, and using it as indicated, truncates at 9 characters in the display, and navigating in the value modal when you change things, isn't much better. Using a standard format like %Y-%m-%d gives another 12 character of space for file naming. So this change should either include changes the expand the number of characters that can be displayed, or use a shorter format.

If the goal is user friendly, the selection list is the obvious solution. (see my updated output examples of what it actually does.)

@teward
Copy link
Contributor

teward commented Jul 17, 2024

Using a standard format like %Y-%m-%d gives another 12 character of space for file naming

Unless we have a mechanism to detect what is or isn't a variable (current standard is %VAR% if you read the code) then %Y-%m-%d wouldn't properly parse if we adhere to the current 'standard' set in the code. We'd have to replace %Y which could be something we might not want to do without careful handling (because at what point do we determine %Y is just a variable or such? And do we really want to write a handler to parse all possible strftime variables in an input, which could cause other conflicts if something is added that has a conflict with %? (where ? here is any character)?)

A mini-middleground might be something like my PR which would do a format of %dt:%Y-%m-%d% which adheres to the current 'variable' standard (%VAR%) but adds customization capability within the variable string (painful but it works). Would that in your mind (user friendly dropdown select aside) be a middleground? (note that my dt implementation is extremely customizable by using strftime format strings/codes, because you could use %dt:%Y/%m/%d% and it'd be replaced with 2024/07/17 which would then parse as a folder structure for folder_paths and then behave that way.)

So this change should either include changes the expand the number of characters that can be displayed, or use a shorter format.

The question I have though is the "finite" limit. If we really want to save space for file naming, and allow customization to this extent, we need to make sure that whatever limit exists is actually sane, or whether we also need to expand that limit on the system. (Excluding the max file length that Windows sets, which is painfully annoying)

@shawnington
Copy link
Contributor

Using a standard format like %Y-%m-%d gives another 12 character of space for file naming

Unless we have a mechanism to detect what is or isn't a variable (current standard is %VAR% if you read the code) then %Y-%m-%d wouldn't properly parse if we adhere to the current 'standard' set in the code. We'd have to replace %Y which could be something we might not want to do without careful handling (because at what point do we determine %Y is just a variable or such? And do we really want to write a handler to parse all possible strftime variables in an input, which could cause other conflicts if something is added that has a conflict with %? (where ? here is any character)?)

A mini-middleground might be something like my PR which would do a format of %dt:%Y-%m-%d% which adheres to the current 'variable' standard (%VAR%) but adds customization capability within the variable string (painful but it works). Would that in your mind (user friendly dropdown select aside) be a middleground? (note that my dt implementation is extremely customizable by using strftime format strings/codes, because you could use %dt:%Y/%m/%d% and it'd be replaced with 2024/07/17 which would then parse as a folder structure for folder_paths and then behave that way.)

So this change should either include changes the expand the number of characters that can be displayed, or use a shorter format.

The question I have though is the "finite" limit. If we really want to save space for file naming, and allow customization to this extent, we need to make sure that whatever limit exists is actually sane, or whether we also need to expand that limit on the system. (Excluding the max file length that Windows sets, which is painfully annoying)

Agreed on all points. The current issue isn't that it wont allow longer file lengths, it just truncates them in display, and resizing the node does not expand the number of characters that will be displayed. Combine that with the value editor also being incapable of showing a filename that includes those variables in full, and you have a really user unfriendly situation.

I haven't checked .js for the display, I am assuming it's just assigning it a width and overflow behavior on load and not refreshing on resize or something simple.

@comfyanonymous comfyanonymous merged commit 619263d into comfyanonymous:master Sep 9, 2024
2 checks passed
thomastraum added a commit to thomastraum/ComfyUI that referenced this pull request Oct 4, 2024
commit 6cc962e
Merge: 34104b4 d854ed0
Author: tommi @tm-10 <thomas@trauminc.com>
Date:   Fri Oct 4 13:05:15 2024 +0100

    Merge branch 'master' of https://github.com/thomastraum/ComfyUI

commit 34104b4
Author: tommi @tm-10 <thomas@trauminc.com>
Date:   Fri Oct 4 13:04:01 2024 +0100

    added .venv

commit d854ed0
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Thu Oct 3 09:44:54 2024 -0400

    Allow using SD3 type te output on flux model.

commit abcd006
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Thu Oct 3 09:26:11 2024 -0400

    Allow more permutations of clip/t5 in dual clip loader.

commit d985d1d
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Wed Oct 2 04:25:17 2024 -0400

    CLIP Loader node now supports clip_l and clip_g only for SD3.

commit d1cdf51
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Tue Oct 1 07:08:41 2024 -0400

    Refactor some of the TE detection code.

commit b4626ab
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Mon Sep 30 06:03:27 2024 -0400

    Add simpletuner lycoris format for SD unet.

commit a9e459c
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Sun Sep 29 11:13:53 2024 -0400

    Use torch.nn.functional.linear in RGB preview code.

    Add an optional bias to the latent RGB preview code.

commit 3bb4dec
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Sat Sep 28 14:42:14 2024 -0400

    Fix issue with loras, lowvram and --fast fp8.

commit 8733191
Author: City <125218114+city96@users.noreply.github.com>
Date:   Sat Sep 28 04:07:51 2024 +0200

    Flux torch.compile fix (comfyanonymous#5082)

commit 83b01f9
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Fri Sep 27 02:12:37 2024 -0400

    Add backend option to TorchCompileModel.

    If you want to use the cudagraphs backend you need to: --disable-cuda-malloc

    If you get other backends working feel free to make a PR to add them.

commit d72e871
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Thu Sep 26 03:17:52 2024 -0400

    Add a note that the experimental model downloader api will be removed.

commit 037c315
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Wed Sep 25 03:24:13 2024 -0400

    Move some nodes out of _for_testing.

commit bdd4a22
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Tue Sep 24 22:57:22 2024 -0400

    Fix flux TE not loading t5 embeddings.

commit fdf3756
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Tue Sep 24 04:32:55 2024 -0400

    Add batch size to EmptyLatentAudio.

commit 08c8968
Author: Alex "mcmonkey" Goodwin <4000772+mcmonkey4eva@users.noreply.github.com>
Date:   Tue Sep 24 16:50:45 2024 +0900

    Internal download API: Add proper validated directory input (comfyanonymous#4981)

    * add internal /folder_paths route

    returns a json maps of folder paths

    * (minor) format download_models.py

    * initial folder path input on download api

    * actually, require folder_path and clean up some code

    * partial tests update

    * fix & logging

    * also download to a tmp file not the live file

    to avoid compounding errors from network failure

    * update tests again

    * test tweaks

    * workaround the first tests blocker

    * fix file handling in tests

    * rewrite test for create_model_path

    * minor doc fix

    * avoid 'mock_directory'

    use temp dir to avoid accidental fs pollution from tests

commit 479a427
Author: chaObserv <154517000+chaObserv@users.noreply.github.com>
Date:   Tue Sep 24 14:42:56 2024 +0800

    Add dpmpp_2m_cfg_pp (comfyanonymous#4992)

commit 3a0eeee
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Mon Sep 23 04:38:19 2024 -0400

    Make --listen listen on both ipv4 and ipv6 at the same time by default.

commit 447da7e
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Mon Sep 23 04:36:59 2024 -0400

    Support listening on multiple addresses.

commit 9c41bc8
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Mon Sep 23 02:32:29 2024 -0400

    Remove useless line.

commit 6ad0ddb
Author: Robin Huang <robin.j.huang@gmail.com>
Date:   Sun Sep 22 18:01:39 2024 +0900

    Run unit tests on Windows/MacOS as well. (comfyanonymous#5018)

    * Run unit tests on Windows as well.

    * Test on mac.

    * Continue running on error.

    * Compared normalized paths to work cross platform.

    * Only test common set of mimetypes across operating systems.

commit a55142f
Author: RandomGitUser321 <ruinerx@gmail.com>
Date:   Sun Sep 22 04:59:10 2024 -0400

    Add ws.close() to the websocket examples (comfyanonymous#5020)

    * add ws.close() to websocket examples

    * add and explain ws.close() in websocket examples

commit 5718ef6
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Sun Sep 22 03:41:48 2024 -0400

    Add total and free ram to /system_stats.

commit 13ecf10
Author: RandomGitUser321 <ruinerx@gmail.com>
Date:   Sun Sep 22 02:30:44 2024 -0400

    Added to the websockets_api_example.py to show how to decode latent previews from the binary stream (comfyanonymous#5016)

    * Update websockets_api_example.py

    * even more simplfied

commit 7a415f4
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Sun Sep 22 01:24:52 2024 -0400

    Add an optional VAE input to the ControlNetApplyAdvanced node.

    Deprecate the other controlnet nodes.

commit 89fa2fc
Author: Chenlei Hu <chenlei.hu@mail.utoronto.ca>
Date:   Sun Sep 22 12:28:54 2024 +0900

    Update web content to release v1.2.60 (comfyanonymous#5017)

    * Update web content to release v1.2.60

    * Remove dist.zip

commit 364b69e
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Sat Sep 21 09:12:31 2024 -0400

    Make SD3 empty latent image zeros.

    This shouldn't change anything. The reason it was not zeros is because it
    did matter in early versions of the code.

commit dc96a1a
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Sat Sep 21 04:50:12 2024 -0400

    Load controlnet in fp8 if weights are in fp8.

commit 2d810b0
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Sat Sep 21 01:51:51 2024 -0400

    Add load_controlnet_state_dict function.

commit 9f7e9f0
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Sat Sep 21 01:33:18 2024 -0400

    Add an error message when a controlnet needs a VAE but none is given.

commit a355f38
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Sat Sep 21 01:32:46 2024 -0400

    Make the SD3 controlnet node the default one.

commit 38c6908
Author: huchenlei <chenlei.hu@mail.utoronto.ca>
Date:   Fri Sep 13 15:44:32 2024 +0900

    Add docstring

commit 70a708d
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Fri Sep 20 02:31:44 2024 -0400

    Fix model merging issue.

commit e7d4782
Author: yoinked <pepe.dannyboy@gmail.com>
Date:   Thu Sep 19 20:23:09 2024 -0700

    add laplace scheduler [2407.03297] (comfyanonymous#4990)

    * add laplace scheduler [2407.03297]

    * should be here instead lol

    * better settings

commit 3326bdf
Author: Alex "mcmonkey" Goodwin <4000772+mcmonkey4eva@users.noreply.github.com>
Date:   Thu Sep 19 22:52:55 2024 +0900

    add internal /folder_paths route (comfyanonymous#4980)

    returns a json maps of folder paths

commit 68bb885
Author: Alex "mcmonkey" Goodwin <4000772+mcmonkey4eva@users.noreply.github.com>
Date:   Thu Sep 19 21:59:55 2024 +0900

    add 'is_default' to model paths config (comfyanonymous#4979)

    * add 'is_default' to model paths config

    including impl and doc in example file

    * update weirdly overspecific test expectations

    * oh there's two

    * sigh

commit ad66f7c
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Thu Sep 19 05:01:00 2024 -0400

    Add model_options to load_controlnet function.

commit de8e8e3
Author: Simon Lui <502929+simonlui@users.noreply.github.com>
Date:   Thu Sep 19 18:11:42 2024 +0900

    Fix xpu Pytorch nightly build from calling optimize which doesn't exist. (comfyanonymous#4978)

commit a1e71cf
Author: Alex "mcmonkey" Goodwin <4000772+mcmonkey4eva@users.noreply.github.com>
Date:   Thu Sep 19 17:40:14 2024 +0900

    very simple strong-cache on model list (comfyanonymous#4969)

    * very simple strong-cache on model list

    * store the cache after validation too

    * only cache object_info for now

    * use a 'with' context

commit 0bfc7cc
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Wed Sep 18 09:39:43 2024 -0400

    Create the temp directory on ComfyUI startup instead.

commit 7183fd1
Author: Tom <88888824+ImDarkTom@users.noreply.github.com>
Date:   Tue Sep 17 09:22:05 2024 +0100

    Add route to list model types (comfyanonymous#4846)

    * Add list models route

    * Better readable model types list

commit 254838f
Author: Alex "mcmonkey" Goodwin <4000772+mcmonkey4eva@users.noreply.github.com>
Date:   Tue Sep 17 16:57:17 2024 +0900

    add simple error check to model loading (comfyanonymous#4950)

commit 0b7dfa9
Author: pharmapsychotic <96542870+pharmapsychotic@users.noreply.github.com>
Date:   Tue Sep 17 02:51:10 2024 -0500

    Improve tiling calculations to reduce number of tiles that need to be processed. (comfyanonymous#4944)

commit d514bb3
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Tue Sep 17 03:49:54 2024 -0400

    Add some option to model_options for the text encoder.

    load_device, offload_device and the initial_device can now be set.

commit 0849c80
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Tue Sep 17 01:57:59 2024 -0400

    get_key_patches now works without unloading the model.

commit 56e8f5e
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Mon Sep 16 00:30:36 2024 -0400

    VAEDecodeAudio now does some normalization on the audio.

commit e813abb
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Sun Sep 15 07:59:18 2024 -0400

    Long CLIP L support for SDXL, SD3 and Flux.

    Use the *CLIPLoader nodes.

commit 5e68a4c
Author: JettHu <35261585+JettHu@users.noreply.github.com>
Date:   Sun Sep 15 13:03:09 2024 +0800

    Reduce repeated calls of INPUT_TYPES in cache (comfyanonymous#4922)

commit ca08597
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Sat Sep 14 09:17:13 2024 -0400

    Make the inpaint controlnet node work with non inpaint ones.

commit f48e390
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Sat Sep 14 09:05:16 2024 -0400

    Support AliMama SD3 and Flux inpaint controlnets.

    Use the ControlNetInpaintingAliMamaApply node.

commit 369a6dd
Author: Chenlei Hu <chenlei.hu@mail.utoronto.ca>
Date:   Sat Sep 14 12:30:44 2024 +0900

    Remove empty spaces in user_manager.py (comfyanonymous#4917)

commit b3ce8fb
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Fri Sep 13 23:24:47 2024 -0400

    Revert "Reduce repeated calls of get_immediate_node_signature for ancestors in cache (comfyanonymous#4871)"

    This reverts commit f6b7194.

commit cf80d28
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Fri Sep 13 09:52:20 2024 -0400

    Support loading controlnets with different input.

commit 6fb44c4
Author: Acly <aclysia@gmail.com>
Date:   Fri Sep 13 14:25:11 2024 +0200

    Make adding links/nodes to ExecutionList non-recursive (comfyanonymous#4886)

    Graphs with 300+ chained nodes run into maximum recursion depth error (limit is 1000 in CPython)

commit d2247c1
Author: Chenlei Hu <chenlei.hu@mail.utoronto.ca>
Date:   Fri Sep 13 16:45:31 2024 +0900

    Normalize path returned by /userdata to always use / as separator (comfyanonymous#4906)

commit cb12ad7
Author: Chenlei Hu <chenlei.hu@mail.utoronto.ca>
Date:   Fri Sep 13 15:40:59 2024 +0900

    Add full_info flag in /userdata endpoint to list out file size and last modified timestamp (comfyanonymous#4905)

    * Add full_info flag in /userdata endpoint to list out file size and last modified timestamp

    * nit

commit f6b7194
Author: JettHu <35261585+JettHu@users.noreply.github.com>
Date:   Fri Sep 13 11:02:52 2024 +0800

    Reduce repeated calls of get_immediate_node_signature for ancestors in cache (comfyanonymous#4871)

commit 7c6eb4f
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Thu Sep 12 20:27:07 2024 -0400

    Set some nodes as DEPRECATED.

commit b962db9
Author: Robin Huang <robin.j.huang@gmail.com>
Date:   Thu Sep 12 21:10:27 2024 +0900

    Add cli arg to override user directory (comfyanonymous#4856)

    * Override user directory.

    * Use overridden user directory.

    * Remove prints.

    * Remove references to global user_files.

    * Remove unused replace_folder function.

    * Remove newline.

    * Remove global during get_user_directory.

    * Add validation.

commit d0b7ab8
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Thu Sep 12 05:23:32 2024 -0400

    Add a simple experimental TorchCompileModel node.

    It probably only works on Linux.

    For maximum speed on Flux with Nvidia 40 series/ada and newer try using
    this node with fp8_e4m3fn and the --fast argument.

commit 405b529
Author: Yoland Yan <4950057+yoland68@users.noreply.github.com>
Date:   Thu Sep 12 17:53:08 2024 +0900

    Minor: update tests-unit README.md (comfyanonymous#4896)

commit 9d72018
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Thu Sep 12 03:56:52 2024 -0400

    types -> comfy_types to fix import issue.

commit d247bc5
Author: Robin Huang <robin.j.huang@gmail.com>
Date:   Thu Sep 12 14:52:06 2024 +0900

    Expand variables in base_path for extra_config_paths.yaml. (comfyanonymous#4893)

    * Expand variables in base_path for extra_config_paths.yaml.

    * Fix comments.

commit 9f4daca
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Wed Sep 11 02:51:36 2024 -0400

    Doesn't really make sense for cfg_pp sampler to call regular one.

commit b5d0f2a
Author: yoinked <pepe.dannyboy@gmail.com>
Date:   Tue Sep 10 23:49:44 2024 -0700

    Add CFG++ to DPM++ 2S Ancestral (comfyanonymous#3871)

    * Update sampling.py

    * Update samplers.py

    * my bad

    * "fix" the sampler

    * Update samplers.py

    * i named it wrong

    * minor sampling improvements

    mainly using a dynamic rho value (hey this sounds a lot like smea!!!)

    * revert rho change

    rho? r? its just 1/2

commit e760bf5
Author: bymyself <abolkonsky.rem@gmail.com>
Date:   Tue Sep 10 23:00:07 2024 -0700

    Add content-type filter method to folder_paths (comfyanonymous#4054)

    * Add content-type filter method to folder_paths

    * Add unit tests

    * Hardcode webp content-type

    * Annotate content_types as Literal["image", "video", "audio"]

commit 36c83cd
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Wed Sep 11 01:00:31 2024 -0400

    Limit origin check to when host is loopback.

    This should still prevent the exploit without breaking things for people
    who use reverse proxies.

commit 81778a7
Author: Yoland Yan <4950057+yoland68@users.noreply.github.com>
Date:   Tue Sep 10 13:44:49 2024 +0900

    [🗻 Mount Fuji Commit] Add unit tests for folder path utilities (comfyanonymous#4869)

    All past 30 min of comtts are done on the top of Mt Fuji
    By Comfy, Robin, and Yoland
    All other comfy org members died on the way

    Introduced unit tests to verify the correctness of various folder path
    utility functions such as `get_directory_by_type`, `annotated_filepath`,
    and `recursive_search` among others. These tests cover scenarios
    including directory retrieval, filepath annotation, recursive file
    searches, and filtering files by extensions, enhancing the robustness
    and reliability of the codebase.

commit bc94662
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Tue Sep 10 00:43:37 2024 -0400

    Cleanup.

commit 9fa8faa
Author: Robin Huang <robin.j.huang@gmail.com>
Date:   Mon Sep 9 21:33:44 2024 -0700

    Expand user directory for basepath in extra_models_paths.yaml (comfyanonymous#4857)

    * Expand user path.

    * Add test.

    * Add unit test for expanding base path.

    * Simplify unit test.

    * Remove comment.

    * Remove comment.

    * Checkpoints.

    * Refactor.

commit 9a7444e
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Tue Sep 10 00:21:33 2024 -0400

    Add diffusion_models to the extra_model_paths.yaml.example

commit 54fca4a
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Mon Sep 9 16:23:21 2024 -0400

    If host does not contain a port only compare the hostnames.

commit cd49553
Author: Chenlei Hu <chenlei.hu@mail.utoronto.ca>
Date:   Mon Sep 9 17:32:55 2024 +0900

    Add back CI action for tests-ui (comfyanonymous#4859)

commit 8354203
Author: david02871 <dyoung287@gmail.com>
Date:   Mon Sep 9 09:31:18 2024 +0100

    Add .venv to gitignore (comfyanonymous#4756)

commit e0b4124
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Mon Sep 9 03:18:17 2024 -0400

    Fix issue where sometimes origin doesn't contain the port.

commit 619263d
Author: Alex "mcmonkey" Goodwin <4000772+mcmonkey4eva@users.noreply.github.com>
Date:   Mon Sep 9 15:55:51 2024 +0900

    allow current timestamp in save image prefix (comfyanonymous#4030)

commit e3b0402
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Mon Sep 9 01:04:03 2024 -0400

    Ignore origin domain when it's empty.

commit 967867d
Author: Darion <root@w1gs.dev>
Date:   Sun Sep 8 21:02:32 2024 -0400

    fix: url decode filename from API (comfyanonymous#4801)

commit cbaac71
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Sun Sep 8 19:35:23 2024 -0400

    Fix issue with last commit.

commit 3ab3516
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Sun Sep 8 18:08:28 2024 -0400

    By default only accept requests where origin header matches the host.

    Browsers are dumb and let any website do requests to localhost this should
    prevent this without breaking things. CORS prevents the javascript from
    reading the response but they can still write it.

    At the moment this is only enabled when the --enable-cors-header argument
    is not used.

commit 9c5fca7
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Sun Sep 8 10:10:47 2024 -0400

    Fix lora issue.

commit a5da4d0
Author: guill <guill@users.noreply.github.com>
Date:   Sun Sep 8 06:48:47 2024 -0700

    Fix error with ExecutionBlocker and OUTPUT_IS_LIST (comfyanonymous#4836)

    This change resolves an error when a node with OUTPUT_IS_LIST=(True,)
    receives an ExecutionBlocker. I've also added a unit test for this case.

commit 32a60a7
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Sun Sep 8 09:31:41 2024 -0400

    Support onetrainer text encoder Flux lora.

commit bb52934
Author: Jim Winkens <57461+nom@users.noreply.github.com>
Date:   Sat Sep 7 05:28:32 2024 -0400

    Fix import issue (comfyanonymous#4815)

commit 8aabd7c
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Sat Sep 7 03:21:02 2024 -0400

    SaveLora node can now save "full diff" lora format.

    This isn't actually a lora format and is saving the full diff of the
    weights in a format that can be used in the lora loader nodes.

commit a09b29c
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Sat Sep 7 02:56:24 2024 -0400

    Add an option to the SaveLora node to store the bias diff.

commit 9bfee68
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Sat Sep 7 02:30:12 2024 -0400

    LoraSave node now supports generating text encoder loras.

    text_encoder_diff should be connected to a CLIPMergeSubtract node.

    model_diff and text_encoder_diff are optional inputs so you can create
    model only loras, text encoder only loras or a lora that contains both.

commit ea77750
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Sat Sep 7 02:13:13 2024 -0400

    Support a generic Comfy format for text encoder loras.

    This is a format with keys like:
    text_encoders.clip_l.transformer.text_model.encoder.layers.9.self_attn.v_proj.lora_up.weight

    Instead of waiting for me to add support for specific lora formats you can
    convert your text encoder loras to this format instead.

    If you want to see an example save a text encoder lora with the SaveLora
    node with the commit right after this one.

commit c27ebeb
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Fri Sep 6 03:21:52 2024 -0400

    Fix onnx export not working on flux.

commit 0c7c98a
Author: guill <guill@users.noreply.github.com>
Date:   Thu Sep 5 16:33:02 2024 -0700

    Nodes using UNIQUE_ID as input are NOT_IDEMPOTENT (comfyanonymous#4793)

    As suggested by @ltdrdata, we can automatically consider nodes that take
    the UNIQUE_ID hidden input to be NOT_IDEMPOTENT.

commit dc2eb75
Author: comfyanonymous <comfyanonymous@protonmail.com>
Date:   Thu Sep 5 19:21:52 2024 -0400

    Update stable release workflow to latest pytorch with cuda 12.4.

commit fa34efe
Author: Chenlei Hu <chenlei.hu@mail.utoronto.ca>
Date:   Thu Sep 5 15:56:01 2024 -0700

    Update frontend to v1.2.47 (comfyanonymous#4798)

    * Update web content to release v1.2.47

    * Update shortcut list
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Feature A new feature to add to ComfyUI. Good PR This PR looks good to go, it needs comfy's final review.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants