# Preprocess
## Context
BMAB에서 사용할 Checkpoint와 VAE를 지정합니다.
특정 기능들은 자체 Checkpoint와 VAE를 설정할 수 있습니다.
한 번 변경된 Checkpoint는 그 이후 프로세스들이 계속 사용합니다.
#### txt2img noise multiplier for hires.fix
hires.fix 단계에서 noise를 추가 할 수 있다.
#### txt2img extra noise multiplier for hires.fix (EXPERIMENTAL)
hires.fix 단계에서 추가적인 noise를 더 할 수 있다.
#### Hires.fix filter before upscaler
Hires.fix 단계 중 upscaler 전에 filter를 적용할 수 있다.
#### Hires.fix filter after upscaler
Hires.fix 단계 중 upscaler 후에 filter를 적용할 수 있다.
## Resample (EXPERIMENTAL)
Self resampling 기능입니다. txt2img -> hres.fix를 통해 생성된 이미지를 다시 txt2img -> hires.fix 과정을 수행하면서
ControlNet Tile Resample을 수행합니다. 아래와 같은 경우 사용할 수 있습니다.
* 두 모델간에 결과물 차이가 큰 경우
* 두 모델간에 인물 비율이 차이나는 경우
* 두 모델간 버전이 다른 경우 (SDXL, SD15)
| txt2img->hires.fix |
Resample + BMAB Basic |
 |
 |
BMAB resample image by [padapari](https://www.instagram.com/_padapari_/)
#### Enable self resample (EXPERIMENTAL)
이 기능을 켜고 끌 수 있습니다.
#### Save image before processing
최초 txt2img -> hires.fix를 통해 생성된 이미지가 후 처리를 위해 BMAB로 입력되면,
해당 이미지를 프로세싱하기 전에 저장합니다. 이미지 postfix로 "-before-resample"이 붙습니다.
#### Checkpoint
SD Checkpoint를 지정할 수 있습니다. 지정하지 않는다면 앞에서 설정된 Checkpoint를 사용합니다.
프로세스가 완료되어도 원래 것으로 돌려놓지 않습니다.
#### SD VAE
SD VAE를 지정할 수 있습니다. 지정하지 않는다면 앞에서 설정된 VAE를 사용합니다.
프로세스가 완료되어도 원래 것으로 돌려놓지 않습니다.
#### Resample method
Resample 방법을 선택할 수 있습니다.
txt2img-1pass : txt2img을 hires.fix 없이 동작시킨다.
txt2img-2pass : txt2img를 hires.fix로 동작시킨다. 기본적으로 이미지를 출력할 때 hires.fix가 동작해야하만 한다.
img2img-1pass : img2img로 동작시킨다.
#### Resample filter
Resample이 완료되고 난 이후에 외부 filter 코드를 호출하여 이미지 변환을 추가적으로 수행할 수 있다.
#### Resample prompt
resampling 과정에서 사용할 prompt입니다. 비어있는 경우 main prompt와 동일하며,
"#!org!#" 를 입력하면 main prompt를 대체합니다. "#!org!#" 이후에 추가로 prompt를 적을 수 있습니다.
ex) #!org!#, soft light, some more keyword
#### Resample negative prompt
resampling 과정에서 사용할 prompt입니다. 비어있는 경우 main negative prompt와 동일합니다.
#### Sampling method
프로세스에 사용할 sampling method를 지정합니다. 지정하지 않는다면 이전 프로세스와 같은 sampler를 지정합니다.
#### Upsacler
hires.fix를 사용하는 경우에 지정하는 upscaler입니다.
#### Resample sampling steps
resample process 사용할 samping steps를 지정합니다.
(권장 20)
#### Resample CFG scale
resample process 사용할 CFG scale 값을 지정합니다.
dynamic threshold는 지원하지 않습니다.
#### Resample denoising strength
resample process가 사용할 denoising strength를 지정합니다.
(권장 0.4)
#### Resample strength
0에 가까운 값은 입력 이미지와 멀어지고, 1에 가까울 수록 원본 이미지와 유사합니다.
#### Resample begin
sampling 단계에 적용 시작점.
#### Resample end
sampling 단계 적용 종료 시점.
## Pretraining (EXPERIMENTAL)
Pretraining detailer입니다. ultralytics로 pretraining 모델을 적용하여 detection을 수행하고
이를 기반으로 prompt, negative prompt를 적용하여 부분적으로 이미지를 더 자세하게 그릴 수 있습니다.
#### Enable pretraining detailer (EXPERIMENTAL)
이 기능을 켜고 끌 수 있습니다.
#### Enable pretraining before hires.fix
pretraining detailer를 hires.fix 전에 수행하도록 한다.
#### Pretraining model
ultralytics 로 학습된 detection model (*.pt)를 지정할 수 있습니다.
stable-diffusion-webui/models/BMAB에 해당 파일이 있어야 목록에 나타납니다.
#### Pretraining prompt
pretraining detailer process 과정에서 사용할 prompt입니다. 비어있는 경우 main prompt와 동일하며,
"#!org!#" 를 입력하면 main prompt를 대체합니다. "#!org!#" 이후에 추가로 prompt를 적을 수 있습니다.
ex) #!org!#, soft light, some more keyword
#### Pretraining negative prompt
pretraining detailer process 과정에서 사용할 prompt입니다. 비어있는 경우 main negative prompt와 동일합니다.
#### Sampling method
프로세스에 사용할 sampling method를 지정합니다. 지정하지 않는다면 이전 프로세스와 같은 sampler를 지정합니다.
#### Pretraining sampling steps
resample process 사용할 samping steps를 지정합니다.
(권장 20)
#### Pretraining CFG scale
resample process 사용할 CFG scale 값을 지정합니다.
dynamic threshold는 지원하지 않습니다.
#### Pretraining denoising strength
resample process가 사용할 denoising strength를 지정합니다.
(권장 0.4)
#### Pretraining dilation
detection 된 사각형의 범위를 주어진 값 만큼 크기를 크게 합니다.
#### Pretraining box threshold
Detector의 검출 값을 결정합니다. 기본값 0.35보다 작으면 face가 아닐 것으로 제외합니다.
ultralytics predict의 confidence 값입니다.
## Edge enhancemant
이미지 경계를 강화해 선명도를 증가시키거나 디테일을 증가시키는 기능입니다.
**Upscaler가 Latent 계열인 경우 동작하지 않습니다. (R-ESRGAN, 4x-UltraSharp 추천)**
권장설정
* Edge low threshold : 50
* Edge high threshold : 200
* Edge strength : 0.5
Enabled : CHECK!!
Contrast : 1.2
Brightness : 0.9
Sharpeness : 1.5
Enable edge enhancement : CHECK!!
Edge low threshold : 50
Edge high threshold : 200
Edge strength : 0.5
## Resize
txt2img -> hires.fix 의 중간 과정에서 동작합니다..
만약 img2img에서 사용한다면, 프로세스 시작 전에 동작합니다.
그림 속 인물중 가장 신장이 큰 사람의 길이와 그림 높이의 비율이 설정값을 넘어가면 비율을 설정값로 맞추는 기능입니다.
설정값이 0.90이고 인물의 전체 길이: 그림 높이의 비율이 0.95라고 한다면
배경을 늘려서 인물의 비율이 0.90이 되도록 합니다.
배경은 Alignment에서 지정한 방식에 따라 늘어납니다.
txt2img 수행하는 단계에서 hires.fix 하기 직전에 이미지를 변경합니다.
이 과정은 변경된 이미지가 hires.fix 과정에서 매끄럽게 변하게 하기 위한 것입니다.
**denoising strength는 0.6~0.7 정도를 사용하셔야 주변부 이미지 왜곡이 발생하지 않습니다.**
**Upscaler가 Latent 계열인 경우 동작하지 않습니다. (R-ESRGAN, 4x-UltraSharp 추천)**
#### Method
Resize 하는 방식을 지정할 수 있습니다.
* Stretching : 단순히 이미지를 외곽부분을 늘려서 배경을 확장합니다.
* inpaint : Stretching된 이미지를 mask를 사용하여 늘린 부분만 img2img inpainting을 수행합니다.
* inpaint+lama : Controlnet의 inpaint+lama 모델을 사용하여 확장된 영역을 다시 그립니다.
* inpaint_only : Controlnet의 inpaint_only를 사용하여 확장된 영역을 다시 그립니다.
#### Alignment
이미지를 확장하고 원래 이미지를 어느 방향으로 정렬할 것인지를 결정합니다.
#### Resize filter
Resize가 완료되고 난 이후에 외부 filter 코드를 호출하여 이미지 변환을 추가적으로 수행할 수 있다.
#### Resize by person intermediate
인물의 크기 비율을 나타냅니다. 이 값을 초과하면 이 크기가 되도록 배경을 확장시킵니다.
| Original |
Resize 0.7 |
Resize 0.5 |
 |
 |
 |
