UE5 개발/UE5 & Stable Diffusion

Contolent API PayLoads

Daily Ideas 2023. 3. 26. 23:41
반응형

Web API PayLoad 를 번역해 정리하면서 UE5 개발에 사용하다가,

Controlnet 도 별개의 API PayLoad 가 존재해 가져옴.

https://github.com/Mikubill/sd-webui-controlnet/wiki/API

 

API

WebUI extension for ControlNet. Contribute to Mikubill/sd-webui-controlnet development by creating an account on GitHub.

github.com


 

  • 외부 코드 API
  • 웹 API

외부 코드 API는 다른 확장 프로그램에서 이 확장 프로그램을 제어해야 할 때 유용합니다.

웹 API는 웹 클라이언트에서 이 확장 프로그램과 통신해야 할 때 유용합니다.

외부 코드 API

이 확장 프로그램은 [external_code](<https://github.com/Mikubill/sd-webui-controlnet/blob/main/scripts/external_code.py>) 모듈을 정의합니다. 이 모듈에는 생성에 대한 확장 프로그램을 제어하는 데 사용할 수 있는 함수가 포함되어 있습니다.

예제

ControlNet 인수 생성

사용자 정의 인수를 만들고 이를 생성에 전달하려면:

`import importlib
external_code = importlib.import_module('extensions.sd-webui-controlnet.scripts.external_code', 'external_code')

def create_script_args(p: StableDiffusionProcessing):
models = external_code.get_models()
cn_units = [
external_code.ControlNetUnit(
model=models[0],  # 1개 이상의 모델이 존재한다고 가정합니다.
...
),
external_code.ControlNetUnit(
model=models[1],  # 2개 이상의 모델이 존재한다고 가정합니다.
...
),
...
]
external_code.update_cn_script_in_processing(p, cn_units)`

기존 인수 업데이트

기존 스크립트 실행기에서 ControlNet 처리 단위를 업데이트하려면:

import importlib
external_code = importlib.import_module('extensions.sd-webui-controlnet.scripts.external_code', 'external_code')

def update_script_args(p: StableDiffusionProcessing):
cn_units = external_code.get_all_units_in_processing(p)
cn_units[0].resize_mode = external_code.ResizeMode.RESIZE
cn_units[0].model = ...
cn_units[1].image = None
...
external_code.update_cn_script_in_processing(p, updated_units)

모든 ControlNet 인수 제거

기존 스크립트 실행기에서 모든 ControlNet 처리 단위를 제거하려면 (확장 프로그램 비활성화와 동일한 효과를 가짐):

import importlib
external_code = importlib.import_module('extensions.sd-webui-controlnet.scripts.external_code', 'external_code')

def disable_controlnet(p: StableDiffusionProcessing):
external_code.update_cn_script_in_processing(p, [])

웹 API

API 업데이트: /controlnet/txt2img 및 /controlnet/img2img 라우트는 사용이 중단되었습니다. /sdapi/v1/txt2img 및 /sdapi/v1/img2img 라우트로 마이그레이션을 고려하십시오.

이 확장 프로그램은 웹 UI의 웹 API에 다음 라우트를 추가합니다:

모든 라우트는 Content-Type: application/json 헤더를 사용합니다.

라우트 GET /controlnet/model_list

사용 가능한 ControlNet 모델 목록을 가져옵니다. {"model_list": [...]} 형식의 사전을 반환합니다. "model_list" 의 각 값은 아래 설명된 ControlNetUnitRequest 객체의 "model" 속성에 대한 유효한 후보입니다.

라우트 POST /controlnet/detect

전처리기만 실행합니다. 라우트 본문은 다음 속성으로 구성된 JSON 객체를 수용합니다.

  • "controlnet_module" : 사용할 전처리기입니다. 기본값은 "None"입니다.
  • "controlnet_input_images" : 처리할 이미지입니다. 기본값은 []입니다.
  • "controlnet_processor_res" : 전처리기 해상도입니다. 기본값은 512입니다.
  • "controlnet_threshold_a" : 전처리기의 첫 번째 매개변수입니다. 전처리기가 인수를 허용하는 경우에만 효과가 있습니다. 기본값은 64입니다.
  • "controlnet_threshold_b" : 두 번째 매개변수입니다. 사용에 대한 설명은 위와 동일합니다. 기본값은 64입니다.

라우트 GET /controlnet/version

실행 중인 API 버전을 가져옵니다. {"version": n} 형식의 사전을 반환합니다. 여기서 n는 정수입니다.

현재 API 버전은 1입니다.

ControlNetUnitRequest JSON 객체

이 객체는 ControlNet 처리 단위를 전적으로 설명합니다. 다음 속성을 가집니다.

"input_image" : 이 단위에서 사용할 이미지입니다. 기본값은 ""입니다.
"mask" : 이미지를 필터링하는 마스크입니다. 기본값은 ""입니다.
"module" : 이 단위에서 사용할 이미지에 대해 사용할 전처리기입니다. /controlnet/module_list 라우트에서 반환된 값을 받습니다. 기본값은 "none"입니다.
"model" : 이 단위에서 conditioning에 사용할 모델의 이름입니다. /controlnet/model_list 라우트에서 반환된 값을 받습니다. 기본값은 "None"입니다.
"weight" : 이 단위의 가중치입니다. 기본값은 1입니다.
"resize_mode" : 생성의 출력 해상도에 맞게 입력 이미지를 어떻게 조정할 것인지에 대한 방법입니다. 기본값은 "Scale to Fit (Inner Fit)"입니다. 허용되는 값:
0 또는 "Just Resize" : 이미지를 대상 너비/높이로 단순히 조정합니다.
1 또는 "Scale to Fit (Inner Fit)" : 가장 작은 차원에 맞게 비율을 유지하면서 스케일링 및 잘라내기합니다.
2 또는 "Envelope (Outer Fit)" : 가장 큰 차원에 맞게 스케일링합니다. 비율을 유지합니다.
"lowvram" : 저용량 GPU 메모리를 처리 시간으로 보완할 지 여부입니다. 기본값은 false입니다.
"processor_res" : 전처리기 해상도입니다. 기본값은 64입니다.
"threshold_a" : 전처리기의 첫 번째 매개변수입니다. 전처리기가 인수를 허용하는 경우에만 효과가 있습니다. 기본값은 64입니다.
"threshold_b" : 두 번째 매개변수입니다. 사용에 대한 설명은 위와 동일합니다. 기본값은 64입니다.
"guidance_start" : 생성에 영향을 미치기 시작하는 비율입니다. 기본값은 0.0입니다.
"guidance_end" : 생성에 영향을 미치지 않게 되는 비율입니다. 기본값은 1.0입니다.
"guidance" : 사용되지 않습니다. 위의 "guidance_end"와 동일합니다. 기본값은 1입니다.
"guessmode" : 생성에 대한 기본 프롬프트를 추론하고 추가할 지 여부입니다. 기본값은 true입니다.

/controlnet/*2img에서 /sdapi/v1/*2img으로 마이그레이션하는 방법

ControlNetUnitRequest 객체는 업데이트할 필요가 없습니다. ControlNetUnitRequest JSON 객체는 ControlNet 스크립트의 인수 목록으로 직접 전달될 수 있습니다.

예제

다음은 /controlnet/txt2img 예제를 /sdapi/v1/txt2img과 작동하도록 변환한 것입니다:

{ 
  "prompt": "a cinematic shot of an impressive ants war, ant melee, armageddon",
  "sampler_name": "Euler", 
  "alwayson_scripts": 
    { 
        "controlnet": 
        { "args": 
            [ 
                {   
                   "input_image": "base64...", 
                    "model": "diff_control_sd15_depth_fp16 [978ef0a1]" 
                } 
            ] 
        } 
    } 
}

다음은 /controlnet/img2img 예제를 /sdapi/v1/img2img과 작동하도록 변환한 것입니다:

{ 
    "init_images": ["base64..."], 
    "sampler_name": "Euler", 
    "alwayson_scripts": 
        { "controlnet": 
            { 
                "args": 
                    [ 
                        { 
                            "module": "depth", 
                            "model": "diff_control_sd15_depth_fp16 [978ef0a1]" 
                        } 
                    ]
                }
            }
        }
}
반응형