From 4ecdf7bdcfad90fe8d95a5e6863964b9321667b0 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Tue, 21 Oct 2025 10:42:21 -0400 Subject: [PATCH 01/13] fix wan22 stage selection Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 4 +++- extensions-builtin/sdnext-modernui | 2 +- modules/video_models/video_overrides.py | 4 ++-- modules/video_models/video_run.py | 2 +- pipelines/model_wanai.py | 2 +- 5 files changed, 8 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d61b70fb8..838d66eab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Change Log for SD.Next -## Update for 2025-10-19 +## Update for 2025-10-21 - **Features** - **offline mode**: enable in *settings -> hugginface* @@ -16,6 +16,8 @@ - **Fixes** - startup error with `--profile` enabled if using `--skip` - restore orig init image for each batch sequence + - fix modernui hints layout + - fix `wan-2.2-a14b` stage selection ## Update for 2025-10-18 diff --git a/extensions-builtin/sdnext-modernui b/extensions-builtin/sdnext-modernui index 8f6427aa0..80d1030c6 160000 --- a/extensions-builtin/sdnext-modernui +++ b/extensions-builtin/sdnext-modernui @@ -1 +1 @@ -Subproject commit 8f6427aa037b654ae664a0197c794e48fdbbc648 +Subproject commit 80d1030c6bf161c301bed7ec14ba43eabe8c69bb diff --git a/modules/video_models/video_overrides.py b/modules/video_models/video_overrides.py index 856da62e6..055a92ca8 100644 --- a/modules/video_models/video_overrides.py +++ b/modules/video_models/video_overrides.py @@ -19,14 +19,14 @@ def load_override(selected: Model): # WAN if 'WAN 2.1 14B' in selected.name: kwargs['vae'] = diffusers.AutoencoderKLWan.from_pretrained(selected.repo, subfolder="vae", torch_dtype=torch.float32, cache_dir=shared.opts.hfcache_dir) - if 'A14B' in selected.name or '14B VACE' in selected.name: + if ('A14B' in selected.name) or ('14B VACE' in selected.name): if shared.opts.model_wan_stage == 'combined': kwargs['boundary_ratio'] = shared.opts.model_wan_boundary elif shared.opts.model_wan_stage == 'high noise': kwargs['transformer_2'] = None kwargs['boundary_ratio'] = 0.0 elif shared.opts.model_wan_stage == 'low noise': - kwargs['boundary_ratio'] = 1.0 + kwargs['boundary_ratio'] = 1000.0 kwargs['transformer'] = None debug(f'Video overrides: model="{selected.name}" kwargs={list(kwargs)}') return kwargs diff --git a/modules/video_models/video_run.py b/modules/video_models/video_run.py index 57d3fbc23..2a2f1ab39 100644 --- a/modules/video_models/video_run.py +++ b/modules/video_models/video_run.py @@ -103,7 +103,7 @@ def generate(*args, **kwargs): if hasattr(shared.sd_model.scheduler.config, 'use_dynamic_shifting'): shared.sd_model.scheduler.config.use_dynamic_shifting = dynamic_shift shared.sd_model.scheduler.register_to_config(use_dynamic_shifting = dynamic_shift) - if hasattr(shared.sd_model.scheduler.config, 'flow_shift'): + if hasattr(shared.sd_model.scheduler.config, 'flow_shift') and sampler_shift >= 0: shared.sd_model.scheduler.config.flow_shift = sampler_shift shared.sd_model.scheduler.register_to_config(flow_shift = sampler_shift) shared.sd_model.default_scheduler = copy.deepcopy(shared.sd_model.scheduler) diff --git a/pipelines/model_wanai.py b/pipelines/model_wanai.py index 6a9f844d5..fd6839584 100644 --- a/pipelines/model_wanai.py +++ b/pipelines/model_wanai.py @@ -74,7 +74,7 @@ def load_wan(checkpoint_info, diffusers_load_config={}): elif shared.opts.model_wan_stage == 'low noise' or shared.opts.model_wan_stage == 'second': transformer = None transformer_2 = load_transformer(repo_id, diffusers_load_config, 'transformer_2') - boundary_ratio = 1.0 + boundary_ratio = 1000.0 elif shared.opts.model_wan_stage == 'combined' or shared.opts.model_wan_stage == 'both': transformer = load_transformer(repo_id, diffusers_load_config, 'transformer') transformer_2 = load_transformer(repo_id, diffusers_load_config, 'transformer_2') From f7d4ffe2f26d2d178771affa9e3d8f3db20797c9 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Tue, 21 Oct 2025 10:52:00 -0400 Subject: [PATCH 02/13] fix wan22-5b vae decode Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 1 + installer.py | 2 +- modules/video_models/video_load.py | 2 ++ modules/video_models/video_overrides.py | 4 ++++ 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 838d66eab..d489ff6e0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ - restore orig init image for each batch sequence - fix modernui hints layout - fix `wan-2.2-a14b` stage selection + - fix `wan-2.2-5b` vae decode ## Update for 2025-10-18 diff --git a/installer.py b/installer.py index f9a2954b2..7520cb9af 100644 --- a/installer.py +++ b/installer.py @@ -608,7 +608,7 @@ def check_diffusers(): if args.skip_git: install('diffusers') return - sha = '23ebbb4bc81a17ebea17cb7cb94f301199e49a7f' # diffusers commit hash + sha = 'b3e56e71fb7c73601851bb83e7583f113f563d26' # diffusers commit hash # if args.use_rocm or args.use_zluda or args.use_directml: # sha = '043ab2520f6a19fce78e6e060a68dbc947edb9f9' # lock diffusers versions for now pkg = pkg_resources.working_set.by_key.get('diffusers', None) diff --git a/modules/video_models/video_load.py b/modules/video_models/video_load.py index 43da69265..999c0c590 100644 --- a/modules/video_models/video_load.py +++ b/modules/video_models/video_load.py @@ -11,6 +11,8 @@ def load_model(selected: models_def.Model): if selected is None or selected.te_cls is None or selected.dit_cls is None: return '' global loaded_model # pylint: disable=global-statement + if not shared.sd_loaded: + loaded_model = None if loaded_model == selected.name: return '' sd_models.unload_model_weights() diff --git a/modules/video_models/video_overrides.py b/modules/video_models/video_overrides.py index 055a92ca8..2a93adbf2 100644 --- a/modules/video_models/video_overrides.py +++ b/modules/video_models/video_overrides.py @@ -61,3 +61,7 @@ def set_overrides(p: processing.StableDiffusionProcessingVideo, selected: Model) if 'WanVACEPipeline' in cls: if (getattr(p, 'init_images', None) is not None) and (len(p.init_images) > 0): p.task_args['reference_images'] = p.init_images + # WAN 2.2-5B + if 'WAN 2.2 5B' in selected.name: + print('HERE') + shared.sd_model.vae.disable_tiling() From d23001b7e20a4862fa802c45b4542698b1960a0b Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Tue, 21 Oct 2025 10:52:11 -0400 Subject: [PATCH 03/13] cleanup Signed-off-by: Vladimir Mandic --- modules/video_models/video_overrides.py | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/video_models/video_overrides.py b/modules/video_models/video_overrides.py index 2a93adbf2..a6c9c01ed 100644 --- a/modules/video_models/video_overrides.py +++ b/modules/video_models/video_overrides.py @@ -63,5 +63,4 @@ def set_overrides(p: processing.StableDiffusionProcessingVideo, selected: Model) p.task_args['reference_images'] = p.init_images # WAN 2.2-5B if 'WAN 2.2 5B' in selected.name: - print('HERE') shared.sd_model.vae.disable_tiling() From f69b4c5589f18fb473017a42aa49370bb49dbb5e Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Tue, 21 Oct 2025 11:07:47 -0400 Subject: [PATCH 04/13] disabling live preview should not disable progress updates Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 1 + javascript/progressBar.js | 2 +- modules/progress.py | 4 ++-- modules/sd_samplers_common.py | 2 +- modules/shared.py | 2 +- modules/shared_state.py | 2 +- 6 files changed, 7 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d489ff6e0..d68c72dac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ - fix modernui hints layout - fix `wan-2.2-a14b` stage selection - fix `wan-2.2-5b` vae decode + - disabling live preview should not disable progress updates ## Update for 2025-10-18 diff --git a/javascript/progressBar.js b/javascript/progressBar.js index 5c148836b..5062517e0 100644 --- a/javascript/progressBar.js +++ b/javascript/progressBar.js @@ -132,7 +132,7 @@ function requestProgress(id_task, progressEl, galleryEl, atEnd = null, onProgres }; const start = (id_task, id_live_preview) => { // eslint-disable-line no-shadow - if (!opts.live_previews_enable || opts.live_preview_refresh_period === 0 || opts.show_progress_every_n_steps === 0) return; + if (opts.live_preview_refresh_period === 0) return; const request_id = document.hidden ? -1 : id_live_preview; const onProgressHandler = (res) => { diff --git a/modules/progress.py b/modules/progress.py index 3203995e5..f0fe52877 100644 --- a/modules/progress.py +++ b/modules/progress.py @@ -92,9 +92,9 @@ def api_progress(req: ProgressRequest): id_live_preview = -1 textinfo = "Queued..." if queued else "Waiting..." - debug_log(f'Preview: job={shared.state.job} active={active} progress={step}/{steps}/{progress} image={shared.state.current_image_sampling_step} request={id_live_preview} last={shared.state.id_live_preview} enabled={shared.opts.live_previews_enable} job={shared.state.preview_job} elapsed={elapsed:.3f}') + debug_log(f'Preview: job={shared.state.job} active={active} progress={step}/{steps}/{progress} image={shared.state.current_image_sampling_step} request={id_live_preview} last={shared.state.id_live_preview} job={shared.state.preview_job} elapsed={elapsed:.3f}') - if shared.opts.live_previews_enable and active and (req.id_live_preview != -1): + if active and (req.id_live_preview != -1): have_image = shared.state.set_current_image() if have_image and shared.state.current_image is not None: buffered = io.BytesIO() diff --git a/modules/sd_samplers_common.py b/modules/sd_samplers_common.py index 09a06352a..a45f238d3 100644 --- a/modules/sd_samplers_common.py +++ b/modules/sd_samplers_common.py @@ -124,7 +124,7 @@ def images_tensor_to_samples(image, approximation=None, model=None): def store_latent(decoded): shared.state.current_latent = decoded - if shared.opts.live_previews_enable and shared.opts.show_progress_every_n_steps > 0 and shared.state.sampling_step % shared.opts.show_progress_every_n_steps == 0: + if shared.opts.show_progress_every_n_steps > 0 and shared.state.sampling_step % shared.opts.show_progress_every_n_steps == 0: if not shared.parallel_processing_allowed: image = sample_to_image(decoded) shared.state.assign_current_image(image) diff --git a/modules/shared.py b/modules/shared.py index 525b7df6f..8a5b7510a 100644 --- a/modules/shared.py +++ b/modules/shared.py @@ -591,7 +591,7 @@ options_templates.update(options_section(('ui', "User Interface"), { })) options_templates.update(options_section(('live-preview', "Live Previews"), { - "show_progress_every_n_steps": OptionInfo(1, "Live preview display period", gr.Slider, {"minimum": 0, "maximum": 32, "step": 1}), + "show_progress_every_n_steps": OptionInfo(1, "Live preview display period", gr.Slider, {"minimum": 0, "maximum": 20, "step": 1}), "show_progress_type": OptionInfo("TAESD", "Live preview method", gr.Radio, {"choices": ["Simple", "Approximate", "TAESD", "Full VAE"]}), "live_preview_refresh_period": OptionInfo(500, "Progress update period", gr.Slider, {"minimum": 0, "maximum": 5000, "step": 25}), "taesd_variant": OptionInfo(shared_items.sd_taesd_items()[0], "TAESD variant", gr.Dropdown, {"choices": shared_items.sd_taesd_items()}), diff --git a/modules/shared_state.py b/modules/shared_state.py index f575f4482..ebc412265 100644 --- a/modules/shared_state.py +++ b/modules/shared_state.py @@ -260,7 +260,7 @@ class State: if self.job == 'VAE' or self.job == 'Upscale': # avoid generating preview while vae is running return False from modules.shared import opts, cmd_opts - if cmd_opts.lowvram or self.api or (not opts.live_previews_enable) or (opts.show_progress_every_n_steps <= 0): + if cmd_opts.lowvram or self.api or (opts.show_progress_every_n_steps <= 0): return False if (not self.disable_preview) and (abs(self.sampling_step - self.current_image_sampling_step) >= opts.show_progress_every_n_steps): return self.do_set_current_image() From b71afb1c866a50eb7e6981fa2a6ea14942dde308 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Tue, 21 Oct 2025 11:31:12 -0400 Subject: [PATCH 05/13] update optional packages Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 1 + installer.py | 27 ++++++++++++++++----------- modules/civitai/search_civitai.py | 2 +- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d68c72dac..c60c6f3da 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ - improved SDNQ SVD and low-bit matmul performance - **Other** - **scheduler** add base and max shift parameters for flow-matching samplers + - enhance `--optional` flag to pre-install optional packages - **Fixes** - startup error with `--profile` enabled if using `--skip` - restore orig init image for each batch sequence diff --git a/installer.py b/installer.py index 7520cb9af..ed59080b4 100644 --- a/installer.py +++ b/installer.py @@ -1270,18 +1270,23 @@ def install_insightface(): def install_optional(): t_start = time.time() log.info('Installing optional requirements...') - install('--no-build-isolation git+https://github.com/Disty0/BasicSR@23c1fb6f5c559ef5ce7ad657f2fa56e41b121754', 'basicsr') - install('--no-build-isolation git+https://github.com/Disty0/GFPGAN@ae0f7e44fafe0ef4716f3c10067f8f379b74c21c', 'gfpgan') - install('clean-fid', quiet=True) - install('pillow-jxl-plugin==1.3.4', ignore=True, quiet=True) - install('optimum-quanto==0.2.7', ignore=True, quiet=True) - install('torchao==0.10.0', ignore=True, quiet=True) - install('bitsandbytes==0.47.0', ignore=True, quiet=True) - install('nvidia-ml-py', ignore=True, quiet=True) - install('ultralytics==8.3.40', ignore=True, quiet=True) - install('Cython', ignore=True, quiet=True) + install('--no-build-isolation git+https://github.com/Disty0/BasicSR@23c1fb6f5c559ef5ce7ad657f2fa56e41b121754', 'basicsr', ignore=True, quiet=True) + install('--no-build-isolation git+https://github.com/Disty0/GFPGAN@ae0f7e44fafe0ef4716f3c10067f8f379b74c21c', 'gfpgan', ignore=True, quiet=True) install('av', ignore=True, quiet=True) - install('gguf', ignore=True) + install('beautifulsoup4', ignore=True, quiet=True) + install('bitsandbytes==0.47.0', ignore=True, quiet=True) + install('clean-fid', ignore=True, quiet=True) + install('clip_interrogator==0.6.0', ignore=True, quiet=True) + install('Cython', ignore=True, quiet=True) + install('gguf', ignore=True, quiet=True) + install('git+https://github.com/tencent-ailab/IP-Adapter.git', 'ip_adapter', ignore=True, quiet=True) + install('hf_transfer', ignore=True, quiet=True) + install('hf_xet', ignore=True, quiet=True) + install('nvidia-ml-py', ignore=True, quiet=True) + install('optimum-quanto==0.2.7', ignore=True, quiet=True) + install('pillow-jxl-plugin==1.3.4', ignore=True, quiet=True) + install('torchao==0.10.0', ignore=True, quiet=True) + install('ultralytics==8.3.40', ignore=True, quiet=True) try: import gguf scripts_dir = os.path.join(os.path.dirname(gguf.__file__), '..', 'scripts') diff --git a/modules/civitai/search_civitai.py b/modules/civitai/search_civitai.py index 0465411b9..488a05cdd 100644 --- a/modules/civitai/search_civitai.py +++ b/modules/civitai/search_civitai.py @@ -108,7 +108,7 @@ def search_civitai( global models # pylint: disable=global-statement import requests from urllib.parse import urlencode - install('bs4') # Ensure BeautifulSoup is installed + install('beautifulsoup4') if len(query) == 0: log.error('CivitAI: empty query') From d431a30204041a87e84460697ec85e26ee39f014 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Tue, 21 Oct 2025 11:38:18 -0400 Subject: [PATCH 06/13] add offline mode to video load Signed-off-by: Vladimir Mandic --- modules/video_models/video_load.py | 18 +++++++++++++++--- modules/video_models/video_overrides.py | 8 ++++---- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/modules/video_models/video_load.py b/modules/video_models/video_load.py index 999c0c590..090997611 100644 --- a/modules/video_models/video_load.py +++ b/modules/video_models/video_load.py @@ -1,3 +1,4 @@ +import os import copy import time from modules import shared, errors, sd_models, sd_checkpoint, model_quant, devices, sd_hijack_te, sd_hijack_vae @@ -22,7 +23,15 @@ def load_model(selected: models_def.Model): video_cache.apply_teacache_patch(selected.dit_cls) # overrides - kwargs = video_overrides.load_override(selected) + offline_args = {} + if shared.opts.offline_mode: + offline_args["local_files_only"] = True + os.environ['HF_HUB_OFFLINE'] = '1' + else: + os.environ.pop('HF_HUB_OFFLINE', None) + os.unsetenv('HF_HUB_OFFLINE') + + kwargs = video_overrides.load_override(selected, **offline_args) # text encoder try: @@ -53,7 +62,8 @@ def load_model(selected: models_def.Model): revision=selected.te_revision or selected.repo_revision, cache_dir=shared.opts.hfcache_dir, **load_args, - **quant_args + **quant_args, + **offline_args, ) except Exception as e: shared.log.error(f'video load: module=te cls={selected.te_cls.__name__} {e}') @@ -72,7 +82,8 @@ def load_model(selected: models_def.Model): revision=selected.dit_revision or selected.repo_revision, cache_dir=shared.opts.hfcache_dir, **load_args, - **quant_args + **quant_args, + **offline_args, ) else: shared.log.debug(f'Video load: module=transformer repo="{selected.dit or selected.repo}" module="{dit_folder}" folder="{dit_folder}" cls={selected.dit_cls.__name__} skip') @@ -97,6 +108,7 @@ def load_model(selected: models_def.Model): cache_dir=shared.opts.hfcache_dir, torch_dtype=devices.dtype, **kwargs, + **offline_args, ) except Exception as e: shared.log.error(f'video load: module=pipe repo="{selected.repo}" cls={selected.repo_cls.__name__} {e}') diff --git a/modules/video_models/video_overrides.py b/modules/video_models/video_overrides.py index a6c9c01ed..bc2cb867c 100644 --- a/modules/video_models/video_overrides.py +++ b/modules/video_models/video_overrides.py @@ -8,17 +8,17 @@ from modules.video_models.models_def import Model debug = shared.log.trace if os.environ.get('SD_VIDEO_DEBUG', None) is not None else lambda *args, **kwargs: None -def load_override(selected: Model): +def load_override(selected: Model, **load_args): kwargs = {} # Allegro if 'Allegro T2V' in selected.name: - kwargs['vae'] = diffusers.AutoencoderKLAllegro.from_pretrained(selected.repo, subfolder="vae", torch_dtype=torch.float32, cache_dir=shared.opts.hfcache_dir) + kwargs['vae'] = diffusers.AutoencoderKLAllegro.from_pretrained(selected.repo, subfolder="vae", torch_dtype=torch.float32, cache_dir=shared.opts.hfcache_dir, **load_args) # LTX if 'LTXVideo 0.9.5 I2V' in selected.name: - kwargs['vae'] = diffusers.AutoencoderKLLTXVideo.from_pretrained(selected.repo, subfolder="vae", torch_dtype=torch.float32, cache_dir=shared.opts.hfcache_dir) + kwargs['vae'] = diffusers.AutoencoderKLLTXVideo.from_pretrained(selected.repo, subfolder="vae", torch_dtype=torch.float32, cache_dir=shared.opts.hfcache_dir, **load_args) # WAN if 'WAN 2.1 14B' in selected.name: - kwargs['vae'] = diffusers.AutoencoderKLWan.from_pretrained(selected.repo, subfolder="vae", torch_dtype=torch.float32, cache_dir=shared.opts.hfcache_dir) + kwargs['vae'] = diffusers.AutoencoderKLWan.from_pretrained(selected.repo, subfolder="vae", torch_dtype=torch.float32, cache_dir=shared.opts.hfcache_dir, **load_args) if ('A14B' in selected.name) or ('14B VACE' in selected.name): if shared.opts.model_wan_stage == 'combined': kwargs['boundary_ratio'] = shared.opts.model_wan_boundary From 0faf61f48ad32480f5885ae2fdfc8ed94d9975ff Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Wed, 22 Oct 2025 08:39:45 -0400 Subject: [PATCH 07/13] video tab add params.txt Signed-off-by: Vladimir Mandic --- .gitignore | 1 + CHANGELOG.md | 1 + modules/framepack/framepack_worker.py | 18 +++++++- modules/generation_parameters_copypaste.py | 2 +- modules/images_namegen.py | 12 ++--- modules/ltx/ltx_process.py | 3 ++ modules/processing_class.py | 6 ++- modules/ui_video.py | 14 +++++- modules/video_models/video_run.py | 3 ++ modules/video_models/video_save.py | 52 +++++++++++++++++++--- modules/video_models/video_ui.py | 3 +- 11 files changed, 95 insertions(+), 20 deletions(-) diff --git a/.gitignore b/.gitignore index 9bc6d5a24..3bb999538 100644 --- a/.gitignore +++ b/.gitignore @@ -41,6 +41,7 @@ tunableop_results*.csv /*.txt /*.mp3 /*.lnk +/*.swp !webui.bat !webui.sh !package.json diff --git a/CHANGELOG.md b/CHANGELOG.md index c60c6f3da..ae551af28 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ - fix `wan-2.2-a14b` stage selection - fix `wan-2.2-5b` vae decode - disabling live preview should not disable progress updates + - video tab create `params.txt` with metadata ## Update for 2025-10-18 diff --git a/modules/framepack/framepack_worker.py b/modules/framepack/framepack_worker.py index cda5677f8..6558c0765 100644 --- a/modules/framepack/framepack_worker.py +++ b/modules/framepack/framepack_worker.py @@ -308,12 +308,26 @@ def worker( if is_last_section: break - total_generated_frames, _video_filename = save_video(history_pixels, mp4_fps, mp4_codec, mp4_opt, mp4_ext, mp4_sf, mp4_video, mp4_frames, mp4_interpolate, pbar=pbar, stream=stream, metadata=metadata) + total_generated_frames, _video_filename = save_video( + None, + history_pixels, + mp4_fps, + mp4_codec, + mp4_opt, + mp4_ext, + mp4_sf, + mp4_video, + mp4_frames, + mp4_interpolate, + pbar=pbar, + stream=stream, + metadata=metadata, + ) except AssertionError: shared.log.info('FramePack: interrupted') if shared.opts.keep_incomplete: - save_video(history_pixels, mp4_fps, mp4_codec, mp4_opt, mp4_ext, mp4_sf, mp4_video, mp4_frames, mp4_interpolate=0, stream=stream, metadata=metadata) + save_video(None, history_pixels, mp4_fps, mp4_codec, mp4_opt, mp4_ext, mp4_sf, mp4_video, mp4_frames, mp4_interpolate=0, stream=stream, metadata=metadata) except Exception as e: shared.log.error(f'FramePack: {e}') errors.display(e, 'FramePack') diff --git a/modules/generation_parameters_copypaste.py b/modules/generation_parameters_copypaste.py index 1427e53cc..df0ea1643 100644 --- a/modules/generation_parameters_copypaste.py +++ b/modules/generation_parameters_copypaste.py @@ -3,7 +3,6 @@ import io import os from PIL import Image import gradio as gr -from modules.paths import params_path from modules import shared, gr_tempdir, script_callbacks, images from modules.infotext import parse, mapping, quote, unquote # pylint: disable=unused-import @@ -204,6 +203,7 @@ def create_override_settings_dict(text_pairs): def connect_paste(button, local_paste_fields, input_comp, override_settings_component, tabname): def paste_func(prompt): + from modules.paths import params_path if prompt is None or len(prompt.strip()) == 0: if os.path.exists(params_path): with open(params_path, "r", encoding="utf8") as file: diff --git a/modules/images_namegen.py b/modules/images_namegen.py index 849450d5b..f81a6447d 100644 --- a/modules/images_namegen.py +++ b/modules/images_namegen.py @@ -23,8 +23,8 @@ NOTHING = object() class FilenameGenerator: replacements = { - 'width': lambda self: self.image.width, - 'height': lambda self: self.image.height, + 'width': lambda self: self.width, + 'height': lambda self: self.height, 'batch_number': lambda self: self.batch_number, 'iter_number': lambda self: self.iter_number, 'num': lambda self: NOTHING if self.p.n_iter == 1 and self.p.batch_size == 1 else self.p.iteration * self.p.batch_size + self.p.batch_index + 1, @@ -32,8 +32,8 @@ class FilenameGenerator: 'date': lambda self: datetime.datetime.now().strftime('%Y-%m-%d'), 'datetime': lambda self, *args: self.datetime(*args), # accepts formats: [datetime], [datetime], [datetime