Skip to content

Commit f73deb4

Browse files
authored
Merge pull request #74 from freek99/feat/upscale-customx
Add upscale custom support
2 parents 5256c01 + 5fe50a9 commit f73deb4

File tree

5 files changed

+20
-7
lines changed

5 files changed

+20
-7
lines changed

fooocusapi/api_utils.py

+3
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ def req_to_params(req: Text2ImgRequest) -> ImageGenerationParams:
4747
req, ImgUpscaleOrVaryRequest) or isinstance(req, ImgUpscaleOrVaryRequestJson)) else read_input_image(req.input_image)
4848
uov_method = flags.disabled if not (isinstance(
4949
req, ImgUpscaleOrVaryRequest) or isinstance(req, ImgUpscaleOrVaryRequestJson)) else req.uov_method.value
50+
upscale_value = None if not (isinstance(
51+
req, ImgUpscaleOrVaryRequest) or isinstance(req, ImgUpscaleOrVaryRequestJson)) else req.upscale_value
5052
outpaint_selections = [] if not (isinstance(
5153
req, ImgInpaintOrOutpaintRequest) or isinstance(req, ImgInpaintOrOutpaintRequestJson)) else [
5254
s.value for s in req.outpaint_selections]
@@ -133,6 +135,7 @@ def req_to_params(req: Text2ImgRequest) -> ImageGenerationParams:
133135
loras=loras,
134136
uov_input_image=uov_input_image,
135137
uov_method=uov_method,
138+
upscale_value=upscale_value,
136139
outpaint_selections=outpaint_selections,
137140
outpaint_distance_left=outpaint_distance_left,
138141
outpaint_distance_right=outpaint_distance_right,

fooocusapi/models.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class UpscaleOrVaryMethod(str, Enum):
4141
upscale_15 = 'Upscale (1.5x)'
4242
upscale_2 = 'Upscale (2x)'
4343
upscale_fast = 'Upscale (Fast 2x)'
44-
44+
upscale_custom = 'Upscale (Custom)'
4545

4646
class OutpaintExpansion(str, Enum):
4747
left = 'Left'
@@ -122,10 +122,12 @@ class Text2ImgRequest(BaseModel):
122122
class ImgUpscaleOrVaryRequest(Text2ImgRequest):
123123
input_image: UploadFile
124124
uov_method: UpscaleOrVaryMethod
125+
upscale_value: float
125126

126127
@classmethod
127128
def as_form(cls, input_image: UploadFile = Form(description="Init image for upsacale or outpaint"),
128129
uov_method: UpscaleOrVaryMethod = Form(),
130+
upscale_value: float = Form(default=1.0, ge=1.0, le=5.0),
129131
prompt: str = Form(''),
130132
negative_prompt: str = Form(default_prompt_negative),
131133
style_selections: List[str] = Form(defualt_styles, description="Fooocus style selections, seperated by comma"),
@@ -168,7 +170,7 @@ def as_form(cls, input_image: UploadFile = Form(description="Init image for upsa
168170
errs = ve.errors()
169171
raise RequestValidationError(errors=[errs])
170172

171-
return cls(input_image=input_image, uov_method=uov_method, prompt=prompt, negative_prompt=negative_prompt, style_selections=style_selection_arr,
173+
return cls(input_image=input_image, uov_method=uov_method,upscale_value=upscale_value, prompt=prompt, negative_prompt=negative_prompt, style_selections=style_selection_arr,
172174
performance_selection=performance_selection, aspect_ratios_selection=aspect_ratios_selection,
173175
image_number=image_number, image_seed=image_seed, sharpness=sharpness, guidance_scale=guidance_scale,
174176
base_model_name=base_model_name, refiner_model_name=refiner_model_name, refiner_switch=refiner_switch,

fooocusapi/models_v2.py

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
class ImgUpscaleOrVaryRequestJson(Text2ImgRequest):
55
uov_method: UpscaleOrVaryMethod = "Upscale (2x)"
6+
upscale_value: float | None = Field(None, ge=1.0, le=5.0, description="Upscale custom value, None for default value")
67
input_image: str = Field(description="Init image for upsacale or outpaint as base64")
78

89

fooocusapi/parameters.py

+2
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ def __init__(self, prompt: str,
9393
loras: List[Tuple[str, float]],
9494
uov_input_image: np.ndarray | None,
9595
uov_method: str,
96+
upscale_value: float,
9697
outpaint_selections: List[str],
9798
outpaint_distance_left: int,
9899
outpaint_distance_right: int,
@@ -117,6 +118,7 @@ def __init__(self, prompt: str,
117118
self.loras = loras
118119
self.uov_input_image = uov_input_image
119120
self.uov_method = uov_method
121+
self.upscale_value = upscale_value
120122
self.outpaint_selections = outpaint_selections
121123
self.outpaint_distance_left = outpaint_distance_left
122124
self.outpaint_distance_right = outpaint_distance_right

fooocusapi/worker.py

+10-5
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import time
44
import numpy as np
55
import torch
6+
import re
67
from typing import List
78
from fooocusapi.file_utils import save_output_file
89
from fooocusapi.parameters import GenerationFinishReason, ImageGenerationParams, ImageGenerationResult
@@ -121,6 +122,7 @@ def yield_result(_, imgs, tasks):
121122
input_image_checkbox = params.uov_input_image is not None or params.inpaint_input_image is not None or len(params.image_prompts) > 0
122123
current_tab = 'uov' if params.uov_method != flags.disabled else 'inpaint' if params.inpaint_input_image is not None else 'ip' if len(params.image_prompts) > 0 else None
123124
uov_method = params.uov_method
125+
upscale_value = params.upscale_value
124126
uov_input_image = params.uov_input_image
125127
outpaint_selections = params.outpaint_selections
126128
outpaint_distance_left = params.outpaint_distance_left
@@ -466,12 +468,15 @@ def yield_result(_, imgs, tasks):
466468
uov_input_image = perform_upscale(uov_input_image)
467469
print(f'Image upscaled.')
468470

469-
if '1.5x' in uov_method:
470-
f = 1.5
471-
elif '2x' in uov_method:
472-
f = 2.0
471+
f = 1.0
472+
if upscale_value > 1.0:
473+
f = upscale_value
473474
else:
474-
f = 1.0
475+
pattern = r"([0-9]+(?:\.[0-9]+)?)x"
476+
matches = re.findall(pattern, uov_method)
477+
if len(matches) > 0:
478+
f_tmp = float(matches[0])
479+
f = 1.0 if f_tmp < 1.0 else 5.0 if f_tmp > 5.0 else f_tmp
475480

476481
shape_ceil = get_shape_ceil(H * f, W * f)
477482

0 commit comments

Comments
 (0)