赞
踩
在api使用sdxl1.0时我们会发现在步骤和内容上会和我们使用sd1.5存在不同,同时,sdxl1.0对显卡要求较高。xl1.0拥有出色的句子识别功能(这是对前文儿童故事绘图的一次尝试),强大的风格模块,堪比lora。
0.模型不同(废话):笔者采用sd_xl_base_1.0.safetensors,现阶段xl1.0微调模型有了一定发展,但在丰富度和数量上还是sd1.5占据优势
1.分辨率扩大:eg512*512 to 1024*1024(不需要放大模型)
2.在关键词上可以识别句子(英文),但也可以采用原有形式,不需要再输入质量画面(masterpice,best quality)等提示词也可以有很好的效果,负面提示词也可以做到少输入。
3.使用风格关键词(很重要):出现"style"参数,一些可选风格如下(webui中截图)
4.生成时要使用refiner:sd_xl_refiner_1.0.safetensors,refiner有模型选择,选择时机总步数的多少就开始切换,模型(20步,0.8,16步开始后使用refiner选择的模型)
- import requests
- import base64
- from PIL import Image
- import io
- def stablediffusionXl(file_path,prompt='',nep='',url='http://127.0.0.1:7860'):
- txt2imge_date={
- 'prompt':prompt,
- 'sampler_name':'Euler a',
- "style": "Fairy Tale",
- 'steps':20,
- 'batch_size':1,
- 'height':1024,
- 'width':1024,
- 'cfg_scale':7,
- "override_settings": {
- "sd_model_checkpoint": "xd1.0\sd_xl_base_1.0.safetensors [31e35c80fc]",
- "sd_vae":"sdxl_vae.safetensors"
- },
- #下方使用refiner
- "refiner": True,
- 'refiner_checkpoint':'xd1.0\sd_xl_refiner_1.0.safetensors [7440042bbd]',
- 'refiner_switch_at':0.8,
- #'negative_prompt':'(negative_hand-neg:1.2),(((bad-hands-5))),EasyNegative,FastNegativeV2,BadNegAnatomyV1-neg,EasyNegative,NSFW,logo,text,blurry,low quality,bad anatomy,sketches,lowres,normal quality,monochrome,grayscale,worstquality,signature,watermark,cropped,bad proportions,out of focus,username,bad face'+nep,
- }
- print('\n正在生成图片...')
- response=requests.post(url=f'{url}/sdapi/v1/txt2img',json=txt2imge_date)
- image=Image.open(io.BytesIO(base64.b64decode(response.json()['images'][0])))
- image.show()
- print('图片生成完成!')
- image.save(file_path)
- if __name__ == '__main__':
- stablediffusionXl('test.jpg','Two birds, live in the same tree. They are best friends and sing together all day long. However one day suddenly one bird is shot by an arrow from a hunter rendering it unable to fly. The other very worried decides to bring it into the human world for help. Characters: Bird A & Bird B Scenery: Under the tree Emotion: Worry Action: Bird B saves Bird A')

与先前的api模块相比,这里明显多了许多字段,我们在webui中的操作就是打勾选中,调整参数,但在api调用中我们找不到掉用方法怎么办?
只能求助源码了AUTOMATIC1111/stable-diffusion-webui: Stable Diffusion web UI (github.com)这一个是git上的源码,我们可以把它下载下来。这个文件也存在在我们安装的秋叶整合包,位置也是一样的,我们用vscode打开整个文件
便能找到其中stable-diffusion-webui-master\modules\api,这里就是整个说明书了。
找到api下的txt2image:
self.add_api_route("/sdapi/v1/txt2img", self.text2imgapi, methods=["POST"], response_model=models.TextToImageResponse)
选中self.text2imgaapi,右键点击后选择转到定义,便可找到它在哪了
同样我们找到这里到底应用的了什么
展示一部分这里的代码,这里按照这样的格式:字段:类型=初始值
- class StableDiffusionProcessingTxt2Img(StableDiffusionProcessing):
- enable_hr: bool = False
- denoising_strength: float = 0.75
- firstphase_width: int = 0
- firstphase_height: int = 0
- hr_scale: float = 2.0
- hr_upscaler: str = None
- hr_second_pass_steps: int = 0
- hr_resize_x: int = 0
- hr_resize_y: int = 0
- hr_checkpoint_name: str = None
- hr_sampler_name: str = None
- hr_prompt: str = ''
- hr_negative_prompt: str = ''
- force_task_id: str = None
-
- cached_hr_uc = [None, None]
- cached_hr_c = [None, None]
-
- hr_checkpoint_info: dict = field(default=None, init=False)
- hr_upscale_to_x: int = field(default=0, init=False)
- hr_upscale_to_y: int = field(default=0, init=False)
- truncate_x: int = field(default=0, init=False)
- truncate_y: int = field(default=0, init=False)
- applied_old_hires_behavior_to: tuple = field(default=None, init=False)
- latent_scale_mode: dict = field(default=None, init=False)
- hr_c: tuple | None = field(default=None, init=False)
- hr_uc: tuple | None = field(default=None, init=False)
- all_hr_prompts: list = field(default=None, init=False)
- all_hr_negative_prompts: list = field(default=None, init=False)
- hr_prompts: list = field(default=None, init=False)
- hr_negative_prompts: list = field(default=None, init=False)
- hr_extra_network_data: list = field(default=None, init=False)

