1
0
Fork 0

feat(gui): add tile and stride params

This commit is contained in:
Sean Sube 2023-05-01 23:39:54 -05:00
parent 8b57767f4a
commit d63130cd75
Signed by: ssube
GPG Key ID: 3EED7B957D362AF1
4 changed files with 60 additions and 22 deletions

View File

@ -48,6 +48,10 @@ export interface BaseImgParams {
negativePrompt?: string; negativePrompt?: string;
batch: number; batch: number;
tiledVAE: boolean;
tiles: number;
overlap: number;
cfg: number; cfg: number;
steps: number; steps: number;
seed: number; seed: number;
@ -160,8 +164,6 @@ export interface HighresParams {
highresScale: number; highresScale: number;
highresSteps: number; highresSteps: number;
highresStrength: number; highresStrength: number;
tiledVAE: boolean;
} }
/** /**
@ -404,6 +406,9 @@ 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('tiles', params.tiles.toFixed(FIXED_INTEGER));
url.searchParams.append('overlap', params.overlap.toFixed(FIXED_FLOAT));
if (doesExist(params.scheduler)) { if (doesExist(params.scheduler)) {
url.searchParams.append('scheduler', params.scheduler); url.searchParams.append('scheduler', params.scheduler);
@ -455,10 +460,6 @@ 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,18 +17,6 @@ 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

View File

@ -1,6 +1,6 @@
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, Stack } from '@mui/material'; import { Button, Checkbox, FormControlLabel, Stack } from '@mui/material';
import * as React from 'react'; import * as React from 'react';
import { useContext } from 'react'; import { useContext } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
@ -84,6 +84,54 @@ export function ImageControl(props: ImageControlProps) {
} }
}} }}
/> />
<FormControlLabel
label={t('parameter.tiledVAE')}
control={<Checkbox
checked={controlState.tiledVAE}
value='check'
onChange={(event) => {
if (doesExist(props.onChange)) {
props.onChange({
...controlState,
tiledVAE: controlState.tiledVAE === false,
});
}
}}
/>}
/>
<NumericField
label={t('parameter.tiles')}
min={params.tiles.min}
max={params.tiles.max}
step={params.tiles.step}
value={controlState.tiles}
onChange={(tiles) => {
if (doesExist(props.onChange)) {
props.onChange({
...controlState,
tiles,
});
}
}}
/>
<NumericField
decimal
label={t('parameter.overlap')}
min={params.overlap.min}
max={params.overlap.max}
step={params.overlap.step}
value={controlState.overlap}
onChange={(overlap) => {
if (doesExist(props.onChange)) {
props.onChange({
...controlState,
overlap,
});
}
}}
/>
</Stack>
<Stack direction='row' spacing={4}>
<NumericField <NumericField
decimal decimal
label={t('parameter.cfg')} label={t('parameter.cfg')}

View File

@ -217,6 +217,9 @@ 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,
tiles: defaults.tiles.default,
overlap: defaults.overlap.default,
}; };
} }
@ -447,7 +450,6 @@ 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) => ({
@ -466,7 +468,6 @@ 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,
}, },
}); });
}, },
@ -537,7 +538,7 @@ export function createStateSlices(server: ServerParams) {
const createResetSlice: Slice<ResetSlice> = (set) => ({ const createResetSlice: Slice<ResetSlice> = (set) => ({
resetAll() { resetAll() {
set((prev) => { set((prev) => {
const next = {...prev}; const next = { ...prev };
next.resetImg2Img(); next.resetImg2Img();
next.resetInpaint(); next.resetInpaint();
next.resetTxt2Img(); next.resetTxt2Img();