Files
SkinbaseNova/services/enhance-worker/app/upscaler.py

36 lines
1.3 KiB
Python

from __future__ import annotations
from .config import Settings
from .engines.base import EngineHealth, UpscaleEngine, UpscaleEngineUnavailable, UpscaleResult
from .engines.pillow_engine import PillowUpscaleEngine
from .engines.realesrgan_ncnn_engine import RealEsrganNcnnEngine
from .image_io import DownloadedImage
class UnavailableEngine(UpscaleEngine):
def __init__(self, settings: Settings, engine_name: str) -> None:
self.settings = settings
self.engine_name = engine_name
def health(self) -> EngineHealth:
return EngineHealth(
status="degraded",
engine=self.engine_name,
device=self.settings.device,
models_loaded=False,
)
def upscale(self, downloaded: DownloadedImage, scale: int, mode: str, output_format: str) -> UpscaleResult:
raise UpscaleEngineUnavailable("Upscale engine is not available. Check model files and worker installation.")
def build_upscaler(settings: Settings) -> UpscaleEngine:
engine_name = settings.engine.strip().lower()
if engine_name == "pillow":
return PillowUpscaleEngine(settings)
if engine_name in {"realesrgan", "realesrgan-ncnn"}:
return RealEsrganNcnnEngine(settings)
return UnavailableEngine(settings, engine_name or "unknown")