我们找到了StableDiffusionProcessingTxt2Img,下面就是一些特有的参数,但上面还有一层StableDiffusionProcessing我们往下,找到最源头的类代码
- class StableDiffusionProcessing:
- sd_model: object = None
- outpath_samples: str = None
- outpath_grids: str = None
- prompt: str = ""
- prompt_for_display: str = None
- negative_prompt: str = ""
- styles: list[str] = None
- seed: int = -1
- subseed: int = -1
- subseed_strength: float = 0
- seed_resize_from_h: int = -1
- seed_resize_from_w: int = -1
- seed_enable_extras: bool = True
- sampler_name: str = None
- batch_size: int = 1
- n_iter: int = 1
- steps: int = 50
- cfg_scale: float = 7.0
- width: int = 512
- height: int = 512
- restore_faces: bool = None
- tiling: bool = None
- do_not_save_samples: bool = False
- do_not_save_grid: bool = False
- extra_generation_params: dict[str, Any] = None
- overlay_images: list = None
- eta: float = None
- do_not_reload_embeddings: bool = False
- denoising_strength: float = None
- ddim_discretize: str = None
- s_min_uncond: float = None
- s_churn: float = None
- s_tmax: float = None
- s_tmin: float = None
- s_noise: float = None
- override_settings: dict[str, Any] = None
- override_settings_restore_afterwards: bool = True
- sampler_index: int = None
- refiner_checkpoint: str = None
- refiner_switch_at: float = None
- token_merging_ratio = 0
- token_merging_ratio_hr = 0
- disable_extra_networks: bool = False
- firstpass_image: Image = None
-
- scripts_value: scripts.ScriptRunner = field(default=None, init=False)
- script_args_value: list = field(default=None, init=False)
- scripts_setup_complete: bool = field(default=False, init=False)
-
- cached_uc = [None, None]
- cached_c = [None, None]
-
- comments: dict = None
- sampler: sd_samplers_common.Sampler | None = field(default=None, init=False)
- is_using_inpainting_conditioning: bool = field(default=False, init=False)
- paste_to: tuple | None = field(default=None, init=False)
-
- is_hr_pass: bool = field(default=False, init=False)
-
- c: tuple = field(default=None, init=False)
- uc: tuple = field(default=None, init=False)
-
- rng: rng.ImageRNG | None = field(default=None, init=False)
- step_multiplier: int = field(default=1, init=False)
- color_corrections: list = field(default=None, init=False)
-
- all_prompts: list = field(default=None, init=False)
- all_negative_prompts: list = field(default=None, init=False)
- all_seeds: list = field(default=None, init=False)
- all_subseeds: list = field(default=None, init=False)
- iteration: int = field(default=0, init=False)
- main_prompt: str = field(default=None, init=False)
- main_negative_prompt: str = field(default=None, init=False)
-
- prompts: list = field(default=None, init=False)
- negative_prompts: list = field(default=None, init=False)
- seeds: list = field(default=None, init=False)
- subseeds: list = field(default=None, init=False)
- extra_network_data: dict = field(default=None, init=False)
-
- user: str = field(default=None, init=False)
-
- sd_model_name: str = field(default=None, init=False)
- sd_model_hash: str = field(default=None, init=False)
- sd_vae_name: str = field(default=None, init=False)
- sd_vae_hash: str = field(default=None, init=False)
-
- is_api: bool = field(default=False, init=False)

refiner_checkpoint: str = None
refiner_switch_at: float = None
我们找到了refiner字段,明白了如何使用refiner,调用时的各种参数设置。明白如何查资料,便可以调用源代码作者的各种方法模型了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。