Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

What is the API for sd webui? #20

Open
zhuchenye opened this issue May 23, 2023 · 4 comments
Open

What is the API for sd webui? #20

zhuchenye opened this issue May 23, 2023 · 4 comments

Comments

@zhuchenye
Copy link

I want to use the API on webui server with the payload as :
payload = {
"image": encode_pil_to_base64(image),
"model": "u2net",
"return_mask": False,
"alpha_matting": False,
"alpha_matting_foreground_threshold": 240,
"alpha_matting_background_threshold": 10,
"alpha_matting_erode_size": 10,
}
but it dos not work.

Is there any docs for remby API?

@Theroniya
Copy link

Me too. As a workaround I installed rembg standalone. But why load and wait every time when it is already loaded on the sd server anyway?

@zhuchenye
Copy link
Author

I found there is no API route for rembg. So if I used extra_single_image interface, the rembg params will be none.

@hubcart
Copy link

hubcart commented May 25, 2023

It used to work up until a couple weeks ago. I think an update on the webui side broke it.
I still have it working on our older setups but any new setups are broke. when working, you have to put postprocessing_rembg_ before each parameter (see pic)

Screenshot 2023-05-25 135050

That setup 100% was working up until about a week or two ago, so if anyone wants to play with that to see what you can find, please post back here if you solve it.

@ccfco
Copy link
Contributor

ccfco commented Jun 2, 2023

One alternative approach is to create a new file called api.py in the scripts folder of the plugin.

# api.py
from fastapi import FastAPI, Body

from modules.api.models import *
from modules.api import api
import gradio as gr

import rembg

def rembg_api(_: gr.Blocks, app: FastAPI):
    @app.post("/rembg")
    async def rembg_remove(
        input_image: str = Body("", title='rembg input image'),
        model: str = Body("u2net", title='rembg model'), 
        return_mask: bool = Body(False, title='return mask'), 
        alpha_matting: bool = Body(False, title='alpha matting'), 
        alpha_matting_foreground_threshold: int = Body(240, title='alpha matting foreground threshold'), 
        alpha_matting_background_threshold: int = Body(10, title='alpha matting background threshold'), 
        alpha_matting_erode_size: int = Body(10, title='alpha matting erode size')
    ):
        if not model or model == "None":
            return

        input_image = api.decode_base64_to_image(input_image)

        image = rembg.remove(
            input_image,
            session=rembg.new_session(model),
            only_mask=return_mask,
            alpha_matting=alpha_matting,
            alpha_matting_foreground_threshold=alpha_matting_foreground_threshold,
            alpha_matting_background_threshold=alpha_matting_background_threshold,
            alpha_matting_erode_size=alpha_matting_erode_size,
        )

        return {"image": api.encode_pil_to_base64(image).decode("utf-8")}

try:
    import modules.script_callbacks as script_callbacks

    script_callbacks.on_app_started(rembg_api)
except:
    pass
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants