From daa97e4ac1e4a90b0ae87a797b4af73435b923a8 Mon Sep 17 00:00:00 2001 From: blepping Date: Thu, 22 May 2025 04:25:55 -0600 Subject: [PATCH] Start updating docs and example configuration files --- README.md | 26 +++++++++++++++----------- blehconfig.example.json | 7 ++++++- blehconfig.example.yaml | 10 ++++++++++ changelog.md | 8 ++++++++ py/settings.py | 7 +++---- 5 files changed, 42 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 1bccc6c..a0de24e 100644 --- a/README.md +++ b/README.md @@ -6,17 +6,18 @@ For recent user-visible changes, please see the [ChangeLog](changelog.md). ## Features -1. Better TAESD previews (see below). -2. Allow setting seed, timestep range and step interval for HyperTile (look for the [`BlehHyperTile`](#blehhypertile) node). -3. Allow applying Kohya Deep Shrink to multiple blocks, also allow gradually fading out the downscale factor (look for the [`BlehDeepShrink`](#blehdeepshrink) node). -4. Allow discarding penultimate sigma (look for the `BlehDiscardPenultimateSigma` node). This can be useful if you find certain samplers are ruining your image by spewing a bunch of noise into it at the very end (usually only an issue with `dpm2 a` or SDE samplers). -5. Allow more conveniently switching between samplers during sampling (look for the [BlehInsaneChainSampler](#blehinsanechainsampler) node). -6. Apply arbitrary model patches at an interval and/or for a percentage of sampling (look for the [BlehModelPatchConditional](#blehmodelpatchconditional) node). -7. Ensure a seed is set even when `add_noise` is turned off in a sampler. Yes, that's right: if you don't have `add_noise` enabled _no_ seed gets set for samplers like `euler_a` and it's not possible to reproduce generations. (look for the [BlehForceSeedSampler](#blehforceseedsampler) node). For `SamplerCustomAdvanced` you can use `BlehDisableNoise` to accomplish the same thing. -8. Allows swapping to a refiner model at a predefined time (look for the [BlehRefinerAfter](#blehrefinerafter) node). -9. Allow defining arbitrary model patches (look for the [BlehBlockOps](#blehblockops) node). -10. Experimental blockwise CFG type effect (look for the [BlehBlockCFG](#blehblockcfg) node). -11. [SageAttention](https://github.com/thu-ml/SageAttention/) support either globally or as a sampler wrapper. Look for the [BlehSageAttentionSampler](#blehsageattentionsampler) and `BlehGlobalSageAttention` nodes. +* Better TAESD previews (see below). +* Visual previews for some audio models (currently only ACE-Steps). +* Allow setting seed, timestep range and step interval for HyperTile (look for the [`BlehHyperTile`](#blehhypertile) node). +* Allow applying Kohya Deep Shrink to multiple blocks, also allow gradually fading out the downscale factor (look for the [`BlehDeepShrink`](#blehdeepshrink) node). +* Allow discarding penultimate sigma (look for the `BlehDiscardPenultimateSigma` node). This can be useful if you find certain samplers are ruining your image by spewing a bunch of noise into it at the very end (usually only an issue with `dpm2 a` or SDE samplers). +* Allow more conveniently switching between samplers during sampling (look for the [BlehInsaneChainSampler](#blehinsanechainsampler) node). +* Apply arbitrary model patches at an interval and/or for a percentage of sampling (look for the [BlehModelPatchConditional](#blehmodelpatchconditional) node). +* Ensure a seed is set even when `add_noise` is turned off in a sampler. Yes, that's right: if you don't have `add_noise` enabled _no_ seed gets set for samplers like `euler_a` and it's not possible to reproduce generations. (look for the [BlehForceSeedSampler](#blehforceseedsampler) node). For `SamplerCustomAdvanced` you can use `BlehDisableNoise` to accomplish the same thing. +* Allows swapping to a refiner model at a predefined time (look for the [BlehRefinerAfter](#blehrefinerafter) node). +* Allow defining arbitrary model patches (look for the [BlehBlockOps](#blehblockops) node). +* Experimental blockwise CFG type effect (look for the [BlehBlockCFG](#blehblockcfg) node). +* [SageAttention](https://github.com/thu-ml/SageAttention/) support either globally or as a sampler wrapper. Look for the [BlehSageAttentionSampler](#blehsageattentionsampler) and `BlehGlobalSageAttention` nodes. ## Configuration @@ -30,6 +31,9 @@ Restart ComfyUI to apply any new changes. * Supports showing previews for more than the first latent in the batch. * Supports throttling previews. Do you really need your expensive high quality preview to get updated 3 times a second? +The previewer can now show visual previews for ACE-Steps latents. If you want to disable that feature, you can add `aceaudio` to the +`blacklist_formats` list. For example if you are using a YAML configuration file you could do: `blacklist_formats: ["aceaudio"]` + **General settings defaults:** |Key|Default|Description| diff --git a/blehconfig.example.json b/blehconfig.example.json index 33334a4..cc6d3af 100644 --- a/blehconfig.example.json +++ b/blehconfig.example.json @@ -10,6 +10,11 @@ "skip_upscale_layers": 0, "compile_previewer": false, "oom_fallback": "latent2rgb", - "oom_retry": true + "oom_retry": true, + "whitelist_formats": [], + "blacklist_formats": [], + "video_parallel": false, + "video_max_frames": -1, + "video_temporal_upscale_level": 0 } } diff --git a/blehconfig.example.yaml b/blehconfig.example.yaml index 31e53c9..3594ad6 100644 --- a/blehconfig.example.yaml +++ b/blehconfig.example.yaml @@ -21,6 +21,10 @@ betterTaesdPreviews: # Minimum time between updating previews. The default will update the preview at most once per second. throttle_secs: 1 + # Can be set to use a different throttle time when using the fallback previewer + # (anything other than TAESD or TAEVID). If unset or null it will use throttle_secs. + throttle_secs_fallback: null + # When enabled and previewing batches, you will see previews spread across the batch. Otherwise it will be the first max_batch items. maxed_batch_step_mode: false @@ -28,6 +32,12 @@ betterTaesdPreviews: # alone unless you know you need to change it. Previewing on CPU will likely be quite slow. preview_device: null + # Can be set to override the previewer dtype (which probably defaults to float32). + # You may set it to a specific dtype: float32, float16, bfloat16 + # Setting it to "keep" or null just leaves the dtype alone (which is probably float32). + # Setting it to "vae" will use whatever dtype ComfyUI is set to use for VAE. + preview_dtype: null + # Allows skipping upscale layers in the TAESD model, may increase performance when previewing large images or batches. # May be set to -1 (conservative) or -2 (aggressive) to automatically calculate how many to skip. See README.md for details. skip_upscale_layers: 0 diff --git a/changelog.md b/changelog.md index 56b483d..a0175b0 100644 --- a/changelog.md +++ b/changelog.md @@ -2,6 +2,14 @@ Note, only relatively significant changes to user-visible functionality will be included here. Most recent changes at the top. +## 20250522 + +This set of changes involves refactoring parts of the previewer. Please create an issue if you experience problems. + +* It's now possible to set the previewer dtype, see the `preview_dtype` setting. Note: Previews probably have been using float32 which is likely slower/more memory intensive than necessary. I'd recommend setting it to `vae`, `bfloat16` or `float16`. +* The previewer can show a visual representation of ACE-Steps latents (audio model). If you don't like it then you can add `aceaudio` to the `blacklist_formats` list in your configuration. +* You can set `throttle_secs_fallback` to use a different throttle setting for the fallback previewer (which includes stuff like the ACE-Steps previewer). + ## 20250504 This is a fairly large set of changes. Please create an issue if you experience problems. diff --git a/py/settings.py b/py/settings.py index bc50f82..327e93d 100644 --- a/py/settings.py +++ b/py/settings.py @@ -16,10 +16,9 @@ class Settings: self.btp_max_batch = max(1, btp.get("max_batch", 4)) self.btp_max_batch_cols = max(1, btp.get("max_batch_cols", 2)) self.btp_throttle_secs = btp.get("throttle_secs", 1) - self.btp_throttle_secs_fallback = btp.get( - "throttle_secs_fallback", - self.btp_throttle_secs, - ) + self.btp_throttle_secs_fallback = btp.get("throttle_secs_fallback") + if self.btp_throttle_secs_fallback is None: + self.btp_throttle_secs_fallback = self.btp_throttle_secs self.btp_skip_upscale_layers = btp.get("skip_upscale_layers", 0) self.btp_preview_device = btp.get("preview_device") # default, keep, float32, float16, bfloat16