| | import gc
|
| | from math import ceil
|
| | from typing import Any, List
|
| | import random
|
| |
|
| | import numpy as np
|
| | import torch
|
| | from backend.device import is_openvino_device
|
| | from backend.controlnet import (
|
| | load_controlnet_adapters,
|
| | update_controlnet_arguments,
|
| | )
|
| | from backend.models.lcmdiffusion_setting import (
|
| | DiffusionTask,
|
| | LCMDiffusionSetting,
|
| | LCMLora,
|
| | )
|
| | from backend.openvino.pipelines import (
|
| | get_ov_image_to_image_pipeline,
|
| | get_ov_text_to_image_pipeline,
|
| | ov_load_tiny_autoencoder,
|
| | get_ov_diffusion_pipeline,
|
| | )
|
| | from backend.pipelines.lcm import (
|
| | get_image_to_image_pipeline,
|
| | get_lcm_model_pipeline,
|
| | load_taesd,
|
| | )
|
| | from backend.pipelines.lcm_lora import get_lcm_lora_pipeline
|
| | from constants import DEVICE, GGUF_THREADS
|
| | from diffusers import LCMScheduler
|
| | from image_ops import resize_pil_image
|
| | from backend.openvino.ov_hc_stablediffusion_pipeline import OvHcLatentConsistency
|
| | from backend.gguf.gguf_diffusion import (
|
| | GGUFDiffusion,
|
| | ModelConfig,
|
| | Txt2ImgConfig,
|
| | SampleMethod,
|
| | )
|
| | from paths import get_app_path
|
| | from pprint import pprint
|
| |
|
| | try:
|
| |
|
| | import tomesd
|
| | except ImportError:
|
| | print("tomesd library unavailable; disabling token merging support")
|
| | tomesd = None
|
| |
|
| |
|
| | class LCMTextToImage:
|
| | def __init__(
|
| | self,
|
| | device: str = "cpu",
|
| | ) -> None:
|
| | self.pipeline = None
|
| | self.use_openvino = False
|
| | self.device = ""
|
| | self.previous_model_id = None
|
| | self.previous_use_tae_sd = False
|
| | self.previous_use_lcm_lora = False
|
| | self.previous_ov_model_id = ""
|
| | self.previous_token_merging = 0.0
|
| | self.previous_safety_checker = False
|
| | self.previous_use_openvino = False
|
| | self.img_to_img_pipeline = None
|
| | self.is_openvino_init = False
|
| | self.previous_lora = None
|
| | self.task_type = DiffusionTask.text_to_image
|
| | self.previous_use_gguf_model = False
|
| | self.previous_gguf_model = None
|
| | self.torch_data_type = (
|
| | torch.float32 if is_openvino_device() or DEVICE == "mps" else torch.float16
|
| | )
|
| | self.ov_model_id = None
|
| | print(f"Torch datatype : {self.torch_data_type}")
|
| |
|
| | def _pipeline_to_device(self):
|
| | print(f"Pipeline device : {DEVICE}")
|
| | print(f"Pipeline dtype : {self.torch_data_type}")
|
| | self.pipeline.to(
|
| | torch_device=DEVICE,
|
| | torch_dtype=self.torch_data_type,
|
| | )
|
| |
|
| | def _add_freeu(self):
|
| | pipeline_class = self.pipeline.__class__.__name__
|
| | if isinstance(self.pipeline.scheduler, LCMScheduler):
|
| | if pipeline_class == "StableDiffusionPipeline":
|
| | print("Add FreeU - SD")
|
| | self.pipeline.enable_freeu(
|
| | s1=0.9,
|
| | s2=0.2,
|
| | b1=1.2,
|
| | b2=1.4,
|
| | )
|
| | elif pipeline_class == "StableDiffusionXLPipeline":
|
| | print("Add FreeU - SDXL")
|
| | self.pipeline.enable_freeu(
|
| | s1=0.6,
|
| | s2=0.4,
|
| | b1=1.1,
|
| | b2=1.2,
|
| | )
|
| |
|
| | def _enable_vae_tiling(self):
|
| | self.pipeline.vae.enable_tiling()
|
| |
|
| | def _update_lcm_scheduler_params(self):
|
| | if isinstance(self.pipeline.scheduler, LCMScheduler):
|
| | self.pipeline.scheduler = LCMScheduler.from_config(
|
| | self.pipeline.scheduler.config,
|
| | beta_start=0.001,
|
| | beta_end=0.01,
|
| | )
|
| |
|
| | def _is_hetero_pipeline(self) -> bool:
|
| | return "square" in self.ov_model_id.lower()
|
| |
|
| | def _load_ov_hetero_pipeline(self):
|
| | print("Loading Heterogeneous Compute pipeline")
|
| | if DEVICE.upper() == "NPU":
|
| | device = ["NPU", "NPU", "NPU"]
|
| | self.pipeline = OvHcLatentConsistency(self.ov_model_id, device)
|
| | else:
|
| | self.pipeline = OvHcLatentConsistency(self.ov_model_id)
|
| |
|
| | def _generate_images_hetero_compute(
|
| | self,
|
| | lcm_diffusion_setting: LCMDiffusionSetting,
|
| | ):
|
| | print("Using OpenVINO ")
|
| | if lcm_diffusion_setting.diffusion_task == DiffusionTask.text_to_image.value:
|
| | return [
|
| | self.pipeline.generate(
|
| | prompt=lcm_diffusion_setting.prompt,
|
| | neg_prompt=lcm_diffusion_setting.negative_prompt,
|
| | init_image=None,
|
| | strength=1.0,
|
| | num_inference_steps=lcm_diffusion_setting.inference_steps,
|
| | )
|
| | ]
|
| | else:
|
| | return [
|
| | self.pipeline.generate(
|
| | prompt=lcm_diffusion_setting.prompt,
|
| | neg_prompt=lcm_diffusion_setting.negative_prompt,
|
| | init_image=lcm_diffusion_setting.init_image,
|
| | strength=lcm_diffusion_setting.strength,
|
| | num_inference_steps=lcm_diffusion_setting.inference_steps,
|
| | )
|
| | ]
|
| |
|
| | def _is_valid_mode(
|
| | self,
|
| | modes: List,
|
| | ) -> bool:
|
| | return modes.count(True) == 1 or modes.count(False) == 3
|
| |
|
| | def _validate_mode(
|
| | self,
|
| | modes: List,
|
| | ) -> None:
|
| | if not self._is_valid_mode(modes):
|
| | raise ValueError("Invalid mode,delete configs/settings.yaml and retry!")
|
| |
|
| | def _is_sana_model(self) -> bool:
|
| | return "sana" in self.ov_model_id.lower()
|
| |
|
| | def init(
|
| | self,
|
| | device: str = "cpu",
|
| | lcm_diffusion_setting: LCMDiffusionSetting = LCMDiffusionSetting(),
|
| | ) -> None:
|
| |
|
| |
|
| | modes = [
|
| | lcm_diffusion_setting.use_gguf_model,
|
| | lcm_diffusion_setting.use_openvino,
|
| | lcm_diffusion_setting.use_lcm_lora,
|
| | ]
|
| | self._validate_mode(modes)
|
| | self.device = device
|
| | self.use_openvino = lcm_diffusion_setting.use_openvino
|
| | model_id = lcm_diffusion_setting.lcm_model_id
|
| | use_local_model = lcm_diffusion_setting.use_offline_model
|
| | use_tiny_auto_encoder = lcm_diffusion_setting.use_tiny_auto_encoder
|
| | use_lora = lcm_diffusion_setting.use_lcm_lora
|
| | lcm_lora: LCMLora = lcm_diffusion_setting.lcm_lora
|
| | token_merging = lcm_diffusion_setting.token_merging
|
| | self.ov_model_id = lcm_diffusion_setting.openvino_lcm_model_id
|
| |
|
| | if lcm_diffusion_setting.diffusion_task == DiffusionTask.image_to_image.value:
|
| | lcm_diffusion_setting.init_image = resize_pil_image(
|
| | lcm_diffusion_setting.init_image,
|
| | lcm_diffusion_setting.image_width,
|
| | lcm_diffusion_setting.image_height,
|
| | )
|
| |
|
| | if (
|
| | self.pipeline is None
|
| | or self.previous_model_id != model_id
|
| | or self.previous_use_tae_sd != use_tiny_auto_encoder
|
| | or self.previous_lcm_lora_base_id != lcm_lora.base_model_id
|
| | or self.previous_lcm_lora_id != lcm_lora.lcm_lora_id
|
| | or self.previous_use_lcm_lora != use_lora
|
| | or self.previous_ov_model_id != self.ov_model_id
|
| | or self.previous_token_merging != token_merging
|
| | or self.previous_safety_checker != lcm_diffusion_setting.use_safety_checker
|
| | or self.previous_use_openvino != lcm_diffusion_setting.use_openvino
|
| | or self.previous_use_gguf_model != lcm_diffusion_setting.use_gguf_model
|
| | or self.previous_gguf_model != lcm_diffusion_setting.gguf_model
|
| | or (
|
| | self.use_openvino
|
| | and (
|
| | self.previous_task_type != lcm_diffusion_setting.diffusion_task
|
| | or self.previous_lora != lcm_diffusion_setting.lora
|
| | )
|
| | )
|
| | or lcm_diffusion_setting.rebuild_pipeline
|
| | ):
|
| | if self.use_openvino and is_openvino_device():
|
| | if self.pipeline:
|
| | del self.pipeline
|
| | self.pipeline = None
|
| | gc.collect()
|
| | self.is_openvino_init = True
|
| | if (
|
| | lcm_diffusion_setting.diffusion_task
|
| | == DiffusionTask.text_to_image.value
|
| | ):
|
| | print(
|
| | f"***** Init Text to image (OpenVINO) - {self.ov_model_id} *****"
|
| | )
|
| | if "flux" in self.ov_model_id.lower() or self._is_sana_model():
|
| | if self._is_sana_model():
|
| | print("Loading OpenVINO SANA Sprint pipeline")
|
| | else:
|
| | print("Loading OpenVINO Flux pipeline")
|
| | self.pipeline = get_ov_diffusion_pipeline(self.ov_model_id)
|
| | elif self._is_hetero_pipeline():
|
| | self._load_ov_hetero_pipeline()
|
| | else:
|
| | self.pipeline = get_ov_text_to_image_pipeline(
|
| | self.ov_model_id,
|
| | use_local_model,
|
| | )
|
| | elif (
|
| | lcm_diffusion_setting.diffusion_task
|
| | == DiffusionTask.image_to_image.value
|
| | ):
|
| | if not self.pipeline and self._is_hetero_pipeline():
|
| | self._load_ov_hetero_pipeline()
|
| | else:
|
| | print(
|
| | f"***** Image to image (OpenVINO) - {self.ov_model_id} *****"
|
| | )
|
| | self.pipeline = get_ov_image_to_image_pipeline(
|
| | self.ov_model_id,
|
| | use_local_model,
|
| | )
|
| | elif lcm_diffusion_setting.use_gguf_model:
|
| | model = lcm_diffusion_setting.gguf_model.diffusion_path
|
| | print(f"***** Init Text to image (GGUF) - {model} *****")
|
| |
|
| |
|
| |
|
| |
|
| | self._init_gguf_diffusion(lcm_diffusion_setting)
|
| | else:
|
| | if self.pipeline or self.img_to_img_pipeline:
|
| | self.pipeline = None
|
| | self.img_to_img_pipeline = None
|
| | gc.collect()
|
| |
|
| | controlnet_args = load_controlnet_adapters(lcm_diffusion_setting)
|
| | if use_lora:
|
| | print(
|
| | f"***** Init LCM-LoRA pipeline - {lcm_lora.base_model_id} *****"
|
| | )
|
| | self.pipeline = get_lcm_lora_pipeline(
|
| | lcm_lora.base_model_id,
|
| | lcm_lora.lcm_lora_id,
|
| | use_local_model,
|
| | torch_data_type=self.torch_data_type,
|
| | pipeline_args=controlnet_args,
|
| | )
|
| |
|
| | else:
|
| | print(f"***** Init LCM Model pipeline - {model_id} *****")
|
| | self.pipeline = get_lcm_model_pipeline(
|
| | model_id,
|
| | use_local_model,
|
| | controlnet_args,
|
| | )
|
| |
|
| | self.img_to_img_pipeline = get_image_to_image_pipeline(self.pipeline)
|
| |
|
| | if tomesd and token_merging > 0.001:
|
| | print(f"***** Token Merging: {token_merging} *****")
|
| | tomesd.apply_patch(self.pipeline, ratio=token_merging)
|
| | tomesd.apply_patch(self.img_to_img_pipeline, ratio=token_merging)
|
| |
|
| | if use_tiny_auto_encoder:
|
| | if self.use_openvino and is_openvino_device():
|
| | if not self._is_sana_model():
|
| | print("Using Tiny AutoEncoder (OpenVINO)")
|
| | ov_load_tiny_autoencoder(
|
| | self.pipeline,
|
| | use_local_model,
|
| | )
|
| | else:
|
| | print("Using Tiny Auto Encoder")
|
| | load_taesd(
|
| | self.pipeline,
|
| | use_local_model,
|
| | self.torch_data_type,
|
| | )
|
| | load_taesd(
|
| | self.img_to_img_pipeline,
|
| | use_local_model,
|
| | self.torch_data_type,
|
| | )
|
| |
|
| | if not self.use_openvino and not is_openvino_device():
|
| | self._pipeline_to_device()
|
| |
|
| | if not self._is_hetero_pipeline():
|
| | if (
|
| | lcm_diffusion_setting.diffusion_task
|
| | == DiffusionTask.image_to_image.value
|
| | and lcm_diffusion_setting.use_openvino
|
| | ):
|
| | self.pipeline.scheduler = LCMScheduler.from_config(
|
| | self.pipeline.scheduler.config,
|
| | )
|
| | else:
|
| | if not lcm_diffusion_setting.use_gguf_model:
|
| | self._update_lcm_scheduler_params()
|
| |
|
| | if use_lora:
|
| | self._add_freeu()
|
| |
|
| | self.previous_model_id = model_id
|
| | self.previous_ov_model_id = self.ov_model_id
|
| | self.previous_use_tae_sd = use_tiny_auto_encoder
|
| | self.previous_lcm_lora_base_id = lcm_lora.base_model_id
|
| | self.previous_lcm_lora_id = lcm_lora.lcm_lora_id
|
| | self.previous_use_lcm_lora = use_lora
|
| | self.previous_token_merging = lcm_diffusion_setting.token_merging
|
| | self.previous_safety_checker = lcm_diffusion_setting.use_safety_checker
|
| | self.previous_use_openvino = lcm_diffusion_setting.use_openvino
|
| | self.previous_task_type = lcm_diffusion_setting.diffusion_task
|
| | self.previous_lora = lcm_diffusion_setting.lora.model_copy(deep=True)
|
| | self.previous_use_gguf_model = lcm_diffusion_setting.use_gguf_model
|
| | self.previous_gguf_model = lcm_diffusion_setting.gguf_model.model_copy(
|
| | deep=True
|
| | )
|
| | lcm_diffusion_setting.rebuild_pipeline = False
|
| | if (
|
| | lcm_diffusion_setting.diffusion_task
|
| | == DiffusionTask.text_to_image.value
|
| | ):
|
| | print(f"Pipeline : {self.pipeline}")
|
| | elif (
|
| | lcm_diffusion_setting.diffusion_task
|
| | == DiffusionTask.image_to_image.value
|
| | ):
|
| | if self.use_openvino and is_openvino_device():
|
| | print(f"Pipeline : {self.pipeline}")
|
| | else:
|
| | print(f"Pipeline : {self.img_to_img_pipeline}")
|
| | if self.use_openvino:
|
| | if lcm_diffusion_setting.lora.enabled:
|
| | print("Warning: Lora models not supported on OpenVINO mode")
|
| | elif not lcm_diffusion_setting.use_gguf_model:
|
| | adapters = self.pipeline.get_active_adapters()
|
| | print(f"Active adapters : {adapters}")
|
| |
|
| | def _get_timesteps(self):
|
| | time_steps = self.pipeline.scheduler.config.get("timesteps")
|
| | time_steps_value = [int(time_steps)] if time_steps else None
|
| | return time_steps_value
|
| |
|
| | def _compile_ov_pipeline(
|
| | self,
|
| | lcm_diffusion_setting,
|
| | ):
|
| | self.pipeline.reshape(
|
| | batch_size=-1,
|
| | height=lcm_diffusion_setting.image_height,
|
| | width=lcm_diffusion_setting.image_width,
|
| | num_images_per_prompt=lcm_diffusion_setting.number_of_images,
|
| | )
|
| | self.pipeline.compile()
|
| |
|
| | def generate(
|
| | self,
|
| | lcm_diffusion_setting: LCMDiffusionSetting,
|
| | reshape: bool = False,
|
| | ) -> Any:
|
| | guidance_scale = lcm_diffusion_setting.guidance_scale
|
| | img_to_img_inference_steps = lcm_diffusion_setting.inference_steps
|
| | check_step_value = int(
|
| | lcm_diffusion_setting.inference_steps * lcm_diffusion_setting.strength
|
| | )
|
| | if (
|
| | lcm_diffusion_setting.diffusion_task == DiffusionTask.image_to_image.value
|
| | and check_step_value < 1
|
| | ):
|
| | img_to_img_inference_steps = ceil(1 / lcm_diffusion_setting.strength)
|
| | print(
|
| | f"Strength: {lcm_diffusion_setting.strength},{img_to_img_inference_steps}"
|
| | )
|
| |
|
| | pipeline_extra_args = {}
|
| |
|
| | if lcm_diffusion_setting.use_seed:
|
| | cur_seed = lcm_diffusion_setting.seed
|
| |
|
| | seeds = [
|
| | (cur_seed + i) for i in range(lcm_diffusion_setting.number_of_images)
|
| | ]
|
| | else:
|
| | seeds = [
|
| | random.randint(0, 999999999)
|
| | for i in range(lcm_diffusion_setting.number_of_images)
|
| | ]
|
| |
|
| | if self.use_openvino:
|
| |
|
| | np.random.seed(seeds[0])
|
| | if self._is_hetero_pipeline():
|
| | torch.manual_seed(seeds[0])
|
| | lcm_diffusion_setting.seed = seeds[0]
|
| | else:
|
| | pipeline_extra_args["generator"] = [
|
| | torch.Generator(device=self.device).manual_seed(s) for s in seeds
|
| | ]
|
| |
|
| | is_openvino_pipe = lcm_diffusion_setting.use_openvino and is_openvino_device()
|
| | if is_openvino_pipe and not self._is_hetero_pipeline():
|
| | print("Using OpenVINO")
|
| | if self.is_openvino_init and self._is_sana_model():
|
| | self._compile_ov_pipeline(lcm_diffusion_setting)
|
| |
|
| | if reshape and not self.is_openvino_init:
|
| | print("Reshape and compile")
|
| | self._compile_ov_pipeline(lcm_diffusion_setting)
|
| |
|
| | if self.is_openvino_init:
|
| | self.is_openvino_init = False
|
| |
|
| | if is_openvino_pipe and self._is_hetero_pipeline():
|
| | return self._generate_images_hetero_compute(lcm_diffusion_setting)
|
| | elif lcm_diffusion_setting.use_gguf_model:
|
| | return self._generate_images_gguf(lcm_diffusion_setting)
|
| |
|
| | if lcm_diffusion_setting.clip_skip > 1:
|
| |
|
| |
|
| | pipeline_extra_args["clip_skip"] = lcm_diffusion_setting.clip_skip - 1
|
| |
|
| | self.pipeline.safety_checker = None
|
| | if (
|
| | lcm_diffusion_setting.diffusion_task == DiffusionTask.image_to_image.value
|
| | and not is_openvino_pipe
|
| | ):
|
| | self.img_to_img_pipeline.safety_checker = None
|
| |
|
| | if (
|
| | not lcm_diffusion_setting.use_lcm_lora
|
| | and not lcm_diffusion_setting.use_openvino
|
| | and lcm_diffusion_setting.guidance_scale != 1.0
|
| | ):
|
| | print("Not using LCM-LoRA so setting guidance_scale 1.0")
|
| | guidance_scale = 1.0
|
| |
|
| | controlnet_args = update_controlnet_arguments(lcm_diffusion_setting)
|
| | if lcm_diffusion_setting.use_openvino:
|
| | if (
|
| | lcm_diffusion_setting.diffusion_task
|
| | == DiffusionTask.text_to_image.value
|
| | ):
|
| | if self._is_sana_model():
|
| | result_images = self.pipeline(
|
| | prompt=lcm_diffusion_setting.prompt,
|
| | num_inference_steps=lcm_diffusion_setting.inference_steps,
|
| | guidance_scale=guidance_scale,
|
| | width=lcm_diffusion_setting.image_width,
|
| | height=lcm_diffusion_setting.image_height,
|
| | num_images_per_prompt=lcm_diffusion_setting.number_of_images,
|
| | ).images
|
| | else:
|
| | result_images = self.pipeline(
|
| | prompt=lcm_diffusion_setting.prompt,
|
| | negative_prompt=lcm_diffusion_setting.negative_prompt,
|
| | num_inference_steps=lcm_diffusion_setting.inference_steps,
|
| | guidance_scale=guidance_scale,
|
| | width=lcm_diffusion_setting.image_width,
|
| | height=lcm_diffusion_setting.image_height,
|
| | num_images_per_prompt=lcm_diffusion_setting.number_of_images,
|
| | ).images
|
| | elif (
|
| | lcm_diffusion_setting.diffusion_task
|
| | == DiffusionTask.image_to_image.value
|
| | ):
|
| | result_images = self.pipeline(
|
| | image=lcm_diffusion_setting.init_image,
|
| | strength=lcm_diffusion_setting.strength,
|
| | prompt=lcm_diffusion_setting.prompt,
|
| | negative_prompt=lcm_diffusion_setting.negative_prompt,
|
| | num_inference_steps=img_to_img_inference_steps * 3,
|
| | guidance_scale=guidance_scale,
|
| | num_images_per_prompt=lcm_diffusion_setting.number_of_images,
|
| | ).images
|
| |
|
| | else:
|
| | if (
|
| | lcm_diffusion_setting.diffusion_task
|
| | == DiffusionTask.text_to_image.value
|
| | ):
|
| | result_images = self.pipeline(
|
| | prompt=lcm_diffusion_setting.prompt,
|
| | negative_prompt=lcm_diffusion_setting.negative_prompt,
|
| | num_inference_steps=lcm_diffusion_setting.inference_steps,
|
| | guidance_scale=guidance_scale,
|
| | width=lcm_diffusion_setting.image_width,
|
| | height=lcm_diffusion_setting.image_height,
|
| | num_images_per_prompt=lcm_diffusion_setting.number_of_images,
|
| | timesteps=self._get_timesteps(),
|
| | **pipeline_extra_args,
|
| | **controlnet_args,
|
| | ).images
|
| |
|
| | elif (
|
| | lcm_diffusion_setting.diffusion_task
|
| | == DiffusionTask.image_to_image.value
|
| | ):
|
| | result_images = self.img_to_img_pipeline(
|
| | image=lcm_diffusion_setting.init_image,
|
| | strength=lcm_diffusion_setting.strength,
|
| | prompt=lcm_diffusion_setting.prompt,
|
| | negative_prompt=lcm_diffusion_setting.negative_prompt,
|
| | num_inference_steps=img_to_img_inference_steps,
|
| | guidance_scale=guidance_scale,
|
| | width=lcm_diffusion_setting.image_width,
|
| | height=lcm_diffusion_setting.image_height,
|
| | num_images_per_prompt=lcm_diffusion_setting.number_of_images,
|
| | **pipeline_extra_args,
|
| | **controlnet_args,
|
| | ).images
|
| |
|
| | for i, seed in enumerate(seeds):
|
| | result_images[i].info["image_seed"] = seed
|
| |
|
| | return result_images
|
| |
|
| | def _init_gguf_diffusion(
|
| | self,
|
| | lcm_diffusion_setting: LCMDiffusionSetting,
|
| | ):
|
| | config = ModelConfig()
|
| | config.model_path = lcm_diffusion_setting.gguf_model.diffusion_path
|
| | config.diffusion_model_path = lcm_diffusion_setting.gguf_model.diffusion_path
|
| | config.clip_l_path = lcm_diffusion_setting.gguf_model.clip_path
|
| | config.t5xxl_path = lcm_diffusion_setting.gguf_model.t5xxl_path
|
| | config.vae_path = lcm_diffusion_setting.gguf_model.vae_path
|
| | config.n_threads = GGUF_THREADS
|
| | print(f"GGUF Threads : {GGUF_THREADS} ")
|
| | print("GGUF - Model config")
|
| | pprint(lcm_diffusion_setting.gguf_model.model_dump())
|
| | self.pipeline = GGUFDiffusion(
|
| | get_app_path(),
|
| | config,
|
| | True,
|
| | )
|
| |
|
| | def _generate_images_gguf(
|
| | self,
|
| | lcm_diffusion_setting: LCMDiffusionSetting,
|
| | ):
|
| | if lcm_diffusion_setting.diffusion_task == DiffusionTask.text_to_image.value:
|
| | t2iconfig = Txt2ImgConfig()
|
| | t2iconfig.prompt = lcm_diffusion_setting.prompt
|
| | t2iconfig.batch_count = lcm_diffusion_setting.number_of_images
|
| | t2iconfig.cfg_scale = lcm_diffusion_setting.guidance_scale
|
| | t2iconfig.height = lcm_diffusion_setting.image_height
|
| | t2iconfig.width = lcm_diffusion_setting.image_width
|
| | t2iconfig.sample_steps = lcm_diffusion_setting.inference_steps
|
| | t2iconfig.sample_method = SampleMethod.EULER
|
| | if lcm_diffusion_setting.use_seed:
|
| | t2iconfig.seed = lcm_diffusion_setting.seed
|
| | else:
|
| | t2iconfig.seed = -1
|
| |
|
| | return self.pipeline.generate_text2mg(t2iconfig)
|
| |
|