diff --git a/api/onnx_web/serve.py b/api/onnx_web/serve.py index 4ea0dfcd..568f356b 100644 --- a/api/onnx_web/serve.py +++ b/api/onnx_web/serve.py @@ -183,6 +183,7 @@ def upscale_from_request() -> UpscaleParams: upscaling = get_from_list(request.args, 'upscaling', upscaling_models) correction = get_from_list(request.args, 'correction', correction_models) faces = request.args.get('faces', 'false') == 'true' + face_strength = get_and_clamp_float(request.args, 'faceStrength', 0.5, 1.0, 0.0) return UpscaleParams( upscaling, @@ -192,6 +193,7 @@ def upscale_from_request() -> UpscaleParams: faces=faces, platform='onnx', denoise=denoise, + face_strength=face_strength, ) diff --git a/api/onnx_web/upscale.py b/api/onnx_web/upscale.py index 3225a538..6be9abc1 100644 --- a/api/onnx_web/upscale.py +++ b/api/onnx_web/upscale.py @@ -91,6 +91,7 @@ class UpscaleParams(): outscale: int = 1, denoise: float = 0.5, faces=True, + face_strength: float = 0.5, platform: str = 'onnx', half=False ) -> None: @@ -100,21 +101,10 @@ class UpscaleParams(): self.outscale = outscale self.denoise = denoise self.faces = faces + self.face_strength = face_strength self.platform = platform self.half = half - def rescale(self, scale: int, outscale: int = 1): - return UpscaleParams( - self.upscale_model, - correction_model=self.correction_model, - scale=scale, - outscale=outscale, - denoise=self.denoise, - faces=self.faces, - platform=self.platform, - half=self.half, - ) - def resize(self, size: Size) -> Size: return Size(size.width * self.scale * self.outscale, size.height * self.scale * self.outscale) @@ -190,6 +180,6 @@ def upscale_gfpgan(ctx: ServerContext, params: UpscaleParams, image, upsampler=N bg_upsampler=upsampler) _, _, output = face_enhancer.enhance( - image, has_aligned=False, only_center_face=False, paste_back=True) + image, has_aligned=False, only_center_face=False, paste_back=True, weight=params.face_strength) return output diff --git a/gui/src/client.ts b/gui/src/client.ts index 0db8e653..b432145c 100644 --- a/gui/src/client.ts +++ b/gui/src/client.ts @@ -73,6 +73,7 @@ export interface UpscaleParams { faces: boolean; scale: number; outscale: number; + faceStrength: number; } export interface ApiResponse { @@ -167,6 +168,8 @@ export function makeImageURL(root: string, type: string, params: BaseImgParams): export function appendModelToURL(url: URL, params: ModelParams) { url.searchParams.append('model', params.model); url.searchParams.append('platform', params.platform); + url.searchParams.append('upscaling', params.upscaling); + url.searchParams.append('correction', params.correction); } export function appendUpscaleToURL(url: URL, upscale: UpscaleParams) { @@ -175,6 +178,7 @@ export function appendUpscaleToURL(url: URL, upscale: UpscaleParams) { url.searchParams.append('faces', String(upscale.faces)); url.searchParams.append('scale', upscale.scale.toFixed(FIXED_INTEGER)); url.searchParams.append('outscale', upscale.outscale.toFixed(FIXED_INTEGER)); + url.searchParams.append('faceStrength', upscale.faceStrength.toFixed(FIXED_FLOAT)); } } diff --git a/gui/src/components/UpscaleControl.tsx b/gui/src/components/UpscaleControl.tsx index 1b0af5fa..14866bc8 100644 --- a/gui/src/components/UpscaleControl.tsx +++ b/gui/src/components/UpscaleControl.tsx @@ -89,5 +89,19 @@ export function UpscaleControl(props: UpscaleControlProps) { Face Correction + { + setUpscale({ + faceStrength, + }); + }} + /> ; } diff --git a/gui/src/state.ts b/gui/src/state.ts index eac13166..85d15f8c 100644 --- a/gui/src/state.ts +++ b/gui/src/state.ts @@ -250,6 +250,7 @@ export function createStateSlices(base: ConfigParams) { faces: false, scale: 1, outscale: 1, + faceStrength: 0.5, }, setUpscale(upscale) { set((prev) => ({