esde / backend /config.py
Maki7's picture
Upload 42 files
704a244
from __future__ import annotations
from typing import Any
from pydantic import BaseModel, Field
SCRIPT_NAME = "Interpause Backend API"
SCRIPT_ID = "interpause_backend_api"
ROUTE_PREFIX = "/sdapi/interpause"
CONFIG_PATH = "auto-sd-paint-ext-backend.yaml"
LOGGER_NAME = "auto-sd-paint-ext"
ENCRYPT_FILE = "xor_pass.txt"
# names of scripts to apply workarounds for
NAME_SCRIPT_LOOPBACK = "Loopback"
NAME_SCRIPT_UPSCALE = "SD upscale"
class BaseOptions(BaseModel):
sample_path: str = "outputs/krita-out"
"""Where to save generated images to."""
save_samples: bool = False
"""Whether to save temporary images (useful for debugging)."""
class GenerationOptions(BaseModel):
sd_model: str = "model.ckpt"
"""Model to use for generation."""
script: str = "None"
"""Which script to use."""
script_args: list = Field(default_factory=list)
"""List of args for script."""
prompt: Any = "dog"
"""Requested prompt."""
negative_prompt: Any = ""
"""Requested negative prompt."""
seed: int = -1
"""Seed used for noise generation. Incremented by 1 for each image rendered."""
seed_enable_extras: bool = False
"""Enable subseed variation."""
subseed: int = -1
"""Subseed to use for subseed variation. Incremented by 1 for each image rendered."""
subseed_strength: float = 0.0
"""Strength of subseed compared to seed. 0.0 will be completely original seed, 1.0 will be completely subseed."""
seed_resize_from_h: int = 0
"""Original resolution seed was used at. Used to resize latent noise to attempt to generate same image with a different resolution."""
seed_resize_from_w: int = 0
"""Original resolution seed was used at. Used to resize latent noise to attempt to generate same image with a different resolution."""
sampler_name: str = "Euler a"
"""Exact name of sampler to use. Name should follow exact spelling and capitalization as in the WebUI."""
steps: int = 30
"""Number of steps for diffusion."""
cfg_scale: float = 7.5
"""Guidance scale for diffusion."""
denoising_strength: float = 0.35
"""Strength of denoising from 0.0 to 1.0."""
batch_count: int = 1
"""Number of batches to render."""
batch_size: int = 1
"""Number of images per batch to render."""
base_size: int = 512
"""Native/base resolution of model used."""
max_size: int = 768
"""Max input resolution allowed to prevent image artifacts."""
tiling: bool = False
"""Whether to generate a tileable image."""
highres_fix: bool = False
"""Whether to enable workaround for higher resolution at cost of time."""
firstphase_height: int = 512
"""Max height for first phase of highres fix (before upscaling to requested resolution)."""
firstphase_width: int = 512
"""Max width for first phase of highres fix (before upscaling to requested resolution)."""
# upscale_overlap: int = 64
# """Size of overlap in pixels for upscaling.""" Configure this in WebUI
upscaler_name: str = "None"
"""Exact name of upscaler to use."""
filter_nsfw: bool = False
"""filter NSFW content."""
include_grid: bool = False
"""Whether to include the image grid in the results sent to Krita"""
class SamplerParamOptions(BaseModel):
# TODO: More conveniently expose config options for samplers/explain them.
pass
class FaceRestorationOptions(BaseModel):
restore_faces: bool = False
"""Whether to use GFPGAN for face restoration."""
face_restorer: str = "CodeFormer"
"""Exact name of face restorer to use."""
codeformer_weight: float = 0.5
"""Strength of face restoration if using CodeFormer. 0.0 is the strongest and 1.0 is the weakest."""
class InpaintingOptions(BaseModel):
inpainting_fill: int = 1
"""What to fill inpainted region with. 0 is blur/fill, 1 is original, 2 is latent noise, and 3 is latent empty."""
inpaint_full_res: bool = False
"""(DISABLED) Whether to use the full resolution for inpainting."""
inpaint_full_res_padding: int = 0
"""(DISABLED) Padding when using full resolution for inpainting."""
mask_blur: int = 0
"""(DISABLED) Size of blur at boundaries of mask."""
invert_mask: bool = False
"""Whether to invert the mask."""
inpaint_mask_weight: float = 1.0
"""Mask weight for specialized inpainting models."""
class Txt2ImgOptions(BaseOptions, GenerationOptions, FaceRestorationOptions):
pass
class Img2ImgOptions(
BaseOptions, GenerationOptions, InpaintingOptions, FaceRestorationOptions
):
mode: int = 0
"""Img2Img mode. 0 is normal img2img on the selected region, 1 is inpainting, and 2 (unsupported) is batch processing."""
resize_mode: int = 1
"""Unused by Krita plugin since rescaling is done by us. 0 is stretch to fit, 1 is cover, 2 is contain."""
steps: int = 50
color_correct: bool = True
"""Apply color correction after img2img/inpaint to match original & blend better."""
do_exact_steps: bool = True
"""Do exactly the number of steps specified by the slider instead of less during img2img/inpaint."""
class UpscaleOptions(BaseOptions):
upscaler_name: str = "None"
"""Exact name of upscaler to use."""
downscale_first: bool = False
"""Whether to downscale the image by x0.5 first."""
class PluginOptions(BaseOptions):
sample_path: str = "outputs/krita-in"
class MainConfig(BaseModel):
txt2img: Txt2ImgOptions = Txt2ImgOptions()
img2img: Img2ImgOptions = Img2ImgOptions()
upscale: UpscaleOptions = UpscaleOptions()
plugin: PluginOptions = PluginOptions()