Contolent API PayLoads
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]"
}
]
}
}
}
}