feat: split up UNet and VAE tile size and overlap/stride params
This commit is contained in:
parent
e9b1375440
commit
e8d7d9a881
|
@ -43,7 +43,7 @@ def stage_highres(
|
||||||
outscale=highres.scale,
|
outscale=highres.scale,
|
||||||
),
|
),
|
||||||
chain=chain,
|
chain=chain,
|
||||||
overlap=params.overlap,
|
overlap=params.vae_overlap,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
logger.debug("using simple upscaling for highres")
|
logger.debug("using simple upscaling for highres")
|
||||||
|
@ -51,14 +51,14 @@ def stage_highres(
|
||||||
UpscaleSimpleStage(),
|
UpscaleSimpleStage(),
|
||||||
stage,
|
stage,
|
||||||
method=highres.method,
|
method=highres.method,
|
||||||
overlap=params.overlap,
|
overlap=params.vae_overlap,
|
||||||
upscale=upscale.with_args(scale=highres.scale, outscale=highres.scale),
|
upscale=upscale.with_args(scale=highres.scale, outscale=highres.scale),
|
||||||
)
|
)
|
||||||
|
|
||||||
chain.stage(
|
chain.stage(
|
||||||
BlendImg2ImgStage(),
|
BlendImg2ImgStage(),
|
||||||
stage,
|
stage,
|
||||||
overlap=params.overlap,
|
overlap=params.vae_overlap,
|
||||||
prompt_index=prompt_index + i,
|
prompt_index=prompt_index + i,
|
||||||
strength=highres.strength,
|
strength=highres.strength,
|
||||||
)
|
)
|
||||||
|
|
|
@ -60,9 +60,9 @@ class SourceTxt2ImgStage(BaseStage):
|
||||||
)
|
)
|
||||||
|
|
||||||
if params.is_xl():
|
if params.is_xl():
|
||||||
tile_size = max(stage.tile_size, params.tiles)
|
tile_size = max(stage.tile_size, params.unet_tile)
|
||||||
else:
|
else:
|
||||||
tile_size = params.tiles
|
tile_size = params.unet_tile
|
||||||
|
|
||||||
# this works for panorama as well, because tile_size is already max(tile_size, *size)
|
# this works for panorama as well, because tile_size is already max(tile_size, *size)
|
||||||
latent_size = size.min(tile_size, tile_size)
|
latent_size = size.min(tile_size, tile_size)
|
||||||
|
|
|
@ -106,5 +106,5 @@ class UpscaleBSRGANStage(BaseStage):
|
||||||
params: ImageParams,
|
params: ImageParams,
|
||||||
size: Size,
|
size: Size,
|
||||||
) -> int:
|
) -> int:
|
||||||
tile = min(params.tiles, self.max_tile)
|
tile = min(params.unet_tile, self.max_tile)
|
||||||
return size.width // tile * size.height // tile
|
return size.width // tile * size.height // tile
|
||||||
|
|
|
@ -71,7 +71,7 @@ class UpscaleOutpaintStage(BaseStage):
|
||||||
outputs.append(source)
|
outputs.append(source)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
tile_size = params.tiles
|
tile_size = params.unet_tile
|
||||||
size = Size(*source.size)
|
size = Size(*source.size)
|
||||||
latent_size = size.min(tile_size, tile_size)
|
latent_size = size.min(tile_size, tile_size)
|
||||||
|
|
||||||
|
|
|
@ -266,14 +266,13 @@ def load_pipeline(
|
||||||
|
|
||||||
# update panorama params
|
# update panorama params
|
||||||
if params.is_panorama():
|
if params.is_panorama():
|
||||||
latent_window = params.tiles // 8
|
unet_stride = (params.unet_tile * (1 - params.unet_overlap)) // 8
|
||||||
latent_stride = params.stride // 8
|
logger.debug("setting panorama window parameters: %s/%s for UNet, %s/%s for VAE", params.unet_tile, unet_stride, params.vae_tile, params.vae_overlap)
|
||||||
|
pipe.set_window_size(params.unet_tile // 8, unet_stride)
|
||||||
pipe.set_window_size(latent_window, latent_stride)
|
|
||||||
|
|
||||||
for vae in VAE_COMPONENTS:
|
for vae in VAE_COMPONENTS:
|
||||||
if hasattr(pipe, vae):
|
if hasattr(pipe, vae):
|
||||||
getattr(pipe, vae).set_window_size(latent_window, params.overlap)
|
getattr(pipe, vae).set_window_size(params.vae_tile // 8, params.vae_overlap)
|
||||||
|
|
||||||
run_gc([device])
|
run_gc([device])
|
||||||
|
|
||||||
|
@ -626,8 +625,8 @@ def patch_pipeline(
|
||||||
server,
|
server,
|
||||||
original_decoder,
|
original_decoder,
|
||||||
decoder=True,
|
decoder=True,
|
||||||
window=params.tiles,
|
window=params.unet_tile,
|
||||||
overlap=params.overlap,
|
overlap=params.vae_overlap,
|
||||||
)
|
)
|
||||||
logger.debug("patched VAE decoder with wrapper")
|
logger.debug("patched VAE decoder with wrapper")
|
||||||
|
|
||||||
|
@ -637,8 +636,8 @@ def patch_pipeline(
|
||||||
server,
|
server,
|
||||||
original_encoder,
|
original_encoder,
|
||||||
decoder=False,
|
decoder=False,
|
||||||
window=params.tiles,
|
window=params.unet_tile,
|
||||||
overlap=params.overlap,
|
overlap=params.vae_overlap,
|
||||||
)
|
)
|
||||||
logger.debug("patched VAE encoder with wrapper")
|
logger.debug("patched VAE encoder with wrapper")
|
||||||
|
|
||||||
|
|
|
@ -44,9 +44,9 @@ def run_txt2img_pipeline(
|
||||||
) -> None:
|
) -> None:
|
||||||
# if using panorama, the pipeline will tile itself (views)
|
# if using panorama, the pipeline will tile itself (views)
|
||||||
if params.is_panorama() or params.is_xl():
|
if params.is_panorama() or params.is_xl():
|
||||||
tile_size = max(params.tiles, size.width, size.height)
|
tile_size = max(params.unet_tile, size.width, size.height)
|
||||||
else:
|
else:
|
||||||
tile_size = params.tiles
|
tile_size = params.unet_tile
|
||||||
|
|
||||||
# prepare the chain pipeline and first stage
|
# prepare the chain pipeline and first stage
|
||||||
chain = ChainPipeline()
|
chain = ChainPipeline()
|
||||||
|
@ -57,11 +57,11 @@ def run_txt2img_pipeline(
|
||||||
),
|
),
|
||||||
size=size,
|
size=size,
|
||||||
prompt_index=0,
|
prompt_index=0,
|
||||||
overlap=params.overlap,
|
overlap=params.vae_overlap,
|
||||||
)
|
)
|
||||||
|
|
||||||
# apply upscaling and correction, before highres
|
# apply upscaling and correction, before highres
|
||||||
stage = StageParams(tile_size=params.tiles)
|
stage = StageParams(tile_size=params.unet_tile)
|
||||||
first_upscale, after_upscale = split_upscale(upscale)
|
first_upscale, after_upscale = split_upscale(upscale)
|
||||||
if first_upscale:
|
if first_upscale:
|
||||||
stage_upscale_correction(
|
stage_upscale_correction(
|
||||||
|
@ -139,14 +139,14 @@ def run_img2img_pipeline(
|
||||||
# prepare the chain pipeline and first stage
|
# prepare the chain pipeline and first stage
|
||||||
chain = ChainPipeline()
|
chain = ChainPipeline()
|
||||||
stage = StageParams(
|
stage = StageParams(
|
||||||
tile_size=params.tiles,
|
tile_size=params.unet_tile,
|
||||||
)
|
)
|
||||||
chain.stage(
|
chain.stage(
|
||||||
BlendImg2ImgStage(),
|
BlendImg2ImgStage(),
|
||||||
stage,
|
stage,
|
||||||
prompt_index=0,
|
prompt_index=0,
|
||||||
strength=strength,
|
strength=strength,
|
||||||
overlap=params.overlap,
|
overlap=params.vae_overlap,
|
||||||
)
|
)
|
||||||
|
|
||||||
# apply upscaling and correction, before highres
|
# apply upscaling and correction, before highres
|
||||||
|
@ -236,7 +236,7 @@ def run_inpaint_pipeline(
|
||||||
full_res_inpaint_padding: float,
|
full_res_inpaint_padding: float,
|
||||||
) -> None:
|
) -> None:
|
||||||
logger.debug("building inpaint pipeline")
|
logger.debug("building inpaint pipeline")
|
||||||
tile_size = params.tiles
|
tile_size = params.unet_tile
|
||||||
|
|
||||||
if mask is None:
|
if mask is None:
|
||||||
# if no mask was provided, keep the full source image
|
# if no mask was provided, keep the full source image
|
||||||
|
@ -332,7 +332,7 @@ def run_inpaint_pipeline(
|
||||||
fill_color=fill_color,
|
fill_color=fill_color,
|
||||||
mask_filter=mask_filter,
|
mask_filter=mask_filter,
|
||||||
noise_source=noise_source,
|
noise_source=noise_source,
|
||||||
overlap=params.overlap,
|
overlap=params.vae_overlap,
|
||||||
prompt_index=0,
|
prompt_index=0,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -410,7 +410,7 @@ def run_upscale_pipeline(
|
||||||
) -> None:
|
) -> None:
|
||||||
# set up the chain pipeline, no base stage for upscaling
|
# set up the chain pipeline, no base stage for upscaling
|
||||||
chain = ChainPipeline()
|
chain = ChainPipeline()
|
||||||
stage = StageParams(tile_size=params.tiles)
|
stage = StageParams(tile_size=params.unet_tile)
|
||||||
|
|
||||||
# apply upscaling and correction, before highres
|
# apply upscaling and correction, before highres
|
||||||
first_upscale, after_upscale = split_upscale(upscale)
|
first_upscale, after_upscale = split_upscale(upscale)
|
||||||
|
|
|
@ -204,8 +204,10 @@ class ImageParams:
|
||||||
input_negative_prompt: str
|
input_negative_prompt: str
|
||||||
loopback: int
|
loopback: int
|
||||||
tiled_vae: bool
|
tiled_vae: bool
|
||||||
tiles: int
|
unet_tile: int
|
||||||
overlap: float
|
unet_overlap: float
|
||||||
|
vae_tile: int
|
||||||
|
vae_overlap: float
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
|
@ -224,9 +226,10 @@ class ImageParams:
|
||||||
input_negative_prompt: Optional[str] = None,
|
input_negative_prompt: Optional[str] = None,
|
||||||
loopback: int = 0,
|
loopback: int = 0,
|
||||||
tiled_vae: bool = False,
|
tiled_vae: bool = False,
|
||||||
tiles: int = 512,
|
unet_overlap: float = 0.25,
|
||||||
overlap: float = 0.25,
|
unet_tile: int = 512,
|
||||||
stride: int = 64,
|
vae_overlap: float = 0.25,
|
||||||
|
vae_tile: int = 512,
|
||||||
) -> None:
|
) -> None:
|
||||||
self.model = model
|
self.model = model
|
||||||
self.pipeline = pipeline
|
self.pipeline = pipeline
|
||||||
|
@ -243,9 +246,10 @@ class ImageParams:
|
||||||
self.input_negative_prompt = input_negative_prompt or negative_prompt
|
self.input_negative_prompt = input_negative_prompt or negative_prompt
|
||||||
self.loopback = loopback
|
self.loopback = loopback
|
||||||
self.tiled_vae = tiled_vae
|
self.tiled_vae = tiled_vae
|
||||||
self.tiles = tiles
|
self.unet_overlap = unet_overlap
|
||||||
self.overlap = overlap
|
self.unet_tile = unet_tile
|
||||||
self.stride = stride
|
self.vae_overlap = vae_overlap
|
||||||
|
self.vae_tile = vae_tile
|
||||||
|
|
||||||
def do_cfg(self):
|
def do_cfg(self):
|
||||||
return self.cfg > 1.0
|
return self.cfg > 1.0
|
||||||
|
@ -312,9 +316,10 @@ class ImageParams:
|
||||||
"input_negative_prompt": self.input_negative_prompt,
|
"input_negative_prompt": self.input_negative_prompt,
|
||||||
"loopback": self.loopback,
|
"loopback": self.loopback,
|
||||||
"tiled_vae": self.tiled_vae,
|
"tiled_vae": self.tiled_vae,
|
||||||
"tiles": self.tiles,
|
"unet_overlap": self.unet_overlap,
|
||||||
"overlap": self.overlap,
|
"unet_tile": self.unet_tile,
|
||||||
"stride": self.stride,
|
"vae_overlap": self.vae_overlap,
|
||||||
|
"vae_tile": self.vae_tile,
|
||||||
}
|
}
|
||||||
|
|
||||||
def with_args(self, **kwargs):
|
def with_args(self, **kwargs):
|
||||||
|
@ -334,9 +339,10 @@ class ImageParams:
|
||||||
kwargs.get("input_negative_prompt", self.input_negative_prompt),
|
kwargs.get("input_negative_prompt", self.input_negative_prompt),
|
||||||
kwargs.get("loopback", self.loopback),
|
kwargs.get("loopback", self.loopback),
|
||||||
kwargs.get("tiled_vae", self.tiled_vae),
|
kwargs.get("tiled_vae", self.tiled_vae),
|
||||||
kwargs.get("tiles", self.tiles),
|
kwargs.get("unet_overlap", self.unet_overlap),
|
||||||
kwargs.get("overlap", self.overlap),
|
kwargs.get("unet_tile", self.unet_tile),
|
||||||
kwargs.get("stride", self.stride),
|
kwargs.get("vae_overlap", self.vae_overlap),
|
||||||
|
kwargs.get("vae_tile", self.vae_tile),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -117,32 +117,35 @@ def build_params(
|
||||||
get_config_value("steps", "max"),
|
get_config_value("steps", "max"),
|
||||||
get_config_value("steps", "min"),
|
get_config_value("steps", "min"),
|
||||||
)
|
)
|
||||||
tiled_vae = get_boolean(data, "tiledVAE", get_config_value("tiledVAE"))
|
tiled_vae = get_boolean(data, "tiled_vae", get_config_value("tiled_vae"))
|
||||||
tiles = get_and_clamp_int(
|
unet_overlap = get_and_clamp_float(
|
||||||
data,
|
data,
|
||||||
"tiles",
|
"unet_overlap",
|
||||||
get_config_value("tiles"),
|
get_config_value("unet_overlap"),
|
||||||
get_config_value("tiles", "max"),
|
get_config_value("unet_overlap", "max"),
|
||||||
get_config_value("tiles", "min"),
|
get_config_value("unet_overlap", "min"),
|
||||||
)
|
)
|
||||||
overlap = get_and_clamp_float(
|
unet_tile = get_and_clamp_int(
|
||||||
data,
|
data,
|
||||||
"overlap",
|
"unet_tile",
|
||||||
get_config_value("overlap"),
|
get_config_value("unet_tile"),
|
||||||
get_config_value("overlap", "max"),
|
get_config_value("unet_tile", "max"),
|
||||||
get_config_value("overlap", "min"),
|
get_config_value("unet_tile", "min"),
|
||||||
)
|
)
|
||||||
stride = get_and_clamp_int(
|
vae_overlap = get_and_clamp_float(
|
||||||
data,
|
data,
|
||||||
"stride",
|
"vae_overlap",
|
||||||
get_config_value("stride"),
|
get_config_value("vae_overlap"),
|
||||||
get_config_value("stride", "max"),
|
get_config_value("vae_overlap", "max"),
|
||||||
get_config_value("stride", "min"),
|
get_config_value("vae_overlap", "min"),
|
||||||
|
)
|
||||||
|
vae_tile = get_and_clamp_int(
|
||||||
|
data,
|
||||||
|
"vae_tile",
|
||||||
|
get_config_value("vae_tile"),
|
||||||
|
get_config_value("vae_tile", "max"),
|
||||||
|
get_config_value("vae_tile", "min"),
|
||||||
)
|
)
|
||||||
|
|
||||||
if stride > tiles:
|
|
||||||
logger.info("limiting stride to tile size, %s > %s", stride, tiles)
|
|
||||||
stride = tiles
|
|
||||||
|
|
||||||
seed = int(data.get("seed", -1))
|
seed = int(data.get("seed", -1))
|
||||||
if seed == -1:
|
if seed == -1:
|
||||||
|
@ -163,9 +166,10 @@ def build_params(
|
||||||
control=control,
|
control=control,
|
||||||
loopback=loopback,
|
loopback=loopback,
|
||||||
tiled_vae=tiled_vae,
|
tiled_vae=tiled_vae,
|
||||||
tiles=tiles,
|
unet_overlap=unet_overlap,
|
||||||
overlap=overlap,
|
unet_tile=unet_tile,
|
||||||
stride=stride,
|
vae_overlap=vae_overlap,
|
||||||
|
vae_tile=vae_tile,
|
||||||
)
|
)
|
||||||
|
|
||||||
return params
|
return params
|
||||||
|
|
|
@ -141,12 +141,6 @@
|
||||||
"max": 4,
|
"max": 4,
|
||||||
"step": 1
|
"step": 1
|
||||||
},
|
},
|
||||||
"overlap": {
|
|
||||||
"default": 0.25,
|
|
||||||
"min": 0.0,
|
|
||||||
"max": 0.9,
|
|
||||||
"step": 0.01
|
|
||||||
},
|
|
||||||
"pipeline": {
|
"pipeline": {
|
||||||
"default": "",
|
"default": "",
|
||||||
"keys": [
|
"keys": [
|
||||||
|
@ -197,21 +191,9 @@
|
||||||
"max": 1,
|
"max": 1,
|
||||||
"step": 0.01
|
"step": 0.01
|
||||||
},
|
},
|
||||||
"stride": {
|
"tiled_vae": {
|
||||||
"default": 128,
|
|
||||||
"min": 64,
|
|
||||||
"max": 512,
|
|
||||||
"step": 64
|
|
||||||
},
|
|
||||||
"tiledVAE": {
|
|
||||||
"default": false
|
"default": false
|
||||||
},
|
},
|
||||||
"tiles": {
|
|
||||||
"default": 512,
|
|
||||||
"min": 128,
|
|
||||||
"max": 2048,
|
|
||||||
"step": 128
|
|
||||||
},
|
|
||||||
"tileOrder": {
|
"tileOrder": {
|
||||||
"default": "spiral",
|
"default": "spiral",
|
||||||
"keys": [
|
"keys": [
|
||||||
|
@ -225,6 +207,18 @@
|
||||||
"max": 1024,
|
"max": 1024,
|
||||||
"step": 8
|
"step": 8
|
||||||
},
|
},
|
||||||
|
"unet_overlap": {
|
||||||
|
"default": 0.25,
|
||||||
|
"min": 0.0,
|
||||||
|
"max": 0.9,
|
||||||
|
"step": 0.01
|
||||||
|
},
|
||||||
|
"unet_tile": {
|
||||||
|
"default": 512,
|
||||||
|
"min": 128,
|
||||||
|
"max": 2048,
|
||||||
|
"step": 128
|
||||||
|
},
|
||||||
"upscaleOrder": {
|
"upscaleOrder": {
|
||||||
"default": "correction-first",
|
"default": "correction-first",
|
||||||
"keys": [
|
"keys": [
|
||||||
|
@ -237,6 +231,18 @@
|
||||||
"default": "",
|
"default": "",
|
||||||
"keys": []
|
"keys": []
|
||||||
},
|
},
|
||||||
|
"vae_overlap": {
|
||||||
|
"default": 0.25,
|
||||||
|
"min": 0.0,
|
||||||
|
"max": 0.9,
|
||||||
|
"step": 0.01
|
||||||
|
},
|
||||||
|
"vae_tile": {
|
||||||
|
"default": 512,
|
||||||
|
"min": 256,
|
||||||
|
"max": 1024,
|
||||||
|
"step": 128
|
||||||
|
},
|
||||||
"width": {
|
"width": {
|
||||||
"default": 512,
|
"default": 512,
|
||||||
"min": 128,
|
"min": 128,
|
||||||
|
|
|
@ -305,12 +305,12 @@ TEST_DATA = [
|
||||||
),
|
),
|
||||||
TestCase(
|
TestCase(
|
||||||
"txt2img-panorama-1024x768-muffin",
|
"txt2img-panorama-1024x768-muffin",
|
||||||
"txt2img?prompt=a+giant+muffin&seed=0&scheduler=ddim&width=1024&height=768&pipeline=panorama&tiledVAE=true",
|
"txt2img?prompt=a+giant+muffin&seed=0&scheduler=ddim&width=1024&height=768&pipeline=panorama&tiled_vae=true",
|
||||||
max_attempts=VERY_SLOW_TEST,
|
max_attempts=VERY_SLOW_TEST,
|
||||||
),
|
),
|
||||||
TestCase(
|
TestCase(
|
||||||
"img2img-panorama-1024x768-pumpkin",
|
"img2img-panorama-1024x768-pumpkin",
|
||||||
"img2img?prompt=a+giant+pumpkin&seed=0&scheduler=ddim&sourceFilter=none&pipeline=panorama&tiledVAE=true",
|
"img2img?prompt=a+giant+pumpkin&seed=0&scheduler=ddim&sourceFilter=none&pipeline=panorama&tiled_vae=true",
|
||||||
source="txt2img-panorama-1024x768-muffin-0",
|
source="txt2img-panorama-1024x768-muffin-0",
|
||||||
max_attempts=VERY_SLOW_TEST,
|
max_attempts=VERY_SLOW_TEST,
|
||||||
),
|
),
|
||||||
|
|
|
@ -70,10 +70,11 @@ export function makeImageURL(root: string, type: string, params: BaseImgParams):
|
||||||
url.searchParams.append('cfg', params.cfg.toFixed(FIXED_FLOAT));
|
url.searchParams.append('cfg', params.cfg.toFixed(FIXED_FLOAT));
|
||||||
url.searchParams.append('eta', params.eta.toFixed(FIXED_FLOAT));
|
url.searchParams.append('eta', params.eta.toFixed(FIXED_FLOAT));
|
||||||
url.searchParams.append('steps', params.steps.toFixed(FIXED_INTEGER));
|
url.searchParams.append('steps', params.steps.toFixed(FIXED_INTEGER));
|
||||||
url.searchParams.append('tiledVAE', String(params.tiledVAE));
|
url.searchParams.append('tiled_vae', String(params.tiled_vae));
|
||||||
url.searchParams.append('tiles', params.tiles.toFixed(FIXED_INTEGER));
|
url.searchParams.append('unet_overlap', params.unet_overlap.toFixed(FIXED_FLOAT));
|
||||||
url.searchParams.append('overlap', params.overlap.toFixed(FIXED_FLOAT));
|
url.searchParams.append('unet_tile', params.unet_tile.toFixed(FIXED_INTEGER));
|
||||||
url.searchParams.append('stride', params.stride.toFixed(FIXED_INTEGER));
|
url.searchParams.append('vae_overlap', params.vae_overlap.toFixed(FIXED_FLOAT));
|
||||||
|
url.searchParams.append('vae_tile', params.vae_tile.toFixed(FIXED_INTEGER));
|
||||||
|
|
||||||
if (doesExist(params.scheduler)) {
|
if (doesExist(params.scheduler)) {
|
||||||
url.searchParams.append('scheduler', params.scheduler);
|
url.searchParams.append('scheduler', params.scheduler);
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
/* eslint-disable camelcase */
|
||||||
import { doesExist, mustDefault, mustExist } from '@apextoaster/js-utils';
|
import { doesExist, mustDefault, mustExist } from '@apextoaster/js-utils';
|
||||||
import { Casino } from '@mui/icons-material';
|
import { Casino } from '@mui/icons-material';
|
||||||
import { Button, Checkbox, FormControlLabel, Stack } from '@mui/material';
|
import { Button, Checkbox, FormControlLabel, Stack } from '@mui/material';
|
||||||
|
@ -47,9 +48,6 @@ export function ImageControl(props: ImageControlProps) {
|
||||||
staleTime: STALE_TIME,
|
staleTime: STALE_TIME,
|
||||||
});
|
});
|
||||||
|
|
||||||
// max stride is the lesser of tile size and server's max stride
|
|
||||||
const maxStride = Math.min(state.tiles, params.stride.max);
|
|
||||||
|
|
||||||
return <Stack spacing={2}>
|
return <Stack spacing={2}>
|
||||||
<Stack direction='row' spacing={4}>
|
<Stack direction='row' spacing={4}>
|
||||||
<QueryList
|
<QueryList
|
||||||
|
@ -156,58 +154,74 @@ export function ImageControl(props: ImageControlProps) {
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
<NumericField
|
<NumericField
|
||||||
label={t('parameter.tiles')}
|
label={t('parameter.unet_tile')}
|
||||||
min={params.tiles.min}
|
min={params.unet_tile.min}
|
||||||
max={params.tiles.max}
|
max={params.unet_tile.max}
|
||||||
step={params.tiles.step}
|
step={params.unet_tile.step}
|
||||||
value={state.tiles}
|
value={state.unet_tile}
|
||||||
onChange={(tiles) => {
|
onChange={(unet_tile) => {
|
||||||
props.onChange({
|
props.onChange({
|
||||||
...state,
|
...state,
|
||||||
tiles,
|
unet_tile,
|
||||||
|
});
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<NumericField
|
||||||
|
label={t('parameter.unet_overlap')}
|
||||||
|
min={params.unet_overlap.min}
|
||||||
|
max={params.unet_overlap.max}
|
||||||
|
step={params.unet_overlap.step}
|
||||||
|
value={state.unet_overlap}
|
||||||
|
onChange={(unet_overlap) => {
|
||||||
|
props.onChange({
|
||||||
|
...state,
|
||||||
|
unet_overlap,
|
||||||
|
});
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<FormControlLabel
|
||||||
|
label={t('parameter.tiled_vae')}
|
||||||
|
control={<Checkbox
|
||||||
|
checked={state.tiled_vae}
|
||||||
|
value='check'
|
||||||
|
onChange={(event) => {
|
||||||
|
props.onChange({
|
||||||
|
...state,
|
||||||
|
tiled_vae: state.tiled_vae === false,
|
||||||
|
});
|
||||||
|
}}
|
||||||
|
/>}
|
||||||
|
/>
|
||||||
|
<NumericField
|
||||||
|
decimal
|
||||||
|
disabled={state.tiled_vae === false}
|
||||||
|
label={t('parameter.vae_overlap')}
|
||||||
|
min={params.vae_overlap.min}
|
||||||
|
max={params.vae_overlap.max}
|
||||||
|
step={params.vae_overlap.step}
|
||||||
|
value={state.vae_overlap}
|
||||||
|
onChange={(vae_tile) => {
|
||||||
|
props.onChange({
|
||||||
|
...state,
|
||||||
|
vae_tile,
|
||||||
});
|
});
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
<NumericField
|
<NumericField
|
||||||
decimal
|
decimal
|
||||||
label={t('parameter.overlap')}
|
disabled={state.tiled_vae === false}
|
||||||
min={params.overlap.min}
|
label={t('parameter.vae_tile')}
|
||||||
max={params.overlap.max}
|
min={params.vae_tile.min}
|
||||||
step={params.overlap.step}
|
max={params.vae_tile.max}
|
||||||
value={state.overlap}
|
step={params.vae_tile.step}
|
||||||
onChange={(overlap) => {
|
value={state.vae_tile}
|
||||||
|
onChange={(vae_tile) => {
|
||||||
props.onChange({
|
props.onChange({
|
||||||
...state,
|
...state,
|
||||||
overlap,
|
vae_tile,
|
||||||
});
|
});
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
<NumericField
|
|
||||||
label={t('parameter.stride')}
|
|
||||||
min={params.stride.min}
|
|
||||||
max={maxStride}
|
|
||||||
step={params.stride.step}
|
|
||||||
value={state.stride}
|
|
||||||
onChange={(stride) => {
|
|
||||||
props.onChange({
|
|
||||||
...state,
|
|
||||||
stride,
|
|
||||||
});
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
<FormControlLabel
|
|
||||||
label={t('parameter.tiledVAE')}
|
|
||||||
control={<Checkbox
|
|
||||||
checked={state.tiledVAE}
|
|
||||||
value='check'
|
|
||||||
onChange={(event) => {
|
|
||||||
props.onChange({
|
|
||||||
...state,
|
|
||||||
tiledVAE: state.tiledVAE === false,
|
|
||||||
});
|
|
||||||
}}
|
|
||||||
/>}
|
|
||||||
/>
|
|
||||||
</Stack>
|
</Stack>
|
||||||
<PromptInput
|
<PromptInput
|
||||||
selector={selector}
|
selector={selector}
|
||||||
|
|
|
@ -131,12 +131,6 @@
|
||||||
"max": 4,
|
"max": 4,
|
||||||
"step": 1
|
"step": 1
|
||||||
},
|
},
|
||||||
"overlap": {
|
|
||||||
"default": 0.25,
|
|
||||||
"min": 0.0,
|
|
||||||
"max": 0.9,
|
|
||||||
"step": 0.01
|
|
||||||
},
|
|
||||||
"pipeline": {
|
"pipeline": {
|
||||||
"default": "",
|
"default": "",
|
||||||
"keys": [
|
"keys": [
|
||||||
|
@ -193,15 +187,9 @@
|
||||||
"max": 512,
|
"max": 512,
|
||||||
"step": 64
|
"step": 64
|
||||||
},
|
},
|
||||||
"tiledVAE": {
|
"tiled_vae": {
|
||||||
"default": false
|
"default": false
|
||||||
},
|
},
|
||||||
"tiles": {
|
|
||||||
"default": 512,
|
|
||||||
"min": 128,
|
|
||||||
"max": 1024,
|
|
||||||
"step": 128
|
|
||||||
},
|
|
||||||
"tileOrder": {
|
"tileOrder": {
|
||||||
"default": "spiral",
|
"default": "spiral",
|
||||||
"keys": [
|
"keys": [
|
||||||
|
@ -215,6 +203,18 @@
|
||||||
"max": 1024,
|
"max": 1024,
|
||||||
"step": 8
|
"step": 8
|
||||||
},
|
},
|
||||||
|
"unet_overlap": {
|
||||||
|
"default": 0.25,
|
||||||
|
"min": 0.0,
|
||||||
|
"max": 0.9,
|
||||||
|
"step": 0.01
|
||||||
|
},
|
||||||
|
"unet_tile": {
|
||||||
|
"default": 512,
|
||||||
|
"min": 128,
|
||||||
|
"max": 1024,
|
||||||
|
"step": 128
|
||||||
|
},
|
||||||
"upscaleOrder": {
|
"upscaleOrder": {
|
||||||
"default": "correction-first",
|
"default": "correction-first",
|
||||||
"keys": [
|
"keys": [
|
||||||
|
@ -227,6 +227,12 @@
|
||||||
"default": "",
|
"default": "",
|
||||||
"keys": []
|
"keys": []
|
||||||
},
|
},
|
||||||
|
"vae_overlap": {
|
||||||
|
"default": 0.25,
|
||||||
|
"min": 0.0,
|
||||||
|
"max": 0.9,
|
||||||
|
"step": 0.01
|
||||||
|
},
|
||||||
"width": {
|
"width": {
|
||||||
"default": 512,
|
"default": 512,
|
||||||
"min": 256,
|
"min": 256,
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
/* eslint-disable camelcase */
|
||||||
/* eslint-disable max-lines */
|
/* eslint-disable max-lines */
|
||||||
/* eslint-disable no-null/no-null */
|
/* eslint-disable no-null/no-null */
|
||||||
import { Maybe } from '@apextoaster/js-utils';
|
import { Maybe } from '@apextoaster/js-utils';
|
||||||
|
@ -267,10 +268,11 @@ export function baseParamsFromServer(defaults: ServerParams): Required<BaseImgPa
|
||||||
scheduler: defaults.scheduler.default,
|
scheduler: defaults.scheduler.default,
|
||||||
steps: defaults.steps.default,
|
steps: defaults.steps.default,
|
||||||
seed: defaults.seed.default,
|
seed: defaults.seed.default,
|
||||||
tiledVAE: defaults.tiledVAE.default,
|
tiled_vae: defaults.tiled_vae.default,
|
||||||
tiles: defaults.tiles.default,
|
unet_overlap: defaults.unet_overlap.default,
|
||||||
overlap: defaults.overlap.default,
|
unet_tile: defaults.unet_tile.default,
|
||||||
stride: defaults.stride.default,
|
vae_overlap: defaults.vae_overlap.default,
|
||||||
|
vae_tile: defaults.vae_tile.default,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -162,9 +162,11 @@ export const I18N_STRINGS_DE = {
|
||||||
steps: 'Schritte',
|
steps: 'Schritte',
|
||||||
strength: 'Stärke',
|
strength: 'Stärke',
|
||||||
stride: '',
|
stride: '',
|
||||||
tiledVAE: '',
|
tiled_vae: '',
|
||||||
tiles: '',
|
tiles: '',
|
||||||
tileOrder: '',
|
tileOrder: '',
|
||||||
|
unet_overlap: '',
|
||||||
|
unet_tile: '',
|
||||||
upscale: {
|
upscale: {
|
||||||
label: '',
|
label: '',
|
||||||
denoise: 'Entrauschen',
|
denoise: 'Entrauschen',
|
||||||
|
@ -172,6 +174,8 @@ export const I18N_STRINGS_DE = {
|
||||||
order: '',
|
order: '',
|
||||||
outscale: 'Ausgangsskala',
|
outscale: 'Ausgangsskala',
|
||||||
},
|
},
|
||||||
|
vae_overlap: '',
|
||||||
|
vae_tile: '',
|
||||||
width: 'Breite',
|
width: 'Breite',
|
||||||
correction: {
|
correction: {
|
||||||
label: 'Gesichtskorrektur',
|
label: 'Gesichtskorrektur',
|
||||||
|
|
|
@ -215,10 +215,10 @@ export const I18N_STRINGS_EN = {
|
||||||
sourceFilter: 'Source Filter',
|
sourceFilter: 'Source Filter',
|
||||||
steps: 'Steps',
|
steps: 'Steps',
|
||||||
strength: 'Strength',
|
strength: 'Strength',
|
||||||
stride: 'UNet Stride',
|
tiled_vae: 'Tiled VAE',
|
||||||
tiledVAE: 'Tiled VAE',
|
|
||||||
tiles: 'Tile Size',
|
|
||||||
tileOrder: 'Tile Order',
|
tileOrder: 'Tile Order',
|
||||||
|
unet_overlap: 'UNet Overlap',
|
||||||
|
unet_tile: 'UNet Tile Size',
|
||||||
upscale: {
|
upscale: {
|
||||||
label: 'Upscale',
|
label: 'Upscale',
|
||||||
denoise: 'Denoise',
|
denoise: 'Denoise',
|
||||||
|
@ -226,6 +226,8 @@ export const I18N_STRINGS_EN = {
|
||||||
order: 'Upscale Order',
|
order: 'Upscale Order',
|
||||||
outscale: 'Outscale',
|
outscale: 'Outscale',
|
||||||
},
|
},
|
||||||
|
vae_overlap: 'UNet Overlap',
|
||||||
|
vae_tile: 'VAE Tile Size',
|
||||||
width: 'Width',
|
width: 'Width',
|
||||||
correction: {
|
correction: {
|
||||||
label: 'Face Correction',
|
label: 'Face Correction',
|
||||||
|
|
|
@ -162,9 +162,11 @@ export const I18N_STRINGS_ES = {
|
||||||
steps: 'Pasos',
|
steps: 'Pasos',
|
||||||
strength: 'Fuerza',
|
strength: 'Fuerza',
|
||||||
stride: '',
|
stride: '',
|
||||||
tiledVAE: '',
|
tiled_vae: '',
|
||||||
tiles: '',
|
tiles: '',
|
||||||
tileOrder: 'Orden de secciones',
|
tileOrder: 'Orden de secciones',
|
||||||
|
unet_overlap: '',
|
||||||
|
unet_tile: '',
|
||||||
upscale: {
|
upscale: {
|
||||||
label: 'Aumento',
|
label: 'Aumento',
|
||||||
denoise: '',
|
denoise: '',
|
||||||
|
@ -172,6 +174,8 @@ export const I18N_STRINGS_ES = {
|
||||||
order: '',
|
order: '',
|
||||||
outscale: 'Escala de producción',
|
outscale: 'Escala de producción',
|
||||||
},
|
},
|
||||||
|
vae_overlap: '',
|
||||||
|
vae_tile: '',
|
||||||
width: 'Anchura',
|
width: 'Anchura',
|
||||||
correction: {
|
correction: {
|
||||||
label: 'Corrección facial',
|
label: 'Corrección facial',
|
||||||
|
|
|
@ -162,9 +162,11 @@ export const I18N_STRINGS_FR = {
|
||||||
steps: '',
|
steps: '',
|
||||||
strength: '',
|
strength: '',
|
||||||
stride: '',
|
stride: '',
|
||||||
tiledVAE: '',
|
tiled_vae: '',
|
||||||
tiles: '',
|
tiles: '',
|
||||||
tileOrder: '',
|
tileOrder: '',
|
||||||
|
unet_overlap: '',
|
||||||
|
unet_tile: '',
|
||||||
upscale: {
|
upscale: {
|
||||||
label: '',
|
label: '',
|
||||||
denoise: '',
|
denoise: '',
|
||||||
|
@ -172,6 +174,8 @@ export const I18N_STRINGS_FR = {
|
||||||
order: '',
|
order: '',
|
||||||
outscale: '',
|
outscale: '',
|
||||||
},
|
},
|
||||||
|
vae_overlap: '',
|
||||||
|
vae_tile: '',
|
||||||
width: '',
|
width: '',
|
||||||
correction: {
|
correction: {
|
||||||
label: '',
|
label: '',
|
||||||
|
|
|
@ -50,10 +50,11 @@ export interface BaseImgParams {
|
||||||
negativePrompt?: string;
|
negativePrompt?: string;
|
||||||
|
|
||||||
batch: number;
|
batch: number;
|
||||||
tiledVAE: boolean;
|
tiled_vae: boolean;
|
||||||
tiles: number;
|
vae_overlap: number;
|
||||||
overlap: number;
|
vae_tile: number;
|
||||||
stride: number;
|
unet_overlap: number;
|
||||||
|
unet_tile: number;
|
||||||
|
|
||||||
cfg: number;
|
cfg: number;
|
||||||
steps: number;
|
steps: number;
|
||||||
|
|
Loading…
Reference in New Issue