|
from typing import Any |
|
from app_settings import Settings |
|
from models.interface_types import InterfaceType |
|
from backend.models.lcmdiffusion_setting import DiffusionTask |
|
from backend.lcm_text_to_image import LCMTextToImage |
|
from time import perf_counter |
|
from backend.image_saver import ImageSaver |
|
from pprint import pprint |
|
|
|
|
|
class Context: |
|
def __init__( |
|
self, |
|
interface_type: InterfaceType, |
|
device="cpu", |
|
): |
|
self.interface_type = interface_type.value |
|
self.lcm_text_to_image = LCMTextToImage(device) |
|
self._latency = 0 |
|
|
|
@property |
|
def latency(self): |
|
return self._latency |
|
|
|
def generate_text_to_image( |
|
self, |
|
settings: Settings, |
|
reshape: bool = False, |
|
device: str = "cpu", |
|
save_config=True, |
|
) -> Any: |
|
if ( |
|
settings.lcm_diffusion_setting.use_tiny_auto_encoder |
|
and settings.lcm_diffusion_setting.use_openvino |
|
): |
|
print( |
|
"WARNING: Tiny AutoEncoder is not supported in Image to image mode (OpenVINO)" |
|
) |
|
tick = perf_counter() |
|
from state import get_settings |
|
|
|
if ( |
|
settings.lcm_diffusion_setting.diffusion_task |
|
== DiffusionTask.text_to_image.value |
|
): |
|
settings.lcm_diffusion_setting.init_image = None |
|
|
|
if save_config: |
|
get_settings().save() |
|
|
|
pprint(settings.lcm_diffusion_setting.model_dump()) |
|
if not settings.lcm_diffusion_setting.lcm_lora: |
|
return None |
|
self.lcm_text_to_image.init( |
|
device, |
|
settings.lcm_diffusion_setting, |
|
) |
|
images = self.lcm_text_to_image.generate( |
|
settings.lcm_diffusion_setting, |
|
reshape, |
|
) |
|
elapsed = perf_counter() - tick |
|
self._latency = elapsed |
|
print(f"Latency : {elapsed:.2f} seconds") |
|
if settings.lcm_diffusion_setting.controlnet: |
|
if settings.lcm_diffusion_setting.controlnet.enabled: |
|
images.append(settings.lcm_diffusion_setting.controlnet._control_image) |
|
return images |
|
|
|
|
|
def save_images( |
|
self, |
|
images: Any, |
|
settings: Settings, |
|
) -> list[str]: |
|
saved_images = [] |
|
if images and settings.generated_images.save_image: |
|
saved_images = ImageSaver.save_images( |
|
settings.generated_images.path, |
|
images=images, |
|
lcm_diffusion_setting=settings.lcm_diffusion_setting, |
|
format=settings.generated_images.format, |
|
jpeg_quality=settings.generated_images.save_image_quality, |
|
) |
|
return saved_images |