| from PIL import Image |
| from PyQt5.QtWidgets import ( |
| QApplication, |
| QHBoxLayout, |
| QRadioButton, |
| QWidget, |
| ) |
|
|
| from app_settings import AppSettings |
| from backend.models.upscale import UpscaleMode |
| from backend.upscale.upscaler import upscale_image |
| from frontend.gui.img2img_widget import Img2ImgWidget |
| from paths import FastStableDiffusionPaths |
|
|
|
|
| class UpscalerWidget(Img2ImgWidget): |
| scale_factor = 2.0 |
|
|
| def __init__(self, config: AppSettings, parent): |
| super().__init__(config, parent) |
| |
| self.prompt.hide() |
| self.neg_prompt.hide() |
| |
| self.strength_label.hide() |
| self.strength.hide() |
| self.generate.setText("Upscale") |
| |
| self.edsr_button = QRadioButton("EDSR", self) |
| self.edsr_button.toggled.connect(self.on_mode_change) |
| self.edsr_button.toggle() |
| self.sd_button = QRadioButton("SD", self) |
| self.sd_button.toggled.connect(self.on_mode_change) |
| self.aura_button = QRadioButton("AURA-SR", self) |
| self.aura_button.toggled.connect(self.on_mode_change) |
|
|
| self.neg_prompt_label.setText("Upscale mode (2x) | AURA-SR (4x):") |
| |
| hlayout = QHBoxLayout() |
| hlayout.addWidget(self.edsr_button) |
| hlayout.addWidget(self.sd_button) |
| hlayout.addWidget(self.aura_button) |
| |
| |
| |
| self.container = QWidget() |
| self.container.setLayout(hlayout) |
| self.layout().replaceWidget(self.neg_prompt, self.container) |
|
|
| def generate_image(self): |
| self.parent.prepare_generation_settings(self.config) |
| self.config.settings.lcm_diffusion_setting.init_image = Image.open( |
| self.img_path.text() |
| ) |
| self.config.settings.lcm_diffusion_setting.strength = self.strength.value() / 10 |
| upscaled_filepath = FastStableDiffusionPaths.get_upscale_filepath( |
| None, |
| self.scale_factor, |
| self.config.settings.generated_images.format, |
| ) |
|
|
| images = upscale_image( |
| context=self.parent.context, |
| src_image_path=self.img_path.text(), |
| dst_image_path=upscaled_filepath, |
| upscale_mode=self.upscale_mode, |
| strength=0.1, |
| ) |
| self.prepare_images(images) |
| self.after_generation() |
|
|
| def before_generation(self): |
| super().before_generation() |
| self.container.setEnabled(False) |
|
|
| def after_generation(self): |
| super().after_generation() |
| self.container.setEnabled(True) |
| |
| |
| |
| self.config.settings.lcm_diffusion_setting.init_image = None |
|
|
| def on_mode_change(self): |
| self.scale_factor = 2.0 |
| if self.edsr_button.isChecked(): |
| self.upscale_mode = UpscaleMode.normal.value |
| elif self.sd_button.isChecked(): |
| self.upscale_mode = UpscaleMode.sd_upscale.value |
| else: |
| self.upscale_mode = UpscaleMode.aura_sr.value |
| self.scale_factor = 4.0 |
|
|