1
0
Fork 0

feat: add tiled VAE parameter to client

This commit is contained in:
Sean Sube 2023-04-28 13:30:54 -05:00
parent 577e2320f5
commit 7e5380db43
Signed by: ssube
GPG Key ID: 3EED7B957D362AF1
14 changed files with 47 additions and 6 deletions

View File

@ -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,
} }

View File

@ -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,
) )

View File

@ -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": [

View File

@ -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" \

View File

@ -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());`,

View File

@ -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);

View File

@ -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}

View File

@ -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": [

View File

@ -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;
}; };

View File

@ -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,
}, },
}); });
}, },

View File

@ -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: '',

View File

@ -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',

View File

@ -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',

View File

@ -129,6 +129,7 @@ export const I18N_STRINGS_FR = {
sourceFilter: '', sourceFilter: '',
steps: '', steps: '',
strength: '', strength: '',
tiledVAE: '',
tileOrder: '', tileOrder: '',
upscale: { upscale: {
label: '', label: '',