diff --git a/extensions-builtin/sd-webui-agent-scheduler b/extensions-builtin/sd-webui-agent-scheduler index e270493ab..4af58ffa2 160000 --- a/extensions-builtin/sd-webui-agent-scheduler +++ b/extensions-builtin/sd-webui-agent-scheduler @@ -1 +1 @@ -Subproject commit e270493ab7c4b5cfb5eb39f474c34e51ebba8221 +Subproject commit 4af58ffa2c5406db9ef43d119edcd0b5eb305346 diff --git a/extensions-builtin/sd-webui-controlnet b/extensions-builtin/sd-webui-controlnet index d67f31a3a..0cfc88b6a 160000 --- a/extensions-builtin/sd-webui-controlnet +++ b/extensions-builtin/sd-webui-controlnet @@ -1 +1 @@ -Subproject commit d67f31a3a7b4a70facbbec2feea3f02d5ddf2fab +Subproject commit 0cfc88b6a892076d199e68c02e9c306ac6ab2ead diff --git a/modules/img2img.py b/modules/img2img.py index 0c7288009..9162a5625 100644 --- a/modules/img2img.py +++ b/modules/img2img.py @@ -177,6 +177,7 @@ def img2img(id_task: str, mode: int, prompt: str, negative_prompt: str, prompt_s ) p.scripts = modules.scripts.scripts_img2img p.script_args = args + p.extra_generation_params['Resize mode'] = resize_mode if mask: p.extra_generation_params["Mask blur"] = mask_blur if is_batch: diff --git a/modules/processing.py b/modules/processing.py index f6732e50d..4bf9b7e72 100644 --- a/modules/processing.py +++ b/modules/processing.py @@ -445,16 +445,13 @@ def fix_seed(p): p.subseed = get_fixed_seed(p.subseed) -def create_infotext(p: StableDiffusionProcessing, all_prompts, all_seeds, all_subseeds, comments=None, iteration=0, position_in_batch=0, index=None, all_negative_prompts=None): # pylint: disable=unused-argument +def create_infotext(p: StableDiffusionProcessing, all_prompts, all_seeds, all_subseeds, comments=None, iteration=0, position_in_batch=0, index=None, all_negative_prompts=None): if index is None: index = position_in_batch + iteration * p.batch_size - if all_negative_prompts is None: all_negative_prompts = p.all_negative_prompts - if p.full_quality: - vae = None if not shared.opts.add_model_name_to_info or sd_vae.loaded_vae_file is None else os.path.splitext(os.path.basename(sd_vae.loaded_vae_file))[0] - else: - vae = 'TAESD' + vae = (None if not shared.opts.add_model_name_to_info or sd_vae.loaded_vae_file is None else os.path.splitext(os.path.basename(sd_vae.loaded_vae_file))[0]) if p.full_quality else 'TAESD' + comment = ', '.join(comments) if comments is not None and type(comments) is list else None generation_params = { "Steps": p.steps, @@ -462,14 +459,15 @@ def create_infotext(p: StableDiffusionProcessing, all_prompts, all_seeds, all_su "Sampler": p.sampler_name, "CFG scale": p.cfg_scale, "Size": f"{p.width}x{p.height}", + "Batch": f'{p.n_iter}x{p.batch_size}' if p.n_iter > 1 or p.batch_size > 1 else None, "Parser": shared.opts.prompt_attention, - "Model": None if not shared.opts.add_model_name_to_info or not shared.sd_model.sd_checkpoint_info.model_name else shared.sd_model.sd_checkpoint_info.model_name.replace(',', '').replace(':', ''), - "Model hash": getattr(p, 'sd_model_hash', None if not shared.opts.add_model_hash_to_info or not shared.sd_model.sd_model_hash else shared.sd_model.sd_model_hash), - "Refiner": None if not shared.opts.add_model_name_to_info or not shared.sd_refiner or not shared.sd_refiner.sd_checkpoint_info.model_name else shared.sd_refiner.sd_checkpoint_info.model_name.replace(',', '').replace(':', ''), + "Model": None if (not shared.opts.add_model_name_to_info) or (not shared.sd_model.sd_checkpoint_info.model_name) else shared.sd_model.sd_checkpoint_info.model_name.replace(',', '').replace(':', ''), + "Model hash": getattr(p, 'sd_model_hash', None if (not shared.opts.add_model_hash_to_info) or (not shared.sd_model.sd_model_hash) else shared.sd_model.sd_model_hash), + "Refiner": None if (not shared.opts.add_model_name_to_info) or (not shared.sd_refiner) or (not shared.sd_refiner.sd_checkpoint_info.model_name) else shared.sd_refiner.sd_checkpoint_info.model_name.replace(',', '').replace(':', ''), "VAE": vae, # subseed "Variation seed": None if p.subseed_strength == 0 else all_subseeds[index], - "Variation seed strength": None if p.subseed_strength == 0 else p.subseed_strength, + "Variation strength": None if p.subseed_strength == 0 else p.subseed_strength, # seed resize "Seed resize from": None if p.seed_resize_from_w == 0 or p.seed_resize_from_h == 0 else f"{p.seed_resize_from_w}x{p.seed_resize_from_h}", "Init image hash": getattr(p, 'init_img_hash', None), @@ -478,18 +476,19 @@ def create_infotext(p: StableDiffusionProcessing, all_prompts, all_seeds, all_su "Clip skip": p.clip_skip if p.clip_skip > 1 else None, # ensd "ENSD": shared.opts.eta_noise_seed_delta if shared.opts.eta_noise_seed_delta != 0 and sd_samplers_common.is_sampler_using_eta_noise_seed_delta(p) else None, - # enable_hr - "Latent sampler": p.latent_sampler if p.enable_hr else None, - "Image CFG scale": p.image_cfg_scale if p.enable_hr else None, - "Denoising strength": p.denoising_strength if p.enable_hr else None, - "Refiner start": p.refiner_start if p.enable_hr else None, - "Secondary steps": p.hr_second_pass_steps if p.enable_hr else None, - # restore_faces + # restore_faces, tiling "Face restoration": shared.opts.face_restoration_model if p.restore_faces else None, + "Tiling": p.tiling if p.tiling else None, + # enable_hr + "Prompt2": p.refiner_prompt if p.enable_hr and len(p.refiner_prompt) > 0 else None, + "Negative2": p.refiner_negative if p.enable_hr and len(p.refiner_negative) > 0 else None, + "Latent sampler": p.latent_sampler if p.enable_hr and p.latent_sampler != p.sampler_name else None, + "Denoising strength": p.denoising_strength if p.enable_hr else None, # sdnext + "Backend": 'Diffusers' if shared.backend == shared.Backend.DIFFUSERS else 'Original', "Version": git_commit, - "Pipeline": 'Diffusers' if shared.backend == shared.Backend.DIFFUSERS else 'Original', - "Operations": ', '.join(list(set(p.ops))) if len(p.ops) > 0 else None + "Comment": comment, + "Operations": ', '.join(list(set(p.ops))) if len(p.ops) > 0 else None, } token_merging_ratio = p.get_token_merging_ratio() token_merging_ratio_hr = p.get_token_merging_ratio(for_hr=True) if p.enable_hr else None diff --git a/modules/processing_diffusers.py b/modules/processing_diffusers.py index b0dccfbfd..ab104b11c 100644 --- a/modules/processing_diffusers.py +++ b/modules/processing_diffusers.py @@ -160,6 +160,14 @@ def process_diffusers(p: StableDiffusionProcessing, seeds, prompts, negative_pro if sampler is None: sampler = sd_samplers.all_samplers_map.get("UniPC") sd_samplers.create_sampler(sampler.name, shared.sd_model) # TODO(Patrick): For wrapped pipelines this is currently a no-op + sampler_options = f'type:{shared.opts.schedulers_prediction_type} ' if shared.opts.schedulers_prediction_type != 'default' else '' + sampler_options += 'no_karras ' if not shared.opts.schedulers_use_karras else '' + sampler_options += 'no_low_order' if not shared.opts.schedulers_use_loworder else '' + sampler_options += 'dynamic_thresholding' if shared.opts.schedulers_use_thresholding else '' + sampler_options += f'solver:{shared.opts.schedulers_dpm_solver}' if shared.opts.schedulers_dpm_solver != 'sde-dpmsolver++' else '' + sampler_options += f'beta:{shared.opts.schedulers_beta_schedule}:{shared.opts.schedulers_beta_start}:{shared.opts.schedulers_beta_end}' if shared.opts.schedulers_beta_schedule != 'default' else '' + p.extra_generation_params['Sampler options'] = sampler_options if len(sampler_options) > 0 else None + p.extra_generation_params['Pipeline'] = shared.sd_model.__class__.__name__ cross_attention_kwargs={} if len(getattr(p, 'init_images', [])) > 0: @@ -201,6 +209,8 @@ def process_diffusers(p: StableDiffusionProcessing, seeds, prompts, negative_pro clip_skip=p.clip_skip, **task_specific_kwargs ) + p.extra_generation_params['CFG rescale'] = p.diffusers_guidance_rescale + p.extra_generation_params["Eta DDIM"] = shared.opts.eta_ddim if shared.opts.eta_ddim is not None and shared.opts.eta_ddim > 0 else None output = shared.sd_model(**pipe_args) # pylint: disable=not-callable if shared.state.interrupted or shared.state.skipped: unload_diffusers_lora() @@ -210,6 +220,7 @@ def process_diffusers(p: StableDiffusionProcessing, seeds, prompts, negative_pro output.images = vae_decode(output.images, shared.sd_model) if p.full_quality else taesd_vae_decode(output.images, shared.sd_model) if lora_state['active']: + p.extra_generation_params['Lora method'] = shared.opts.diffusers_lora_loader unload_diffusers_lora() if refiner_enabled: @@ -256,6 +267,10 @@ def process_diffusers(p: StableDiffusionProcessing, seeds, prompts, negative_pro clip_skip=p.clip_skip, ) refiner_output = shared.sd_refiner(**pipe_args) # pylint: disable=not-callable + p.extra_generation_params['Refiner CFG scale'] = p.image_cfg_scale if p.image_cfg_scale is not None else None + p.extra_generation_params['Refiner start'] = p.refiner_start + p.extra_generation_params["Hires steps"] = p.hr_second_pass_steps + if not shared.state.interrupted and not shared.state.skipped: refiner_images = vae_decode(refiner_output.images, shared.sd_refiner) results.append(refiner_images[0])