feat: add tiled VAE parameter to client
This commit is contained in:
parent
577e2320f5
commit
7e5380db43
|
@ -398,12 +398,14 @@ class HighresParams:
|
||||||
strength: float,
|
strength: float,
|
||||||
method: Literal["bilinear", "lanczos", "upscale"] = "lanczos",
|
method: Literal["bilinear", "lanczos", "upscale"] = "lanczos",
|
||||||
iterations: int = 1,
|
iterations: int = 1,
|
||||||
|
tiled_vae: bool = False,
|
||||||
):
|
):
|
||||||
self.scale = scale
|
self.scale = scale
|
||||||
self.steps = steps
|
self.steps = steps
|
||||||
self.strength = strength
|
self.strength = strength
|
||||||
self.method = method
|
self.method = method
|
||||||
self.iterations = iterations
|
self.iterations = iterations
|
||||||
|
self.tiled_vae = tiled_vae
|
||||||
|
|
||||||
def resize(self, size: Size) -> Size:
|
def resize(self, size: Size) -> Size:
|
||||||
return Size(
|
return Size(
|
||||||
|
@ -418,4 +420,5 @@ class HighresParams:
|
||||||
"scale": self.scale,
|
"scale": self.scale,
|
||||||
"steps": self.steps,
|
"steps": self.steps,
|
||||||
"strength": self.strength,
|
"strength": self.strength,
|
||||||
|
"tiled_vae": self.tiled_vae,
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@ from ..params import (
|
||||||
Size,
|
Size,
|
||||||
UpscaleParams,
|
UpscaleParams,
|
||||||
)
|
)
|
||||||
from ..utils import get_and_clamp_float, get_and_clamp_int, get_from_list, get_not_empty
|
from ..utils import get_and_clamp_float, get_and_clamp_int, get_boolean, get_from_list, get_not_empty
|
||||||
from .context import ServerContext
|
from .context import ServerContext
|
||||||
from .load import (
|
from .load import (
|
||||||
get_available_platforms,
|
get_available_platforms,
|
||||||
|
@ -277,10 +277,13 @@ def highres_from_request() -> HighresParams:
|
||||||
get_config_value("highresStrength", "min"),
|
get_config_value("highresStrength", "min"),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
tiled_vae = get_boolean(request.args, "tiledVAE", get_config_value("tiledVAE"))
|
||||||
|
|
||||||
return HighresParams(
|
return HighresParams(
|
||||||
scale,
|
scale,
|
||||||
steps,
|
steps,
|
||||||
strength,
|
strength,
|
||||||
method=method,
|
method=method,
|
||||||
iterations=iterations,
|
iterations=iterations,
|
||||||
|
tiled_vae=tiled_vae,
|
||||||
)
|
)
|
||||||
|
|
|
@ -180,6 +180,9 @@
|
||||||
"max": 1,
|
"max": 1,
|
||||||
"step": 0.01
|
"step": 0.01
|
||||||
},
|
},
|
||||||
|
"tiledVAE": {
|
||||||
|
"default": false
|
||||||
|
},
|
||||||
"tileOrder": {
|
"tileOrder": {
|
||||||
"default": "spiral",
|
"default": "spiral",
|
||||||
"keys": [
|
"keys": [
|
||||||
|
|
|
@ -30,7 +30,7 @@ build-shebang: build
|
||||||
bundle: build
|
bundle: build
|
||||||
node esbuild.js
|
node esbuild.js
|
||||||
cp -v src/index.html out/
|
cp -v src/index.html out/
|
||||||
cp -v examples/config.json out/
|
cp -v src/config.json out/
|
||||||
|
|
||||||
COVER_OPTS := --all \
|
COVER_OPTS := --all \
|
||||||
--exclude ".eslintrc.js" \
|
--exclude ".eslintrc.js" \
|
||||||
|
|
|
@ -54,7 +54,7 @@ if (watch) {
|
||||||
],
|
],
|
||||||
plugins: [
|
plugins: [
|
||||||
...plugins,
|
...plugins,
|
||||||
...copyArray(['src/index.html', 'examples/config.json']),
|
...copyArray(['src/index.html', 'src/config.json']),
|
||||||
],
|
],
|
||||||
banner: {
|
banner: {
|
||||||
js: `new EventSource('/esbuild').addEventListener('change', () => location.reload());`,
|
js: `new EventSource('/esbuild').addEventListener('change', () => location.reload());`,
|
||||||
|
|
|
@ -160,6 +160,8 @@ export interface HighresParams {
|
||||||
highresScale: number;
|
highresScale: number;
|
||||||
highresSteps: number;
|
highresSteps: number;
|
||||||
highresStrength: number;
|
highresStrength: number;
|
||||||
|
|
||||||
|
tiledVAE: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -453,6 +455,10 @@ export function appendUpscaleToURL(url: URL, upscale: UpscaleParams) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function appendHighresToURL(url: URL, highres: HighresParams) {
|
export function appendHighresToURL(url: URL, highres: HighresParams) {
|
||||||
|
if (highres.tiledVAE) {
|
||||||
|
url.searchParams.append('tiledVAE', String(highres.tiledVAE));
|
||||||
|
}
|
||||||
|
|
||||||
if (highres.enabled) {
|
if (highres.enabled) {
|
||||||
url.searchParams.append('highresIterations', highres.highresIterations.toFixed(FIXED_INTEGER));
|
url.searchParams.append('highresIterations', highres.highresIterations.toFixed(FIXED_INTEGER));
|
||||||
url.searchParams.append('highresMethod', highres.highresMethod);
|
url.searchParams.append('highresMethod', highres.highresMethod);
|
||||||
|
|
|
@ -17,6 +17,18 @@ export function HighresControl() {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
return <Stack direction='row' spacing={4}>
|
return <Stack direction='row' spacing={4}>
|
||||||
|
<FormControlLabel
|
||||||
|
label={t('parameter.tiledVAE')}
|
||||||
|
control={<Checkbox
|
||||||
|
checked={highres.tiledVAE}
|
||||||
|
value='check'
|
||||||
|
onChange={(event) => {
|
||||||
|
setHighres({
|
||||||
|
tiledVAE: highres.tiledVAE === false,
|
||||||
|
});
|
||||||
|
}}
|
||||||
|
/>}
|
||||||
|
/>
|
||||||
<FormControlLabel
|
<FormControlLabel
|
||||||
label={t('parameter.highres.label')}
|
label={t('parameter.highres.label')}
|
||||||
control={<Checkbox
|
control={<Checkbox
|
||||||
|
@ -72,6 +84,7 @@ export function HighresControl() {
|
||||||
<FormControl>
|
<FormControl>
|
||||||
<InputLabel id={'highres-method'}>{t('parameter.highres.method')}</InputLabel>
|
<InputLabel id={'highres-method'}>{t('parameter.highres.method')}</InputLabel>
|
||||||
<Select
|
<Select
|
||||||
|
disabled={highres.enabled === false}
|
||||||
labelId={'highres-method'}
|
labelId={'highres-method'}
|
||||||
label={t('parameter.highres.method')}
|
label={t('parameter.highres.method')}
|
||||||
value={highres.highresMethod}
|
value={highres.highresMethod}
|
||||||
|
|
|
@ -178,6 +178,9 @@
|
||||||
"max": 1,
|
"max": 1,
|
||||||
"step": 0.01
|
"step": 0.01
|
||||||
},
|
},
|
||||||
|
"tiledVAE": {
|
||||||
|
"default": false
|
||||||
|
},
|
||||||
"tileOrder": {
|
"tileOrder": {
|
||||||
"default": "spiral",
|
"default": "spiral",
|
||||||
"keys": [
|
"keys": [
|
|
@ -2,6 +2,10 @@ import { doesExist, Maybe } from '@apextoaster/js-utils';
|
||||||
import { merge } from 'lodash';
|
import { merge } from 'lodash';
|
||||||
import { HighresParams, Img2ImgParams, InpaintParams, ModelParams, OutpaintParams, STATUS_SUCCESS, Txt2ImgParams, UpscaleParams } from './client/api.js';
|
import { HighresParams, Img2ImgParams, InpaintParams, ModelParams, OutpaintParams, STATUS_SUCCESS, Txt2ImgParams, UpscaleParams } from './client/api.js';
|
||||||
|
|
||||||
|
export interface ConfigBoolean {
|
||||||
|
default: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
export interface ConfigNumber {
|
export interface ConfigNumber {
|
||||||
default: number;
|
default: number;
|
||||||
min: number;
|
min: number;
|
||||||
|
@ -17,7 +21,7 @@ export interface ConfigString {
|
||||||
/**
|
/**
|
||||||
* Helper type to filter keys whose value extends `TValid`.
|
* Helper type to filter keys whose value extends `TValid`.
|
||||||
*/
|
*/
|
||||||
export type KeyFilter<T extends object, TValid = number | string> = {
|
export type KeyFilter<T extends object, TValid = boolean | number | string> = {
|
||||||
[K in keyof T]: T[K] extends TValid ? K : never;
|
[K in keyof T]: T[K] extends TValid ? K : never;
|
||||||
}[keyof T];
|
}[keyof T];
|
||||||
|
|
||||||
|
@ -32,13 +36,13 @@ export type ConfigFiles<T extends object> = {
|
||||||
* Map numbers and strings to their corresponding config types and drop the rest of the fields.
|
* Map numbers and strings to their corresponding config types and drop the rest of the fields.
|
||||||
*/
|
*/
|
||||||
export type ConfigRanges<T extends object> = {
|
export type ConfigRanges<T extends object> = {
|
||||||
[K in KeyFilter<T>]: T[K] extends number ? ConfigNumber : T[K] extends string ? ConfigString : never;
|
[K in KeyFilter<T>]: T[K] extends boolean ? ConfigBoolean : T[K] extends number ? ConfigNumber : T[K] extends string ? ConfigString : never;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Keep fields whose value extends `TValid` and drop the rest.
|
* Keep fields whose value extends `TValid` and drop the rest.
|
||||||
*/
|
*/
|
||||||
export type ConfigState<T extends object, TValid = number | string> = {
|
export type ConfigState<T extends object, TValid = boolean | number | string> = {
|
||||||
[K in KeyFilter<T, TValid>]: T[K] extends TValid ? T[K] : never;
|
[K in KeyFilter<T, TValid>]: T[K] extends TValid ? T[K] : never;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -447,6 +447,7 @@ export function createStateSlices(server: ServerParams) {
|
||||||
highresSteps: server.highresSteps.default,
|
highresSteps: server.highresSteps.default,
|
||||||
highresScale: server.highresScale.default,
|
highresScale: server.highresScale.default,
|
||||||
highresStrength: server.highresStrength.default,
|
highresStrength: server.highresStrength.default,
|
||||||
|
tiledVAE: server.tiledVAE.default,
|
||||||
},
|
},
|
||||||
setHighres(params) {
|
setHighres(params) {
|
||||||
set((prev) => ({
|
set((prev) => ({
|
||||||
|
@ -465,6 +466,7 @@ export function createStateSlices(server: ServerParams) {
|
||||||
highresSteps: server.highresSteps.default,
|
highresSteps: server.highresSteps.default,
|
||||||
highresScale: server.highresScale.default,
|
highresScale: server.highresScale.default,
|
||||||
highresStrength: server.highresStrength.default,
|
highresStrength: server.highresStrength.default,
|
||||||
|
tiledVAE: server.tiledVAE.default,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
|
@ -129,6 +129,7 @@ export const I18N_STRINGS_DE = {
|
||||||
sourceFilter: '',
|
sourceFilter: '',
|
||||||
steps: 'Schritte',
|
steps: 'Schritte',
|
||||||
strength: 'Stärke',
|
strength: 'Stärke',
|
||||||
|
tiledVAE: '',
|
||||||
tileOrder: '',
|
tileOrder: '',
|
||||||
upscale: {
|
upscale: {
|
||||||
label: '',
|
label: '',
|
||||||
|
|
|
@ -181,6 +181,7 @@ export const I18N_STRINGS_EN = {
|
||||||
sourceFilter: 'Source Filter',
|
sourceFilter: 'Source Filter',
|
||||||
steps: 'Steps',
|
steps: 'Steps',
|
||||||
strength: 'Strength',
|
strength: 'Strength',
|
||||||
|
tiledVAE: 'Tiled VAE',
|
||||||
tileOrder: 'Tile Order',
|
tileOrder: 'Tile Order',
|
||||||
upscale: {
|
upscale: {
|
||||||
label: 'Upscale',
|
label: 'Upscale',
|
||||||
|
|
|
@ -129,6 +129,7 @@ export const I18N_STRINGS_ES = {
|
||||||
sourceFilter: '',
|
sourceFilter: '',
|
||||||
steps: 'Pasos',
|
steps: 'Pasos',
|
||||||
strength: 'Fuerza',
|
strength: 'Fuerza',
|
||||||
|
tiledVAE: '',
|
||||||
tileOrder: 'Orden de secciones',
|
tileOrder: 'Orden de secciones',
|
||||||
upscale: {
|
upscale: {
|
||||||
label: 'Aumento',
|
label: 'Aumento',
|
||||||
|
|
|
@ -129,6 +129,7 @@ export const I18N_STRINGS_FR = {
|
||||||
sourceFilter: '',
|
sourceFilter: '',
|
||||||
steps: '',
|
steps: '',
|
||||||
strength: '',
|
strength: '',
|
||||||
|
tiledVAE: '',
|
||||||
tileOrder: '',
|
tileOrder: '',
|
||||||
upscale: {
|
upscale: {
|
||||||
label: '',
|
label: '',
|
||||||
|
|
Loading…
Reference in New Issue