| Original |
Alignment center |
 |
 |
| Alignment bottom |
Alignment bottom-left |
 |
 |
Resize sample
## Refiner
txt2img에서 만들어진 이미지를 한번 더 그리는 과정을 수행한다.
txt2img + hires.fix 가 된 상황에서도 유효하다.
refiner는 이미지가 생성되고 detailing 하기전에 동작하며,
sd-webui의 hires.fix + refiner를 합친 동작과 비슷하다.
| txt2img(512x768) |
txt2img + hires.fix(800x1200) |
txt2img + hires.fix + refiner(1200x1800) |
 |
 |
 |
(위 예제는 결과를 모두 resize하여 동일한 크기이다.)
위 예제와 같이 3단계로 처리할 수도 있으나,
hires.fix 단계 없이 refiner로 resize하여 처리할 수도 있다.
#### Enable refiner
refiner 사용 여부를 체크합니다.
#### CheckPoint
refiner를 이용하여 다시 그릴때 사용할 checkpoint를 지정합니다.
#### Use this checkpoint for detailing
위에서 지정한 checkpoint를 이용하여 detailing에 적용합니다.
#### Prompt
refiner가 이미지를 다시 그릴때 사용하는 prompt를 지정합니다.
비어있다면 main prompt와 동일하고,채워져 있다면 main prompt를 무시합니다.
만약 #!org!# 문자열이 있다면 main prompt를 대체합니다.
#### Negative prompt
refiner가 이미지를 다시 그릴때 사용하는 negative prompt를 지정합니다.
#### Sampling method
refiner가 사용할 sampler를 지정할 수 있습니다.
(Euler A 권장)
#### Upscaler
refiner가 이미지를 resize하는 경우 사용할 upscaler를 지정합니다.
#### Refiner sampling steps
refiner가 사용할 samping steps를 지정합니다.
(권장 20)
#### Refiner CFG scale
refiner가 사용할 CFG scale 값을 지정합니다.
dynamic threshold는 지원하지 않습니다.
#### Refiner denoising strength
refiner가 사용할 denoising strength를 지정합니다.
(권장 0.4)
#### Refiner scale
refiner가 주어진 이미지를 scale 값으로 resize합니다.
만약 refiner width, refiner height가 설정되어있다면 무시됩니다.
#### Refiner width
이미지 폭을 해당 값으로 강제로 설정합니다.
#### Refiner height
이미지 높이를 해당 값으로 강제로 설정합니다.