| |
| |
|
|
| from cog import BasePredictor, Input, Path |
|
|
| import os |
| import sys |
| import signal |
| import re |
| from typing import Dict, List, Any |
|
|
| import logging |
| logging.getLogger("xformers").addFilter(lambda record: 'A matching Triton is not available' not in record.getMessage()) |
|
|
| from modules import errors |
| from modules.call_queue import wrap_queued_call, queue_lock, wrap_gradio_gpu_call |
|
|
| import torch |
|
|
| |
| if ".dev" in torch.__version__ or "+git" in torch.__version__: |
| torch.__long_version__ = torch.__version__ |
| torch.__version__ = re.search(r'[\d.]+[\d]', torch.__version__).group(0) |
|
|
| from modules import shared, devices, ui_tempdir |
| from modules.api.api import encode_pil_to_base64 |
| import modules.codeformer_model as codeformer |
| import modules.face_restoration |
| import modules.gfpgan_model as gfpgan |
| import modules.img2img |
|
|
| import modules.lowvram |
| import modules.paths |
| import modules.scripts |
| import modules.sd_hijack |
| import modules.sd_models |
| import modules.sd_vae |
| import modules.txt2img |
| import modules.script_callbacks |
| import modules.textual_inversion.textual_inversion |
| import modules.progress |
|
|
| import modules.ui |
| from modules import modelloader |
| from modules.shared import cmd_opts, opts |
| import modules.hypernetworks.hypernetwork |
|
|
| from modules.processing import StableDiffusionProcessingTxt2Img, StableDiffusionProcessingImg2Img, process_images |
|
|
|
|
| def initialize(): |
| modelloader.cleanup_models() |
| modules.sd_models.setup_model() |
| codeformer.setup_model(cmd_opts.codeformer_models_path) |
| gfpgan.setup_model(cmd_opts.gfpgan_models_path) |
|
|
| modelloader.list_builtin_upscalers() |
| modelloader.load_upscalers() |
|
|
| modules.sd_vae.refresh_vae_list() |
|
|
|
|
| try: |
| modules.sd_models.load_model() |
| except Exception as e: |
| errors.display(e, "loading stable diffusion model") |
| print("", file=sys.stderr) |
| print("Stable diffusion model failed to load, exiting", file=sys.stderr) |
| exit(1) |
|
|
| shared.opts.data["sd_model_checkpoint"] = shared.sd_model.sd_checkpoint_info.title |
| shared.opts.onchange("sd_model_checkpoint", wrap_queued_call(lambda: modules.sd_models.reload_model_weights())) |
| shared.opts.onchange("sd_vae", wrap_queued_call(lambda: modules.sd_vae.reload_vae_weights()), call=False) |
| shared.opts.onchange("sd_vae_as_default", wrap_queued_call(lambda: modules.sd_vae.reload_vae_weights()), call=False) |
| shared.opts.onchange("temp_dir", ui_tempdir.on_tmpdir_changed) |
|
|
| |
| def sigint_handler(sig, frame): |
| print(f'Interrupted with signal {sig} in {frame}') |
| os._exit(0) |
|
|
| signal.signal(signal.SIGINT, sigint_handler) |
|
|
| class Predictor(BasePredictor): |
| def setup(self): |
| """Load the model into memory to make running multiple predictions efficient""" |
| initialize() |
| self.shared = shared |
|
|
| def predict( |
| self, |
| prompt: str = Input(description="prompt en"), |
| ) -> Dict[str, Any]: |
| """Run a single prediction on the model""" |
| args = { |
| "do_not_save_samples": True, |
| "do_not_save_grid": True, |
| "outpath_samples": "./output", |
| "prompt": "lora:koreanDollLikeness_v15:0.66, best quality, ultra high res, (photorealistic:1.4), 1girl, beige sweater, black choker, smile, laughing, bare shoulders, solo focus, ((full body), (brown hair:1), looking at viewer", |
| "negative_prompt": "paintings, sketches, (worst quality:2), (low quality:2), (normal quality:2), lowres, normal quality, ((monochrome)), ((grayscale)), skin spots, acnes, skin blemishes, age spot, glans, (ugly:1.331), (duplicate:1.331), (morbid:1.21), (mutilated:1.21), (tranny:1.331), mutated hands, (poorly drawn hands:1.331), blurry, 3hands,4fingers,3arms, bad anatomy, missing fingers, extra digit, fewer digits, cropped, jpeg artifacts,poorly drawn face,mutation,deformed", |
| "sampler_name": "DPM++ SDE Karras", |
| "steps": 20, |
| "cfg_scale": 8, |
| "width": 512, |
| "height": 768, |
| "seed": -1, |
| } |
| if len(prompt) > 0: |
| print("get prompt from request: ", prompt) |
| args["prompt"] = prompt |
| p = StableDiffusionProcessingTxt2Img(sd_model=self.shared.sd_model, **args) |
| processed = process_images(p) |
| single_image_b64 = encode_pil_to_base64(processed.images[0]).decode('utf-8') |
| return { |
| "img_data": single_image_b64, |
| "parameters": processed.images[0].info.get('parameters', ""), |
| } |
|
|