Mikubill / sd-webui-controlnet

WebUI extension for ControlNet
GNU General Public License v3.0
16.41k stars 1.9k forks source link

[Bug]: API: ipadapter_input giving validation issues #2944

Closed vinch00 closed 3 weeks ago

vinch00 commented 3 weeks ago

Is there an existing issue for this?

What happened?

After updating ControlNet, using pre-saved IPAdapter clip embeddings with the API through ipadapter_input is no longer working.

Steps to reproduce the problem

  1. Use API and pass a clip embedding to IP Adapter using ipadapter_input arg

What should have happened?

Pre-saved clip embeddings loaded to the IP Adapter with the API should have worked as before.

Commit where the problem happens

webui: v1.9.4 controlnet: c91dbe5c

What browsers do you use to access the UI ?

No response

Command Line Arguments

--api --xformers --no-half-vae --upcast-sampling --skip-torch-cuda-test --enable-console-prompts  --controlnet-loglevel DEBUG --controlnet-preprocessor-cache-size "32"

List of enabled extensions

sd-webui-controlnet sd-webui-api-payload-display

Console logs

*** API error: POST: http://127.0.0.1:7860/sdapi/v1/txt2img {'error': 'ValidationError', 'detail': '', 'body': '', 'errors': '1 validation error for ControlNetUnit\nipadapter_input -> 0\n  instance of Tensor expected (type=type_error.arbitrary_type; expected_arbitrary_type=Tensor)'}
    Traceback (most recent call last):
      File "C:\stable-diffusion-webui\venv\lib\site-packages\anyio\streams\memory.py", line 98, in receive
        return self.receive_nowait()
      File "C:\stable-diffusion-webui\venv\lib\site-packages\anyio\streams\memory.py", line 93, in receive_nowait
        raise WouldBlock
    anyio.WouldBlock

    During handling of the above exception, another exception occurred:

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

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "C:\stable-diffusion-webui\modules\api\api.py", line 186, in exception_handling
        return await call_next(request)
      File "C:\stable-diffusion-webui\venv\lib\site-packages\starlette\middleware\base.py", line 84, in call_next
        raise app_exc
      File "C:\stable-diffusion-webui\venv\lib\site-packages\starlette\middleware\base.py", line 70, in coro
        await self.app(scope, receive_or_disconnect, send_no_error)
      File "C:\stable-diffusion-webui\venv\lib\site-packages\starlette\middleware\base.py", line 108, in __call__
        response = await self.dispatch_func(request, call_next)
      File "C:\stable-diffusion-webui\modules\api\api.py", line 150, in log_and_time
        res: Response = await call_next(req)
      File "C:\stable-diffusion-webui\venv\lib\site-packages\starlette\middleware\base.py", line 84, in call_next
        raise app_exc
      File "C:\stable-diffusion-webui\venv\lib\site-packages\starlette\middleware\base.py", line 70, in coro
        await self.app(scope, receive_or_disconnect, send_no_error)
      File "C:\stable-diffusion-webui\venv\lib\site-packages\starlette\middleware\cors.py", line 84, in __call__
        await self.app(scope, receive, send)
      File "C:\stable-diffusion-webui\venv\lib\site-packages\starlette\middleware\gzip.py", line 24, in __call__
        await responder(scope, receive, send)
      File "C:\stable-diffusion-webui\venv\lib\site-packages\starlette\middleware\gzip.py", line 44, in __call__
        await self.app(scope, receive, self.send_with_gzip)
      File "C:\stable-diffusion-webui\venv\lib\site-packages\starlette\middleware\exceptions.py", line 79, in __call__
        raise exc
      File "C:\stable-diffusion-webui\venv\lib\site-packages\starlette\middleware\exceptions.py", line 68, in __call__
        await self.app(scope, receive, sender)
      File "C:\stable-diffusion-webui\venv\lib\site-packages\fastapi\middleware\asyncexitstack.py", line 21, in __call__
        raise e
      File "C:\stable-diffusion-webui\venv\lib\site-packages\fastapi\middleware\asyncexitstack.py", line 18, in __call__
        await self.app(scope, receive, send)
      File "C:\stable-diffusion-webui\venv\lib\site-packages\starlette\routing.py", line 718, in __call__
        await route.handle(scope, receive, send)
      File "C:\stable-diffusion-webui\venv\lib\site-packages\starlette\routing.py", line 276, in handle
        await self.app(scope, receive, send)
      File "C:\stable-diffusion-webui\venv\lib\site-packages\starlette\routing.py", line 66, in app
        response = await func(request)
      File "C:\stable-diffusion-webui\venv\lib\site-packages\fastapi\routing.py", line 237, in app
        raw_response = await run_endpoint_function(
      File "C:\stable-diffusion-webui\venv\lib\site-packages\fastapi\routing.py", line 165, in run_endpoint_function
        return await run_in_threadpool(dependant.call, **values)
      File "C:\stable-diffusion-webui\venv\lib\site-packages\starlette\concurrency.py", line 41, in run_in_threadpool
        return await anyio.to_thread.run_sync(func, *args)
      File "C:\stable-diffusion-webui\venv\lib\site-packages\anyio\to_thread.py", line 33, in run_sync
        return await get_asynclib().run_sync_in_worker_thread(
      File "C:\stable-diffusion-webui\venv\lib\site-packages\anyio\_backends\_asyncio.py", line 877, in run_sync_in_worker_thread
        return await future
      File "C:\stable-diffusion-webui\venv\lib\site-packages\anyio\_backends\_asyncio.py", line 807, in run
        result = context.run(func, *args)
      File "C:\stable-diffusion-webui\modules\api\api.py", line 478, in text2imgapi
        processed = process_images(p)
      File "C:\stable-diffusion-webui\modules\processing.py", line 845, in process_images
        res = process_images_inner(p)
      File "C:\stable-diffusion-webui\extensions\sd-webui-controlnet\scripts\batch_hijack.py", line 56, in processing_process_images_hijack
        cn_is_batch, batches, output_dir, input_file_names = get_cn_batches(p)
      File "C:\stable-diffusion-webui\extensions\sd-webui-controlnet\scripts\batch_hijack.py", line 196, in get_cn_batches
        units = external_code.get_all_units_in_processing(p)
      File "C:\stable-diffusion-webui\extensions\sd-webui-controlnet\internal_controlnet\external_code.py", line 133, in get_all_units_in_processing
        return get_all_units(p.scripts, p.script_args)
      File "C:\stable-diffusion-webui\extensions\sd-webui-controlnet\internal_controlnet\external_code.py", line 146, in get_all_units
        return get_all_units_from(script_args[cn_script.args_from : cn_script.args_to])
      File "C:\stable-diffusion-webui\extensions\sd-webui-controlnet\internal_controlnet\external_code.py", line 174, in get_all_units_from
        all_units = [
      File "C:\stable-diffusion-webui\extensions\sd-webui-controlnet\internal_controlnet\external_code.py", line 175, in <listcomp>
        to_processing_unit(script_arg)
      File "C:\stable-diffusion-webui\extensions\sd-webui-controlnet\internal_controlnet\external_code.py", line 228, in to_processing_unit
        return ControlNetUnit.from_dict(unit)
      File "C:\stable-diffusion-webui\extensions\sd-webui-controlnet\internal_controlnet\args.py", line 419, in from_dict
        return ControlNetUnit(**values)
      File "pydantic\main.py", line 341, in pydantic.main.BaseModel.__init__
    pydantic.error_wrappers.ValidationError: 1 validation error for ControlNetUnit
    ipadapter_input -> 0
      instance of Tensor expected (type=type_error.arbitrary_type; expected_arbitrary_type=Tensor)

Additional information

No response

huchenlei commented 3 weeks ago

verified

vinch00 commented 3 weeks ago

@huchenlei Amazing! Thank you!