glucauze / sd-webui-faceswaplab

Extended faceswap extension for StableDiffusion web-ui with multiple faceswaps, inpainting, checkpoints, ....
https://glucauze.github.io/sd-webui-faceswaplab/
GNU Affero General Public License v3.0
747 stars 100 forks source link

"base64 safetensors" how post via api? #85

Closed godsgo closed 1 year ago

godsgo commented 1 year ago

I have trouble with base64 safetensors what i get from api, its look like "data:application/face;base64," how do i send it in post? i send it to /faceswaplab/swap_face in "source_face": "data:application/face;base64...", but has error in automatic1111 , with reference photo all work fine with only model not, sorry for stupid quastion, I am hope for your help

`API error: POST: http://127.0.0.1:7860/faceswaplab/swap_face {'error': 'Error', 'detail': '', 'body': '', 'errors': 'Incorrect padding'} Traceback (most recent call last): File "D:\SD_port\venv\lib\site-packages\anyio\streams\memory.py", line 94, in receive return self.receive_nowait() File "D:\SD_port\venv\lib\site-packages\anyio\streams\memory.py", line 89, in receive_nowait raise WouldBlock anyio.WouldBlock

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "D:\SD_port\venv\lib\site-packages\starlette\middleware\base.py", line 78, in call_next
    message = await recv_stream.receive()
  File "D:\SD_port\venv\lib\site-packages\anyio\streams\memory.py", line 114, in receive
    raise EndOfStream
anyio.EndOfStream

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "D:\SD_port\modules\api\api.py", line 152, in exception_handling
    return await call_next(request)
  File "D:\SD_port\venv\lib\site-packages\starlette\middleware\base.py", line 84, in call_next
    raise app_exc
  File "D:\SD_port\venv\lib\site-packages\starlette\middleware\base.py", line 70, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "D:\SD_port\venv\lib\site-packages\starlette\middleware\base.py", line 108, in __call__
    response = await self.dispatch_func(request, call_next)
  File "D:\SD_port\modules\api\api.py", line 116, in log_and_time
    res: Response = await call_next(req)
  File "D:\SD_port\venv\lib\site-packages\starlette\middleware\base.py", line 84, in call_next
    raise app_exc
  File "D:\SD_port\venv\lib\site-packages\starlette\middleware\base.py", line 70, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "D:\SD_port\venv\lib\site-packages\starlette\middleware\cors.py", line 92, in __call__
    await self.simple_response(scope, receive, send, request_headers=headers)
  File "D:\SD_port\venv\lib\site-packages\starlette\middleware\cors.py", line 147, in simple_response
    await self.app(scope, receive, send)
  File "D:\SD_port\venv\lib\site-packages\starlette\middleware\gzip.py", line 24, in __call__
    await responder(scope, receive, send)
  File "D:\SD_port\venv\lib\site-packages\starlette\middleware\gzip.py", line 44, in __call__
    await self.app(scope, receive, self.send_with_gzip)
  File "D:\SD_port\venv\lib\site-packages\starlette\middleware\exceptions.py", line 79, in __call__
    raise exc
  File "D:\SD_port\venv\lib\site-packages\starlette\middleware\exceptions.py", line 68, in __call__
    await self.app(scope, receive, sender)
  File "D:\SD_port\venv\lib\site-packages\fastapi\middleware\asyncexitstack.py", line 21, in __call__
    raise e
  File "D:\SD_port\venv\lib\site-packages\fastapi\middleware\asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "D:\SD_port\venv\lib\site-packages\starlette\routing.py", line 718, in __call__
    await route.handle(scope, receive, send)
  File "D:\SD_port\venv\lib\site-packages\starlette\routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "D:\SD_port\venv\lib\site-packages\starlette\routing.py", line 66, in app
    response = await func(request)
  File "D:\SD_port\venv\lib\site-packages\fastapi\routing.py", line 237, in app
    raw_response = await run_endpoint_function(
  File "D:\SD_port\venv\lib\site-packages\fastapi\routing.py", line 163, in run_endpoint_function
    return await dependant.call(**values)
  File "D:\SD_port\extensions\sd-webui-faceswaplab\scripts\faceswaplab_api\faceswaplab_api.py", line 93, in swap_face
    src_image: Optional[Image.Image] = base64_to_pil(request.image)
  File "D:\SD_port\extensions\sd-webui-faceswaplab\scripts\faceswaplab_utils\imgutils.py", line 287, in base64_to_pil
    img_bytes = base64.b64decode(base64str)
  File "D:\SD_port\python\lib\base64.py", line 87, in b64decode
    return binascii.a2b_base64(s)
binascii.Error: Incorrect padding`

data:application/face;base64 my string from api

data:application/face;base64,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

godsgo commented 1 year ago

i understand logic, for "source_face" dont need base64 safetensors it take path or file name in model folder... so now i need convert base64 model to safetensors manualy, maybe it helps someone

glucauze commented 1 year ago

You can also look at https://github.com/glucauze/sd-webui-faceswaplab/blob/main/client_api/faceswaplab_api_example.py and https://github.com/glucauze/sd-webui-faceswaplab/blob/main/tests/test_api.py

ScumtronOne commented 1 year ago

i understand logic, for "source_face" dont need base64 safetensors it take path or file name in model folder... so now i need convert base64 model to safetensors manualy, maybe it helps someone Can I have an example of an API request with parameters? Thank you