上一期我们终于调通了 gradio client 的接口,这样我们文生图就不用依赖于界面了, 不过放大图还不行,今天我们来搞定这个。
如果你还没调通 fooocust 的 gradio client 接口,那么不妨去看看这篇。 fooocus 的 gradio client 接口目前全部都是未命名的节点(unamed endpoint) 而且随时有可能会变,所以我们这边只讲方法,目前我这里 fooocus 的版本是 2.3.0, 如果版本对不上,那么参数可能需要按下面流程修正。
之前我们已经推测了一版 fn_index=40
的各个参数的含义,那么其实对应到界面,
我们可以试着填一下参数看看效果,有用的参数似乎是这么几个:
True, #'Input Image' Checkbox
"", # 'parameter_91' Textbox? maybe: Upscale or Variation Prompt
"Vary (Subtle)", # 'Upscale or Variation:' Radio
"path/to/pic.png", # 'Upscale or Variation' Image
1 和 3 没什么争议,2 我们不知道是啥,先空着,4 的话,看说明是可以填写图片的路径, 但是按这个填法四个填下去,显然是不行的,不然我也不用写这个。图是可以生得出来, 但是似乎跟我们给出的图片完全没有关系。我觉得可能的原因有三个:
parameter_91
是什么还不清楚41
有误这三个其实都挺难验证的,相对而言第一个简单一点,在尝试了路径字符串、文件、
base64 几种格式后,我觉得其实就应该传路径,因为其他几种都会报错,
而填写正确的路径是不会报错的。第三个原因是我接下来排除的,因为重新看了一遍接口,
感觉只有这个 41
最像是画图。那么问题很可能就是这个 parameter_91
,
但是因为没有说明文档,那我们要怎么确定这个参数的含义呢?自然只能去看源码。
我的水平有限,看懂大模型怎么画图是不太现实的,但是看懂参数怎么传递的,其实不难,
我们搜一个配置值就好了,比如 ADM Scale
:
在源码搜这段文字,很快我们可以找到值得怀疑的对象:
看上去就是把入参一个一个 pop
出来,那我们要找的参数在哪里呢,继续看就好了:
碰巧这段和我们参数的排列差不多,首先是一个勾选项,然后两个 string
,
最后是一个文件。print
是我加上去的,因为我想看下这几个值是什么,
根据这段我们可以知道了 current_tab
就是那个传说中的 parameter_91
。
所以加完 print
,我们在 fooocus 的 web 页面画一次放大图,
就知道这个参数应该传什么了,注意改完代码要重启 fooocus 才能生效。关子就不卖了,
放大图是 “uov”
,如果我们在代码中搜 current_tab
,
会注意到它的另两个值 "ip"
和 "inpaint"
:
什么意思就留给大家验证了,我已经可以用代码做放大图了,以下是 anime 的全部配置:
from gradio_client import Client
client = Client("http://127.0.0.1:7865/")
# Textbox: string
# Checkbox: bool
# Radio: string
# Dropdown: string
# Slider: float | int
# Checkboxgroup: list[string]
# Image: filepath or URL to image
result = client.predict(
False, # 'Generate Image Grid for Each Batch' Checkbox
"", # 'Prompt' Textbox
"", # 'Negative Prompt' Textbox
# 'Selected Styles' Checkboxgroup
["Fooocus V2", "Fooocus Semi Realistic", "Fooocus Masterpiece"],
"Speed", # 'Performance' Radio
"1280×768", # 'Aspect Ratios' Radio
1, # 'Image Number' Slider [1,32]
"png", # 'Output Format' Radio
"0", # 'Seed' Textbox
False, # 'Read wildcards in order' Checkbox
2, # 'Image Sharpness' Slider [0.0,30.0]
7, # 'Guidance Scale' Slider [1.0,30.0]
"animaPencilXL_v100.safetensors", # 'Base Model (SDXL only)' Dropdown
"None", # 'Refiner (SDXL or SD 1.5)' Dropdown
0.5, # 'Refiner Switch At' Slider [0.1,1.0]
True, # 'LoRA 1 Enable' Checkbox
"None", # 'LoRA 1' Dropdown
1, # 'LoRA 1 Weight' Slider [-2,2]
True, # 'LoRA 2 Enable' Checkbox
"None", # 'LoRA 2' Dropdown
1, # 'LoRA 2 Weight' Slider [-2,2]
True, # 'LoRA 3 Enable' Checkbox
"None", # 'LoRA 3' Dropdown
1, # 'LoRA 3 Weight' Slider [-2,2]
True, # 'LoRA 4 Enable' Checkbox
"None", # 'LoRA 4' Dropdown
1, # 'LoRA 4 Weight' Slider [-2,2]
True, # 'LoRA 5 Enable' Checkbox
"None", # 'LoRA 5' Dropdown component
1, # 'LoRA 5 Weight' Slider [-2,2]
True, #'Input Image' Checkbox
"uov", # 'current tab' Textbox ["uov", "ip", "inpaint"]
"Vary (Subtle)", # 'Upscale or Variation:' Radio
"20240322214141.jpg", # 'Upscale or Variation' Image
["Left"], # 'Outpaint Direction' Checkboxgroup
"", # 'Inpaint or Outpaint' Image
"", # 'Inpaint Additional Prompt' Textbox
"", # 'Inpaint or Outpaint Mask Upload' Image
True, # 'Developer Debug Mode: Disable Preview' Checkbox
True, # 'Developer Debug Mode: Disable Intermediate Results' Checkbox
True, # 'Developer Debug Mode: Disable seed increment' Checkbox
1.5, # 'Developer Debug Mode: Positive ADM Guidance Scaler' Slider [0.1,3.0]
0.8, # 'Developer Debug Mode: Negative ADM Guidance Scaler' Slider [0.1,3.0]
0.3, # 'Developer Debug Mode: ADM Guidance End At Step' Slider [0.0,1.0]
7, # 'Developer Debug Mode: CFG Mimicking from TSNR' Slider [1.0,30.0]
"dpmpp_2m_sde_gpu", # 'Developer Debug Mode: Sampler' Dropdown
"karras", # 'Developer Debug Mode: Scheduler' Dropdown
-1, # 'Developer Debug Mode: Forced Overwrite of Sampling Step' Slider [-1,200]
-1, # 'Developer Debug Mode: Forced Overwrite of Refiner Switch Step' Slider [-1,200]
-1, # 'Developer Debug Mode: Forced Overwrite of Generating Width' Slider [-1,2048]
-1, # 'Developer Debug Mode: Forced Overwrite of Generating Height' Slider [-1,2048]
-1, # 'Developer Debug Mode: Forced Overwrite of Denoising Strength of "Vary"' Slider [-1,1.0]
-1, # 'Developer Debug Mode: Forced Overwrite of Denoising Strength of "Upscale"' Slider [-1,1.0]
False, # 'Developer Debug Mode: Mixing Image Prompt and Vary/Upscale' Checkbox
False, # 'Developer Debug Mode: Mixing Image Prompt and Inpaint' Checkbox
False, # 'Developer Debug Mode: Debug Preprocessors' Checkbox
False, # 'Developer Debug Mode: Skip Preprocessors' Checkbox
64, # 'Developer Debug Mode: Canny Low Threshold' Slider [1,255]
128, # 'Developer Debug Mode: Canny High Threshold' Slider [1,255]
"joint", # 'Developer Debug Mode: Refiner swap method' Dropdown
0.25, # 'Developer Debug Mode: Softness of ControlNet' Slider [0.0,1.0]
False, # 'Developer Debug Mode: FreeU Enabled' Checkbox
1.01, # 'Developer Debug Mode: FreeU B1' Slider [0,2]
1.02, # 'Developer Debug Mode: FreeU B2' Slider [0,2]
0.99, # 'Developer Debug Mode: FreeU S1' Slider [0,4]
0.95, # 'Developer Debug Mode: FreeU S2' Slider [0,4]
False, # 'Developer Debug Mode: Debug Inpaint Preprocessing' Checkbox
False, # 'Developer Debug Mode: Disable initial latent in inpaint' Checkbox
"v2.6", # 'Developer Debug Mode: Inpaint Engine' Dropdown
1, # 'Developer Debug Mode: Inpaint Denoising Strength' Slider [0.0,1.0]
0.618, # 'Developer Debug Mode: Inpaint Respective Field' Slider [0.0,1.0]
False, # 'Developer Debug Mode: Enable Mask Upload' Checkbox
False, # 'Developer Debug Mode: Invert Mask' Checkbox
0, # 'Developer Debug Mode: Mask Erode or Dilate' Slider [-64,64]
False, # 'Developer Debug Mode: Save Metadata to Images' Checkbox
"fooocus", # 'Metadata Scheme' Radio
"", # 'Image Prompt Image 1' Image component
0, # 'Image Prompt Image 1 Stop At' Slider [0.0-1.0]
0, # 'Image Prompt Image 1 Weight' Slider [0.0-2.0]
"ImagePrompt", # 'Image Prompt Image 1 Type' Radio
"", # 'Image Prompt Image 2' Image component
0, # 'Image Prompt Image 2 Stop At' Slider [0.0-1.0]
0, # 'Image Prompt Image 2 Weight' Slider [0.0-2.0]
"ImagePrompt", # 'Image Prompt Image 2 Type' Radio
"", # 'Image Prompt Image 3' Image component
0, # 'Image Prompt Image 3 Stop At' Slider [0.0-1.0]
0, # 'Image Prompt Image 3 Weight' Slider [0.0-2.0]
"ImagePrompt", # 'Image Prompt Image 3 Type' Radio
"", # 'Image Prompt Image 4' Image component
0, # 'Image Prompt Image 4 Stop At' Slider [0.0-1.0]
0, # 'Image Prompt Image 4 Weight' Slider [0.0-2.0]
"ImagePrompt", # 'Image Prompt Image 4 Type' Radio
fn_index=40
)
print(result)
result= client.predict(fn_index=41)
现在我想我离用代码去搞批量生图,只差一步了,就是忽略调用接口 41
的报错,
这个应该不会很难。