diff --git a/CHANGELOG.md b/CHANGELOG.md index 81d3ca916..8e25c8456 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -57,6 +57,9 @@ persist *models -> hugginface -> token* persist *models -> civitai -> token* - global switch to lancosz method for all interal resize ops and bicubic for interpolation ops + - **Text encoder** + add advanced per-model options for text encoder + set in *settings -> text encoder -> Optional* - **Fixes** - update torch nightly urls - docs/wiki always use relative links @@ -65,6 +68,7 @@ - ui log scroll to bottom - ui fix send to inpaint/sketch - modernui add control init image toggle + - modernui fix sampler advanced options - outpaint fixes - validate output before hires/refine - scheduler fix sigma index out of bounds diff --git a/extensions-builtin/sdnext-modernui b/extensions-builtin/sdnext-modernui index 6d00d3fed..64ee73317 160000 --- a/extensions-builtin/sdnext-modernui +++ b/extensions-builtin/sdnext-modernui @@ -1 +1 @@ -Subproject commit 6d00d3fedf685f33b8b13f6477dd4af15bcc959e +Subproject commit 64ee7331795ff98713b8c34b2875b0ab5de2cbf3 diff --git a/modules/control/units/controlnet.py b/modules/control/units/controlnet.py index 9c638f648..27519709a 100644 --- a/modules/control/units/controlnet.py +++ b/modules/control/units/controlnet.py @@ -343,7 +343,7 @@ class ControlNetPipeline(): if len(controlnets) > 1: # TODO controlnet-union multi-unit log.warning(f'Control {what}: units={classes} supports single unit only') - controlnets = controlnets[0] + # controlnets = controlnets[0] else: cls = StableDiffusionXLControlNetPipeline self.pipeline = cls( diff --git a/modules/processing_args.py b/modules/processing_args.py index 021d9dd3a..d1ba840ea 100644 --- a/modules/processing_args.py +++ b/modules/processing_args.py @@ -175,13 +175,14 @@ def set_pipeline_args(p, model, prompts:list, negative_prompts:list, prompts_2:t else: args['negative_prompt'] = negative_prompts if 'complex_human_instruction' in possible: - chi = any(len(p) < 300 for p in prompts) + chi = shared.opts.te_complex_human_instruction p.extra_generation_params["CHI"] = chi if not chi: args['complex_human_instruction'] = None if 'use_resolution_binning' in possible: args['use_resolution_binning'] = False - # p.extra_generation_params["Binning"] = True + if 'use_mask_in_transformer' in possible: + args['use_mask_in_transformer'] = shared.opts.te_use_mask if prompt_parser_diffusers.embedder is not None and not prompt_parser_diffusers.embedder.scheduled_prompt: # not scheduled so we dont need it anymore prompt_parser_diffusers.embedder = None diff --git a/modules/prompt_parser_diffusers.py b/modules/prompt_parser_diffusers.py index 99796e770..fc6b2af52 100644 --- a/modules/prompt_parser_diffusers.py +++ b/modules/prompt_parser_diffusers.py @@ -534,7 +534,7 @@ def get_weighted_text_embeddings(pipe, prompt: str = "", neg_prompt: str = "", c debug(f'Prompt: pooled={pooled_prompt_embeds[0].shape} time={(time.time() - t0):.3f}') elif prompt_embeds[-1].shape[-1] > 768: t0 = time.time() - if shared.opts.diffusers_pooled == "weighted": + if shared.opts.te_pooled_embeds: pooled_prompt_embeds = embedding_providers[-1].text_encoder.text_projection(prompt_embeds[-1][ torch.arange(prompt_embeds[-1].shape[0], device=device), (ptokens.to(dtype=torch.int, device=device) == 49407) diff --git a/modules/shared.py b/modules/shared.py index d3bb30dc7..b8c9a6f7d 100644 --- a/modules/shared.py +++ b/modules/shared.py @@ -517,7 +517,10 @@ options_templates.update(options_section(('text_encoder', "Text Encoder"), { "comma_padding_backtrack": OptionInfo(20, "Prompt padding", gr.Slider, {"minimum": 0, "maximum": 74, "step": 1, "visible": not native }), "sd_textencder_linebreak": OptionInfo(True, "Use line break as prompt segment marker", gr.Checkbox), "diffusers_zeros_prompt_pad": OptionInfo(False, "Use zeros for prompt padding", gr.Checkbox), - "diffusers_pooled": OptionInfo("default", "Diffusers SDXL pooled embeds", gr.Radio, {"choices": ['default', 'weighted']}), + "te_optional_sep": OptionInfo("

Optional

", "", gr.HTML), + "te_pooled_embeds": OptionInfo(False, "SDXL: Use weighted pooled embeds"), + "te_complex_human_instruction": OptionInfo(True, "Sana: Use complex human instructions"), + "te_use_mask": OptionInfo(True, "Lumina: Use mask in transformers"), })) options_templates.update(options_section(('cuda', "Compute Settings"), {