| import threading |
|
|
|
|
| buffer = [] |
| outputs = [] |
| is_working = False |
|
|
|
|
| def worker(): |
| global buffer, outputs, is_working |
|
|
| import time |
| import shared |
| import random |
| import modules.default_pipeline as pipeline |
| import modules.path |
| import modules.patch |
|
|
| from modules.sdxl_styles import apply_style, aspect_ratios |
| from modules.private_logger import log |
|
|
| try: |
| async_gradio_app = shared.gradio_root |
| flag = f'''App started successful. Use the app with {str(async_gradio_app.local_url)} or {str(async_gradio_app.server_name)}:{str(async_gradio_app.server_port)}''' |
| if async_gradio_app.share: |
| flag += f''' or {async_gradio_app.share_url}''' |
| print(flag) |
| except Exception as e: |
| print(e) |
|
|
| def handler(task): |
| prompt, style_selection = task |
| steps = 30 |
| switch = 20 |
| aspect_ratios_selection = '1280×768' |
| seed = random.randint(1, int(1024*1024*1024)) |
| sharpness = 10.0 |
|
|
| loras=[(modules.path.default_lora_name, modules.path.default_lora_weight), ('None', 0.5), ('None', 0.5), ('None', 0.5), ('None', 0.5)] |
| modules.patch.sharpness = sharpness |
| pipeline.refresh_base_model(modules.path.default_base_model_name) |
| pipeline.refresh_refiner_model(modules.path.default_refiner_model_name) |
| pipeline.refresh_loras(loras) |
| pipeline.clean_prompt_cond_caches() |
|
|
| p_txt, n_txt = apply_style(style_selection, prompt) |
| width, height = aspect_ratios[aspect_ratios_selection] |
| results = [] |
| |
| def callback(step, x0, x, total_steps, y): |
| done_steps = step |
| outputs.append(['preview', ( |
| int(100.0 * float(done_steps) / float(steps)), |
| f'{step}/{total_steps}', |
| y)]) |
|
|
| img = pipeline.process(p_txt, n_txt, steps, switch, width, height, seed, callback=callback)[0] |
|
|
| d = [ |
| ('Prompt', prompt), |
| ('Style', style_selection), |
| ('Seed', seed) |
| ] |
| for n, w in loras: |
| if n != 'None': |
| d.append((f'LoRA [{n}] weight', w)) |
| img_path=log(img, d) |
|
|
| outputs.append(['results', [img, img_path]]) |
| return |
|
|
| while True: |
| time.sleep(0.01) |
| if len(buffer) > 0: |
| is_working=True |
| task = buffer.pop(0) |
| handler(task) |
| is_working=False |
| pass |
|
|
|
|
| threading.Thread(target=worker, daemon=True).start() |
|
|