stable-diffusion-webui之api

Basic Documentation and Examples for using API · AUTOMATIC1111/stable-diffusion-webui · Discussion #3734 · GitHubBasic Documentation and Examples for using APIicon-default.png?t=N7T8https://github.com/AUTOMATIC1111/stable-diffusion-webui/discussions/3734

GitHub - mix1009/sdwebuiapi: Python API client for AUTOMATIC1111/stable-diffusion-webuiPython API client for AUTOMATIC1111/stable-diffusion-webui - GitHub - mix1009/sdwebuiapi: Python API client for AUTOMATIC1111/stable-diffusion-webuiicon-default.png?t=N7T8https://github.com/mix1009/sdwebuiapi 

python webui.py --port 7860 --nowebui --listen

在http://127.0.0.1:7860/docs中可以看到
python webui.py --port 7860 --nowebui --listen

api_only()->initialize()->
app = Fastapi()->setup_middleware(app)->api=Api(app,queue_lock)->
modules.script_callbacks.app_started_callback(None,app)
api.launch()

modules/api/api.py 

stable-diffusion-webui之api_第1张图片

self.router = APIRouter()
api_middleware(self.app)
self.add_api_route("/sdapi/v1/txt2img", self.text2imgapi, methods=["POST"], response_model=models.TextToImageResponse)

text2imgapi()->
script_runner = scripts.scripts_txt2img
if not script_runner.scripts:
    script_runner.initialize_scripts(False)
    ui.create_ui()
if not self.default_script_arg_txt2img:
    self.default_script_arg_txt2img = self.init_default_script_args(script_runner)
selectable_scripts, selectable_script_idx = self.get_selectable_script(txt2imgreq.script_name, script_runner)

populate = txt2imgreq.copy(update={  # Override __init__ params
    "sampler_name": validate_sampler_name(txt2imgreq.sampler_name or txt2imgreq.sampler_index),
    "do_not_save_samples": not txt2imgreq.save_images,
    "do_not_save_grid": not txt2imgreq.save_images,
})
if populate.sampler_name:
    populate.sampler_index = None  # prevent a warning later on

args = vars(populate)
args.pop('script_name', None)
args.pop('script_args', None)  # will refeed them to the pipeline directly after initializing them
args.pop('alwayson_scripts', None)

script_args = self.init_script_args(txt2imgreq, self.default_script_arg_txt2img, selectable_scripts,
                                    selectable_script_idx, script_runner)

send_images = args.pop('send_images', True)
args.pop('save_images', None)

with self.queue_lock:
    p = StableDiffusionProcessingTxt2Img(sd_model=shared.sd_model, **args)
    p.scripts = script_runner
    p.outpath_grids = opts.outdir_txt2img_grids
    p.outpath_samples = opts.outdir_txt2img_samples

    shared.state.begin()
    if selectable_scripts is not None:
        p.script_args = script_args
        processed = scripts.scripts_txt2img.run(p, *p.script_args)  # Need to pass args as list here
    else:
        p.script_args = tuple(script_args)  # Need to pass args as tuple here
        processed = process_images(p)
    shared.state.end()

b64images = list(map(encode_pil_to_base64, processed.images)) if send_images else []

return models.TextToImageResponse(images=b64images, parameters=vars(txt2imgreq), info=processed.js())

/modules/api/models.py

stable-diffusion-webui之api_第2张图片

StableDiffusionTxt2ImgProcessingAPI = PydanticModelGenerator(
    "StableDiffusionProcessingTxt2Img",
    StableDiffusionProcessingTxt2Img,
    [
        {"key": "sampler_index", "type": str, "default": "Euler"},
        {"key": "script_name", "type": str, "default": None},
        {"key": "script_args", "type": list, "default": []},
        {"key": "send_images", "type": bool, "default": True},
        {"key": "save_images", "type": bool, "default": False},
        {"key": "alwayson_scripts", "type": dict, "default": {}},
    ]
).generate_model()

你可能感兴趣的:(多模态和生成模型,stable,diffusion)