|
from __future__ import annotations |
|
|
|
from typing import TYPE_CHECKING |
|
|
|
if TYPE_CHECKING: |
|
from abc import ABC, abstractmethod |
|
from dataclasses import dataclass |
|
from typing import Any |
|
|
|
import gradio as gr |
|
from PIL import Image |
|
|
|
from sd_webui.processing import ( |
|
Processed, |
|
StableDiffusionProcessingImg2Img, |
|
StableDiffusionProcessingTxt2Img, |
|
) |
|
|
|
SDPType = StableDiffusionProcessingImg2Img | StableDiffusionProcessingTxt2Img |
|
AlwaysVisible = object() |
|
|
|
@dataclass |
|
class PostprocessImageArgs: |
|
image: Image.Image |
|
|
|
class Script(ABC): |
|
filename: str |
|
args_from: int |
|
args_to: int |
|
alwayson: bool |
|
|
|
is_txt2img: bool |
|
is_img2img: bool |
|
|
|
group: gr.Group |
|
infotext_fields: list[tuple[str, str]] |
|
paste_field_names: list[str] |
|
|
|
@abstractmethod |
|
def title(self): |
|
raise NotImplementedError |
|
|
|
def ui(self, is_img2img: bool): |
|
pass |
|
|
|
def show(self, is_img2img: bool): |
|
return True |
|
|
|
def run(self, p: SDPType, *args): |
|
pass |
|
|
|
def process(self, p: SDPType, *args): |
|
pass |
|
|
|
def before_process_batch(self, p: SDPType, *args, **kwargs): |
|
pass |
|
|
|
def process_batch(self, p: SDPType, *args, **kwargs): |
|
pass |
|
|
|
def postprocess_batch(self, p: SDPType, *args, **kwargs): |
|
pass |
|
|
|
def postprocess_image(self, p: SDPType, pp: PostprocessImageArgs, *args): |
|
pass |
|
|
|
def postprocess(self, p: SDPType, processed: Processed, *args): |
|
pass |
|
|
|
def before_component(self, component, **kwargs): |
|
pass |
|
|
|
def after_component(self, component, **kwargs): |
|
pass |
|
|
|
def describe(self): |
|
return "" |
|
|
|
def elem_id(self, item_id: Any) -> str: |
|
pass |
|
|
|
else: |
|
from modules.scripts import AlwaysVisible, PostprocessImageArgs, Script |
|
|