1
0
Fork 0

feat: add parameter for highres iterations (#316)

This commit is contained in:
Sean Sube 2023-04-09 19:53:00 -05:00
parent ff9ce03af5
commit 7f504a5b5b
Signed by: ssube
GPG Key ID: 3EED7B957D362AF1
7 changed files with 45 additions and 9 deletions

View File

@ -185,14 +185,16 @@ def run_txt2img_pipeline(
) )
return result.images[0] return result.images[0]
logger.info("running highres fix for %s tiles", highres.scale) logger.info("running highres fix for %s iterations at %s scale", highres.iterations, highres.scale)
image = process_tile_order( for _i in range(highres.iterations):
TileOrder.grid, image = process_tile_order(
image, TileOrder.grid,
size.height // highres.scale, image,
highres.scale, size.height // highres.scale,
[highres_tile], highres.scale,
) [highres_tile],
overlap=0,
)
image = run_upscale_correction( image = run_upscale_correction(
job, job,

View File

@ -326,17 +326,20 @@ class HighresParams:
steps: int, steps: int,
strength: float, strength: float,
method: Literal["bilinear", "lanczos", "upscale"] = "lanczos", method: Literal["bilinear", "lanczos", "upscale"] = "lanczos",
iterations: int = 1,
): ):
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
def resize(self, size: Size) -> Size: def resize(self, size: Size) -> Size:
return Size(size.width * self.scale, size.height * self.scale) return Size(size.width * (self.scale ** self.iterations), size.height * (self.scale ** self.iterations))
def tojson(self): def tojson(self):
return { return {
"iterations": self.iterations,
"method": self.method, "method": self.method,
"scale": self.scale, "scale": self.scale,
"steps": self.steps, "steps": self.steps,

View File

@ -226,6 +226,13 @@ def upscale_from_request() -> UpscaleParams:
def highres_from_request() -> HighresParams: def highres_from_request() -> HighresParams:
iterations = get_and_clamp_int(
request.args,
"highresIterations",
get_config_value("highresIterations"),
get_config_value("highresIterations", "max"),
get_config_value("highresIterations", "min"),
)
method = get_from_list(request.args, "highresMethod", get_highres_methods()) method = get_from_list(request.args, "highresMethod", get_highres_methods())
scale = get_and_clamp_int( scale = get_and_clamp_int(
request.args, request.args,
@ -254,4 +261,5 @@ def highres_from_request() -> HighresParams:
steps, steps,
strength, strength,
method=method, method=method,
iterations=iterations,
) )

View File

@ -60,6 +60,12 @@
"max": 1024, "max": 1024,
"step": 8 "step": 8
}, },
"highresIterations": {
"default": 1,
"min": 1,
"max": 4,
"step": 1
},
"highresMethod": { "highresMethod": {
"default": "lanczos", "default": "lanczos",
"keys": [ "keys": [

View File

@ -147,6 +147,7 @@ export interface BlendParams {
export interface HighresParams { export interface HighresParams {
enabled: boolean; enabled: boolean;
highresIterations: number;
highresMethod: string; highresMethod: string;
highresScale: number; highresScale: number;
highresSteps: number; highresSteps: number;
@ -504,6 +505,7 @@ export function makeClient(root: string, f = fetch): ApiClient {
} }
if (doesExist(highres) && highres.enabled) { if (doesExist(highres) && highres.enabled) {
url.searchParams.append('highresIterations', highres.highresIterations.toFixed(FIXED_INTEGER));
url.searchParams.append('highresMethod', highres.highresMethod); url.searchParams.append('highresMethod', highres.highresMethod);
url.searchParams.append('highresScale', highres.highresScale.toFixed(FIXED_INTEGER)); url.searchParams.append('highresScale', highres.highresScale.toFixed(FIXED_INTEGER));
url.searchParams.append('highresSteps', highres.highresSteps.toFixed(FIXED_INTEGER)); url.searchParams.append('highresSteps', highres.highresSteps.toFixed(FIXED_INTEGER));

View File

@ -86,5 +86,18 @@ export function HighresControl() {
} }
</Select> </Select>
</FormControl> </FormControl>
<NumericField
label={t('parameter.highres.iterations')}
disabled={highres.enabled === false}
min={params.highresIterations.min}
max={params.highresIterations.max}
step={params.highresIterations.step}
value={highres.highresIterations}
onChange={(iterations) => {
setHighres({
highresIterations: iterations,
});
}}
/>
</Stack>; </Stack>;
} }

View File

@ -433,6 +433,7 @@ export function createStateSlices(server: ServerParams) {
const createHighresSlice: Slice<HighresSlice> = (set) => ({ const createHighresSlice: Slice<HighresSlice> = (set) => ({
highres: { highres: {
enabled: false, enabled: false,
highresIterations: server.highresIterations.default,
highresMethod: '', highresMethod: '',
highresSteps: server.highresSteps.default, highresSteps: server.highresSteps.default,
highresScale: server.highresScale.default, highresScale: server.highresScale.default,
@ -450,6 +451,7 @@ export function createStateSlices(server: ServerParams) {
set({ set({
highres: { highres: {
enabled: false, enabled: false,
highresIterations: server.highresIterations.default,
highresMethod: '', highresMethod: '',
highresSteps: server.highresSteps.default, highresSteps: server.highresSteps.default,
highresScale: server.highresScale.default, highresScale: server.highresScale.default,