mirror of
https://github.com/vladmandic/automatic
synced 2026-09-19 17:24:32 +02:00
Control add setting to run hires with or without control
Signed-off-by: Vladimir Mandic <mandic00@live.com>
This commit is contained in:
@@ -6,6 +6,8 @@
|
||||
- Add [JoyCaption Beta](https://huggingface.co/fancyfeast/llama-joycaption-beta-one-hf-llava) support (in addition to existing JoyCaption Alpha)
|
||||
- Support Remote VAE with *Omnigen, Lumina 2 and PixArt*
|
||||
- Use Diffusers version of *OmniGen*
|
||||
- Control move global settings to control elements -> control settings tab
|
||||
- Control add setting to run hires with or without control
|
||||
|
||||
- **SDNQ Quantization**
|
||||
- Add modules_to_not_convert support for post mode
|
||||
|
||||
@@ -25,7 +25,7 @@ def get_sd_models():
|
||||
|
||||
def get_controlnets(model_type: Optional[str] = None):
|
||||
from modules.control.units.controlnet import api_list_models
|
||||
return api_list_models()
|
||||
return api_list_models(model_type)
|
||||
|
||||
def get_hypernetworks():
|
||||
return [{"name": name, "path": shared.hypernetworks[name]} for name in shared.hypernetworks]
|
||||
|
||||
@@ -152,7 +152,7 @@ def api_list_models(model_type: str = None):
|
||||
model_list += list(predefined_sd3)
|
||||
model_list += sorted(find_models())
|
||||
return model_list
|
||||
|
||||
|
||||
|
||||
def list_models(refresh=False):
|
||||
import modules.shared
|
||||
|
||||
@@ -170,7 +170,7 @@ def process_hires(p: processing.StableDiffusionProcessing, output):
|
||||
prev_job = shared.state.job
|
||||
|
||||
# hires runs on original pipeline
|
||||
if hasattr(shared.sd_model, 'restore_pipeline') and shared.sd_model.restore_pipeline is not None:
|
||||
if hasattr(shared.sd_model, 'restore_pipeline') and (shared.sd_model.restore_pipeline is not None) and not shared.opts.control_hires:
|
||||
shared.sd_model.restore_pipeline()
|
||||
|
||||
# upscale
|
||||
@@ -200,8 +200,8 @@ def process_hires(p: processing.StableDiffusionProcessing, output):
|
||||
if 'Upscale' in shared.sd_model.__class__.__name__ or 'Flux' in shared.sd_model.__class__.__name__ or 'Kandinsky' in shared.sd_model.__class__.__name__:
|
||||
output.images = processing_vae.vae_decode(latents=output.images, model=shared.sd_model, vae_type=p.vae_type, output_type='pil', width=p.width, height=p.height)
|
||||
if p.is_control and hasattr(p, 'task_args') and p.task_args.get('image', None) is not None:
|
||||
if hasattr(shared.sd_model, "vae") and output.images is not None and len(output.images) > 0:
|
||||
output.images = processing_vae.vae_decode(latents=output.images, model=shared.sd_model, vae_type=p.vae_type, output_type='pil', width=p.hr_upscale_to_x, height=p.hr_upscale_to_y) # controlnet cannnot deal with latent input
|
||||
if hasattr(shared.sd_model, "vae") and output.images is not None and len(output.images) > 0:
|
||||
output.images = processing_vae.vae_decode(latents=output.images, model=shared.sd_model, vae_type=p.vae_type, output_type='pil', width=p.hr_upscale_to_x, height=p.hr_upscale_to_y) # controlnet cannnot deal with latent input
|
||||
update_sampler(p, shared.sd_model, second_pass=True)
|
||||
orig_denoise = p.denoising_strength
|
||||
p.denoising_strength = strength
|
||||
|
||||
+5
-4
@@ -895,10 +895,11 @@ options_templates.update(options_section(('postprocessing', "Postprocessing"), {
|
||||
}))
|
||||
|
||||
options_templates.update(options_section(('control', "Control Options"), {
|
||||
"control_max_units": OptionInfo(4, "Maximum number of units", gr.Slider, {"minimum": 1, "maximum": 10, "step": 1}),
|
||||
"control_tiles": OptionInfo("1x1, 1x2, 1x3, 1x4, 2x1, 2x1, 2x2, 2x3, 2x4, 3x1, 3x2, 3x3, 3x4, 4x1, 4x2, 4x3, 4x4", "Tiling options"),
|
||||
"control_move_processor": OptionInfo(False, "Processor move to CPU after use"),
|
||||
"control_unload_processor": OptionInfo(False, "Processor unload after use"),
|
||||
"control_hires": OptionInfo(False, "Use control during hires", gr.Checkbox, {"visible": False}),
|
||||
"control_max_units": OptionInfo(4, "Maximum number of units", gr.Slider, {"minimum": 1, "maximum": 10, "step": 1, "visible": False}),
|
||||
"control_tiles": OptionInfo("1x1, 1x2, 1x3, 1x4, 2x1, 2x1, 2x2, 2x3, 2x4, 3x1, 3x2, 3x3, 3x4, 4x1, 4x2, 4x3, 4x4", "Tiling options", gr.Textbox, {"visible": False}),
|
||||
"control_move_processor": OptionInfo(False, "Processor move to CPU after use", gr.Checkbox, {"visible": False}),
|
||||
"control_unload_processor": OptionInfo(False, "Processor unload after use", gr.Checkbox, {"visible": False}),
|
||||
}))
|
||||
|
||||
options_templates.update(options_section(('interrogate', "Interrogate"), {
|
||||
|
||||
+23
-1
@@ -467,9 +467,31 @@ def create_ui(_blocks: gr.Blocks=None):
|
||||
if i == 0:
|
||||
units[-1].enabled = True # enable first unit in group
|
||||
|
||||
with gr.Accordion('Processor settings', open=False, elem_classes=['control-settings']) as _tab_settings:
|
||||
with gr.Accordion('Control settings', open=False, elem_classes=['control-settings']) as _tab_settings:
|
||||
with gr.Group(elem_classes=['processor-group']):
|
||||
settings = []
|
||||
with gr.Accordion('Global', open=True, elem_classes=['processor-settings']):
|
||||
control_hires = gr.Checkbox(label="Use control during hires", value=shared.opts.control_hires, elem_id='control_hires')
|
||||
def set_control_hires(value):
|
||||
shared.opts.control_active = value
|
||||
control_hires.change(fn=set_control_hires, inputs=[control_hires], outputs=[])
|
||||
control_max_units = gr.Slider(label="Maximum units", minimum=1, maximum=10, step=1, value=shared.opts.control_max_units, elem_id='control_max_units')
|
||||
def set_control_max_units(value):
|
||||
shared.opts.control_max_units = value
|
||||
control_max_units.change(fn=set_control_max_units, inputs=[control_max_units], outputs=[])
|
||||
control_tiles = gr.Textbox(label="Tiling options", value=shared.opts.control_tiles, elem_id='control_tiles')
|
||||
def set_control_tiles(value):
|
||||
shared.opts.control_tiles = value
|
||||
control_tiles.change(fn=set_control_tiles, inputs=[control_tiles], outputs=[])
|
||||
control_move_processor = gr.Checkbox(label="Move processor to CPU after use", value=shared.opts.control_move_processor, elem_id='control_move_processor')
|
||||
def set_control_move_processor(value):
|
||||
shared.opts.control_move_processor = value
|
||||
control_move_processor.change(fn=set_control_move_processor, inputs=[control_move_processor], outputs=[])
|
||||
control_unload_processor = gr.Checkbox(label="Unload processor after use", value=shared.opts.control_unload_processor, elem_id='control_unload_processor')
|
||||
def set_control_unload_processor(value):
|
||||
shared.opts.control_unload_processor = value
|
||||
control_unload_processor.change(fn=set_control_unload_processor, inputs=[control_unload_processor], outputs=[])
|
||||
|
||||
with gr.Accordion('HED', open=True, elem_classes=['processor-settings']):
|
||||
settings.append(gr.Checkbox(label="Scribble", value=False))
|
||||
with gr.Accordion('Midas depth', open=True, elem_classes=['processor-settings']):
|
||||
|
||||
Reference in New Issue
Block a user