From 7651b84968f66dd0a5c3346520aad8dac6c4464e Mon Sep 17 00:00:00 2001
From: Dynamic <bradje@naver.com>
Date: Tue, 18 Oct 2022 19:07:17 +0900
Subject: [PATCH 01/73] Initial KR support - WIP

Localization WIP
---
 ko-KR.json | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 76 insertions(+)
 create mode 100644 ko-KR.json

diff --git a/ko-KR.json b/ko-KR.json
new file mode 100644
index 00000000..f93b3e16
--- /dev/null
+++ b/ko-KR.json
@@ -0,0 +1,76 @@
+{
+  "txt2img": "텍스트→이미지",
+  "img2img": "이미지→이미지",
+  "Extras": "부가기능",
+  "PNG Info": "PNG 정보",
+  "History": "기록",
+  "Checkpoint Merger": "체크포인트 병합",
+  "Train": "훈련",
+  "Settings": "설정",
+  "Stable Diffusion checkpoint": "Stable Diffusion 체크포인트",
+  "Hypernetwork": "하이퍼네트워크",
+  "Stop At last layers of CLIP model": "CLIP 모델의 n번째 레이어에서 멈추기",
+  "Generate": "생성",
+  "Style 1": "스타일 1",
+  "Style 2": "스타일 2",
+  "Add a random artist to the prompt.": "프롬프트에 랜덤한 작가 추가",
+  "Read generation parameters from prompt or last generation if prompt is empty into user interface.": "클립보드에 복사된 정보로부터 설정값 읽어오기/프롬프트창이 비어있을경우 제일 최근 설정값 불러오기",
+  "Save style": "스타일 저장",
+  "Apply selected styles to current prompt": "현재 프롬프트에 선택된 스타일 적용",
+  "Do not do anything special": "아무것도 하지 않기",
+  "Generate forever": "반복 생성",
+  "Cancel generate forever": "반복 생성 취소",
+  "Interrupt": "중단",
+  "Skip": "건너뛰기",
+  "Stop processing images and return any results accumulated so far.": "이미지 생성을 중단하고 지금까지 진행된 결과물 출력",
+  "Stop processing current image and continue processing.": "현재 진행중인 이미지 생성을 중단하고 작업을 계속하기",
+  "Prompt": "프롬프트",
+  "Prompt (press Ctrl+Enter or Alt+Enter to generate)": "프롬프트 입력(Ctrl+Enter나 Alt+Enter로 생성 시작)",
+  "Negative prompt": "네거티브 프롬프트",
+  "Negative prompt (press Ctrl+Enter or Alt+Enter to generate)": "네거티브 프롬프트 입력(Ctrl+Enter나 Alt+Enter로 생성 시작)",
+  "Sampling Steps": "샘플링 스텝 수",
+  "Sampling method": "샘플링 방법",
+  "Which algorithm to use to produce the image": "이미지를 생성할 때 사용할 알고리즘",
+  "How many times to improve the generated image iteratively; higher values take longer; very low values can produce bad results": "생성된 이미지를 향상할 횟수; 매우 낮은 값은 만족스럽지 못한 결과물을 출력할 수 있음",
+  "Euler Ancestral - very creative, each can get a completely different picture depending on step count, setting steps to higher than 30-40 does not help": "Euler Ancestral - 매우 창의적, 스텝 수에 따라 완전히 다른 결과물이 나올 수 있음. 30~40보다 높은 스텝 수는 효과가 미미함",
+  "Denoising Diffusion Implicit Models - best at inpainting": "Denoising Diffusion Implicit Models - 인페이팅에 뛰어남",
+  "Width": "가로",
+  "Height": "세로",
+  "Restore faces": "얼굴 보정",
+  "Restore low quality faces using GFPGAN neural network": "GFPGAN 신경망을 이용해 저품질의 얼굴을 보정합니다.",
+  "Tiling": "타일링",
+  "Produce an image that can be tiled.": "타일링 가능한 이미지를 생성합니다.",
+  "Highres. fix": "고해상도 보정",
+  "Use a two step process to partially create an image at smaller resolution, upscale, and then improve details in it without changing composition": "저해상도 이미지를 1차적으로 생성 후 업스케일을 진행하여, 구성을 바꾸지 않고 세부적인 디테일을 향상시킵니다.",
+  "Firstpass width": "초기 가로길이",
+  "Firstpass height": "초기 세로길이",
+  "Denoising strength": "디노이즈 강도",
+  "Determines how little respect the algorithm should have for image's content. At 0, nothing will change, and at 1 you'll get an unrelated image. With values below 1.0, processing will take less steps than the Sampling Steps slider specifies.": "알고리즘이 얼마나 원본 이미지를 반영할지를 결정하는 수치입니다. 0일 경우 아무것도 바뀌지 않고, 1일 경우 원본 이미지와 전혀 관련없는 결과물을 얻게 됩니다. 1.0 아래의 값일 경우, 설정된 샘플링 스텝 수보다 적은 스텝 수를 거치게 됩니다.",
+  "Batch count": "배치 수",
+  "Batch size": "배치 크기",
+  "How many batches of images to create": "생성할 이미지 배치 수",
+  "How many image to create in a single batch": "한 배치당 이미지 수",
+  "CFG Scale": "CFG 스케일",
+  "Classifier Free Guidance Scale - how strongly the image should conform to prompt - lower values produce more creative results": "Classifier Free Guidance Scale - 이미지가 주어진 프롬프트를 얼마나 따를지를 정해주는 수치 - 낮은 값일수록 더 창의적인 결과물이 나옴",
+  "Seed": "시드",
+  "A value that determines the output of random number generator - if you create an image with same parameters and seed as another image, you'll get the same result": "난수 생성기의 결과물을 지정하는 값 - 동일한 설정값과 동일한 시드를 적용 시, 완전히 똑같은 결과물을 얻게 됩니다.",
+  "Set seed to -1, which will cause a new random number to be used every time": "시드를 -1로 적용 - 매번 랜덤한 시드가 적용되게 됩니다.",
+  "Reuse seed from last generation, mostly useful if it was randomed": "이전 생성에서 사용된 시드를 불러옵니다. 랜덤하게 생성했을 시 도움됨",
+  "Extra": "고급",
+  "Variation seed": "바리에이션 시드",
+  "Variation strength": "바리에이션 강도",
+  "Seed of a different picture to be mixed into the generation.": "결과물에 섞일 다른 그림의 시드",
+  "How strong of a variation to produce. At 0, there will be no effect. At 1, you will get the complete picture with variation seed (except for ancestral samplers, where you will just get something).": "바리에이션을 얼마나 줄지 정하는 수치 - 0일 경우 아무것도 바뀌지 않고, 1일 경우 바리에이션 시드로부터 생성된 이미지를 얻게 됩니다. (Ancestral 샘플러 제외 - 이 경우에는 좀 다른 무언가를 얻게 됩니다)",
+  "Resize seed from height": "시드 리사이징 가로길이",
+  "Resize seed from width": "시드 리사이징 세로길이",
+  "Make an attempt to produce a picture similar to what would have been produced with same seed at specified resolution": "동일한 시드 값으로 생성되었을 이미지를 주어진 해상도로 최대한 유사하게 재현합니다.",
+  "Script": "스크립트",
+  "Save": "저장",
+  "Write image to a directory (default - log/images) and generation parameters into csv file.": "이미지를 경로에 저장하고, 설정값들을 csv 파일로 저장합니다. (기본 경로 - log/images)",
+  "Send to img2img": "이미지→이미지로 전송",
+  "Send to inpaint": "인페인트로 전송",
+  "Send to extras": "부가기능으로 전송",
+  "Open images output directory": "이미지 저장 경로 열기",
+  "Make Zip when Save?": "저장 시 Zip 생성하기",
+  "Always save all generated images": "생성된 이미지 항상 저장하기"
+}
\ No newline at end of file

From 50e34cf194b3e3085bc99aeea4dbfd7758dc79c8 Mon Sep 17 00:00:00 2001
From: Dynamic <bradje@naver.com>
Date: Tue, 18 Oct 2022 20:11:17 +0900
Subject: [PATCH 02/73] Update ko-KR.json

---
 localizations/ko-KR.json | 85 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 85 insertions(+)
 create mode 100644 localizations/ko-KR.json

diff --git a/localizations/ko-KR.json b/localizations/ko-KR.json
new file mode 100644
index 00000000..a4367dc5
--- /dev/null
+++ b/localizations/ko-KR.json
@@ -0,0 +1,85 @@
+{
+  "⤡": "⤡",
+  "⊞": "⊞",
+  "×": "×",
+  "❮": "❮",
+  "❯": "❯",
+  "Loading...": "로딩중...",
+  "view": "",
+  "api": "api",
+  "•": "•",
+  "txt2img": "텍스트→이미지",
+  "img2img": "이미지→이미지",
+  "Extras": "부가기능",
+  "PNG Info": "PNG 정보",
+  "History": "기록",
+  "Checkpoint Merger": "체크포인트 병합",
+  "Train": "훈련",
+  "Settings": "설정",
+  "Stable Diffusion checkpoint": "Stable Diffusion 체크포인트",
+  "Hypernetwork": "하이퍼네트워크",
+  "Stop At last layers of CLIP model": "CLIP 모델의 n번째 레이어에서 멈추기",
+  "Generate": "생성",
+  "Style 1": "스타일 1",
+  "Style 2": "스타일 2",
+  "Add a random artist to the prompt.": "프롬프트에 랜덤한 작가 추가",
+  "Read generation parameters from prompt or last generation if prompt is empty into user interface.": "클립보드에 복사된 정보로부터 설정값 읽어오기/프롬프트창이 비어있을경우 제일 최근 설정값 불러오기",
+  "Save style": "스타일 저장",
+  "Apply selected styles to current prompt": "현재 프롬프트에 선택된 스타일 적용",
+  "Do not do anything special": "아무것도 하지 않기",
+  "Generate forever": "반복 생성",
+  "Cancel generate forever": "반복 생성 취소",
+  "Interrupt": "중단",
+  "Skip": "건너뛰기",
+  "Stop processing images and return any results accumulated so far.": "이미지 생성을 중단하고 지금까지 진행된 결과물 출력",
+  "Stop processing current image and continue processing.": "현재 진행중인 이미지 생성을 중단하고 작업을 계속하기",
+  "Prompt": "프롬프트",
+  "Prompt (press Ctrl+Enter or Alt+Enter to generate)": "프롬프트 입력(Ctrl+Enter나 Alt+Enter로 생성 시작)",
+  "Negative prompt": "네거티브 프롬프트",
+  "Negative prompt (press Ctrl+Enter or Alt+Enter to generate)": "네거티브 프롬프트 입력(Ctrl+Enter나 Alt+Enter로 생성 시작)",
+  "Sampling Steps": "샘플링 스텝 수",
+  "Sampling method": "샘플링 방법",
+  "Which algorithm to use to produce the image": "이미지를 생성할 때 사용할 알고리즘",
+  "How many times to improve the generated image iteratively; higher values take longer; very low values can produce bad results": "생성된 이미지를 향상할 횟수; 매우 낮은 값은 만족스럽지 못한 결과물을 출력할 수 있음",
+  "Euler Ancestral - very creative, each can get a completely different picture depending on step count, setting steps to higher than 30-40 does not help": "Euler Ancestral - 매우 창의적, 스텝 수에 따라 완전히 다른 결과물이 나올 수 있음. 30~40보다 높은 스텝 수는 효과가 미미함",
+  "Denoising Diffusion Implicit Models - best at inpainting": "Denoising Diffusion Implicit Models - 인페이팅에 뛰어남",
+  "Width": "가로",
+  "Height": "세로",
+  "Restore faces": "얼굴 보정",
+  "Restore low quality faces using GFPGAN neural network": "GFPGAN 신경망을 이용해 저품질의 얼굴을 보정합니다.",
+  "Tiling": "타일링",
+  "Produce an image that can be tiled.": "타일링 가능한 이미지를 생성합니다.",
+  "Highres. fix": "고해상도 보정",
+  "Use a two step process to partially create an image at smaller resolution, upscale, and then improve details in it without changing composition": "저해상도 이미지를 1차적으로 생성 후 업스케일을 진행하여, 구성을 바꾸지 않고 세부적인 디테일을 향상시킵니다.",
+  "Firstpass width": "초기 가로길이",
+  "Firstpass height": "초기 세로길이",
+  "Denoising strength": "디노이즈 강도",
+  "Determines how little respect the algorithm should have for image's content. At 0, nothing will change, and at 1 you'll get an unrelated image. With values below 1.0, processing will take less steps than the Sampling Steps slider specifies.": "알고리즘이 얼마나 원본 이미지를 반영할지를 결정하는 수치입니다. 0일 경우 아무것도 바뀌지 않고, 1일 경우 원본 이미지와 전혀 관련없는 결과물을 얻게 됩니다. 1.0 아래의 값일 경우, 설정된 샘플링 스텝 수보다 적은 스텝 수를 거치게 됩니다.",
+  "Batch count": "배치 수",
+  "Batch size": "배치 크기",
+  "How many batches of images to create": "생성할 이미지 배치 수",
+  "How many image to create in a single batch": "한 배치당 이미지 수",
+  "CFG Scale": "CFG 스케일",
+  "Classifier Free Guidance Scale - how strongly the image should conform to prompt - lower values produce more creative results": "Classifier Free Guidance Scale - 이미지가 주어진 프롬프트를 얼마나 따를지를 정해주는 수치 - 낮은 값일수록 더 창의적인 결과물이 나옴",
+  "Seed": "시드",
+  "A value that determines the output of random number generator - if you create an image with same parameters and seed as another image, you'll get the same result": "난수 생성기의 결과물을 지정하는 값 - 동일한 설정값과 동일한 시드를 적용 시, 완전히 똑같은 결과물을 얻게 됩니다.",
+  "Set seed to -1, which will cause a new random number to be used every time": "시드를 -1로 적용 - 매번 랜덤한 시드가 적용되게 됩니다.",
+  "Reuse seed from last generation, mostly useful if it was randomed": "이전 생성에서 사용된 시드를 불러옵니다. 랜덤하게 생성했을 시 도움됨",
+  "Extra": "고급",
+  "Variation seed": "바리에이션 시드",
+  "Variation strength": "바리에이션 강도",
+  "Seed of a different picture to be mixed into the generation.": "결과물에 섞일 다른 그림의 시드",
+  "How strong of a variation to produce. At 0, there will be no effect. At 1, you will get the complete picture with variation seed (except for ancestral samplers, where you will just get something).": "바리에이션을 얼마나 줄지 정하는 수치 - 0일 경우 아무것도 바뀌지 않고, 1일 경우 바리에이션 시드로부터 생성된 이미지를 얻게 됩니다. (Ancestral 샘플러 제외 - 이 경우에는 좀 다른 무언가를 얻게 됩니다)",
+  "Resize seed from height": "시드 리사이징 가로길이",
+  "Resize seed from width": "시드 리사이징 세로길이",
+  "Make an attempt to produce a picture similar to what would have been produced with same seed at specified resolution": "동일한 시드 값으로 생성되었을 이미지를 주어진 해상도로 최대한 유사하게 재현합니다.",
+  "Script": "스크립트",
+  "Save": "저장",
+  "Write image to a directory (default - log/images) and generation parameters into csv file.": "이미지를 경로에 저장하고, 설정값들을 csv 파일로 저장합니다. (기본 경로 - log/images)",
+  "Send to img2img": "이미지→이미지로 전송",
+  "Send to inpaint": "인페인트로 전송",
+  "Send to extras": "부가기능으로 전송",
+  "Open images output directory": "이미지 저장 경로 열기",
+  "Make Zip when Save?": "저장 시 Zip 생성하기",
+  "Always save all generated images": "생성된 이미지 항상 저장하기"
+}
\ No newline at end of file

From 0530f07da3c77ed4bfa02f37de5c84562a37f470 Mon Sep 17 00:00:00 2001
From: Dynamic <bradje@naver.com>
Date: Tue, 18 Oct 2022 20:12:54 +0900
Subject: [PATCH 03/73] Move ko-KR.json

---
 ko-KR.json | 76 ------------------------------------------------------
 1 file changed, 76 deletions(-)
 delete mode 100644 ko-KR.json

diff --git a/ko-KR.json b/ko-KR.json
deleted file mode 100644
index f93b3e16..00000000
--- a/ko-KR.json
+++ /dev/null
@@ -1,76 +0,0 @@
-{
-  "txt2img": "텍스트→이미지",
-  "img2img": "이미지→이미지",
-  "Extras": "부가기능",
-  "PNG Info": "PNG 정보",
-  "History": "기록",
-  "Checkpoint Merger": "체크포인트 병합",
-  "Train": "훈련",
-  "Settings": "설정",
-  "Stable Diffusion checkpoint": "Stable Diffusion 체크포인트",
-  "Hypernetwork": "하이퍼네트워크",
-  "Stop At last layers of CLIP model": "CLIP 모델의 n번째 레이어에서 멈추기",
-  "Generate": "생성",
-  "Style 1": "스타일 1",
-  "Style 2": "스타일 2",
-  "Add a random artist to the prompt.": "프롬프트에 랜덤한 작가 추가",
-  "Read generation parameters from prompt or last generation if prompt is empty into user interface.": "클립보드에 복사된 정보로부터 설정값 읽어오기/프롬프트창이 비어있을경우 제일 최근 설정값 불러오기",
-  "Save style": "스타일 저장",
-  "Apply selected styles to current prompt": "현재 프롬프트에 선택된 스타일 적용",
-  "Do not do anything special": "아무것도 하지 않기",
-  "Generate forever": "반복 생성",
-  "Cancel generate forever": "반복 생성 취소",
-  "Interrupt": "중단",
-  "Skip": "건너뛰기",
-  "Stop processing images and return any results accumulated so far.": "이미지 생성을 중단하고 지금까지 진행된 결과물 출력",
-  "Stop processing current image and continue processing.": "현재 진행중인 이미지 생성을 중단하고 작업을 계속하기",
-  "Prompt": "프롬프트",
-  "Prompt (press Ctrl+Enter or Alt+Enter to generate)": "프롬프트 입력(Ctrl+Enter나 Alt+Enter로 생성 시작)",
-  "Negative prompt": "네거티브 프롬프트",
-  "Negative prompt (press Ctrl+Enter or Alt+Enter to generate)": "네거티브 프롬프트 입력(Ctrl+Enter나 Alt+Enter로 생성 시작)",
-  "Sampling Steps": "샘플링 스텝 수",
-  "Sampling method": "샘플링 방법",
-  "Which algorithm to use to produce the image": "이미지를 생성할 때 사용할 알고리즘",
-  "How many times to improve the generated image iteratively; higher values take longer; very low values can produce bad results": "생성된 이미지를 향상할 횟수; 매우 낮은 값은 만족스럽지 못한 결과물을 출력할 수 있음",
-  "Euler Ancestral - very creative, each can get a completely different picture depending on step count, setting steps to higher than 30-40 does not help": "Euler Ancestral - 매우 창의적, 스텝 수에 따라 완전히 다른 결과물이 나올 수 있음. 30~40보다 높은 스텝 수는 효과가 미미함",
-  "Denoising Diffusion Implicit Models - best at inpainting": "Denoising Diffusion Implicit Models - 인페이팅에 뛰어남",
-  "Width": "가로",
-  "Height": "세로",
-  "Restore faces": "얼굴 보정",
-  "Restore low quality faces using GFPGAN neural network": "GFPGAN 신경망을 이용해 저품질의 얼굴을 보정합니다.",
-  "Tiling": "타일링",
-  "Produce an image that can be tiled.": "타일링 가능한 이미지를 생성합니다.",
-  "Highres. fix": "고해상도 보정",
-  "Use a two step process to partially create an image at smaller resolution, upscale, and then improve details in it without changing composition": "저해상도 이미지를 1차적으로 생성 후 업스케일을 진행하여, 구성을 바꾸지 않고 세부적인 디테일을 향상시킵니다.",
-  "Firstpass width": "초기 가로길이",
-  "Firstpass height": "초기 세로길이",
-  "Denoising strength": "디노이즈 강도",
-  "Determines how little respect the algorithm should have for image's content. At 0, nothing will change, and at 1 you'll get an unrelated image. With values below 1.0, processing will take less steps than the Sampling Steps slider specifies.": "알고리즘이 얼마나 원본 이미지를 반영할지를 결정하는 수치입니다. 0일 경우 아무것도 바뀌지 않고, 1일 경우 원본 이미지와 전혀 관련없는 결과물을 얻게 됩니다. 1.0 아래의 값일 경우, 설정된 샘플링 스텝 수보다 적은 스텝 수를 거치게 됩니다.",
-  "Batch count": "배치 수",
-  "Batch size": "배치 크기",
-  "How many batches of images to create": "생성할 이미지 배치 수",
-  "How many image to create in a single batch": "한 배치당 이미지 수",
-  "CFG Scale": "CFG 스케일",
-  "Classifier Free Guidance Scale - how strongly the image should conform to prompt - lower values produce more creative results": "Classifier Free Guidance Scale - 이미지가 주어진 프롬프트를 얼마나 따를지를 정해주는 수치 - 낮은 값일수록 더 창의적인 결과물이 나옴",
-  "Seed": "시드",
-  "A value that determines the output of random number generator - if you create an image with same parameters and seed as another image, you'll get the same result": "난수 생성기의 결과물을 지정하는 값 - 동일한 설정값과 동일한 시드를 적용 시, 완전히 똑같은 결과물을 얻게 됩니다.",
-  "Set seed to -1, which will cause a new random number to be used every time": "시드를 -1로 적용 - 매번 랜덤한 시드가 적용되게 됩니다.",
-  "Reuse seed from last generation, mostly useful if it was randomed": "이전 생성에서 사용된 시드를 불러옵니다. 랜덤하게 생성했을 시 도움됨",
-  "Extra": "고급",
-  "Variation seed": "바리에이션 시드",
-  "Variation strength": "바리에이션 강도",
-  "Seed of a different picture to be mixed into the generation.": "결과물에 섞일 다른 그림의 시드",
-  "How strong of a variation to produce. At 0, there will be no effect. At 1, you will get the complete picture with variation seed (except for ancestral samplers, where you will just get something).": "바리에이션을 얼마나 줄지 정하는 수치 - 0일 경우 아무것도 바뀌지 않고, 1일 경우 바리에이션 시드로부터 생성된 이미지를 얻게 됩니다. (Ancestral 샘플러 제외 - 이 경우에는 좀 다른 무언가를 얻게 됩니다)",
-  "Resize seed from height": "시드 리사이징 가로길이",
-  "Resize seed from width": "시드 리사이징 세로길이",
-  "Make an attempt to produce a picture similar to what would have been produced with same seed at specified resolution": "동일한 시드 값으로 생성되었을 이미지를 주어진 해상도로 최대한 유사하게 재현합니다.",
-  "Script": "스크립트",
-  "Save": "저장",
-  "Write image to a directory (default - log/images) and generation parameters into csv file.": "이미지를 경로에 저장하고, 설정값들을 csv 파일로 저장합니다. (기본 경로 - log/images)",
-  "Send to img2img": "이미지→이미지로 전송",
-  "Send to inpaint": "인페인트로 전송",
-  "Send to extras": "부가기능으로 전송",
-  "Open images output directory": "이미지 저장 경로 열기",
-  "Make Zip when Save?": "저장 시 Zip 생성하기",
-  "Always save all generated images": "생성된 이미지 항상 저장하기"
-}
\ No newline at end of file

From 684a31c4da673961ce9e3a384132fda5d1111ab8 Mon Sep 17 00:00:00 2001
From: Dynamic <bradje@naver.com>
Date: Tue, 18 Oct 2022 21:50:34 +0900
Subject: [PATCH 04/73] update ko-KR.json

Translated all text on txt2img window, plus some extra
---
 localizations/ko-KR.json | 42 ++++++++++++++++++++++++++++++++++++----
 1 file changed, 38 insertions(+), 4 deletions(-)

diff --git a/localizations/ko-KR.json b/localizations/ko-KR.json
index a4367dc5..c6e55bb1 100644
--- a/localizations/ko-KR.json
+++ b/localizations/ko-KR.json
@@ -4,9 +4,10 @@
   "×": "×",
   "❮": "❮",
   "❯": "❯",
-  "Loading...": "로딩중...",
-  "view": "",
-  "api": "api",
+  "Loading...": "",
+  "view": "api 보이기",
+  "hide": "api 숨기기",
+  "api": "",
   "•": "•",
   "txt2img": "텍스트→이미지",
   "img2img": "이미지→이미지",
@@ -50,7 +51,7 @@
   "Tiling": "타일링",
   "Produce an image that can be tiled.": "타일링 가능한 이미지를 생성합니다.",
   "Highres. fix": "고해상도 보정",
-  "Use a two step process to partially create an image at smaller resolution, upscale, and then improve details in it without changing composition": "저해상도 이미지를 1차적으로 생성 후 업스케일을 진행하여, 구성을 바꾸지 않고 세부적인 디테일을 향상시킵니다.",
+  "Use a two step process to partially create an image at smaller resolution, upscale, and then improve details in it without changing composition": "저해상도 이미지를 1차적으로 생성 후 업스케일을 진행하여, 이미지의 전체적인 구성을 바꾸지 않고 세부적인 디테일을 향상시킵니다.",
   "Firstpass width": "초기 가로길이",
   "Firstpass height": "초기 세로길이",
   "Denoising strength": "디노이즈 강도",
@@ -81,5 +82,38 @@
   "Send to extras": "부가기능으로 전송",
   "Open images output directory": "이미지 저장 경로 열기",
   "Make Zip when Save?": "저장 시 Zip 생성하기",
+  "Prompt matrix": "프롬프트 매트릭스",
+  "Separate prompts into parts using vertical pipe character (|) and the script will create a picture for every combination of them (except for the first part, which will be present in all combinations)": "(|)를 이용해 프롬프트를 분리할 시 첫 프롬프트를 제외하고 모든 프롬프트의 조합마다 이미지를 생성합니다. 첫 프롬프트는 모든 조합에 포함되게 됩니다.",
+  "Put variable parts at start of prompt": "변경되는 프롬프트를 앞에 위치시키기",
+  "Prompts from file or textbox": "파일이나 텍스트박스로부터 프롬프트 불러오기",
+  "Show Textbox": "텍스트박스 보이기",
+  "File with inputs": "설정값 파일",
+  "Prompts": "프롬프트",
+  "X/Y plot": "X/Y 플롯",
+  "Create a grid where images will have different parameters. Use inputs below to specify which parameters will be shared by columns and rows": "서로 다른 설정값으로 생성된 이미지의 그리드를 만듭니다. 아래의 설정으로 가로/세로에 어떤 설정값을 적용할지 선택하세요.",
+  "X type": "X축",
+  "Y type": "Y축",
+  "X values": "X 설정값",
+  "Y values": "Y 설정값",
+  "Separate values for X axis using commas.": "쉼표로 X축에 적용할 값 분리",
+  "Separate values for Y axis using commas.": "쉼표로 Y축에 적용할 값 분리",
+  "Draw legend": "범례 그리기",
+  "Include Separate Images": "분리된 이미지 포함하기",
+  "Keep -1 for seeds": "시드값 -1로 유지",
+  "Var. seed": "바리에이션 시드",
+  "Var. strength": "바리에이션 강도",
+  "Steps": "스텝 수",
+  "Prompt S/R": "프롬프트 스타일 변경",
+  "Prompt order": "프롬프트 순서",
+  "Sampler": "샘플러",
+  "Checkpoint name": "체크포인트 이름",
+  "Hypernet str.": "하이퍼네트워크 강도",
+  "Sigma Churn": "시그마 섞기",
+  "Sigma min": "시그마 최솟값",
+  "Sigma max": "시그마 최댓값",
+  "Sigma noise": "시그마 노이즈",
+  "Clip skip": "클립 건너뛰기",
+  "Denoising": "디노이징",
+  "Nothing": "없음",
   "Always save all generated images": "생성된 이미지 항상 저장하기"
 }
\ No newline at end of file

From 4f4e7fed7e4910b165c651e7618eb8e47c57ddb5 Mon Sep 17 00:00:00 2001
From: Dynamic <bradje@naver.com>
Date: Tue, 18 Oct 2022 22:12:41 +0900
Subject: [PATCH 05/73] update ko-KR.json

---
 localizations/ko-KR.json | 1 +
 1 file changed, 1 insertion(+)

diff --git a/localizations/ko-KR.json b/localizations/ko-KR.json
index c6e55bb1..b263b13c 100644
--- a/localizations/ko-KR.json
+++ b/localizations/ko-KR.json
@@ -115,5 +115,6 @@
   "Clip skip": "클립 건너뛰기",
   "Denoising": "디노이징",
   "Nothing": "없음",
+  "Apply settings": "설정 적용하기",
   "Always save all generated images": "생성된 이미지 항상 저장하기"
 }
\ No newline at end of file

From abeec4b63029c2c4151a78fc395d312113881845 Mon Sep 17 00:00:00 2001
From: captin411 <captindave@gmail.com>
Date: Wed, 19 Oct 2022 03:18:26 -0700
Subject: [PATCH 06/73] Add auto focal point cropping to Preprocess images

This algorithm plots a bunch of points of interest on the source
image and averages their locations to find a center.

Most points come from OpenCV.  One point comes from an
entropy model. OpenCV points account for 50% of the weight and the
entropy based point is the other 50%.

The center of all weighted points is calculated and a bounding box
is drawn as close to centered over that point as possible.
---
 modules/textual_inversion/preprocess.py | 151 +++++++++++++++++++++++-
 1 file changed, 146 insertions(+), 5 deletions(-)

diff --git a/modules/textual_inversion/preprocess.py b/modules/textual_inversion/preprocess.py
index 886cf0c3..168bfb09 100644
--- a/modules/textual_inversion/preprocess.py
+++ b/modules/textual_inversion/preprocess.py
@@ -1,5 +1,7 @@
 import os
-from PIL import Image, ImageOps
+import cv2
+import numpy as np
+from PIL import Image, ImageOps, ImageDraw
 import platform
 import sys
 import tqdm
@@ -11,7 +13,7 @@ if cmd_opts.deepdanbooru:
     import modules.deepbooru as deepbooru
 
 
-def preprocess(process_src, process_dst, process_width, process_height, process_flip, process_split, process_caption, process_caption_deepbooru=False):
+def preprocess(process_src, process_dst, process_width, process_height, process_flip, process_split, process_caption, process_caption_deepbooru=False, process_entropy_focus=False):
     try:
         if process_caption:
             shared.interrogator.load()
@@ -21,7 +23,7 @@ def preprocess(process_src, process_dst, process_width, process_height, process_
             db_opts[deepbooru.OPT_INCLUDE_RANKS] = False
             deepbooru.create_deepbooru_process(opts.interrogate_deepbooru_score_threshold, db_opts)
 
-        preprocess_work(process_src, process_dst, process_width, process_height, process_flip, process_split, process_caption, process_caption_deepbooru)
+        preprocess_work(process_src, process_dst, process_width, process_height, process_flip, process_split, process_caption, process_caption_deepbooru, process_entropy_focus)
 
     finally:
 
@@ -33,7 +35,7 @@ def preprocess(process_src, process_dst, process_width, process_height, process_
 
 
 
-def preprocess_work(process_src, process_dst, process_width, process_height, process_flip, process_split, process_caption, process_caption_deepbooru=False):
+def preprocess_work(process_src, process_dst, process_width, process_height, process_flip, process_split, process_caption, process_caption_deepbooru=False, process_entropy_focus=False):
     width = process_width
     height = process_height
     src = os.path.abspath(process_src)
@@ -93,6 +95,8 @@ def preprocess_work(process_src, process_dst, process_width, process_height, pro
         is_tall = ratio > 1.35
         is_wide = ratio < 1 / 1.35
 
+        processing_option_ran = False
+
         if process_split and is_tall:
             img = img.resize((width, height * img.height // img.width))
 
@@ -101,6 +105,8 @@ def preprocess_work(process_src, process_dst, process_width, process_height, pro
 
             bot = img.crop((0, img.height - height, width, img.height))
             save_pic(bot, index)
+
+            processing_option_ran = True
         elif process_split and is_wide:
             img = img.resize((width * img.width // img.height, height))
 
@@ -109,8 +115,143 @@ def preprocess_work(process_src, process_dst, process_width, process_height, pro
 
             right = img.crop((img.width - width, 0, img.width, height))
             save_pic(right, index)
-        else:
+            
+            processing_option_ran = True
+
+        if process_entropy_focus and (is_tall or is_wide):
+            if is_tall:
+                img = img.resize((width, height * img.height // img.width))
+            else:
+                img = img.resize((width * img.width // img.height, height))
+
+            x_focal_center, y_focal_center = image_central_focal_point(img, width, height)
+
+            # take the focal point and turn it into crop coordinates that try to center over the focal
+            # point but then get adjusted back into the frame
+            y_half = int(height / 2)
+            x_half = int(width / 2)
+
+            x1 = x_focal_center - x_half
+            if x1 < 0:
+                x1 = 0
+            elif x1 + width > img.width:
+                x1 = img.width - width
+
+            y1 = y_focal_center - y_half
+            if y1 < 0:
+                y1 = 0
+            elif y1 + height > img.height:
+                y1 = img.height - height
+
+            x2 = x1 + width
+            y2 = y1 + height
+
+            crop = [x1, y1, x2, y2]
+
+            focal = img.crop(tuple(crop))
+            save_pic(focal, index)
+
+            processing_option_ran = True
+
+        if not processing_option_ran:
             img = images.resize_image(1, img, width, height)
             save_pic(img, index)
 
         shared.state.nextjob()
+
+
+def image_central_focal_point(im, target_width, target_height):
+    focal_points = []
+
+    focal_points.extend(
+        image_focal_points(im)
+    )
+
+    fp_entropy = image_entropy_point(im, target_width, target_height)
+    fp_entropy['weight'] = len(focal_points) + 1 # about half of the weight to entropy
+
+    focal_points.append(fp_entropy)
+
+    weight = 0.0
+    x = 0.0
+    y = 0.0
+    for focal_point in focal_points:
+        weight += focal_point['weight']
+        x += focal_point['x'] * focal_point['weight']
+        y += focal_point['y'] * focal_point['weight']
+    avg_x = round(x // weight)
+    avg_y = round(y // weight)
+
+    return avg_x, avg_y
+
+
+def image_focal_points(im):
+    grayscale = im.convert("L")
+
+    # naive attempt at preventing focal points from collecting at watermarks near the bottom
+    gd = ImageDraw.Draw(grayscale)
+    gd.rectangle([0, im.height*.9, im.width, im.height], fill="#999")
+
+    np_im = np.array(grayscale)
+
+    points = cv2.goodFeaturesToTrack(
+        np_im,
+        maxCorners=50,
+        qualityLevel=0.04,
+        minDistance=min(grayscale.width, grayscale.height)*0.05,
+        useHarrisDetector=False,
+    )
+
+    if points is None:
+        return []
+
+    focal_points = []
+    for point in points:
+        x, y = point.ravel()
+        focal_points.append({
+            'x': x,
+            'y': y,
+            'weight': 1.0
+        })
+
+    return focal_points
+
+
+def image_entropy_point(im, crop_width, crop_height):
+    img = im.copy()
+    # just make it easier to slide the test crop with images oriented the same way
+    if (img.size[0] < img.size[1]):
+        portrait = True
+        img = img.rotate(90, expand=1)
+
+    e_max = 0
+    crop_current = [0, 0, crop_width, crop_height]
+    crop_best = crop_current
+    while crop_current[2] < img.size[0]:
+        crop = img.crop(tuple(crop_current))
+        e = image_entropy(crop)
+
+        if (e_max < e):
+          e_max = e
+          crop_best = list(crop_current)
+
+        crop_current[0] += 4
+        crop_current[2] += 4
+
+    x_mid = int((crop_best[2] - crop_best[0])/2)
+    y_mid = int((crop_best[3] - crop_best[1])/2)
+
+    return {
+        'x': x_mid,
+        'y': y_mid,
+        'weight': 1.0
+    }
+
+
+def image_entropy(im):
+    # greyscale image entropy
+    band = np.asarray(im.convert("L"))
+    hist, _ = np.histogram(band, bins=range(0, 256))
+    hist = hist[hist > 0]
+    return -np.log2(hist / hist.sum()).sum()
+

From 087609ee181a91a523647435ffffa6288a317e2f Mon Sep 17 00:00:00 2001
From: captin411 <captindave@gmail.com>
Date: Wed, 19 Oct 2022 03:19:35 -0700
Subject: [PATCH 07/73] UI changes for focal point image cropping

---
 modules/ui.py | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/modules/ui.py b/modules/ui.py
index 1ff7eb4f..b6be713b 100644
--- a/modules/ui.py
+++ b/modules/ui.py
@@ -1234,6 +1234,7 @@ def create_ui(wrap_gradio_gpu_call):
                     with gr.Row():
                         process_flip = gr.Checkbox(label='Create flipped copies')
                         process_split = gr.Checkbox(label='Split oversized images into two')
+                        process_entropy_focus = gr.Checkbox(label='Create auto focal point crop')
                         process_caption = gr.Checkbox(label='Use BLIP for caption')
                         process_caption_deepbooru = gr.Checkbox(label='Use deepbooru for caption', visible=True if cmd_opts.deepdanbooru else False)
 
@@ -1318,7 +1319,8 @@ def create_ui(wrap_gradio_gpu_call):
                 process_flip,
                 process_split,
                 process_caption,
-                process_caption_deepbooru
+                process_caption_deepbooru,
+                process_entropy_focus
             ],
             outputs=[
                 ti_output,

From 41e3877be2c667316515c86037413763eb0ba4da Mon Sep 17 00:00:00 2001
From: captin411 <captindave@gmail.com>
Date: Wed, 19 Oct 2022 13:44:59 -0700
Subject: [PATCH 08/73] fix entropy point calculation

---
 modules/textual_inversion/preprocess.py | 34 ++++++++++++++-----------
 1 file changed, 19 insertions(+), 15 deletions(-)

diff --git a/modules/textual_inversion/preprocess.py b/modules/textual_inversion/preprocess.py
index 168bfb09..7c1a594e 100644
--- a/modules/textual_inversion/preprocess.py
+++ b/modules/textual_inversion/preprocess.py
@@ -196,9 +196,9 @@ def image_focal_points(im):
 
     points = cv2.goodFeaturesToTrack(
         np_im,
-        maxCorners=50,
+        maxCorners=100,
         qualityLevel=0.04,
-        minDistance=min(grayscale.width, grayscale.height)*0.05,
+        minDistance=min(grayscale.width, grayscale.height)*0.07,
         useHarrisDetector=False,
     )
 
@@ -218,28 +218,32 @@ def image_focal_points(im):
 
 
 def image_entropy_point(im, crop_width, crop_height):
-    img = im.copy()
-    # just make it easier to slide the test crop with images oriented the same way
-    if (img.size[0] < img.size[1]):
-        portrait = True
-        img = img.rotate(90, expand=1)
+    landscape = im.height < im.width
+    portrait = im.height > im.width
+    if landscape:
+      move_idx = [0, 2]
+      move_max = im.size[0]
+    elif portrait:
+      move_idx = [1, 3]
+      move_max = im.size[1]
 
     e_max = 0
     crop_current = [0, 0, crop_width, crop_height]
     crop_best = crop_current
-    while crop_current[2] < img.size[0]:
-        crop = img.crop(tuple(crop_current))
+    while crop_current[move_idx[1]] < move_max:
+        crop = im.crop(tuple(crop_current))
         e = image_entropy(crop)
 
-        if (e_max < e):
+        if (e > e_max):
           e_max = e
           crop_best = list(crop_current)
 
-        crop_current[0] += 4
-        crop_current[2] += 4
+        crop_current[move_idx[0]] += 4
+        crop_current[move_idx[1]] += 4
+
+    x_mid = int(crop_best[0] + crop_width/2)
+    y_mid = int(crop_best[1] + crop_height/2)
 
-    x_mid = int((crop_best[2] - crop_best[0])/2)
-    y_mid = int((crop_best[3] - crop_best[1])/2)
 
     return {
         'x': x_mid,
@@ -250,7 +254,7 @@ def image_entropy_point(im, crop_width, crop_height):
 
 def image_entropy(im):
     # greyscale image entropy
-    band = np.asarray(im.convert("L"))
+    band = np.asarray(im.convert("1"))
     hist, _ = np.histogram(band, bins=range(0, 256))
     hist = hist[hist > 0]
     return -np.log2(hist / hist.sum()).sum()

From 59ed74438318af893d2cba552b0e28dbc2a9266c Mon Sep 17 00:00:00 2001
From: captin411 <captindave@gmail.com>
Date: Wed, 19 Oct 2022 17:19:02 -0700
Subject: [PATCH 09/73] face detection algo, configurability, reusability

Try to move the crop in the direction of a face if it is present

More internal configuration options for choosing weights of each of the algorithm's findings

Move logic into its module
---
 modules/textual_inversion/autocrop.py   | 216 ++++++++++++++++++++++++
 modules/textual_inversion/preprocess.py | 150 ++--------------
 2 files changed, 230 insertions(+), 136 deletions(-)
 create mode 100644 modules/textual_inversion/autocrop.py

diff --git a/modules/textual_inversion/autocrop.py b/modules/textual_inversion/autocrop.py
new file mode 100644
index 00000000..f858a958
--- /dev/null
+++ b/modules/textual_inversion/autocrop.py
@@ -0,0 +1,216 @@
+import cv2
+from collections import defaultdict
+from math import log, sqrt
+import numpy as np
+from PIL import Image, ImageDraw
+
+GREEN = "#0F0"
+BLUE = "#00F"
+RED = "#F00"
+
+def crop_image(im, settings):
+  """ Intelligently crop an image to the subject matter """
+  if im.height > im.width:
+      im = im.resize((settings.crop_width, settings.crop_height * im.height // im.width))
+  else:
+      im = im.resize((settings.crop_width * im.width // im.height, settings.crop_height))
+
+  focus = focal_point(im, settings)
+
+  # take the focal point and turn it into crop coordinates that try to center over the focal
+  # point but then get adjusted back into the frame
+  y_half = int(settings.crop_height / 2)
+  x_half = int(settings.crop_width / 2)
+
+  x1 = focus.x - x_half
+  if x1 < 0:
+      x1 = 0
+  elif x1 + settings.crop_width > im.width:
+      x1 = im.width - settings.crop_width
+
+  y1 = focus.y - y_half
+  if y1 < 0:
+      y1 = 0
+  elif y1 + settings.crop_height > im.height:
+      y1 = im.height - settings.crop_height
+
+  x2 = x1 + settings.crop_width
+  y2 = y1 + settings.crop_height
+
+  crop = [x1, y1, x2, y2]
+
+  if settings.annotate_image:
+    d = ImageDraw.Draw(im)
+    rect = list(crop)
+    rect[2] -= 1
+    rect[3] -= 1
+    d.rectangle(rect, outline=GREEN)
+    if settings.destop_view_image:
+      im.show()
+
+  return im.crop(tuple(crop))
+
+def focal_point(im, settings):
+    corner_points = image_corner_points(im, settings)
+    entropy_points = image_entropy_points(im, settings)
+    face_points = image_face_points(im, settings)
+
+    total_points = len(corner_points) + len(entropy_points) + len(face_points)
+
+    corner_weight = settings.corner_points_weight
+    entropy_weight = settings.entropy_points_weight
+    face_weight = settings.face_points_weight
+
+    weight_pref_total = corner_weight + entropy_weight + face_weight
+
+    # weight things
+    pois = []
+    if weight_pref_total == 0 or total_points == 0: 
+      return pois
+
+    pois.extend(
+      [ PointOfInterest( p.x, p.y, weight=p.weight * ( (corner_weight/weight_pref_total) / (len(corner_points)/total_points) )) for p in corner_points ]
+    )
+    pois.extend(
+      [ PointOfInterest( p.x, p.y, weight=p.weight * ( (entropy_weight/weight_pref_total) / (len(entropy_points)/total_points) )) for p in entropy_points ]
+    )
+    pois.extend(
+      [ PointOfInterest( p.x, p.y, weight=p.weight * ( (face_weight/weight_pref_total) / (len(face_points)/total_points) )) for p in face_points ]
+    )
+
+    if settings.annotate_image:
+      d = ImageDraw.Draw(im)
+
+    average_point = poi_average(pois, settings, im=im)
+
+    if settings.annotate_image:
+      d.ellipse([average_point.x - 25, average_point.y - 25, average_point.x + 25, average_point.y + 25], outline=GREEN)
+      
+    return average_point
+
+
+def image_face_points(im, settings):
+    np_im = np.array(im)
+    gray = cv2.cvtColor(np_im, cv2.COLOR_BGR2GRAY)
+    classifier = cv2.CascadeClassifier(f'{cv2.data.haarcascades}haarcascade_frontalface_default.xml')
+
+    minsize = int(min(im.width, im.height) * 0.15) # at least N percent of the smallest side
+    faces = classifier.detectMultiScale(gray, scaleFactor=1.05,
+      minNeighbors=5, minSize=(minsize, minsize), flags=cv2.CASCADE_SCALE_IMAGE)
+
+    if len(faces) == 0:
+      return []
+
+    rects = [[f[0], f[1], f[0] + f[2], f[1] + f[3]] for f in faces]
+    if settings.annotate_image:
+      for f in rects:
+        d = ImageDraw.Draw(im)
+        d.rectangle(f, outline=RED)
+    
+    return [PointOfInterest((r[0] +r[2]) // 2, (r[1] + r[3]) // 2) for r in rects]
+
+
+def image_corner_points(im, settings):
+    grayscale = im.convert("L")
+
+    # naive attempt at preventing focal points from collecting at watermarks near the bottom
+    gd = ImageDraw.Draw(grayscale)
+    gd.rectangle([0, im.height*.9, im.width, im.height], fill="#999")
+
+    np_im = np.array(grayscale)
+
+    points = cv2.goodFeaturesToTrack(
+        np_im,
+        maxCorners=100,
+        qualityLevel=0.04,
+        minDistance=min(grayscale.width, grayscale.height)*0.07,
+        useHarrisDetector=False,
+    )
+
+    if points is None:
+        return []
+
+    focal_points = []
+    for point in points:
+        x, y = point.ravel()
+        focal_points.append(PointOfInterest(x, y))
+
+    return focal_points
+
+
+def image_entropy_points(im, settings):
+    landscape = im.height < im.width
+    portrait = im.height > im.width
+    if landscape:
+      move_idx = [0, 2]
+      move_max = im.size[0]
+    elif portrait:
+      move_idx = [1, 3]
+      move_max = im.size[1]
+    else:
+      return []
+
+    e_max = 0
+    crop_current = [0, 0, settings.crop_width, settings.crop_height]
+    crop_best = crop_current
+    while crop_current[move_idx[1]] < move_max:
+        crop = im.crop(tuple(crop_current))
+        e = image_entropy(crop)
+
+        if (e > e_max):
+          e_max = e
+          crop_best = list(crop_current)
+
+        crop_current[move_idx[0]] += 4
+        crop_current[move_idx[1]] += 4
+
+    x_mid = int(crop_best[0] + settings.crop_width/2)
+    y_mid = int(crop_best[1] + settings.crop_height/2)
+
+    return [PointOfInterest(x_mid, y_mid)]
+
+
+def image_entropy(im):
+    # greyscale image entropy
+    band = np.asarray(im.convert("1"))
+    hist, _ = np.histogram(band, bins=range(0, 256))
+    hist = hist[hist > 0]
+    return -np.log2(hist / hist.sum()).sum()
+
+
+def poi_average(pois, settings, im=None):
+    weight = 0.0
+    x = 0.0
+    y = 0.0
+    for pois in pois:
+        if settings.annotate_image and im is not None:
+          w = 4 * 0.5 * sqrt(pois.weight)
+          d = ImageDraw.Draw(im)
+          d.ellipse([
+            pois.x - w, pois.y - w,
+            pois.x + w, pois.y + w ], fill=BLUE)
+        weight += pois.weight
+        x += pois.x * pois.weight
+        y += pois.y * pois.weight
+    avg_x = round(x / weight)
+    avg_y = round(y / weight)
+
+    return PointOfInterest(avg_x, avg_y)
+
+
+class PointOfInterest:
+  def __init__(self, x, y, weight=1.0):
+    self.x = x
+    self.y = y
+    self.weight = weight
+
+
+class Settings:
+  def __init__(self, crop_width=512, crop_height=512, corner_points_weight=0.5, entropy_points_weight=0.5, face_points_weight=0.5, annotate_image=False):
+    self.crop_width = crop_width
+    self.crop_height = crop_height
+    self.corner_points_weight = corner_points_weight
+    self.entropy_points_weight = entropy_points_weight
+    self.face_points_weight = entropy_points_weight
+    self.annotate_image = annotate_image
+    self.destop_view_image = False
\ No newline at end of file
diff --git a/modules/textual_inversion/preprocess.py b/modules/textual_inversion/preprocess.py
index 7c1a594e..0c79f012 100644
--- a/modules/textual_inversion/preprocess.py
+++ b/modules/textual_inversion/preprocess.py
@@ -1,7 +1,5 @@
 import os
-import cv2
-import numpy as np
-from PIL import Image, ImageOps, ImageDraw
+from PIL import Image, ImageOps
 import platform
 import sys
 import tqdm
@@ -9,6 +7,7 @@ import time
 
 from modules import shared, images
 from modules.shared import opts, cmd_opts
+from modules.textual_inversion import autocrop
 if cmd_opts.deepdanbooru:
     import modules.deepbooru as deepbooru
 
@@ -80,6 +79,7 @@ def preprocess_work(process_src, process_dst, process_width, process_height, pro
         if process_flip:
             save_pic_with_caption(ImageOps.mirror(image), index)
 
+
     for index, imagefile in enumerate(tqdm.tqdm(files)):
         subindex = [0]
         filename = os.path.join(src, imagefile)
@@ -118,37 +118,16 @@ def preprocess_work(process_src, process_dst, process_width, process_height, pro
             
             processing_option_ran = True
 
-        if process_entropy_focus and (is_tall or is_wide):
-            if is_tall:
-                img = img.resize((width, height * img.height // img.width))
-            else:
-                img = img.resize((width * img.width // img.height, height))
-
-            x_focal_center, y_focal_center = image_central_focal_point(img, width, height)
-
-            # take the focal point and turn it into crop coordinates that try to center over the focal
-            # point but then get adjusted back into the frame
-            y_half = int(height / 2)
-            x_half = int(width / 2)
-
-            x1 = x_focal_center - x_half
-            if x1 < 0:
-                x1 = 0
-            elif x1 + width > img.width:
-                x1 = img.width - width
-
-            y1 = y_focal_center - y_half
-            if y1 < 0:
-                y1 = 0
-            elif y1 + height > img.height:
-                y1 = img.height - height
-
-            x2 = x1 + width
-            y2 = y1 + height
-
-            crop = [x1, y1, x2, y2]
-
-            focal = img.crop(tuple(crop))
+        if process_entropy_focus and img.height != img.width:
+            autocrop_settings = autocrop.Settings(
+                crop_width = width,
+                crop_height = height,
+                face_points_weight = 0.9,
+                entropy_points_weight = 0.7,
+                corner_points_weight = 0.5,
+                annotate_image = False
+            )
+            focal = autocrop.crop_image(img, autocrop_settings)
             save_pic(focal, index)
 
             processing_option_ran = True
@@ -157,105 +136,4 @@ def preprocess_work(process_src, process_dst, process_width, process_height, pro
             img = images.resize_image(1, img, width, height)
             save_pic(img, index)
 
-        shared.state.nextjob()
-
-
-def image_central_focal_point(im, target_width, target_height):
-    focal_points = []
-
-    focal_points.extend(
-        image_focal_points(im)
-    )
-
-    fp_entropy = image_entropy_point(im, target_width, target_height)
-    fp_entropy['weight'] = len(focal_points) + 1 # about half of the weight to entropy
-
-    focal_points.append(fp_entropy)
-
-    weight = 0.0
-    x = 0.0
-    y = 0.0
-    for focal_point in focal_points:
-        weight += focal_point['weight']
-        x += focal_point['x'] * focal_point['weight']
-        y += focal_point['y'] * focal_point['weight']
-    avg_x = round(x // weight)
-    avg_y = round(y // weight)
-
-    return avg_x, avg_y
-
-
-def image_focal_points(im):
-    grayscale = im.convert("L")
-
-    # naive attempt at preventing focal points from collecting at watermarks near the bottom
-    gd = ImageDraw.Draw(grayscale)
-    gd.rectangle([0, im.height*.9, im.width, im.height], fill="#999")
-
-    np_im = np.array(grayscale)
-
-    points = cv2.goodFeaturesToTrack(
-        np_im,
-        maxCorners=100,
-        qualityLevel=0.04,
-        minDistance=min(grayscale.width, grayscale.height)*0.07,
-        useHarrisDetector=False,
-    )
-
-    if points is None:
-        return []
-
-    focal_points = []
-    for point in points:
-        x, y = point.ravel()
-        focal_points.append({
-            'x': x,
-            'y': y,
-            'weight': 1.0
-        })
-
-    return focal_points
-
-
-def image_entropy_point(im, crop_width, crop_height):
-    landscape = im.height < im.width
-    portrait = im.height > im.width
-    if landscape:
-      move_idx = [0, 2]
-      move_max = im.size[0]
-    elif portrait:
-      move_idx = [1, 3]
-      move_max = im.size[1]
-
-    e_max = 0
-    crop_current = [0, 0, crop_width, crop_height]
-    crop_best = crop_current
-    while crop_current[move_idx[1]] < move_max:
-        crop = im.crop(tuple(crop_current))
-        e = image_entropy(crop)
-
-        if (e > e_max):
-          e_max = e
-          crop_best = list(crop_current)
-
-        crop_current[move_idx[0]] += 4
-        crop_current[move_idx[1]] += 4
-
-    x_mid = int(crop_best[0] + crop_width/2)
-    y_mid = int(crop_best[1] + crop_height/2)
-
-
-    return {
-        'x': x_mid,
-        'y': y_mid,
-        'weight': 1.0
-    }
-
-
-def image_entropy(im):
-    # greyscale image entropy
-    band = np.asarray(im.convert("1"))
-    hist, _ = np.histogram(band, bins=range(0, 256))
-    hist = hist[hist > 0]
-    return -np.log2(hist / hist.sum()).sum()
-
+        shared.state.nextjob()
\ No newline at end of file

From 0ddaf8d2028a7251e8c4ad93551a43b5d4700841 Mon Sep 17 00:00:00 2001
From: captin411 <captindave@gmail.com>
Date: Thu, 20 Oct 2022 00:34:55 -0700
Subject: [PATCH 10/73] improve face detection a lot

---
 modules/textual_inversion/autocrop.py | 95 +++++++++++++++++----------
 1 file changed, 60 insertions(+), 35 deletions(-)

diff --git a/modules/textual_inversion/autocrop.py b/modules/textual_inversion/autocrop.py
index f858a958..5a551c25 100644
--- a/modules/textual_inversion/autocrop.py
+++ b/modules/textual_inversion/autocrop.py
@@ -8,12 +8,18 @@ GREEN = "#0F0"
 BLUE = "#00F"
 RED = "#F00"
 
+
 def crop_image(im, settings):
   """ Intelligently crop an image to the subject matter """
   if im.height > im.width:
       im = im.resize((settings.crop_width, settings.crop_height * im.height // im.width))
-  else:
+  elif im.width > im.height:
       im = im.resize((settings.crop_width * im.width // im.height, settings.crop_height))
+  else:
+      im = im.resize((settings.crop_width, settings.crop_height))
+
+  if im.height == im.width:
+    return im
 
   focus = focal_point(im, settings)
 
@@ -78,13 +84,18 @@ def focal_point(im, settings):
       [ PointOfInterest( p.x, p.y, weight=p.weight * ( (face_weight/weight_pref_total) / (len(face_points)/total_points) )) for p in face_points ]
     )
 
+    average_point = poi_average(pois, settings)
+
     if settings.annotate_image:
       d = ImageDraw.Draw(im)
-
-    average_point = poi_average(pois, settings, im=im)
-
-    if settings.annotate_image:
-      d.ellipse([average_point.x - 25, average_point.y - 25, average_point.x + 25, average_point.y + 25], outline=GREEN)
+      for f in face_points:
+        d.rectangle(f.bounding(f.size), outline=RED)
+      for f in entropy_points:
+        d.rectangle(f.bounding(30), outline=BLUE)
+      for poi in pois:
+        w = max(4, 4 * 0.5 * sqrt(poi.weight))
+        d.ellipse(poi.bounding(w), fill=BLUE)
+      d.ellipse(average_point.bounding(25), outline=GREEN)
       
     return average_point
 
@@ -92,22 +103,32 @@ def focal_point(im, settings):
 def image_face_points(im, settings):
     np_im = np.array(im)
     gray = cv2.cvtColor(np_im, cv2.COLOR_BGR2GRAY)
-    classifier = cv2.CascadeClassifier(f'{cv2.data.haarcascades}haarcascade_frontalface_default.xml')
 
-    minsize = int(min(im.width, im.height) * 0.15) # at least N percent of the smallest side
-    faces = classifier.detectMultiScale(gray, scaleFactor=1.05,
-      minNeighbors=5, minSize=(minsize, minsize), flags=cv2.CASCADE_SCALE_IMAGE)
+    tries = [
+      [ f'{cv2.data.haarcascades}haarcascade_eye.xml', 0.01 ],
+      [ f'{cv2.data.haarcascades}haarcascade_frontalface_default.xml', 0.05 ],
+      [ f'{cv2.data.haarcascades}haarcascade_profileface.xml', 0.05 ],
+      [ f'{cv2.data.haarcascades}haarcascade_frontalface_alt.xml', 0.05 ],
+      [ f'{cv2.data.haarcascades}haarcascade_frontalface_alt2.xml', 0.05 ],
+      [ f'{cv2.data.haarcascades}haarcascade_frontalface_alt_tree.xml', 0.05 ],
+      [ f'{cv2.data.haarcascades}haarcascade_eye_tree_eyeglasses.xml', 0.05 ],
+      [ f'{cv2.data.haarcascades}haarcascade_upperbody.xml', 0.05 ]
+    ]
 
-    if len(faces) == 0:
-      return []
+    for t in tries:
+      # print(t[0])
+      classifier = cv2.CascadeClassifier(t[0])
+      minsize = int(min(im.width, im.height) * t[1]) # at least N percent of the smallest side
+      try:
+        faces = classifier.detectMultiScale(gray, scaleFactor=1.1,
+          minNeighbors=7, minSize=(minsize, minsize), flags=cv2.CASCADE_SCALE_IMAGE)
+      except:
+        continue
 
-    rects = [[f[0], f[1], f[0] + f[2], f[1] + f[3]] for f in faces]
-    if settings.annotate_image:
-      for f in rects:
-        d = ImageDraw.Draw(im)
-        d.rectangle(f, outline=RED)
-    
-    return [PointOfInterest((r[0] +r[2]) // 2, (r[1] + r[3]) // 2) for r in rects]
+      if len(faces) > 0:
+        rects = [[f[0], f[1], f[0] + f[2], f[1] + f[3]] for f in faces]
+        return [PointOfInterest((r[0] +r[2]) // 2, (r[1] + r[3]) // 2, size=abs(r[0]-r[2])) for r in rects]
+    return []
 
 
 def image_corner_points(im, settings):
@@ -132,8 +153,8 @@ def image_corner_points(im, settings):
 
     focal_points = []
     for point in points:
-        x, y = point.ravel()
-        focal_points.append(PointOfInterest(x, y))
+      x, y = point.ravel()
+      focal_points.append(PointOfInterest(x, y, size=4))
 
     return focal_points
 
@@ -167,31 +188,26 @@ def image_entropy_points(im, settings):
     x_mid = int(crop_best[0] + settings.crop_width/2)
     y_mid = int(crop_best[1] + settings.crop_height/2)
 
-    return [PointOfInterest(x_mid, y_mid)]
+    return [PointOfInterest(x_mid, y_mid, size=25)]
 
 
 def image_entropy(im):
     # greyscale image entropy
-    band = np.asarray(im.convert("1"))
+    # band = np.asarray(im.convert("L"))
+    band = np.asarray(im.convert("1"), dtype=np.uint8)
     hist, _ = np.histogram(band, bins=range(0, 256))
     hist = hist[hist > 0]
     return -np.log2(hist / hist.sum()).sum()
 
 
-def poi_average(pois, settings, im=None):
+def poi_average(pois, settings):
     weight = 0.0
     x = 0.0
     y = 0.0
-    for pois in pois:
-        if settings.annotate_image and im is not None:
-          w = 4 * 0.5 * sqrt(pois.weight)
-          d = ImageDraw.Draw(im)
-          d.ellipse([
-            pois.x - w, pois.y - w,
-            pois.x + w, pois.y + w ], fill=BLUE)
-        weight += pois.weight
-        x += pois.x * pois.weight
-        y += pois.y * pois.weight
+    for poi in pois:
+        weight += poi.weight
+        x += poi.x * poi.weight
+        y += poi.y * poi.weight
     avg_x = round(x / weight)
     avg_y = round(y / weight)
 
@@ -199,10 +215,19 @@ def poi_average(pois, settings, im=None):
 
 
 class PointOfInterest:
-  def __init__(self, x, y, weight=1.0):
+  def __init__(self, x, y, weight=1.0, size=10):
     self.x = x
     self.y = y
     self.weight = weight
+    self.size = size
+
+  def bounding(self, size):
+    return [
+      self.x - size//2,
+      self.y - size//2,
+      self.x + size//2,
+      self.y + size//2
+    ]
 
 
 class Settings:

From 21364c5c39b269497944b56dd6664792d779333b Mon Sep 17 00:00:00 2001
From: Dynamic <bradje@naver.com>
Date: Thu, 20 Oct 2022 19:20:39 +0900
Subject: [PATCH 11/73] Updated file with basic template and added new
 translations

Translation done in txt2img-img2img windows and following scripts
---
 localizations/ko-KR.json | 498 +++++++++++++++++++++++++++++++--------
 1 file changed, 400 insertions(+), 98 deletions(-)

diff --git a/localizations/ko-KR.json b/localizations/ko-KR.json
index b263b13c..7cc431c6 100644
--- a/localizations/ko-KR.json
+++ b/localizations/ko-KR.json
@@ -1,120 +1,422 @@
 {
-  "⤡": "⤡",
-  "⊞": "⊞",
   "×": "×",
+  "•": "•",
+  "⊞": "⊞",
   "❮": "❮",
   "❯": "❯",
-  "Loading...": "",
-  "view": "api 보이기",
-  "hide": "api 숨기기",
-  "api": "",
-  "•": "•",
-  "txt2img": "텍스트→이미지",
-  "img2img": "이미지→이미지",
-  "Extras": "부가기능",
-  "PNG Info": "PNG 정보",
-  "History": "기록",
-  "Checkpoint Merger": "체크포인트 병합",
-  "Train": "훈련",
-  "Settings": "설정",
-  "Stable Diffusion checkpoint": "Stable Diffusion 체크포인트",
-  "Hypernetwork": "하이퍼네트워크",
-  "Stop At last layers of CLIP model": "CLIP 모델의 n번째 레이어에서 멈추기",
-  "Generate": "생성",
-  "Style 1": "스타일 1",
-  "Style 2": "스타일 2",
+  "⤡": "⤡",
+  "1st and last digit must be 1. ex:'1, 2, 1'": "1st and last digit must be 1. ex:'1, 2, 1'",
+  "A directory on the same machine where the server is running.": "A directory on the same machine where the server is running.",
+  "A merger of the two checkpoints will be generated in your": "A merger of the two checkpoints will be generated in your",
+  "A value that determines the output of random number generator - if you create an image with same parameters and seed as another image, you'll get the same result": "난수 생성기의 결과물을 지정하는 값 - 동일한 설정값과 동일한 시드를 적용 시, 완전히 똑같은 결과물을 얻게 됩니다.",
   "Add a random artist to the prompt.": "프롬프트에 랜덤한 작가 추가",
-  "Read generation parameters from prompt or last generation if prompt is empty into user interface.": "클립보드에 복사된 정보로부터 설정값 읽어오기/프롬프트창이 비어있을경우 제일 최근 설정값 불러오기",
-  "Save style": "스타일 저장",
+  "Add a second progress bar to the console that shows progress for an entire job.": "Add a second progress bar to the console that shows progress for an entire job.",
+  "Add difference": "Add difference",
+  "Add extended info (seed, prompt) to filename when saving grid": "Add extended info (seed, prompt) to filename when saving grid",
+  "Add layer normalization": "Add layer normalization",
+  "Add model hash to generation information": "Add model hash to generation information",
+  "Add model name to generation information": "Add model name to generation information",
+  "Always print all generation info to standard output": "Always print all generation info to standard output",
+  "Always save all generated image grids": "Always save all generated image grids",
+  "Always save all generated images": "생성된 이미지 항상 저장하기",
+  "Apply color correction to img2img results to match original colors.": "Apply color correction to img2img results to match original colors.",
   "Apply selected styles to current prompt": "현재 프롬프트에 선택된 스타일 적용",
-  "Do not do anything special": "아무것도 하지 않기",
-  "Generate forever": "반복 생성",
-  "Cancel generate forever": "반복 생성 취소",
-  "Interrupt": "중단",
-  "Skip": "건너뛰기",
-  "Stop processing images and return any results accumulated so far.": "이미지 생성을 중단하고 지금까지 진행된 결과물 출력",
-  "Stop processing current image and continue processing.": "현재 진행중인 이미지 생성을 중단하고 작업을 계속하기",
-  "Prompt": "프롬프트",
-  "Prompt (press Ctrl+Enter or Alt+Enter to generate)": "프롬프트 입력(Ctrl+Enter나 Alt+Enter로 생성 시작)",
-  "Negative prompt": "네거티브 프롬프트",
-  "Negative prompt (press Ctrl+Enter or Alt+Enter to generate)": "네거티브 프롬프트 입력(Ctrl+Enter나 Alt+Enter로 생성 시작)",
-  "Sampling Steps": "샘플링 스텝 수",
-  "Sampling method": "샘플링 방법",
-  "Which algorithm to use to produce the image": "이미지를 생성할 때 사용할 알고리즘",
-  "How many times to improve the generated image iteratively; higher values take longer; very low values can produce bad results": "생성된 이미지를 향상할 횟수; 매우 낮은 값은 만족스럽지 못한 결과물을 출력할 수 있음",
-  "Euler Ancestral - very creative, each can get a completely different picture depending on step count, setting steps to higher than 30-40 does not help": "Euler Ancestral - 매우 창의적, 스텝 수에 따라 완전히 다른 결과물이 나올 수 있음. 30~40보다 높은 스텝 수는 효과가 미미함",
-  "Denoising Diffusion Implicit Models - best at inpainting": "Denoising Diffusion Implicit Models - 인페이팅에 뛰어남",
-  "Width": "가로",
-  "Height": "세로",
-  "Restore faces": "얼굴 보정",
-  "Restore low quality faces using GFPGAN neural network": "GFPGAN 신경망을 이용해 저품질의 얼굴을 보정합니다.",
-  "Tiling": "타일링",
-  "Produce an image that can be tiled.": "타일링 가능한 이미지를 생성합니다.",
-  "Highres. fix": "고해상도 보정",
-  "Use a two step process to partially create an image at smaller resolution, upscale, and then improve details in it without changing composition": "저해상도 이미지를 1차적으로 생성 후 업스케일을 진행하여, 이미지의 전체적인 구성을 바꾸지 않고 세부적인 디테일을 향상시킵니다.",
-  "Firstpass width": "초기 가로길이",
-  "Firstpass height": "초기 세로길이",
-  "Denoising strength": "디노이즈 강도",
-  "Determines how little respect the algorithm should have for image's content. At 0, nothing will change, and at 1 you'll get an unrelated image. With values below 1.0, processing will take less steps than the Sampling Steps slider specifies.": "알고리즘이 얼마나 원본 이미지를 반영할지를 결정하는 수치입니다. 0일 경우 아무것도 바뀌지 않고, 1일 경우 원본 이미지와 전혀 관련없는 결과물을 얻게 됩니다. 1.0 아래의 값일 경우, 설정된 샘플링 스텝 수보다 적은 스텝 수를 거치게 됩니다.",
+  "Apply settings": "설정 적용하기",
+  "BSRGAN 4x": "BSRGAN 4x",
+  "Batch Process": "Batch Process",
   "Batch count": "배치 수",
+  "Batch from Directory": "Batch from Directory",
+  "Batch img2img": "이미지→이미지 배치",
   "Batch size": "배치 크기",
+  "CFG Scale": "CFG 스케일",
+  "CLIP: maximum number of lines in text file (0 = No limit)": "CLIP: maximum number of lines in text file (0 = No limit)",
+  "Cancel generate forever": "반복 생성 취소",
+  "Check progress (first)": "Check progress (first)",
+  "Check progress": "Check progress",
+  "Checkpoint Merger": "체크포인트 병합",
+  "Checkpoint name": "체크포인트 이름",
+  "Checkpoints to cache in RAM": "Checkpoints to cache in RAM",
+  "Classifier Free Guidance Scale - how strongly the image should conform to prompt - lower values produce more creative results": "Classifier Free Guidance Scale - 이미지가 주어진 프롬프트를 얼마나 따를지를 정해주는 수치 - 낮은 값일수록 더 창의적인 결과물이 나옴",
+  "Clip skip": "클립 건너뛰기",
+  "CodeFormer visibility": "CodeFormer visibility",
+  "CodeFormer weight (0 = maximum effect, 1 = minimum effect)": "CodeFormer weight (0 = maximum effect, 1 = minimum effect)",
+  "CodeFormer weight parameter; 0 = maximum effect; 1 = minimum effect": "CodeFormer weight parameter; 0 = maximum effect; 1 = minimum effect",
+  "Color variation": "색깔 다양성",
+  "Create a grid where images will have different parameters. Use inputs below to specify which parameters will be shared by columns and rows": "서로 다른 설정값으로 생성된 이미지의 그리드를 만듭니다. 아래의 설정으로 가로/세로에 어떤 설정값을 적용할지 선택하세요.",
+  "Create a text file next to every image with generation parameters.": "Create a text file next to every image with generation parameters.",
+  "Create embedding": "Create embedding",
+  "Create flipped copies": "Create flipped copies",
+  "Create hypernetwork": "Create hypernetwork",
+  "Crop and resize": "잘라낸 후 리사이징",
+  "Crop to fit": "Crop to fit",
+  "Custom Name (Optional)": "Custom Name (Optional)",
+  "DDIM": "DDIM",
+  "DPM adaptive": "DPM adaptive",
+  "DPM fast": "DPM fast",
+  "DPM2 Karras": "DPM2 Karras",
+  "DPM2 a Karras": "DPM2 a Karras",
+  "DPM2 a": "DPM2 a",
+  "DPM2": "DPM2",
+  "Dataset directory": "Dataset directory",
+  "Decode CFG scale": "디코딩 CFG 스케일",
+  "Decode steps": "디코딩 스텝 수",
+  "Delete": "Delete",
+  "Denoising Diffusion Implicit Models - best at inpainting": "Denoising Diffusion Implicit Models - 인페이팅에 뛰어남",
+  "Denoising strength change factor": "디노이즈 강도 변경 배수",
+  "Denoising strength": "디노이즈 강도",
+  "Denoising": "디노이징",
+  "Destination directory": "Destination directory",
+  "Determines how little respect the algorithm should have for image's content. At 0, nothing will change, and at 1 you'll get an unrelated image. With values below 1.0, processing will take less steps than the Sampling Steps slider specifies.": "알고리즘이 얼마나 원본 이미지를 반영할지를 결정하는 수치입니다. 0일 경우 아무것도 바뀌지 않고, 1일 경우 원본 이미지와 전혀 관련없는 결과물을 얻게 됩니다. 1.0 아래의 값일 경우, 설정된 샘플링 스텝 수보다 적은 스텝 수를 거치게 됩니다.",
+  "Directory for saving images using the Save button": "Directory for saving images using the Save button",
+  "Directory name pattern": "Directory name pattern",
+  "Do not add watermark to images": "Do not add watermark to images",
+  "Do not do anything special": "아무것도 하지 않기",
+  "Do not save grids consisting of one picture": "Do not save grids consisting of one picture",
+  "Do not show any images in results for web": "Do not show any images in results for web",
+  "Download localization template": "Download localization template",
+  "Draw legend": "범례 그리기",
+  "Draw mask": "마스크 직접 그리기",
+  "Drop File Here": "Drop File Here",
+  "Drop Image Here": "Drop Image Here",
+  "ESRGAN_4x": "ESRGAN_4x",
+  "Embedding": "Embedding",
+  "Emphasis: use (text) to make model pay more attention to text and [text] to make it pay less attention": "Emphasis: use (text) to make model pay more attention to text and [text] to make it pay less attention",
+  "Enable full page image viewer": "Enable full page image viewer",
+  "Enable quantization in K samplers for sharper and cleaner results. This may change existing seeds. Requires restart to apply.": "Enable quantization in K samplers for sharper and cleaner results. This may change existing seeds. Requires restart to apply.",
+  "End Page": "End Page",
+  "Enter hypernetwork layer structure": "Enter hypernetwork layer structure",
+  "Eta noise seed delta": "Eta noise seed delta",
+  "Eta": "Eta",
+  "Euler Ancestral - very creative, each can get a completely different picture depending on step count, setting steps to higher than 30-40 does not help": "Euler Ancestral - 매우 창의적, 스텝 수에 따라 완전히 다른 결과물이 나올 수 있음. 30~40보다 높은 스텝 수는 효과가 미미함",
+  "Euler a": "Euler a",
+  "Euler": "Euler",
+  "Extra": "고급",
+  "Extras": "부가기능",
+  "Face restoration": "Face restoration",
+  "Fall-off exponent (lower=higher detail)": "감쇠 지수 (낮을수록 디테일이 올라감)",
+  "File Name": "File Name",
+  "File format for grids": "File format for grids",
+  "File format for images": "File format for images",
+  "File with inputs": "설정값 파일",
+  "File": "File",
+  "Filename join string": "Filename join string",
+  "Filename word regex": "Filename word regex",
+  "Filter NSFW content": "Filter NSFW content",
+  "First Page": "First Page",
+  "Firstpass height": "초기 세로길이",
+  "Firstpass width": "초기 가로길이",
+  "Font for image grids that have text": "Font for image grids that have text",
+  "For SD upscale, how much overlap in pixels should there be between tiles. Tiles overlap so that when they are merged back into one picture, there is no clearly visible seam.": "SD 업스케일링에서 타일 간 몇 픽셀을 겹치게 할지 결정하는 설정값입니다. 타일들이 다시 한 이미지로 합쳐질 때, 눈에 띄는 이음매가 없도록 서로 겹치게 됩니다.",
+  "GFPGAN visibility": "GFPGAN visibility",
+  "Generate Info": "Generate Info",
+  "Generate forever": "반복 생성",
+  "Generate": "생성",
+  "Grid row count; use -1 for autodetect and 0 for it to be same as batch size": "Grid row count; use -1 for autodetect and 0 for it to be same as batch size",
+  "Height": "세로",
+  "Heun": "Heun",
+  "Hide samplers in user interface (requires restart)": "Hide samplers in user interface (requires restart)",
+  "Highres. fix": "고해상도 보정",
+  "History": "기록",
   "How many batches of images to create": "생성할 이미지 배치 수",
   "How many image to create in a single batch": "한 배치당 이미지 수",
-  "CFG Scale": "CFG 스케일",
-  "Classifier Free Guidance Scale - how strongly the image should conform to prompt - lower values produce more creative results": "Classifier Free Guidance Scale - 이미지가 주어진 프롬프트를 얼마나 따를지를 정해주는 수치 - 낮은 값일수록 더 창의적인 결과물이 나옴",
-  "Seed": "시드",
-  "A value that determines the output of random number generator - if you create an image with same parameters and seed as another image, you'll get the same result": "난수 생성기의 결과물을 지정하는 값 - 동일한 설정값과 동일한 시드를 적용 시, 완전히 똑같은 결과물을 얻게 됩니다.",
-  "Set seed to -1, which will cause a new random number to be used every time": "시드를 -1로 적용 - 매번 랜덤한 시드가 적용되게 됩니다.",
-  "Reuse seed from last generation, mostly useful if it was randomed": "이전 생성에서 사용된 시드를 불러옵니다. 랜덤하게 생성했을 시 도움됨",
-  "Extra": "고급",
-  "Variation seed": "바리에이션 시드",
-  "Variation strength": "바리에이션 강도",
-  "Seed of a different picture to be mixed into the generation.": "결과물에 섞일 다른 그림의 시드",
+  "How many times to improve the generated image iteratively; higher values take longer; very low values can produce bad results": "생성된 이미지를 향상할 횟수; 매우 낮은 값은 만족스럽지 못한 결과물을 출력할 수 있음",
+  "How many times to repeat processing an image and using it as input for the next iteration": "이미지를 생성 후 원본으로 몇 번 반복해서 사용할지 결정하는 값",
+  "How much to blur the mask before processing, in pixels.": "이미지 생성 전 마스크를 얼마나 블러처리할지 결정하는 값. 픽셀 단위",
   "How strong of a variation to produce. At 0, there will be no effect. At 1, you will get the complete picture with variation seed (except for ancestral samplers, where you will just get something).": "바리에이션을 얼마나 줄지 정하는 수치 - 0일 경우 아무것도 바뀌지 않고, 1일 경우 바리에이션 시드로부터 생성된 이미지를 얻게 됩니다. (Ancestral 샘플러 제외 - 이 경우에는 좀 다른 무언가를 얻게 됩니다)",
+  "Hypernet str.": "하이퍼네트워크 강도",
+  "Hypernetwork strength": "Hypernetwork strength",
+  "Hypernetwork": "하이퍼네트워크",
+  "If PNG image is larger than 4MB or any dimension is larger than 4000, downscale and save copy as JPG": "If PNG image is larger than 4MB or any dimension is larger than 4000, downscale and save copy as JPG",
+  "If this option is enabled, watermark will not be added to created images. Warning: if you do not add watermark, you may be behaving in an unethical manner.": "If this option is enabled, watermark will not be added to created images. Warning: if you do not add watermark, you may be behaving in an unethical manner.",
+  "If this values is non-zero, it will be added to seed and used to initialize RNG for noises when using samplers with Eta. You can use this to produce even more variation of images, or you can use this to match images of other software if you know what you are doing.": "If this values is non-zero, it will be added to seed and used to initialize RNG for noises when using samplers with Eta. You can use this to produce even more variation of images, or you can use this to match images of other software if you know what you are doing.",
+  "Image for img2img": "Image for img2img",
+  "Image for inpainting with mask": "Image for inpainting with mask",
+  "Image": "Image",
+  "Images filename pattern": "Images filename pattern",
+  "In loopback mode, on each loop the denoising strength is multiplied by this value. <1 means decreasing variety so your sequence will converge on a fixed picture. >1 means increasing variety so your sequence will become more and more chaotic.": "루프백 모드에서는 매 루프마다 디노이즈 강도에 이 값이 곱해집니다. 1보다 작을 경우 다양성이 낮아져 결과 이미지들이 고정된 형태로 모일 겁니다. 1보다 클 경우 다양성이 높아져 결과 이미지들이 갈수록 혼란스러워지겠죠.",
+  "Include Separate Images": "분리된 이미지 포함하기",
+  "Increase coherency by padding from the last comma within n tokens when using more than 75 tokens": "Increase coherency by padding from the last comma within n tokens when using more than 75 tokens",
+  "Initialization text": "Initialization text",
+  "Inpaint at full resolution padding, pixels": "전체 해상도로 인페인트 패딩값(픽셀 단위)",
+  "Inpaint at full resolution": "전체 해상도로 인페인트하기",
+  "Inpaint masked": "마스크만 처리",
+  "Inpaint not masked": "마스크 이외만 처리",
+  "Inpaint": "인페인트",
+  "Input directory": "인풋 이미지 경로",
+  "Interpolation Method": "Interpolation Method",
+  "Interrogate\nCLIP": "CLIP\n분석",
+  "Interrogate\nDeepBooru": "DeepBooru\n분석",
+  "Interrogate Options": "Interrogate Options",
+  "Interrogate: deepbooru score threshold": "Interrogate: deepbooru score threshold",
+  "Interrogate: deepbooru sort alphabetically": "Interrogate: deepbooru sort alphabetically",
+  "Interrogate: include ranks of model tags matches in results (Has no effect on caption-based interrogators).": "Interrogate: include ranks of model tags matches in results (Has no effect on caption-based interrogators).",
+  "Interrogate: keep models in VRAM": "Interrogate: keep models in VRAM",
+  "Interrogate: maximum description length": "Interrogate: maximum description length",
+  "Interrogate: minimum description length (excluding artists, etc..)": "Interrogate: minimum description length (excluding artists, etc..)",
+  "Interrogate: num_beams for BLIP": "Interrogate: num_beams for BLIP",
+  "Interrogate: use artists from artists.csv": "Interrogate: use artists from artists.csv",
+  "Interrupt": "중단",
+  "Just resize": "리사이징",
+  "Keep -1 for seeds": "시드값 -1로 유지",
+  "LDSR processing steps. Lower = faster": "LDSR processing steps. Lower = faster",
+  "LDSR": "LDSR",
+  "LMS Karras": "LMS Karras",
+  "LMS": "LMS",
+  "Label": "Label",
+  "Lanczos": "Lanczos",
+  "Learning rate": "Learning rate",
+  "Leave blank to save images to the default path.": "Leave blank to save images to the default path.",
+  "List of setting names, separated by commas, for settings that should go to the quick access bar at the top, rather than the usual setting tab. See modules/shared.py for setting names. Requires restarting to apply.": "List of setting names, separated by commas, for settings that should go to the quick access bar at the top, rather than the usual setting tab. See modules/shared.py for setting names. Requires restarting to apply.",
+  "Loading...": "로딩 중...",
+  "Localization (requires restart)": "Localization (requires restart)",
+  "Log directory": "Log directory",
+  "Loopback": "루프백",
+  "Loops": "루프 수",
+  "Make K-diffusion samplers produce same images in a batch as when making a single image": "Make K-diffusion samplers produce same images in a batch as when making a single image",
+  "Make Zip when Save?": "저장 시 Zip 생성하기",
+  "Make an attempt to produce a picture similar to what would have been produced with same seed at specified resolution": "동일한 시드 값으로 생성되었을 이미지를 주어진 해상도로 최대한 유사하게 재현합니다.",
+  "Mask blur": "마스크 블러",
+  "Mask mode": "Mask mode",
+  "Mask": "마스크",
+  "Masked content": "마스크된 부분",
+  "Masking mode": "Masking mode",
+  "Max prompt words for [prompt_words] pattern": "Max prompt words for [prompt_words] pattern",
+  "Max steps": "Max steps",
+  "Modules": "Modules",
+  "Move face restoration model from VRAM into RAM after processing": "Move face restoration model from VRAM into RAM after processing",
+  "Multiplier (M) - set to 0 to get model A": "Multiplier (M) - set to 0 to get model A",
+  "Name": "Name",
+  "Negative prompt (press Ctrl+Enter or Alt+Enter to generate)": "네거티브 프롬프트 입력(Ctrl+Enter나 Alt+Enter로 생성 시작)",
+  "Negative prompt": "네거티브 프롬프트",
+  "Next Page": "Next Page",
+  "None": "None",
+  "Nothing": "없음",
+  "Number of repeats for a single input image per epoch; used only for displaying epoch number": "Number of repeats for a single input image per epoch; used only for displaying epoch number",
+  "Number of vectors per token": "Number of vectors per token",
+  "Open images output directory": "이미지 저장 경로 열기",
+  "Open output directory": "Open output directory",
+  "Original negative prompt": "기존 네거티브 프롬프트",
+  "Original prompt": "기존 프롬프트",
+  "Outpainting direction": "아웃페인팅 방향",
+  "Outpainting mk2": "아웃페인팅 마크 2",
+  "Output directory for grids; if empty, defaults to two directories below": "Output directory for grids; if empty, defaults to two directories below",
+  "Output directory for images from extras tab": "Output directory for images from extras tab",
+  "Output directory for images; if empty, defaults to three directories below": "Output directory for images; if empty, defaults to three directories below",
+  "Output directory for img2img grids": "Output directory for img2img grids",
+  "Output directory for img2img images": "Output directory for img2img images",
+  "Output directory for txt2img grids": "Output directory for txt2img grids",
+  "Output directory for txt2img images": "Output directory for txt2img images",
+  "Output directory": "이미지 저장 경로",
+  "Override `Denoising strength` to 1?": "디노이즈 강도를 1로 적용할까요?",
+  "Override `Sampling Steps` to the same value as `Decode steps`?": "샘플링 스텝 수를 디코딩 스텝 수와 동일하게 적용할까요?",
+  "Override `Sampling method` to Euler?(this method is built for it)": "샘플링 방법을 Euler로 적용할까요?(이 기능은 해당 샘플러를 위해 만들어져 있습니다)",
+  "Override `prompt` to the same value as `original prompt`?(and `negative prompt`)": "프롬프트 값을 기존 프롬프트와 동일하게 적용할까요?(네거티브 프롬프트 포함)",
+  "PLMS": "PLMS",
+  "PNG Info": "PNG 정보",
+  "Page Index": "Page Index",
+  "Path to directory where to write outputs": "Path to directory where to write outputs",
+  "Path to directory with input images": "Path to directory with input images",
+  "Paths for saving": "Paths for saving",
+  "Pixels to expand": "확장할 픽셀 수",
+  "Poor man's outpainting": "가난뱅이의 아웃페인팅",
+  "Preprocess images": "Preprocess images",
+  "Preprocess": "Preprocess",
+  "Prev Page": "Prev Page",
+  "Prevent empty spots in grid (when set to autodetect)": "Prevent empty spots in grid (when set to autodetect)",
+  "Primary model (A)": "Primary model (A)",
+  "Process an image, use it as an input, repeat.": "이미지를 생성하고, 생성한 이미지를 다시 원본으로 사용하는 과정을 반복합니다.",
+  "Process images in a directory on the same machine where the server is running.": "WebUI 서버가 돌아가고 있는 디바이스에 존재하는 디렉토리의 이미지들을 처리합니다.",
+  "Produce an image that can be tiled.": "타일링 가능한 이미지를 생성합니다.",
+  "Prompt (press Ctrl+Enter or Alt+Enter to generate)": "프롬프트 입력(Ctrl+Enter나 Alt+Enter로 생성 시작)",
+  "Prompt S/R": "프롬프트 스타일 변경",
+  "Prompt matrix": "프롬프트 매트릭스",
+  "Prompt order": "프롬프트 순서",
+  "Prompt template file": "Prompt template file",
+  "Prompt": "프롬프트",
+  "Prompts from file or textbox": "파일이나 텍스트박스로부터 프롬프트 불러오기",
+  "Prompts": "프롬프트",
+  "Put variable parts at start of prompt": "변경되는 프롬프트를 앞에 위치시키기",
+  "Quality for saved jpeg images": "Quality for saved jpeg images",
+  "Quicksettings list": "Quicksettings list",
+  "R-ESRGAN 4x+ Anime6B": "R-ESRGAN 4x+ Anime6B",
+  "Randomness": "랜덤성",
+  "Read generation parameters from prompt or last generation if prompt is empty into user interface.": "클립보드에 복사된 정보로부터 설정값 읽어오기/프롬프트창이 비어있을경우 제일 최근 설정값 불러오기",
+  "Read parameters (prompt, etc...) from txt2img tab when making previews": "Read parameters (prompt, etc...) from txt2img tab when making previews",
+  "Recommended settings: Sampling Steps: 80-100, Sampler: Euler a, Denoising strength: 0.8": "추천 설정값 - 샘플링 스텝 수 : 80-100 , 샘플러 : Euler a, 디노이즈 강도 : 0.8",
+  "Reload custom script bodies (No ui updates, No restart)": "Reload custom script bodies (No ui updates, No restart)",
+  "Renew Page": "Renew Page",
+  "Request browser notifications": "Request browser notifications",
+  "Resize and fill": "리사이징 후 채우기",
+  "Resize image to target resolution. Unless height and width match, you will get incorrect aspect ratio.": "설정된 해상도로 이미지 리사이징을 진행합니다. 원본과 가로/세로 길이가 일치하지 않을 경우, 부정확한 화면비의 이미지를 얻게 됩니다.",
+  "Resize mode": "Resize mode",
   "Resize seed from height": "시드 리사이징 가로길이",
   "Resize seed from width": "시드 리사이징 세로길이",
-  "Make an attempt to produce a picture similar to what would have been produced with same seed at specified resolution": "동일한 시드 값으로 생성되었을 이미지를 주어진 해상도로 최대한 유사하게 재현합니다.",
-  "Script": "스크립트",
+  "Resize the image so that entirety of image is inside target resolution. Fill empty space with image's colors.": "이미지 전체가 설정된 해상도 내부에 들어가게 리사이징을 진행합니다. 빈 공간은 이미지의 색상으로 채웁니다.",
+  "Resize the image so that entirety of target resolution is filled with the image. Crop parts that stick out.": "설정된 해상도 전체가 이미지로 가득차게 리사이징을 진행합니다. 튀어나오는 부분은 잘라냅니다.",
+  "Resize": "Resize",
+  "Restart Gradio and Refresh components (Custom Scripts, ui.py, js and css only)": "Restart Gradio and Refresh components (Custom Scripts, ui.py, js and css only)",
+  "Restore faces": "얼굴 보정",
+  "Restore low quality faces using GFPGAN neural network": "GFPGAN 신경망을 이용해 저품질의 얼굴을 보정합니다.",
+  "Result = A * (1 - M) + B * M": "Result = A * (1 - M) + B * M",
+  "Result = A + (B - C) * M": "Result = A + (B - C) * M",
+  "Reuse seed from last generation, mostly useful if it was randomed": "이전 생성에서 사용된 시드를 불러옵니다. 랜덤하게 생성했을 시 도움됨",
+  "Run": "Run",
+  "SD upscale": "SD 업스케일링",
+  "Sampler parameters": "Sampler parameters",
+  "Sampler": "샘플러",
+  "Sampling Steps": "샘플링 스텝 수",
+  "Sampling method": "샘플링 방법",
+  "Save a copy of embedding to log directory every N steps, 0 to disable": "Save a copy of embedding to log directory every N steps, 0 to disable",
+  "Save a copy of image before applying color correction to img2img results": "Save a copy of image before applying color correction to img2img results",
+  "Save a copy of image before doing face restoration.": "Save a copy of image before doing face restoration.",
+  "Save an csv containing the loss to log directory every N steps, 0 to disable": "Save an csv containing the loss to log directory every N steps, 0 to disable",
+  "Save an image to log directory every N steps, 0 to disable": "Save an image to log directory every N steps, 0 to disable",
+  "Save as float16": "Save as float16",
+  "Save grids to a subdirectory": "Save grids to a subdirectory",
+  "Save images to a subdirectory": "Save images to a subdirectory",
+  "Save images with embedding in PNG chunks": "Save images with embedding in PNG chunks",
+  "Save style": "스타일 저장",
+  "Save text information about generation parameters as chunks to png files": "Save text information about generation parameters as chunks to png files",
   "Save": "저장",
-  "Write image to a directory (default - log/images) and generation parameters into csv file.": "이미지를 경로에 저장하고, 설정값들을 csv 파일로 저장합니다. (기본 경로 - log/images)",
+  "Saving images/grids": "Saving images/grids",
+  "Saving to a directory": "Saving to a directory",
+  "Scale by": "Scale by",
+  "Scale to": "Scale to",
+  "Script": "스크립트",
+  "ScuNET GAN": "ScuNET GAN",
+  "ScuNET PSNR": "ScuNET PSNR",
+  "Secondary model (B)": "Secondary model (B)",
+  "See": "See",
+  "Seed of a different picture to be mixed into the generation.": "결과물에 섞일 다른 그림의 시드",
+  "Seed": "시드",
+  "Send to extras": "부가기능으로 전송",
   "Send to img2img": "이미지→이미지로 전송",
   "Send to inpaint": "인페인트로 전송",
-  "Send to extras": "부가기능으로 전송",
-  "Open images output directory": "이미지 저장 경로 열기",
-  "Make Zip when Save?": "저장 시 Zip 생성하기",
-  "Prompt matrix": "프롬프트 매트릭스",
+  "Send to txt2img": "텍스트→이미지로 전송",
   "Separate prompts into parts using vertical pipe character (|) and the script will create a picture for every combination of them (except for the first part, which will be present in all combinations)": "(|)를 이용해 프롬프트를 분리할 시 첫 프롬프트를 제외하고 모든 프롬프트의 조합마다 이미지를 생성합니다. 첫 프롬프트는 모든 조합에 포함되게 됩니다.",
-  "Put variable parts at start of prompt": "변경되는 프롬프트를 앞에 위치시키기",
-  "Prompts from file or textbox": "파일이나 텍스트박스로부터 프롬프트 불러오기",
-  "Show Textbox": "텍스트박스 보이기",
-  "File with inputs": "설정값 파일",
-  "Prompts": "프롬프트",
-  "X/Y plot": "X/Y 플롯",
-  "Create a grid where images will have different parameters. Use inputs below to specify which parameters will be shared by columns and rows": "서로 다른 설정값으로 생성된 이미지의 그리드를 만듭니다. 아래의 설정으로 가로/세로에 어떤 설정값을 적용할지 선택하세요.",
-  "X type": "X축",
-  "Y type": "Y축",
-  "X values": "X 설정값",
-  "Y values": "Y 설정값",
   "Separate values for X axis using commas.": "쉼표로 X축에 적용할 값 분리",
   "Separate values for Y axis using commas.": "쉼표로 Y축에 적용할 값 분리",
-  "Draw legend": "범례 그리기",
-  "Include Separate Images": "분리된 이미지 포함하기",
-  "Keep -1 for seeds": "시드값 -1로 유지",
+  "Set seed to -1, which will cause a new random number to be used every time": "시드를 -1로 적용 - 매번 랜덤한 시드가 적용되게 됩니다.",
+  "Settings": "설정",
+  "Show Textbox": "텍스트박스 보이기",
+  "Show generation progress in window title.": "Show generation progress in window title.",
+  "Show grid in results for web": "Show grid in results for web",
+  "Show image creation progress every N sampling steps. Set 0 to disable.": "Show image creation progress every N sampling steps. Set 0 to disable.",
+  "Show images zoomed in by default in full page image viewer": "Show images zoomed in by default in full page image viewer",
+  "Show progressbar": "Show progressbar",
+  "Show result images": "Show result images",
+  "Sigma Churn": "시그마 섞기",
+  "Sigma adjustment for finding noise for image": "이미지 노이즈를 찾기 위해 시그마 조정",
+  "Sigma max": "시그마 최댓값",
+  "Sigma min": "시그마 최솟값",
+  "Sigma noise": "시그마 노이즈",
+  "Single Image": "Single Image",
+  "Skip": "건너뛰기",
+  "Source directory": "Source directory",
+  "Source": "Source",
+  "Split oversized images into two": "Split oversized images into two",
+  "Stable Diffusion checkpoint": "Stable Diffusion 체크포인트",
+  "Stable Diffusion": "Stable Diffusion",
+  "Steps": "스텝 수",
+  "Stop At last layers of CLIP model": "CLIP 모델의 n번째 레이어에서 멈추기",
+  "Stop processing current image and continue processing.": "현재 진행중인 이미지 생성을 중단하고 작업을 계속하기",
+  "Stop processing images and return any results accumulated so far.": "이미지 생성을 중단하고 지금까지 진행된 결과물 출력",
+  "Style 1": "스타일 1",
+  "Style 2": "스타일 2",
+  "Style to apply; styles have components for both positive and negative prompts and apply to both": "Style to apply; styles have components for both positive and negative prompts and apply to both",
+  "SwinIR 4x": "SwinIR 4x",
+  "System": "System",
+  "Tertiary model (C)": "Tertiary model (C)",
+  "Textbox": "Textbox",
+  "This regular expression will be used extract words from filename, and they will be joined using the option below into label text used for training. Leave empty to keep filename text as it is.": "This regular expression will be used extract words from filename, and they will be joined using the option below into label text used for training. Leave empty to keep filename text as it is.",
+  "This string will be used to join split words into a single line if the option above is enabled.": "This string will be used to join split words into a single line if the option above is enabled.",
+  "Tile overlap, in pixels for ESRGAN upscalers. Low values = visible seam.": "Tile overlap, in pixels for ESRGAN upscalers. Low values = visible seam.",
+  "Tile overlap, in pixels for SwinIR. Low values = visible seam.": "Tile overlap, in pixels for SwinIR. Low values = visible seam.",
+  "Tile overlap": "타일 겹침",
+  "Tile size for ESRGAN upscalers. 0 = no tiling.": "Tile size for ESRGAN upscalers. 0 = no tiling.",
+  "Tile size for all SwinIR.": "Tile size for all SwinIR.",
+  "Tiling": "타일링",
+  "Train Embedding": "Train Embedding",
+  "Train Hypernetwork": "Train Hypernetwork",
+  "Train an embedding; must specify a directory with a set of 1:1 ratio images": "Train an embedding; must specify a directory with a set of 1:1 ratio images",
+  "Train": "훈련",
+  "Training": "Training",
+  "Unload VAE and CLIP from VRAM when training": "Unload VAE and CLIP from VRAM when training",
+  "Upload mask": "마스크 업로드하기",
+  "Upscale latent space image when doing hires. fix": "Upscale latent space image when doing hires. fix",
+  "Upscale masked region to target resolution, do inpainting, downscale back and paste into original image": "마스크된 부분을 설정된 해상도로 업스케일하고, 인페인팅을 진행한 뒤, 다시 다운스케일 후 원본 이미지에 붙여넣습니다.",
+  "Upscaler 2 visibility": "Upscaler 2 visibility",
+  "Upscaler for img2img": "Upscaler for img2img",
+  "Upscaler": "업스케일러",
+  "Upscaling": "Upscaling",
+  "Use BLIP for caption": "Use BLIP for caption",
+  "Use a two step process to partially create an image at smaller resolution, upscale, and then improve details in it without changing composition": "저해상도 이미지를 1차적으로 생성 후 업스케일을 진행하여, 이미지의 전체적인 구성을 바꾸지 않고 세부적인 디테일을 향상시킵니다.",
+  "Use an empty output directory to save pictures normally instead of writing to the output directory.": "저장 경로를 비워두면 기본 저장 폴더에 이미지들이 저장됩니다.",
+  "Use deepbooru for caption": "Use deepbooru for caption",
+  "Use following tags to define how filenames for images are chosen: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; leave empty for default.": "Use following tags to define how filenames for images are chosen: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; leave empty for default.",
+  "Use following tags to define how subdirectories for images and grids are chosen: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; leave empty for default.": "Use following tags to define how subdirectories for images and grids are chosen: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; leave empty for default.",
+  "Use old emphasis implementation. Can be useful to reproduce old seeds.": "Use old emphasis implementation. Can be useful to reproduce old seeds.",
+  "Use original name for output filename during batch process in extras tab": "Use original name for output filename during batch process in extras tab",
+  "User interface": "User interface",
+  "VRAM usage polls per second during generation. Set to 0 to disable.": "VRAM usage polls per second during generation. Set to 0 to disable.",
   "Var. seed": "바리에이션 시드",
   "Var. strength": "바리에이션 강도",
-  "Steps": "스텝 수",
-  "Prompt S/R": "프롬프트 스타일 변경",
-  "Prompt order": "프롬프트 순서",
-  "Sampler": "샘플러",
-  "Checkpoint name": "체크포인트 이름",
-  "Hypernet str.": "하이퍼네트워크 강도",
-  "Sigma Churn": "시그마 섞기",
-  "Sigma min": "시그마 최솟값",
-  "Sigma max": "시그마 최댓값",
-  "Sigma noise": "시그마 노이즈",
-  "Clip skip": "클립 건너뛰기",
-  "Denoising": "디노이징",
-  "Nothing": "없음",
-  "Apply settings": "설정 적용하기",
-  "Always save all generated images": "생성된 이미지 항상 저장하기"
+  "Variation seed": "바리에이션 시드",
+  "Variation strength": "바리에이션 강도",
+  "Weighted sum": "Weighted sum",
+  "What to put inside the masked area before processing it with Stable Diffusion.": "Stable Diffusion으로 이미지를 생성하기 전 마스크된 부분에 무엇을 채울지 결정하는 설정값",
+  "When reading generation parameters from text into UI (from PNG info or pasted text), do not change the selected model/checkpoint.": "When reading generation parameters from text into UI (from PNG info or pasted text), do not change the selected model/checkpoint.",
+  "When using \"Save\" button, save images to a subdirectory": "When using \"Save\" button, save images to a subdirectory",
+  "When using 'Save' button, only save a single selected image": "When using 'Save' button, only save a single selected image",
+  "Which algorithm to use to produce the image": "이미지를 생성할 때 사용할 알고리즘",
+  "Width": "가로",
+  "Will upscale the image to twice the dimensions; use width and height sliders to set tile size": "이미지를 설정된 사이즈의 2배로 업스케일합니다. 상단의 가로와 세로 슬라이더를 이용해 타일 사이즈를 지정하세요.",
+  "With img2img, do exactly the amount of steps the slider specifies (normally you'd do less with less denoising).": "With img2img, do exactly the amount of steps the slider specifies (normally you'd do less with less denoising).",
+  "Write image to a directory (default - log/images) and generation parameters into csv file.": "이미지를 경로에 저장하고, 설정값들을 csv 파일로 저장합니다. (기본 경로 - log/images)",
+  "X type": "X축",
+  "X values": "X 설정값",
+  "X/Y plot": "X/Y 플롯",
+  "Y type": "Y축",
+  "Y values": "Y 설정값",
+  "api": "",
+  "built with gradio": "gradio로 제작되었습니다",
+  "checkpoint": "checkpoint",
+  "directory.": "directory.",
+  "down": "아래쪽",
+  "escape (\\) brackets in deepbooru (so they are used as literal brackets and not for emphasis)": "escape (\\) brackets in deepbooru (so they are used as literal brackets and not for emphasis)",
+  "eta (noise multiplier) for DDIM": "eta (noise multiplier) for DDIM",
+  "eta (noise multiplier) for ancestral samplers": "eta (noise multiplier) for ancestral samplers",
+  "extras history": "extras history",
+  "fill it with colors of the image": "이미지의 색상으로 채우기",
+  "fill it with latent space noise": "잠재 공간 노이즈로 채우기",
+  "fill it with latent space zeroes": "잠재 공간의 0값으로 채우기",
+  "fill": "채우기",
+  "for detailed explanation.": "for detailed explanation.",
+  "hide": "api 숨기기",
+  "how fast should the training go. Low values will take longer to train, high values may fail to converge (not generate accurate results) and/or may break the embedding (This has happened if you see Loss: nan in the training info textbox. If this happens, you need to manually restore your embedding from an older not-broken backup).\n\nYou can set a single numeric value, or multiple learning rates using the syntax:\n\n   rate_1:max_steps_1, rate_2:max_steps_2, ...\n\nEG:   0.005:100, 1e-3:1000, 1e-5\n\nWill train with rate of 0.005 for first 100 steps, then 1e-3 until 1000 steps, then 1e-5 for all remaining steps.": "how fast should the training go. Low values will take longer to train, high values may fail to converge (not generate accurate results) and/or may break the embedding (This has happened if you see Loss: nan in the training info textbox. If this happens, you need to manually restore your embedding from an older not-broken backup).\n\nYou can set a single numeric value, or multiple learning rates using the syntax:\n\n   rate_1:max_steps_1, rate_2:max_steps_2, ...\n\nEG:   0.005:100, 1e-3:1000, 1e-5\n\nWill train with rate of 0.005 for first 100 steps, then 1e-3 until 1000 steps, then 1e-5 for all remaining steps.",
+  "img2img DDIM discretize": "img2img DDIM discretize",
+  "img2img alternative test": "이미지→이미지 대체버전 테스트",
+  "img2img history": "img2img history",
+  "img2img": "이미지→이미지",
+  "keep whatever was there originally": "이미지 원본 유지",
+  "latent noise": "잠재 노이즈",
+  "latent nothing": "잠재 공백",
+  "left": "왼쪽",
+  "number of images to delete consecutively next": "number of images to delete consecutively next",
+  "or": "or",
+  "original": "원본 유지",
+  "quad": "quad",
+  "right": "오른쪽",
+  "set_index": "set_index",
+  "should be 2 or lower.": "이 2 이하여야 합니다.",
+  "sigma churn": "sigma churn",
+  "sigma noise": "sigma noise",
+  "sigma tmin": "sigma tmin",
+  "txt2img history": "txt2img history",
+  "txt2img": "텍스트→이미지",
+  "uniform": "uniform",
+  "up": "위쪽",
+  "use spaces for tags in deepbooru": "use spaces for tags in deepbooru",
+  "view": "api 보이기",
+  "wiki": "wiki"
 }
\ No newline at end of file

From 1be5933ba21a3badec42b7b2753d626f849b609d Mon Sep 17 00:00:00 2001
From: captin411 <captindave@gmail.com>
Date: Sun, 23 Oct 2022 04:11:07 -0700
Subject: [PATCH 12/73] auto cropping now works with non square crops

---
 modules/textual_inversion/autocrop.py | 509 ++++++++++++++------------
 1 file changed, 269 insertions(+), 240 deletions(-)

diff --git a/modules/textual_inversion/autocrop.py b/modules/textual_inversion/autocrop.py
index 5a551c25..b2f9241c 100644
--- a/modules/textual_inversion/autocrop.py
+++ b/modules/textual_inversion/autocrop.py
@@ -1,241 +1,270 @@
-import cv2
-from collections import defaultdict
-from math import log, sqrt
-import numpy as np
-from PIL import Image, ImageDraw
-
-GREEN = "#0F0"
-BLUE = "#00F"
-RED = "#F00"
-
-
-def crop_image(im, settings):
-  """ Intelligently crop an image to the subject matter """
-  if im.height > im.width:
-      im = im.resize((settings.crop_width, settings.crop_height * im.height // im.width))
-  elif im.width > im.height:
-      im = im.resize((settings.crop_width * im.width // im.height, settings.crop_height))
-  else:
-      im = im.resize((settings.crop_width, settings.crop_height))
-
-  if im.height == im.width:
-    return im
-
-  focus = focal_point(im, settings)
-
-  # take the focal point and turn it into crop coordinates that try to center over the focal
-  # point but then get adjusted back into the frame
-  y_half = int(settings.crop_height / 2)
-  x_half = int(settings.crop_width / 2)
-
-  x1 = focus.x - x_half
-  if x1 < 0:
-      x1 = 0
-  elif x1 + settings.crop_width > im.width:
-      x1 = im.width - settings.crop_width
-
-  y1 = focus.y - y_half
-  if y1 < 0:
-      y1 = 0
-  elif y1 + settings.crop_height > im.height:
-      y1 = im.height - settings.crop_height
-
-  x2 = x1 + settings.crop_width
-  y2 = y1 + settings.crop_height
-
-  crop = [x1, y1, x2, y2]
-
-  if settings.annotate_image:
-    d = ImageDraw.Draw(im)
-    rect = list(crop)
-    rect[2] -= 1
-    rect[3] -= 1
-    d.rectangle(rect, outline=GREEN)
-    if settings.destop_view_image:
-      im.show()
-
-  return im.crop(tuple(crop))
-
-def focal_point(im, settings):
-    corner_points = image_corner_points(im, settings)
-    entropy_points = image_entropy_points(im, settings)
-    face_points = image_face_points(im, settings)
-
-    total_points = len(corner_points) + len(entropy_points) + len(face_points)
-
-    corner_weight = settings.corner_points_weight
-    entropy_weight = settings.entropy_points_weight
-    face_weight = settings.face_points_weight
-
-    weight_pref_total = corner_weight + entropy_weight + face_weight
-
-    # weight things
-    pois = []
-    if weight_pref_total == 0 or total_points == 0: 
-      return pois
-
-    pois.extend(
-      [ PointOfInterest( p.x, p.y, weight=p.weight * ( (corner_weight/weight_pref_total) / (len(corner_points)/total_points) )) for p in corner_points ]
-    )
-    pois.extend(
-      [ PointOfInterest( p.x, p.y, weight=p.weight * ( (entropy_weight/weight_pref_total) / (len(entropy_points)/total_points) )) for p in entropy_points ]
-    )
-    pois.extend(
-      [ PointOfInterest( p.x, p.y, weight=p.weight * ( (face_weight/weight_pref_total) / (len(face_points)/total_points) )) for p in face_points ]
-    )
-
-    average_point = poi_average(pois, settings)
-
-    if settings.annotate_image:
-      d = ImageDraw.Draw(im)
-      for f in face_points:
-        d.rectangle(f.bounding(f.size), outline=RED)
-      for f in entropy_points:
-        d.rectangle(f.bounding(30), outline=BLUE)
-      for poi in pois:
-        w = max(4, 4 * 0.5 * sqrt(poi.weight))
-        d.ellipse(poi.bounding(w), fill=BLUE)
-      d.ellipse(average_point.bounding(25), outline=GREEN)
-      
-    return average_point
-
-
-def image_face_points(im, settings):
-    np_im = np.array(im)
-    gray = cv2.cvtColor(np_im, cv2.COLOR_BGR2GRAY)
-
-    tries = [
-      [ f'{cv2.data.haarcascades}haarcascade_eye.xml', 0.01 ],
-      [ f'{cv2.data.haarcascades}haarcascade_frontalface_default.xml', 0.05 ],
-      [ f'{cv2.data.haarcascades}haarcascade_profileface.xml', 0.05 ],
-      [ f'{cv2.data.haarcascades}haarcascade_frontalface_alt.xml', 0.05 ],
-      [ f'{cv2.data.haarcascades}haarcascade_frontalface_alt2.xml', 0.05 ],
-      [ f'{cv2.data.haarcascades}haarcascade_frontalface_alt_tree.xml', 0.05 ],
-      [ f'{cv2.data.haarcascades}haarcascade_eye_tree_eyeglasses.xml', 0.05 ],
-      [ f'{cv2.data.haarcascades}haarcascade_upperbody.xml', 0.05 ]
-    ]
-
-    for t in tries:
-      # print(t[0])
-      classifier = cv2.CascadeClassifier(t[0])
-      minsize = int(min(im.width, im.height) * t[1]) # at least N percent of the smallest side
-      try:
-        faces = classifier.detectMultiScale(gray, scaleFactor=1.1,
-          minNeighbors=7, minSize=(minsize, minsize), flags=cv2.CASCADE_SCALE_IMAGE)
-      except:
-        continue
-
-      if len(faces) > 0:
-        rects = [[f[0], f[1], f[0] + f[2], f[1] + f[3]] for f in faces]
-        return [PointOfInterest((r[0] +r[2]) // 2, (r[1] + r[3]) // 2, size=abs(r[0]-r[2])) for r in rects]
-    return []
-
-
-def image_corner_points(im, settings):
-    grayscale = im.convert("L")
-
-    # naive attempt at preventing focal points from collecting at watermarks near the bottom
-    gd = ImageDraw.Draw(grayscale)
-    gd.rectangle([0, im.height*.9, im.width, im.height], fill="#999")
-
-    np_im = np.array(grayscale)
-
-    points = cv2.goodFeaturesToTrack(
-        np_im,
-        maxCorners=100,
-        qualityLevel=0.04,
-        minDistance=min(grayscale.width, grayscale.height)*0.07,
-        useHarrisDetector=False,
-    )
-
-    if points is None:
-        return []
-
-    focal_points = []
-    for point in points:
-      x, y = point.ravel()
-      focal_points.append(PointOfInterest(x, y, size=4))
-
-    return focal_points
-
-
-def image_entropy_points(im, settings):
-    landscape = im.height < im.width
-    portrait = im.height > im.width
-    if landscape:
-      move_idx = [0, 2]
-      move_max = im.size[0]
-    elif portrait:
-      move_idx = [1, 3]
-      move_max = im.size[1]
-    else:
-      return []
-
-    e_max = 0
-    crop_current = [0, 0, settings.crop_width, settings.crop_height]
-    crop_best = crop_current
-    while crop_current[move_idx[1]] < move_max:
-        crop = im.crop(tuple(crop_current))
-        e = image_entropy(crop)
-
-        if (e > e_max):
-          e_max = e
-          crop_best = list(crop_current)
-
-        crop_current[move_idx[0]] += 4
-        crop_current[move_idx[1]] += 4
-
-    x_mid = int(crop_best[0] + settings.crop_width/2)
-    y_mid = int(crop_best[1] + settings.crop_height/2)
-
-    return [PointOfInterest(x_mid, y_mid, size=25)]
-
-
-def image_entropy(im):
-    # greyscale image entropy
-    # band = np.asarray(im.convert("L"))
-    band = np.asarray(im.convert("1"), dtype=np.uint8)
-    hist, _ = np.histogram(band, bins=range(0, 256))
-    hist = hist[hist > 0]
-    return -np.log2(hist / hist.sum()).sum()
-
-
-def poi_average(pois, settings):
-    weight = 0.0
-    x = 0.0
-    y = 0.0
-    for poi in pois:
-        weight += poi.weight
-        x += poi.x * poi.weight
-        y += poi.y * poi.weight
-    avg_x = round(x / weight)
-    avg_y = round(y / weight)
-
-    return PointOfInterest(avg_x, avg_y)
-
-
-class PointOfInterest:
-  def __init__(self, x, y, weight=1.0, size=10):
-    self.x = x
-    self.y = y
-    self.weight = weight
-    self.size = size
-
-  def bounding(self, size):
-    return [
-      self.x - size//2,
-      self.y - size//2,
-      self.x + size//2,
-      self.y + size//2
-    ]
-
-
-class Settings:
-  def __init__(self, crop_width=512, crop_height=512, corner_points_weight=0.5, entropy_points_weight=0.5, face_points_weight=0.5, annotate_image=False):
-    self.crop_width = crop_width
-    self.crop_height = crop_height
-    self.corner_points_weight = corner_points_weight
-    self.entropy_points_weight = entropy_points_weight
-    self.face_points_weight = entropy_points_weight
-    self.annotate_image = annotate_image
+import cv2
+from collections import defaultdict
+from math import log, sqrt
+import numpy as np
+from PIL import Image, ImageDraw
+
+GREEN = "#0F0"
+BLUE = "#00F"
+RED = "#F00"
+
+
+def crop_image(im, settings):
+  """ Intelligently crop an image to the subject matter """
+
+  scale_by = 1
+  if is_landscape(im.width, im.height):
+    scale_by = settings.crop_height / im.height
+  elif is_portrait(im.width, im.height):
+    scale_by = settings.crop_width / im.width
+  elif is_square(im.width, im.height):
+    if is_square(settings.crop_width, settings.crop_height):
+      scale_by = settings.crop_width / im.width
+    elif is_landscape(settings.crop_width, settings.crop_height):
+      scale_by = settings.crop_width / im.width
+    elif is_portrait(settings.crop_width, settings.crop_height):
+      scale_by = settings.crop_height / im.height
+
+  im = im.resize((int(im.width * scale_by), int(im.height * scale_by)))
+
+  if im.width == settings.crop_width and im.height == settings.crop_height:
+    if settings.annotate_image:
+      d = ImageDraw.Draw(im)
+      rect = [0, 0, im.width, im.height]
+      rect[2] -= 1
+      rect[3] -= 1
+      d.rectangle(rect, outline=GREEN)
+      if settings.destop_view_image:
+        im.show()
+    return im
+
+  focus = focal_point(im, settings)
+
+  # take the focal point and turn it into crop coordinates that try to center over the focal
+  # point but then get adjusted back into the frame
+  y_half = int(settings.crop_height / 2)
+  x_half = int(settings.crop_width / 2)
+
+  x1 = focus.x - x_half
+  if x1 < 0:
+      x1 = 0
+  elif x1 + settings.crop_width > im.width:
+      x1 = im.width - settings.crop_width
+
+  y1 = focus.y - y_half
+  if y1 < 0:
+      y1 = 0
+  elif y1 + settings.crop_height > im.height:
+      y1 = im.height - settings.crop_height
+
+  x2 = x1 + settings.crop_width
+  y2 = y1 + settings.crop_height
+
+  crop = [x1, y1, x2, y2]
+
+  if settings.annotate_image:
+    d = ImageDraw.Draw(im)
+    rect = list(crop)
+    rect[2] -= 1
+    rect[3] -= 1
+    d.rectangle(rect, outline=GREEN)
+    if settings.destop_view_image:
+      im.show()
+
+  return im.crop(tuple(crop))
+
+def focal_point(im, settings):
+    corner_points = image_corner_points(im, settings)
+    entropy_points = image_entropy_points(im, settings)
+    face_points = image_face_points(im, settings)
+
+    total_points = len(corner_points) + len(entropy_points) + len(face_points)
+
+    corner_weight = settings.corner_points_weight
+    entropy_weight = settings.entropy_points_weight
+    face_weight = settings.face_points_weight
+
+    weight_pref_total = corner_weight + entropy_weight + face_weight
+
+    # weight things
+    pois = []
+    if weight_pref_total == 0 or total_points == 0: 
+      return pois
+
+    pois.extend(
+      [ PointOfInterest( p.x, p.y, weight=p.weight * ( (corner_weight/weight_pref_total) / (len(corner_points)/total_points) )) for p in corner_points ]
+    )
+    pois.extend(
+      [ PointOfInterest( p.x, p.y, weight=p.weight * ( (entropy_weight/weight_pref_total) / (len(entropy_points)/total_points) )) for p in entropy_points ]
+    )
+    pois.extend(
+      [ PointOfInterest( p.x, p.y, weight=p.weight * ( (face_weight/weight_pref_total) / (len(face_points)/total_points) )) for p in face_points ]
+    )
+
+    average_point = poi_average(pois, settings)
+
+    if settings.annotate_image:
+      d = ImageDraw.Draw(im)
+      for f in face_points:
+        d.rectangle(f.bounding(f.size), outline=RED)
+      for f in entropy_points:
+        d.rectangle(f.bounding(30), outline=BLUE)
+      for poi in pois:
+        w = max(4, 4 * 0.5 * sqrt(poi.weight))
+        d.ellipse(poi.bounding(w), fill=BLUE)
+      d.ellipse(average_point.bounding(25), outline=GREEN)
+      
+    return average_point
+
+
+def image_face_points(im, settings):
+    np_im = np.array(im)
+    gray = cv2.cvtColor(np_im, cv2.COLOR_BGR2GRAY)
+
+    tries = [
+      [ f'{cv2.data.haarcascades}haarcascade_eye.xml', 0.01 ],
+      [ f'{cv2.data.haarcascades}haarcascade_frontalface_default.xml', 0.05 ],
+      [ f'{cv2.data.haarcascades}haarcascade_profileface.xml', 0.05 ],
+      [ f'{cv2.data.haarcascades}haarcascade_frontalface_alt.xml', 0.05 ],
+      [ f'{cv2.data.haarcascades}haarcascade_frontalface_alt2.xml', 0.05 ],
+      [ f'{cv2.data.haarcascades}haarcascade_frontalface_alt_tree.xml', 0.05 ],
+      [ f'{cv2.data.haarcascades}haarcascade_eye_tree_eyeglasses.xml', 0.05 ],
+      [ f'{cv2.data.haarcascades}haarcascade_upperbody.xml', 0.05 ]
+    ]
+
+    for t in tries:
+      # print(t[0])
+      classifier = cv2.CascadeClassifier(t[0])
+      minsize = int(min(im.width, im.height) * t[1]) # at least N percent of the smallest side
+      try:
+        faces = classifier.detectMultiScale(gray, scaleFactor=1.1,
+          minNeighbors=7, minSize=(minsize, minsize), flags=cv2.CASCADE_SCALE_IMAGE)
+      except:
+        continue
+
+      if len(faces) > 0:
+        rects = [[f[0], f[1], f[0] + f[2], f[1] + f[3]] for f in faces]
+        return [PointOfInterest((r[0] +r[2]) // 2, (r[1] + r[3]) // 2, size=abs(r[0]-r[2])) for r in rects]
+    return []
+
+
+def image_corner_points(im, settings):
+    grayscale = im.convert("L")
+
+    # naive attempt at preventing focal points from collecting at watermarks near the bottom
+    gd = ImageDraw.Draw(grayscale)
+    gd.rectangle([0, im.height*.9, im.width, im.height], fill="#999")
+
+    np_im = np.array(grayscale)
+
+    points = cv2.goodFeaturesToTrack(
+        np_im,
+        maxCorners=100,
+        qualityLevel=0.04,
+        minDistance=min(grayscale.width, grayscale.height)*0.07,
+        useHarrisDetector=False,
+    )
+
+    if points is None:
+        return []
+
+    focal_points = []
+    for point in points:
+      x, y = point.ravel()
+      focal_points.append(PointOfInterest(x, y, size=4))
+
+    return focal_points
+
+
+def image_entropy_points(im, settings):
+    landscape = im.height < im.width
+    portrait = im.height > im.width
+    if landscape:
+      move_idx = [0, 2]
+      move_max = im.size[0]
+    elif portrait:
+      move_idx = [1, 3]
+      move_max = im.size[1]
+    else:
+      return []
+
+    e_max = 0
+    crop_current = [0, 0, settings.crop_width, settings.crop_height]
+    crop_best = crop_current
+    while crop_current[move_idx[1]] < move_max:
+        crop = im.crop(tuple(crop_current))
+        e = image_entropy(crop)
+
+        if (e > e_max):
+          e_max = e
+          crop_best = list(crop_current)
+
+        crop_current[move_idx[0]] += 4
+        crop_current[move_idx[1]] += 4
+
+    x_mid = int(crop_best[0] + settings.crop_width/2)
+    y_mid = int(crop_best[1] + settings.crop_height/2)
+
+    return [PointOfInterest(x_mid, y_mid, size=25)]
+
+
+def image_entropy(im):
+    # greyscale image entropy
+    # band = np.asarray(im.convert("L"))
+    band = np.asarray(im.convert("1"), dtype=np.uint8)
+    hist, _ = np.histogram(band, bins=range(0, 256))
+    hist = hist[hist > 0]
+    return -np.log2(hist / hist.sum()).sum()
+
+
+def poi_average(pois, settings):
+    weight = 0.0
+    x = 0.0
+    y = 0.0
+    for poi in pois:
+        weight += poi.weight
+        x += poi.x * poi.weight
+        y += poi.y * poi.weight
+    avg_x = round(x / weight)
+    avg_y = round(y / weight)
+
+    return PointOfInterest(avg_x, avg_y)
+
+
+def is_landscape(w, h):
+  return w > h
+
+
+def is_portrait(w, h):
+  return h > w
+
+
+def is_square(w, h):
+  return w == h
+
+
+class PointOfInterest:
+  def __init__(self, x, y, weight=1.0, size=10):
+    self.x = x
+    self.y = y
+    self.weight = weight
+    self.size = size
+
+  def bounding(self, size):
+    return [
+      self.x - size//2,
+      self.y - size//2,
+      self.x + size//2,
+      self.y + size//2
+    ]
+
+
+class Settings:
+  def __init__(self, crop_width=512, crop_height=512, corner_points_weight=0.5, entropy_points_weight=0.5, face_points_weight=0.5, annotate_image=False):
+    self.crop_width = crop_width
+    self.crop_height = crop_height
+    self.corner_points_weight = corner_points_weight
+    self.entropy_points_weight = entropy_points_weight
+    self.face_points_weight = entropy_points_weight
+    self.annotate_image = annotate_image
     self.destop_view_image = False
\ No newline at end of file

From 705bbf327f54e26facc833ddf620425453358dbc Mon Sep 17 00:00:00 2001
From: Dynamic <bradje@naver.com>
Date: Sun, 23 Oct 2022 22:37:40 +0900
Subject: [PATCH 13/73] Rename ko-KR.json to ko_KR.json

---
 localizations/{ko-KR.json => ko_KR.json} | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
 rename localizations/{ko-KR.json => ko_KR.json} (98%)

diff --git a/localizations/ko-KR.json b/localizations/ko_KR.json
similarity index 98%
rename from localizations/ko-KR.json
rename to localizations/ko_KR.json
index 7cc431c6..f665042e 100644
--- a/localizations/ko-KR.json
+++ b/localizations/ko_KR.json
@@ -419,4 +419,4 @@
   "use spaces for tags in deepbooru": "use spaces for tags in deepbooru",
   "view": "api 보이기",
   "wiki": "wiki"
-}
\ No newline at end of file
+}

From c729cd41303ee258e1fbca9d0dcf9e54c7f6993f Mon Sep 17 00:00:00 2001
From: Dynamic <bradje@naver.com>
Date: Sun, 23 Oct 2022 22:38:49 +0900
Subject: [PATCH 14/73] Update ko_KR.json

Updated translation for everything except the Settings tab
---
 localizations/ko_KR.json | 381 ++++++++++++++++++++++-----------------
 1 file changed, 219 insertions(+), 162 deletions(-)

diff --git a/localizations/ko_KR.json b/localizations/ko_KR.json
index f665042e..a48ece87 100644
--- a/localizations/ko_KR.json
+++ b/localizations/ko_KR.json
@@ -5,118 +5,158 @@
   "❮": "❮",
   "❯": "❯",
   "⤡": "⤡",
+  " images in this directory. Loaded ": "개의 이미지가 이 경로에 존재합니다. ",
+  " images during ": "개의 이미지를 불러왔고, 생성 기간은 ",
+  ", divided into ": "입니다. ",
+  " pages": "페이지로 나뉘어 표시합니다.",
   "1st and last digit must be 1. ex:'1, 2, 1'": "1st and last digit must be 1. ex:'1, 2, 1'",
-  "A directory on the same machine where the server is running.": "A directory on the same machine where the server is running.",
-  "A merger of the two checkpoints will be generated in your": "A merger of the two checkpoints will be generated in your",
+  "[wiki]": " [위키] 참조",
+  "A directory on the same machine where the server is running.": "WebUI 서버가 돌아가고 있는 디바이스에 존재하는 디렉토리를 선택해 주세요.",
+  "A merger of the two checkpoints will be generated in your": "체크포인트들이 병합된 결과물이 당신의",
   "A value that determines the output of random number generator - if you create an image with same parameters and seed as another image, you'll get the same result": "난수 생성기의 결과물을 지정하는 값 - 동일한 설정값과 동일한 시드를 적용 시, 완전히 똑같은 결과물을 얻게 됩니다.",
   "Add a random artist to the prompt.": "프롬프트에 랜덤한 작가 추가",
   "Add a second progress bar to the console that shows progress for an entire job.": "Add a second progress bar to the console that shows progress for an entire job.",
-  "Add difference": "Add difference",
+  "Add difference": "차이점 추가",
   "Add extended info (seed, prompt) to filename when saving grid": "Add extended info (seed, prompt) to filename when saving grid",
-  "Add layer normalization": "Add layer normalization",
+  "Add layer normalization": "레이어 정규화(normalization) 추가",
   "Add model hash to generation information": "Add model hash to generation information",
   "Add model name to generation information": "Add model name to generation information",
+  "Aesthetic imgs embedding": "스타일 이미지 임베딩",
+  "Aesthetic learning rate": "스타일 학습 수",
+  "Aesthetic steps": "스타일 스텝 수",
+  "Aesthetic text for imgs": "스타일 텍스트",
+  "Aesthetic weight": "스타일 가중치",
   "Always print all generation info to standard output": "Always print all generation info to standard output",
   "Always save all generated image grids": "Always save all generated image grids",
   "Always save all generated images": "생성된 이미지 항상 저장하기",
+  "api": "",
+  "append": "뒤에 삽입",
   "Apply color correction to img2img results to match original colors.": "Apply color correction to img2img results to match original colors.",
   "Apply selected styles to current prompt": "현재 프롬프트에 선택된 스타일 적용",
   "Apply settings": "설정 적용하기",
-  "BSRGAN 4x": "BSRGAN 4x",
-  "Batch Process": "Batch Process",
   "Batch count": "배치 수",
-  "Batch from Directory": "Batch from Directory",
+  "Batch from Directory": "저장 경로로부터 여러장 처리",
   "Batch img2img": "이미지→이미지 배치",
+  "Batch Process": "이미지 여러장 처리",
   "Batch size": "배치 크기",
-  "CFG Scale": "CFG 스케일",
-  "CLIP: maximum number of lines in text file (0 = No limit)": "CLIP: maximum number of lines in text file (0 = No limit)",
+  "BSRGAN 4x": "BSRGAN 4x",
+  "built with gradio": "gradio로 제작되었습니다",
   "Cancel generate forever": "반복 생성 취소",
-  "Check progress (first)": "Check progress (first)",
+  "CFG Scale": "CFG 스케일",
   "Check progress": "Check progress",
+  "Check progress (first)": "Check progress (first)",
+  "checkpoint": " 체크포인트 ",
   "Checkpoint Merger": "체크포인트 병합",
   "Checkpoint name": "체크포인트 이름",
   "Checkpoints to cache in RAM": "Checkpoints to cache in RAM",
   "Classifier Free Guidance Scale - how strongly the image should conform to prompt - lower values produce more creative results": "Classifier Free Guidance Scale - 이미지가 주어진 프롬프트를 얼마나 따를지를 정해주는 수치 - 낮은 값일수록 더 창의적인 결과물이 나옴",
+  "Click to Upload": "Click to Upload",
   "Clip skip": "클립 건너뛰기",
-  "CodeFormer visibility": "CodeFormer visibility",
-  "CodeFormer weight (0 = maximum effect, 1 = minimum effect)": "CodeFormer weight (0 = maximum effect, 1 = minimum effect)",
+  "CLIP: maximum number of lines in text file (0 = No limit)": "CLIP: maximum number of lines in text file (0 = No limit)",
+  "CodeFormer visibility": "CodeFormer 가시성",
+  "CodeFormer weight (0 = maximum effect, 1 = minimum effect)": "CodeFormer 가중치 (0 = 최대 효과, 1 = 최소 효과)",
   "CodeFormer weight parameter; 0 = maximum effect; 1 = minimum effect": "CodeFormer weight parameter; 0 = maximum effect; 1 = minimum effect",
   "Color variation": "색깔 다양성",
+  "Collect": "즐겨찾기",
+  "copy": "복사",
   "Create a grid where images will have different parameters. Use inputs below to specify which parameters will be shared by columns and rows": "서로 다른 설정값으로 생성된 이미지의 그리드를 만듭니다. 아래의 설정으로 가로/세로에 어떤 설정값을 적용할지 선택하세요.",
   "Create a text file next to every image with generation parameters.": "Create a text file next to every image with generation parameters.",
-  "Create embedding": "Create embedding",
-  "Create flipped copies": "Create flipped copies",
-  "Create hypernetwork": "Create hypernetwork",
+  "Create aesthetic images embedding": "Create aesthetic images embedding",
+  "Create embedding": "임베딩 생성",
+  "Create flipped copies": "좌우로 뒤집은 복사본 생성",
+  "Create hypernetwork": "하이퍼네트워크 생성",
+  "Create images embedding": "Create images embedding",
   "Crop and resize": "잘라낸 후 리사이징",
-  "Crop to fit": "Crop to fit",
-  "Custom Name (Optional)": "Custom Name (Optional)",
+  "Crop to fit": "잘라내서 맞추기",
+  "Custom Name (Optional)": "병합 모델 이름 (선택사항)",
+  "Dataset directory": "데이터셋 경로",
   "DDIM": "DDIM",
-  "DPM adaptive": "DPM adaptive",
-  "DPM fast": "DPM fast",
-  "DPM2 Karras": "DPM2 Karras",
-  "DPM2 a Karras": "DPM2 a Karras",
-  "DPM2 a": "DPM2 a",
-  "DPM2": "DPM2",
-  "Dataset directory": "Dataset directory",
   "Decode CFG scale": "디코딩 CFG 스케일",
   "Decode steps": "디코딩 스텝 수",
-  "Delete": "Delete",
-  "Denoising Diffusion Implicit Models - best at inpainting": "Denoising Diffusion Implicit Models - 인페이팅에 뛰어남",
-  "Denoising strength change factor": "디노이즈 강도 변경 배수",
-  "Denoising strength": "디노이즈 강도",
+  "Delete": "삭제",
   "Denoising": "디노이징",
-  "Destination directory": "Destination directory",
+  "Denoising Diffusion Implicit Models - best at inpainting": "Denoising Diffusion Implicit Models - 인페이팅에 뛰어남",
+  "Denoising strength": "디노이즈 강도",
+  "Denoising strength change factor": "디노이즈 강도 변경 배수",
+  "Destination directory": "결과물 저장 경로",
   "Determines how little respect the algorithm should have for image's content. At 0, nothing will change, and at 1 you'll get an unrelated image. With values below 1.0, processing will take less steps than the Sampling Steps slider specifies.": "알고리즘이 얼마나 원본 이미지를 반영할지를 결정하는 수치입니다. 0일 경우 아무것도 바뀌지 않고, 1일 경우 원본 이미지와 전혀 관련없는 결과물을 얻게 됩니다. 1.0 아래의 값일 경우, 설정된 샘플링 스텝 수보다 적은 스텝 수를 거치게 됩니다.",
   "Directory for saving images using the Save button": "Directory for saving images using the Save button",
   "Directory name pattern": "Directory name pattern",
+  "directory.": "저장 경로에 저장됩니다.",
   "Do not add watermark to images": "Do not add watermark to images",
   "Do not do anything special": "아무것도 하지 않기",
   "Do not save grids consisting of one picture": "Do not save grids consisting of one picture",
   "Do not show any images in results for web": "Do not show any images in results for web",
+  "down": "아래쪽",
   "Download localization template": "Download localization template",
+  "Download": "다운로드",
+  "DPM adaptive": "DPM adaptive",
+  "DPM fast": "DPM fast",
+  "DPM2": "DPM2",
+  "DPM2 a": "DPM2 a",
+  "DPM2 a Karras": "DPM2 a Karras",
+  "DPM2 Karras": "DPM2 Karras",
   "Draw legend": "범례 그리기",
   "Draw mask": "마스크 직접 그리기",
   "Drop File Here": "Drop File Here",
   "Drop Image Here": "Drop Image Here",
-  "ESRGAN_4x": "ESRGAN_4x",
-  "Embedding": "Embedding",
+  "Embedding": "임베딩",
+  "Embedding Learning rate": "임베딩 학습률",
   "Emphasis: use (text) to make model pay more attention to text and [text] to make it pay less attention": "Emphasis: use (text) to make model pay more attention to text and [text] to make it pay less attention",
   "Enable full page image viewer": "Enable full page image viewer",
   "Enable quantization in K samplers for sharper and cleaner results. This may change existing seeds. Requires restart to apply.": "Enable quantization in K samplers for sharper and cleaner results. This may change existing seeds. Requires restart to apply.",
-  "End Page": "End Page",
-  "Enter hypernetwork layer structure": "Enter hypernetwork layer structure",
-  "Eta noise seed delta": "Eta noise seed delta",
+  "End Page": "마지막 페이지",
+  "Enter hypernetwork layer structure": "하이퍼네트워크 레이어 구조 입력",
+  "Error": "오류",
+  "escape (\\) brackets in deepbooru (so they are used as literal brackets and not for emphasis)": "escape (\\) brackets in deepbooru (so they are used as literal brackets and not for emphasis)",
+  "ESRGAN_4x": "ESRGAN_4x",
   "Eta": "Eta",
-  "Euler Ancestral - very creative, each can get a completely different picture depending on step count, setting steps to higher than 30-40 does not help": "Euler Ancestral - 매우 창의적, 스텝 수에 따라 완전히 다른 결과물이 나올 수 있음. 30~40보다 높은 스텝 수는 효과가 미미함",
-  "Euler a": "Euler a",
+  "eta (noise multiplier) for ancestral samplers": "eta (noise multiplier) for ancestral samplers",
+  "eta (noise multiplier) for DDIM": "eta (noise multiplier) for DDIM",
+  "Eta noise seed delta": "Eta noise seed delta",
   "Euler": "Euler",
+  "Euler a": "Euler a",
+  "Euler Ancestral - very creative, each can get a completely different picture depending on step count, setting steps to higher than 30-40 does not help": "Euler Ancestral - 매우 창의적, 스텝 수에 따라 완전히 다른 결과물이 나올 수 있음. 30~40보다 높은 스텝 수는 효과가 미미함",
+  "Existing Caption txt Action": "이미 존재하는 캡션 텍스트 처리",
   "Extra": "고급",
   "Extras": "부가기능",
+  "extras history": "extras history",
   "Face restoration": "Face restoration",
   "Fall-off exponent (lower=higher detail)": "감쇠 지수 (낮을수록 디테일이 올라감)",
-  "File Name": "File Name",
+  "favorites": "즐겨찾기",
+  "File": "File",
   "File format for grids": "File format for grids",
   "File format for images": "File format for images",
+  "File Name": "파일 이름",
   "File with inputs": "설정값 파일",
-  "File": "File",
   "Filename join string": "Filename join string",
   "Filename word regex": "Filename word regex",
+  "fill": "채우기",
+  "fill it with colors of the image": "이미지의 색상으로 채우기",
+  "fill it with latent space noise": "잠재 공간 노이즈로 채우기",
+  "fill it with latent space zeroes": "잠재 공간의 0값으로 채우기",
   "Filter NSFW content": "Filter NSFW content",
-  "First Page": "First Page",
+  "First Page": "처음 페이지",
   "Firstpass height": "초기 세로길이",
   "Firstpass width": "초기 가로길이",
   "Font for image grids that have text": "Font for image grids that have text",
+  "for detailed explanation.": "를 참조하십시오.",
   "For SD upscale, how much overlap in pixels should there be between tiles. Tiles overlap so that when they are merged back into one picture, there is no clearly visible seam.": "SD 업스케일링에서 타일 간 몇 픽셀을 겹치게 할지 결정하는 설정값입니다. 타일들이 다시 한 이미지로 합쳐질 때, 눈에 띄는 이음매가 없도록 서로 겹치게 됩니다.",
-  "GFPGAN visibility": "GFPGAN visibility",
-  "Generate Info": "Generate Info",
-  "Generate forever": "반복 생성",
   "Generate": "생성",
+  "Generate forever": "반복 생성",
+  "Generate Info": "생성 정보",
+  "GFPGAN visibility": "GFPGAN 가시성",
   "Grid row count; use -1 for autodetect and 0 for it to be same as batch size": "Grid row count; use -1 for autodetect and 0 for it to be same as batch size",
   "Height": "세로",
   "Heun": "Heun",
+  "hide": "api 숨기기",
   "Hide samplers in user interface (requires restart)": "Hide samplers in user interface (requires restart)",
   "Highres. fix": "고해상도 보정",
   "History": "기록",
+  "Image Browser": "이미지 브라우저",
+  "Images directory": "이미지 경로",
+  "extras": "부가기능",
+  "how fast should the training go. Low values will take longer to train, high values may fail to converge (not generate accurate results) and/or may break the embedding (This has happened if you see Loss: nan in the training info textbox. If this happens, you need to manually restore your embedding from an older not-broken backup).\n\nYou can set a single numeric value, or multiple learning rates using the syntax:\n\n   rate_1:max_steps_1, rate_2:max_steps_2, ...\n\nEG:   0.005:100, 1e-3:1000, 1e-5\n\nWill train with rate of 0.005 for first 100 steps, then 1e-3 until 1000 steps, then 1e-5 for all remaining steps.": "how fast should the training go. Low values will take longer to train, high values may fail to converge (not generate accurate results) and/or may break the embedding (This has happened if you see Loss: nan in the training info textbox. If this happens, you need to manually restore your embedding from an older not-broken backup).\n\nYou can set a single numeric value, or multiple learning rates using the syntax:\n\n   rate_1:max_steps_1, rate_2:max_steps_2, ...\n\nEG:   0.005:100, 1e-3:1000, 1e-5\n\nWill train with rate of 0.005 for first 100 steps, then 1e-3 until 1000 steps, then 1e-5 for all remaining steps.",
   "How many batches of images to create": "생성할 이미지 배치 수",
   "How many image to create in a single batch": "한 배치당 이미지 수",
   "How many times to improve the generated image iteratively; higher values take longer; very low values can produce bad results": "생성된 이미지를 향상할 횟수; 매우 낮은 값은 만족스럽지 못한 결과물을 출력할 수 있음",
@@ -124,26 +164,32 @@
   "How much to blur the mask before processing, in pixels.": "이미지 생성 전 마스크를 얼마나 블러처리할지 결정하는 값. 픽셀 단위",
   "How strong of a variation to produce. At 0, there will be no effect. At 1, you will get the complete picture with variation seed (except for ancestral samplers, where you will just get something).": "바리에이션을 얼마나 줄지 정하는 수치 - 0일 경우 아무것도 바뀌지 않고, 1일 경우 바리에이션 시드로부터 생성된 이미지를 얻게 됩니다. (Ancestral 샘플러 제외 - 이 경우에는 좀 다른 무언가를 얻게 됩니다)",
   "Hypernet str.": "하이퍼네트워크 강도",
-  "Hypernetwork strength": "Hypernetwork strength",
   "Hypernetwork": "하이퍼네트워크",
+  "Hypernetwork Learning rate": "하이퍼네트워크 학습률",
+  "Hypernetwork strength": "Hypernetwork strength",
   "If PNG image is larger than 4MB or any dimension is larger than 4000, downscale and save copy as JPG": "If PNG image is larger than 4MB or any dimension is larger than 4000, downscale and save copy as JPG",
   "If this option is enabled, watermark will not be added to created images. Warning: if you do not add watermark, you may be behaving in an unethical manner.": "If this option is enabled, watermark will not be added to created images. Warning: if you do not add watermark, you may be behaving in an unethical manner.",
   "If this values is non-zero, it will be added to seed and used to initialize RNG for noises when using samplers with Eta. You can use this to produce even more variation of images, or you can use this to match images of other software if you know what you are doing.": "If this values is non-zero, it will be added to seed and used to initialize RNG for noises when using samplers with Eta. You can use this to produce even more variation of images, or you can use this to match images of other software if you know what you are doing.",
+  "ignore": "무시",
+  "Image": "Image",
   "Image for img2img": "Image for img2img",
   "Image for inpainting with mask": "Image for inpainting with mask",
-  "Image": "Image",
   "Images filename pattern": "Images filename pattern",
+  "img2img": "이미지→이미지",
+  "img2img alternative test": "이미지→이미지 대체버전 테스트",
+  "img2img DDIM discretize": "img2img DDIM discretize",
+  "img2img history": "img2img history",
   "In loopback mode, on each loop the denoising strength is multiplied by this value. <1 means decreasing variety so your sequence will converge on a fixed picture. >1 means increasing variety so your sequence will become more and more chaotic.": "루프백 모드에서는 매 루프마다 디노이즈 강도에 이 값이 곱해집니다. 1보다 작을 경우 다양성이 낮아져 결과 이미지들이 고정된 형태로 모일 겁니다. 1보다 클 경우 다양성이 높아져 결과 이미지들이 갈수록 혼란스러워지겠죠.",
   "Include Separate Images": "분리된 이미지 포함하기",
   "Increase coherency by padding from the last comma within n tokens when using more than 75 tokens": "Increase coherency by padding from the last comma within n tokens when using more than 75 tokens",
-  "Initialization text": "Initialization text",
-  "Inpaint at full resolution padding, pixels": "전체 해상도로 인페인트 패딩값(픽셀 단위)",
+  "Initialization text": "초기화 텍스트",
+  "Inpaint": "인페인트",
   "Inpaint at full resolution": "전체 해상도로 인페인트하기",
+  "Inpaint at full resolution padding, pixels": "전체 해상도로 인페인트 패딩값(픽셀 단위)",
   "Inpaint masked": "마스크만 처리",
   "Inpaint not masked": "마스크 이외만 처리",
-  "Inpaint": "인페인트",
   "Input directory": "인풋 이미지 경로",
-  "Interpolation Method": "Interpolation Method",
+  "Interpolation Method": "보간 방법",
   "Interrogate\nCLIP": "CLIP\n분석",
   "Interrogate\nDeepBooru": "DeepBooru\n분석",
   "Interrogate Options": "Interrogate Options",
@@ -156,49 +202,68 @@
   "Interrogate: num_beams for BLIP": "Interrogate: num_beams for BLIP",
   "Interrogate: use artists from artists.csv": "Interrogate: use artists from artists.csv",
   "Interrupt": "중단",
+  "Is negative text": "네거티브 텍스트일시 체크",
   "Just resize": "리사이징",
   "Keep -1 for seeds": "시드값 -1로 유지",
-  "LDSR processing steps. Lower = faster": "LDSR processing steps. Lower = faster",
-  "LDSR": "LDSR",
-  "LMS Karras": "LMS Karras",
-  "LMS": "LMS",
+  "keep whatever was there originally": "이미지 원본 유지",
   "Label": "Label",
   "Lanczos": "Lanczos",
-  "Learning rate": "Learning rate",
-  "Leave blank to save images to the default path.": "Leave blank to save images to the default path.",
+  "Last prompt:": "Last prompt:",
+  "Last saved hypernetwork:": "Last saved hypernetwork:",
+  "Last saved image:": "Last saved image:",
+  "latent noise": "잠재 노이즈",
+  "latent nothing": "잠재 공백",
+  "LDSR": "LDSR",
+  "LDSR processing steps. Lower = faster": "LDSR processing steps. Lower = faster",
+  "leakyrelu": "leakyrelu",
+  "Leave blank to save images to the default path.": "기존 저장 경로에 이미지들을 저장하려면 비워두세요.",
+  "left": "왼쪽",
+  "linear": "linear",
   "List of setting names, separated by commas, for settings that should go to the quick access bar at the top, rather than the usual setting tab. See modules/shared.py for setting names. Requires restarting to apply.": "List of setting names, separated by commas, for settings that should go to the quick access bar at the top, rather than the usual setting tab. See modules/shared.py for setting names. Requires restarting to apply.",
+  "LMS": "LMS",
+  "LMS Karras": "LMS Karras",
+  "Load": "불러오기",
   "Loading...": "로딩 중...",
   "Localization (requires restart)": "Localization (requires restart)",
-  "Log directory": "Log directory",
+  "Log directory": "로그 경로",
   "Loopback": "루프백",
   "Loops": "루프 수",
+  "Loss:": "Loss:",
+  "Make an attempt to produce a picture similar to what would have been produced with same seed at specified resolution": "동일한 시드 값으로 생성되었을 이미지를 주어진 해상도로 최대한 유사하게 재현합니다.",
   "Make K-diffusion samplers produce same images in a batch as when making a single image": "Make K-diffusion samplers produce same images in a batch as when making a single image",
   "Make Zip when Save?": "저장 시 Zip 생성하기",
-  "Make an attempt to produce a picture similar to what would have been produced with same seed at specified resolution": "동일한 시드 값으로 생성되었을 이미지를 주어진 해상도로 최대한 유사하게 재현합니다.",
+  "Mask": "마스크",
   "Mask blur": "마스크 블러",
   "Mask mode": "Mask mode",
-  "Mask": "마스크",
   "Masked content": "마스크된 부분",
   "Masking mode": "Masking mode",
   "Max prompt words for [prompt_words] pattern": "Max prompt words for [prompt_words] pattern",
-  "Max steps": "Max steps",
-  "Modules": "Modules",
+  "Max steps": "최대 스텝 수",
+  "Modules": "모듈",
   "Move face restoration model from VRAM into RAM after processing": "Move face restoration model from VRAM into RAM after processing",
-  "Multiplier (M) - set to 0 to get model A": "Multiplier (M) - set to 0 to get model A",
-  "Name": "Name",
-  "Negative prompt (press Ctrl+Enter or Alt+Enter to generate)": "네거티브 프롬프트 입력(Ctrl+Enter나 Alt+Enter로 생성 시작)",
+  "Move VAE and CLIP to RAM when training hypernetwork. Saves VRAM.": "Move VAE and CLIP to RAM when training hypernetwork. Saves VRAM.",
+  "Multiplier (M) - set to 0 to get model A": "배율 (M) - 0으로 적용하면 모델 A를 얻게 됩니다",
+  "Name": "이름",
   "Negative prompt": "네거티브 프롬프트",
-  "Next Page": "Next Page",
+  "Negative prompt (press Ctrl+Enter or Alt+Enter to generate)": "네거티브 프롬프트 입력(Ctrl+Enter나 Alt+Enter로 생성 시작)",
+  "Next batch": "다음 묶음",
+  "Next Page": "다음 페이지",
   "None": "None",
   "Nothing": "없음",
+  "Nothing found in the image.": "Nothing found in the image.",
+  "number of images to delete consecutively next": "연속적으로 삭제할 이미지 수",
   "Number of repeats for a single input image per epoch; used only for displaying epoch number": "Number of repeats for a single input image per epoch; used only for displaying epoch number",
-  "Number of vectors per token": "Number of vectors per token",
+  "Number of vectors per token": "토큰별 벡터 수",
+  "Open for Clip Aesthetic!": "클립 스타일 기능을 활성화하려면 클릭!",
   "Open images output directory": "이미지 저장 경로 열기",
-  "Open output directory": "Open output directory",
+  "Open output directory": "저장 경로 열기",
+  "or": "or",
+  "original": "원본 유지",
   "Original negative prompt": "기존 네거티브 프롬프트",
   "Original prompt": "기존 프롬프트",
   "Outpainting direction": "아웃페인팅 방향",
   "Outpainting mk2": "아웃페인팅 마크 2",
+  "Output directory": "이미지 저장 경로",
   "Output directory for grids; if empty, defaults to two directories below": "Output directory for grids; if empty, defaults to two directories below",
   "Output directory for images from extras tab": "Output directory for images from extras tab",
   "Output directory for images; if empty, defaults to three directories below": "Output directory for images; if empty, defaults to three directories below",
@@ -206,46 +271,54 @@
   "Output directory for img2img images": "Output directory for img2img images",
   "Output directory for txt2img grids": "Output directory for txt2img grids",
   "Output directory for txt2img images": "Output directory for txt2img images",
-  "Output directory": "이미지 저장 경로",
   "Override `Denoising strength` to 1?": "디노이즈 강도를 1로 적용할까요?",
-  "Override `Sampling Steps` to the same value as `Decode steps`?": "샘플링 스텝 수를 디코딩 스텝 수와 동일하게 적용할까요?",
-  "Override `Sampling method` to Euler?(this method is built for it)": "샘플링 방법을 Euler로 적용할까요?(이 기능은 해당 샘플러를 위해 만들어져 있습니다)",
   "Override `prompt` to the same value as `original prompt`?(and `negative prompt`)": "프롬프트 값을 기존 프롬프트와 동일하게 적용할까요?(네거티브 프롬프트 포함)",
-  "PLMS": "PLMS",
-  "PNG Info": "PNG 정보",
-  "Page Index": "Page Index",
+  "Override `Sampling method` to Euler?(this method is built for it)": "샘플링 방법을 Euler로 적용할까요?(이 기능은 해당 샘플러를 위해 만들어져 있습니다)",
+  "Override `Sampling Steps` to the same value as `Decode steps`?": "샘플링 스텝 수를 디코딩 스텝 수와 동일하게 적용할까요?",
+  "Overwrite Old Embedding": "기존 임베딩 덮어쓰기",
+  "Overwrite Old Hypernetwork": "기존 하이퍼네트워크 덮어쓰기",
+  "Page Index": "페이지 인덱스",
+  "parameters": "설정값",
   "Path to directory where to write outputs": "Path to directory where to write outputs",
-  "Path to directory with input images": "Path to directory with input images",
+  "Path to directory with input images": "인풋 이미지가 있는 경로",
   "Paths for saving": "Paths for saving",
   "Pixels to expand": "확장할 픽셀 수",
+  "PLMS": "PLMS",
+  "PNG Info": "PNG 정보",
   "Poor man's outpainting": "가난뱅이의 아웃페인팅",
-  "Preprocess images": "Preprocess images",
-  "Preprocess": "Preprocess",
-  "Prev Page": "Prev Page",
+  "Preparing dataset from": "Preparing dataset from",
+  "prepend": "앞에 삽입",
+  "Preprocess": "전처리",
+  "Preprocess images": "이미지 전처리",
+  "Prev batch": "이전 묶음",
+  "Prev Page": "이전 페이지",
   "Prevent empty spots in grid (when set to autodetect)": "Prevent empty spots in grid (when set to autodetect)",
-  "Primary model (A)": "Primary model (A)",
+  "Primary model (A)": "주 모델 (A)",
   "Process an image, use it as an input, repeat.": "이미지를 생성하고, 생성한 이미지를 다시 원본으로 사용하는 과정을 반복합니다.",
   "Process images in a directory on the same machine where the server is running.": "WebUI 서버가 돌아가고 있는 디바이스에 존재하는 디렉토리의 이미지들을 처리합니다.",
   "Produce an image that can be tiled.": "타일링 가능한 이미지를 생성합니다.",
+  "Prompt": "프롬프트",
   "Prompt (press Ctrl+Enter or Alt+Enter to generate)": "프롬프트 입력(Ctrl+Enter나 Alt+Enter로 생성 시작)",
-  "Prompt S/R": "프롬프트 스타일 변경",
   "Prompt matrix": "프롬프트 매트릭스",
   "Prompt order": "프롬프트 순서",
-  "Prompt template file": "Prompt template file",
-  "Prompt": "프롬프트",
-  "Prompts from file or textbox": "파일이나 텍스트박스로부터 프롬프트 불러오기",
+  "Prompt S/R": "프롬프트 스타일 변경",
+  "Prompt template file": "프롬프트 템플릿 파일 경로",
   "Prompts": "프롬프트",
+  "Prompts from file or textbox": "파일이나 텍스트박스로부터 프롬프트 불러오기",
   "Put variable parts at start of prompt": "변경되는 프롬프트를 앞에 위치시키기",
+  "quad": "quad",
   "Quality for saved jpeg images": "Quality for saved jpeg images",
   "Quicksettings list": "Quicksettings list",
   "R-ESRGAN 4x+ Anime6B": "R-ESRGAN 4x+ Anime6B",
   "Randomness": "랜덤성",
   "Read generation parameters from prompt or last generation if prompt is empty into user interface.": "클립보드에 복사된 정보로부터 설정값 읽어오기/프롬프트창이 비어있을경우 제일 최근 설정값 불러오기",
-  "Read parameters (prompt, etc...) from txt2img tab when making previews": "Read parameters (prompt, etc...) from txt2img tab when making previews",
+  "Read parameters (prompt, etc...) from txt2img tab when making previews": "프리뷰 이미지 생성 시 텍스트→이미지 탭에서 설정값(프롬프트 등) 읽어오기",
   "Recommended settings: Sampling Steps: 80-100, Sampler: Euler a, Denoising strength: 0.8": "추천 설정값 - 샘플링 스텝 수 : 80-100 , 샘플러 : Euler a, 디노이즈 강도 : 0.8",
   "Reload custom script bodies (No ui updates, No restart)": "Reload custom script bodies (No ui updates, No restart)",
+  "relu": "relu",
   "Renew Page": "Renew Page",
   "Request browser notifications": "Request browser notifications",
+  "Resize": "리사이징 배수",
   "Resize and fill": "리사이징 후 채우기",
   "Resize image to target resolution. Unless height and width match, you will get incorrect aspect ratio.": "설정된 해상도로 이미지 리사이징을 진행합니다. 원본과 가로/세로 길이가 일치하지 않을 경우, 부정확한 화면비의 이미지를 얻게 됩니다.",
   "Resize mode": "Resize mode",
@@ -253,42 +326,43 @@
   "Resize seed from width": "시드 리사이징 세로길이",
   "Resize the image so that entirety of image is inside target resolution. Fill empty space with image's colors.": "이미지 전체가 설정된 해상도 내부에 들어가게 리사이징을 진행합니다. 빈 공간은 이미지의 색상으로 채웁니다.",
   "Resize the image so that entirety of target resolution is filled with the image. Crop parts that stick out.": "설정된 해상도 전체가 이미지로 가득차게 리사이징을 진행합니다. 튀어나오는 부분은 잘라냅니다.",
-  "Resize": "Resize",
   "Restart Gradio and Refresh components (Custom Scripts, ui.py, js and css only)": "Restart Gradio and Refresh components (Custom Scripts, ui.py, js and css only)",
   "Restore faces": "얼굴 보정",
   "Restore low quality faces using GFPGAN neural network": "GFPGAN 신경망을 이용해 저품질의 얼굴을 보정합니다.",
-  "Result = A * (1 - M) + B * M": "Result = A * (1 - M) + B * M",
-  "Result = A + (B - C) * M": "Result = A + (B - C) * M",
+  "Result = A * (1 - M) + B * M": "결과물 = A * (1 - M) + B * M",
+  "Result = A + (B - C) * M": "결과물 = A + (B - C) * M",
   "Reuse seed from last generation, mostly useful if it was randomed": "이전 생성에서 사용된 시드를 불러옵니다. 랜덤하게 생성했을 시 도움됨",
-  "Run": "Run",
-  "SD upscale": "SD 업스케일링",
-  "Sampler parameters": "Sampler parameters",
+  "right": "오른쪽",
+  "Run": "가동",
   "Sampler": "샘플러",
-  "Sampling Steps": "샘플링 스텝 수",
+  "Sampler parameters": "Sampler parameters",
   "Sampling method": "샘플링 방법",
-  "Save a copy of embedding to log directory every N steps, 0 to disable": "Save a copy of embedding to log directory every N steps, 0 to disable",
+  "Sampling Steps": "샘플링 스텝 수",
+  "Save": "저장",
+  "Save a copy of embedding to log directory every N steps, 0 to disable": "N스텝마다 로그 경로에 임베딩을 저장합니다, 비활성화하려면 0으로 설정하십시오.",
   "Save a copy of image before applying color correction to img2img results": "Save a copy of image before applying color correction to img2img results",
   "Save a copy of image before doing face restoration.": "Save a copy of image before doing face restoration.",
   "Save an csv containing the loss to log directory every N steps, 0 to disable": "Save an csv containing the loss to log directory every N steps, 0 to disable",
-  "Save an image to log directory every N steps, 0 to disable": "Save an image to log directory every N steps, 0 to disable",
-  "Save as float16": "Save as float16",
+  "Save an image to log directory every N steps, 0 to disable": "N스텝마다 로그 경로에 이미지를 저장합니다, 비활성화하려면 0으로 설정하십시오.",
+  "Save as float16": "float16으로 저장",
   "Save grids to a subdirectory": "Save grids to a subdirectory",
   "Save images to a subdirectory": "Save images to a subdirectory",
-  "Save images with embedding in PNG chunks": "Save images with embedding in PNG chunks",
+  "Save images with embedding in PNG chunks": "PNG 청크로 이미지에 임베딩을 포함시켜 저장",
   "Save style": "스타일 저장",
   "Save text information about generation parameters as chunks to png files": "Save text information about generation parameters as chunks to png files",
-  "Save": "저장",
   "Saving images/grids": "Saving images/grids",
   "Saving to a directory": "Saving to a directory",
-  "Scale by": "Scale by",
-  "Scale to": "Scale to",
+  "Scale by": "스케일링 배수 지정",
+  "Scale to": "스케일링 사이즈 지정",
   "Script": "스크립트",
   "ScuNET GAN": "ScuNET GAN",
   "ScuNET PSNR": "ScuNET PSNR",
-  "Secondary model (B)": "Secondary model (B)",
-  "See": "See",
-  "Seed of a different picture to be mixed into the generation.": "결과물에 섞일 다른 그림의 시드",
+  "SD upscale": "SD 업스케일링",
+  "Secondary model (B)": "2차 모델 (B)",
+  "See": "자세한 설명은",
   "Seed": "시드",
+  "Seed of a different picture to be mixed into the generation.": "결과물에 섞일 다른 그림의 시드",
+  "Select activation function of hypernetwork": "하이퍼네트워크 활성화 함수 선택",
   "Send to extras": "부가기능으로 전송",
   "Send to img2img": "이미지→이미지로 전송",
   "Send to inpaint": "인페인트로 전송",
@@ -297,26 +371,36 @@
   "Separate values for X axis using commas.": "쉼표로 X축에 적용할 값 분리",
   "Separate values for Y axis using commas.": "쉼표로 Y축에 적용할 값 분리",
   "Set seed to -1, which will cause a new random number to be used every time": "시드를 -1로 적용 - 매번 랜덤한 시드가 적용되게 됩니다.",
+  "set_index": "set_index",
   "Settings": "설정",
-  "Show Textbox": "텍스트박스 보이기",
+  "should be 2 or lower.": "이 2 이하여야 합니다.",
   "Show generation progress in window title.": "Show generation progress in window title.",
   "Show grid in results for web": "Show grid in results for web",
   "Show image creation progress every N sampling steps. Set 0 to disable.": "Show image creation progress every N sampling steps. Set 0 to disable.",
   "Show images zoomed in by default in full page image viewer": "Show images zoomed in by default in full page image viewer",
   "Show progressbar": "Show progressbar",
-  "Show result images": "Show result images",
-  "Sigma Churn": "시그마 섞기",
+  "Show result images": "이미지 결과 보이기",
+  "Show Textbox": "텍스트박스 보이기",
   "Sigma adjustment for finding noise for image": "이미지 노이즈를 찾기 위해 시그마 조정",
+  "Sigma Churn": "시그마 섞기",
+  "sigma churn": "sigma churn",
   "Sigma max": "시그마 최댓값",
   "Sigma min": "시그마 최솟값",
   "Sigma noise": "시그마 노이즈",
-  "Single Image": "Single Image",
+  "sigma noise": "sigma noise",
+  "sigma tmin": "sigma tmin",
+  "Single Image": "단일 이미지",
   "Skip": "건너뛰기",
-  "Source directory": "Source directory",
-  "Source": "Source",
-  "Split oversized images into two": "Split oversized images into two",
-  "Stable Diffusion checkpoint": "Stable Diffusion 체크포인트",
+  "Slerp angle": "구면 선형 보간 각도",
+  "Slerp interpolation": "구면 선형 보간",
+  "Source": "원본",
+  "Source directory": "원본 경로",
+  "Split image threshold": "Split image threshold",
+  "Split image overlap ratio": "Split image overlap ratio",
+  "Split oversized images": "사이즈가 큰 이미지 분할하기",
   "Stable Diffusion": "Stable Diffusion",
+  "Stable Diffusion checkpoint": "Stable Diffusion 체크포인트",
+  "Step:": "Step:",
   "Steps": "스텝 수",
   "Stop At last layers of CLIP model": "CLIP 모델의 n번째 레이어에서 멈추기",
   "Stop processing current image and continue processing.": "현재 진행중인 이미지 생성을 중단하고 작업을 계속하기",
@@ -325,51 +409,65 @@
   "Style 2": "스타일 2",
   "Style to apply; styles have components for both positive and negative prompts and apply to both": "Style to apply; styles have components for both positive and negative prompts and apply to both",
   "SwinIR 4x": "SwinIR 4x",
+  "Sys VRAM:": "시스템 VRAM : ",
   "System": "System",
-  "Tertiary model (C)": "Tertiary model (C)",
+  "Tertiary model (C)": "3차 모델 (C)",
   "Textbox": "Textbox",
   "This regular expression will be used extract words from filename, and they will be joined using the option below into label text used for training. Leave empty to keep filename text as it is.": "This regular expression will be used extract words from filename, and they will be joined using the option below into label text used for training. Leave empty to keep filename text as it is.",
   "This string will be used to join split words into a single line if the option above is enabled.": "This string will be used to join split words into a single line if the option above is enabled.",
+  "This text is used to rotate the feature space of the imgs embs": "이 텍스트는 이미지 임베딩의 특징 공간을 회전하는 데 사용됩니다.",
+  "Tile overlap": "타일 겹침",
   "Tile overlap, in pixels for ESRGAN upscalers. Low values = visible seam.": "Tile overlap, in pixels for ESRGAN upscalers. Low values = visible seam.",
   "Tile overlap, in pixels for SwinIR. Low values = visible seam.": "Tile overlap, in pixels for SwinIR. Low values = visible seam.",
-  "Tile overlap": "타일 겹침",
-  "Tile size for ESRGAN upscalers. 0 = no tiling.": "Tile size for ESRGAN upscalers. 0 = no tiling.",
   "Tile size for all SwinIR.": "Tile size for all SwinIR.",
+  "Tile size for ESRGAN upscalers. 0 = no tiling.": "Tile size for ESRGAN upscalers. 0 = no tiling.",
   "Tiling": "타일링",
-  "Train Embedding": "Train Embedding",
-  "Train Hypernetwork": "Train Hypernetwork",
-  "Train an embedding; must specify a directory with a set of 1:1 ratio images": "Train an embedding; must specify a directory with a set of 1:1 ratio images",
+  "Time taken:": "소요 시간 : ",
+  "Torch active/reserved:": "활성화/예약된 Torch 양 : ",
+  "Torch active: Peak amount of VRAM used by Torch during generation, excluding cached data.\nTorch reserved: Peak amount of VRAM allocated by Torch, including all active and cached data.\nSys VRAM: Peak amount of VRAM allocation across all applications / total GPU VRAM (peak utilization%).": "활성화된 Torch : 생성 도중 캐시된 데이터를 포함해 사용된 VRAM의 최대량\n예약된 Torch : 활성화되고 캐시된 모든 데이터를 포함해 Torch에게 할당된 VRAM의 최대량\n시스템 VRAM : 모든 어플리케이션에 할당된 VRAM 최대량 / 총 GPU VRAM (최고 이용도%)",
   "Train": "훈련",
+  "Train an embedding or Hypernetwork; you must specify a directory with a set of 1:1 ratio images": "임베딩이나 하이퍼네트워크를 훈련시킵니다. 1:1 비율의 이미지가 있는 경로를 지정해야 합니다.",
+  "Train Embedding": "임베딩 훈련",
+  "Train Hypernetwork": "하이퍼네트워크 훈련",
   "Training": "Training",
-  "Unload VAE and CLIP from VRAM when training": "Unload VAE and CLIP from VRAM when training",
+  "txt2img": "텍스트→이미지",
+  "txt2img history": "txt2img history",
+  "uniform": "uniform",
+  "up": "위쪽",
   "Upload mask": "마스크 업로드하기",
   "Upscale latent space image when doing hires. fix": "Upscale latent space image when doing hires. fix",
   "Upscale masked region to target resolution, do inpainting, downscale back and paste into original image": "마스크된 부분을 설정된 해상도로 업스케일하고, 인페인팅을 진행한 뒤, 다시 다운스케일 후 원본 이미지에 붙여넣습니다.",
-  "Upscaler 2 visibility": "Upscaler 2 visibility",
-  "Upscaler for img2img": "Upscaler for img2img",
   "Upscaler": "업스케일러",
+  "Upscaler 1": "업스케일러 1",
+  "Upscaler 2": "업스케일러 2",
+  "Upscaler 2 visibility": "업스케일러 2 가시성",
+  "Upscaler for img2img": "Upscaler for img2img",
   "Upscaling": "Upscaling",
-  "Use BLIP for caption": "Use BLIP for caption",
   "Use a two step process to partially create an image at smaller resolution, upscale, and then improve details in it without changing composition": "저해상도 이미지를 1차적으로 생성 후 업스케일을 진행하여, 이미지의 전체적인 구성을 바꾸지 않고 세부적인 디테일을 향상시킵니다.",
   "Use an empty output directory to save pictures normally instead of writing to the output directory.": "저장 경로를 비워두면 기본 저장 폴더에 이미지들이 저장됩니다.",
-  "Use deepbooru for caption": "Use deepbooru for caption",
+  "Use BLIP for caption": "캡션에 BLIP 사용",
+  "Use deepbooru for caption": "캡션에 deepbooru 사용",
+  "Use dropout": "드롭아웃 사용",
   "Use following tags to define how filenames for images are chosen: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; leave empty for default.": "Use following tags to define how filenames for images are chosen: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; leave empty for default.",
   "Use following tags to define how subdirectories for images and grids are chosen: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; leave empty for default.": "Use following tags to define how subdirectories for images and grids are chosen: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; leave empty for default.",
   "Use old emphasis implementation. Can be useful to reproduce old seeds.": "Use old emphasis implementation. Can be useful to reproduce old seeds.",
   "Use original name for output filename during batch process in extras tab": "Use original name for output filename during batch process in extras tab",
+  "use spaces for tags in deepbooru": "use spaces for tags in deepbooru",
   "User interface": "User interface",
-  "VRAM usage polls per second during generation. Set to 0 to disable.": "VRAM usage polls per second during generation. Set to 0 to disable.",
   "Var. seed": "바리에이션 시드",
   "Var. strength": "바리에이션 강도",
   "Variation seed": "바리에이션 시드",
   "Variation strength": "바리에이션 강도",
-  "Weighted sum": "Weighted sum",
+  "view": "api 보이기",
+  "VRAM usage polls per second during generation. Set to 0 to disable.": "VRAM usage polls per second during generation. Set to 0 to disable.",
+  "Weighted sum": "가중 합",
   "What to put inside the masked area before processing it with Stable Diffusion.": "Stable Diffusion으로 이미지를 생성하기 전 마스크된 부분에 무엇을 채울지 결정하는 설정값",
   "When reading generation parameters from text into UI (from PNG info or pasted text), do not change the selected model/checkpoint.": "When reading generation parameters from text into UI (from PNG info or pasted text), do not change the selected model/checkpoint.",
   "When using \"Save\" button, save images to a subdirectory": "When using \"Save\" button, save images to a subdirectory",
   "When using 'Save' button, only save a single selected image": "When using 'Save' button, only save a single selected image",
   "Which algorithm to use to produce the image": "이미지를 생성할 때 사용할 알고리즘",
   "Width": "가로",
+  "wiki": " 위키",
   "Will upscale the image to twice the dimensions; use width and height sliders to set tile size": "이미지를 설정된 사이즈의 2배로 업스케일합니다. 상단의 가로와 세로 슬라이더를 이용해 타일 사이즈를 지정하세요.",
   "With img2img, do exactly the amount of steps the slider specifies (normally you'd do less with less denoising).": "With img2img, do exactly the amount of steps the slider specifies (normally you'd do less with less denoising).",
   "Write image to a directory (default - log/images) and generation parameters into csv file.": "이미지를 경로에 저장하고, 설정값들을 csv 파일로 저장합니다. (기본 경로 - log/images)",
@@ -377,46 +475,5 @@
   "X values": "X 설정값",
   "X/Y plot": "X/Y 플롯",
   "Y type": "Y축",
-  "Y values": "Y 설정값",
-  "api": "",
-  "built with gradio": "gradio로 제작되었습니다",
-  "checkpoint": "checkpoint",
-  "directory.": "directory.",
-  "down": "아래쪽",
-  "escape (\\) brackets in deepbooru (so they are used as literal brackets and not for emphasis)": "escape (\\) brackets in deepbooru (so they are used as literal brackets and not for emphasis)",
-  "eta (noise multiplier) for DDIM": "eta (noise multiplier) for DDIM",
-  "eta (noise multiplier) for ancestral samplers": "eta (noise multiplier) for ancestral samplers",
-  "extras history": "extras history",
-  "fill it with colors of the image": "이미지의 색상으로 채우기",
-  "fill it with latent space noise": "잠재 공간 노이즈로 채우기",
-  "fill it with latent space zeroes": "잠재 공간의 0값으로 채우기",
-  "fill": "채우기",
-  "for detailed explanation.": "for detailed explanation.",
-  "hide": "api 숨기기",
-  "how fast should the training go. Low values will take longer to train, high values may fail to converge (not generate accurate results) and/or may break the embedding (This has happened if you see Loss: nan in the training info textbox. If this happens, you need to manually restore your embedding from an older not-broken backup).\n\nYou can set a single numeric value, or multiple learning rates using the syntax:\n\n   rate_1:max_steps_1, rate_2:max_steps_2, ...\n\nEG:   0.005:100, 1e-3:1000, 1e-5\n\nWill train with rate of 0.005 for first 100 steps, then 1e-3 until 1000 steps, then 1e-5 for all remaining steps.": "how fast should the training go. Low values will take longer to train, high values may fail to converge (not generate accurate results) and/or may break the embedding (This has happened if you see Loss: nan in the training info textbox. If this happens, you need to manually restore your embedding from an older not-broken backup).\n\nYou can set a single numeric value, or multiple learning rates using the syntax:\n\n   rate_1:max_steps_1, rate_2:max_steps_2, ...\n\nEG:   0.005:100, 1e-3:1000, 1e-5\n\nWill train with rate of 0.005 for first 100 steps, then 1e-3 until 1000 steps, then 1e-5 for all remaining steps.",
-  "img2img DDIM discretize": "img2img DDIM discretize",
-  "img2img alternative test": "이미지→이미지 대체버전 테스트",
-  "img2img history": "img2img history",
-  "img2img": "이미지→이미지",
-  "keep whatever was there originally": "이미지 원본 유지",
-  "latent noise": "잠재 노이즈",
-  "latent nothing": "잠재 공백",
-  "left": "왼쪽",
-  "number of images to delete consecutively next": "number of images to delete consecutively next",
-  "or": "or",
-  "original": "원본 유지",
-  "quad": "quad",
-  "right": "오른쪽",
-  "set_index": "set_index",
-  "should be 2 or lower.": "이 2 이하여야 합니다.",
-  "sigma churn": "sigma churn",
-  "sigma noise": "sigma noise",
-  "sigma tmin": "sigma tmin",
-  "txt2img history": "txt2img history",
-  "txt2img": "텍스트→이미지",
-  "uniform": "uniform",
-  "up": "위쪽",
-  "use spaces for tags in deepbooru": "use spaces for tags in deepbooru",
-  "view": "api 보이기",
-  "wiki": "wiki"
-}
+  "Y values": "Y 설정값"
+}
\ No newline at end of file

From 6124575e1892259bf706db186de303acc9de47bf Mon Sep 17 00:00:00 2001
From: Dynamic <bradje@naver.com>
Date: Mon, 24 Oct 2022 04:29:19 +0900
Subject: [PATCH 15/73] Translation complete

---
 localizations/ko_KR.json | 302 +++++++++++++++++++++------------------
 1 file changed, 160 insertions(+), 142 deletions(-)

diff --git a/localizations/ko_KR.json b/localizations/ko_KR.json
index a48ece87..6889de46 100644
--- a/localizations/ko_KR.json
+++ b/localizations/ko_KR.json
@@ -15,23 +15,24 @@
   "A merger of the two checkpoints will be generated in your": "체크포인트들이 병합된 결과물이 당신의",
   "A value that determines the output of random number generator - if you create an image with same parameters and seed as another image, you'll get the same result": "난수 생성기의 결과물을 지정하는 값 - 동일한 설정값과 동일한 시드를 적용 시, 완전히 똑같은 결과물을 얻게 됩니다.",
   "Add a random artist to the prompt.": "프롬프트에 랜덤한 작가 추가",
-  "Add a second progress bar to the console that shows progress for an entire job.": "Add a second progress bar to the console that shows progress for an entire job.",
+  "Add a second progress bar to the console that shows progress for an entire job.": "콘솔에 전체 작업의 진행도를 보여주는 2번째 프로그레스 바 추가하기",
   "Add difference": "차이점 추가",
-  "Add extended info (seed, prompt) to filename when saving grid": "Add extended info (seed, prompt) to filename when saving grid",
+  "Add extended info (seed, prompt) to filename when saving grid": "그리드 저장 시 파일명에 추가 정보(시드, 프롬프트) 기입",
   "Add layer normalization": "레이어 정규화(normalization) 추가",
-  "Add model hash to generation information": "Add model hash to generation information",
-  "Add model name to generation information": "Add model name to generation information",
+  "Add model hash to generation information": "생성 정보에 모델 해시 추가",
+  "Add model name to generation information": "생성 정보에 모델 이름 추가",
   "Aesthetic imgs embedding": "스타일 이미지 임베딩",
   "Aesthetic learning rate": "스타일 학습 수",
   "Aesthetic steps": "스타일 스텝 수",
   "Aesthetic text for imgs": "스타일 텍스트",
   "Aesthetic weight": "스타일 가중치",
-  "Always print all generation info to standard output": "Always print all generation info to standard output",
-  "Always save all generated image grids": "Always save all generated image grids",
+  "Allowed categories for random artists selection when using the Roll button": "랜덤 버튼을 눌러 무작위 작가를 선택할 때 허용된 카테고리",
+  "Always print all generation info to standard output": "기본 아웃풋에 모든 생성 정보 항상 출력하기",
+  "Always save all generated image grids": "생성된 이미지 그리드 항상 저장하기",
   "Always save all generated images": "생성된 이미지 항상 저장하기",
   "api": "",
   "append": "뒤에 삽입",
-  "Apply color correction to img2img results to match original colors.": "Apply color correction to img2img results to match original colors.",
+  "Apply color correction to img2img results to match original colors.": "이미지→이미지 결과물이 기존 색상과 일치하도록 색상 보정 적용하기",
   "Apply selected styles to current prompt": "현재 프롬프트에 선택된 스타일 적용",
   "Apply settings": "설정 적용하기",
   "Batch count": "배치 수",
@@ -43,29 +44,29 @@
   "built with gradio": "gradio로 제작되었습니다",
   "Cancel generate forever": "반복 생성 취소",
   "CFG Scale": "CFG 스케일",
-  "Check progress": "Check progress",
-  "Check progress (first)": "Check progress (first)",
+  "Check progress": "진행도 체크",
+  "Check progress (first)": "진행도 체크 (처음)",
   "checkpoint": " 체크포인트 ",
   "Checkpoint Merger": "체크포인트 병합",
   "Checkpoint name": "체크포인트 이름",
-  "Checkpoints to cache in RAM": "Checkpoints to cache in RAM",
+  "Checkpoints to cache in RAM": "RAM에 캐싱할 체크포인트 수",
   "Classifier Free Guidance Scale - how strongly the image should conform to prompt - lower values produce more creative results": "Classifier Free Guidance Scale - 이미지가 주어진 프롬프트를 얼마나 따를지를 정해주는 수치 - 낮은 값일수록 더 창의적인 결과물이 나옴",
-  "Click to Upload": "Click to Upload",
+  "Click to Upload": "클릭해서 업로드하기",
   "Clip skip": "클립 건너뛰기",
-  "CLIP: maximum number of lines in text file (0 = No limit)": "CLIP: maximum number of lines in text file (0 = No limit)",
+  "CLIP: maximum number of lines in text file (0 = No limit)": "CLIP : 텍스트 파일 최대 라인 수 (0 = 제한 없음)",
   "CodeFormer visibility": "CodeFormer 가시성",
   "CodeFormer weight (0 = maximum effect, 1 = minimum effect)": "CodeFormer 가중치 (0 = 최대 효과, 1 = 최소 효과)",
-  "CodeFormer weight parameter; 0 = maximum effect; 1 = minimum effect": "CodeFormer weight parameter; 0 = maximum effect; 1 = minimum effect",
+  "CodeFormer weight parameter; 0 = maximum effect; 1 = minimum effect": "CodeFormer 가중치 설정값 (0 = 최대 효과, 1 = 최소 효과)",
   "Color variation": "색깔 다양성",
   "Collect": "즐겨찾기",
   "copy": "복사",
   "Create a grid where images will have different parameters. Use inputs below to specify which parameters will be shared by columns and rows": "서로 다른 설정값으로 생성된 이미지의 그리드를 만듭니다. 아래의 설정으로 가로/세로에 어떤 설정값을 적용할지 선택하세요.",
-  "Create a text file next to every image with generation parameters.": "Create a text file next to every image with generation parameters.",
-  "Create aesthetic images embedding": "Create aesthetic images embedding",
+  "Create a text file next to every image with generation parameters.": "생성된 이미지마다 생성 설정값을 담은 텍스트 파일 생성하기",
+  "Create aesthetic images embedding": "스타일 이미지 임베딩 생성하기",
   "Create embedding": "임베딩 생성",
   "Create flipped copies": "좌우로 뒤집은 복사본 생성",
   "Create hypernetwork": "하이퍼네트워크 생성",
-  "Create images embedding": "Create images embedding",
+  "Create images embedding": "이미지 임베딩 생성하기",
   "Crop and resize": "잘라낸 후 리사이징",
   "Crop to fit": "잘라내서 맞추기",
   "Custom Name (Optional)": "병합 모델 이름 (선택사항)",
@@ -80,15 +81,15 @@
   "Denoising strength change factor": "디노이즈 강도 변경 배수",
   "Destination directory": "결과물 저장 경로",
   "Determines how little respect the algorithm should have for image's content. At 0, nothing will change, and at 1 you'll get an unrelated image. With values below 1.0, processing will take less steps than the Sampling Steps slider specifies.": "알고리즘이 얼마나 원본 이미지를 반영할지를 결정하는 수치입니다. 0일 경우 아무것도 바뀌지 않고, 1일 경우 원본 이미지와 전혀 관련없는 결과물을 얻게 됩니다. 1.0 아래의 값일 경우, 설정된 샘플링 스텝 수보다 적은 스텝 수를 거치게 됩니다.",
-  "Directory for saving images using the Save button": "Directory for saving images using the Save button",
-  "Directory name pattern": "Directory name pattern",
+  "Directory for saving images using the Save button": "저장 버튼을 이용해 저장하는 이미지들의 저장 경로",
+  "Directory name pattern": "디렉토리명 패턴",
   "directory.": "저장 경로에 저장됩니다.",
-  "Do not add watermark to images": "Do not add watermark to images",
+  "Do not add watermark to images": "이미지에 워터마크 추가하지 않기",
   "Do not do anything special": "아무것도 하지 않기",
-  "Do not save grids consisting of one picture": "Do not save grids consisting of one picture",
-  "Do not show any images in results for web": "Do not show any images in results for web",
+  "Do not save grids consisting of one picture": "이미지가 1개뿐인 그리드는 저장하지 않기",
+  "Do not show any images in results for web": "웹에서 결과창에 아무 이미지도 보여주지 않기",
   "down": "아래쪽",
-  "Download localization template": "Download localization template",
+  "Download localization template": "현지화 템플릿 다운로드",
   "Download": "다운로드",
   "DPM adaptive": "DPM adaptive",
   "DPM fast": "DPM fast",
@@ -98,65 +99,67 @@
   "DPM2 Karras": "DPM2 Karras",
   "Draw legend": "범례 그리기",
   "Draw mask": "마스크 직접 그리기",
-  "Drop File Here": "Drop File Here",
-  "Drop Image Here": "Drop Image Here",
+  "Drop File Here": "파일을 끌어 놓으세요",
+  "Drop Image Here": "이미지를 끌어 놓으세요",
   "Embedding": "임베딩",
   "Embedding Learning rate": "임베딩 학습률",
-  "Emphasis: use (text) to make model pay more attention to text and [text] to make it pay less attention": "Emphasis: use (text) to make model pay more attention to text and [text] to make it pay less attention",
-  "Enable full page image viewer": "Enable full page image viewer",
-  "Enable quantization in K samplers for sharper and cleaner results. This may change existing seeds. Requires restart to apply.": "Enable quantization in K samplers for sharper and cleaner results. This may change existing seeds. Requires restart to apply.",
+  "Emphasis: use (text) to make model pay more attention to text and [text] to make it pay less attention": "강조 : (텍스트)를 이용해 모델의 텍스트에 대한 가중치를 더 강하게 주고 [텍스트]를 이용해 더 약하게 줍니다.",
+  "Enable full page image viewer": "전체 페이지 이미지 뷰어 활성화",
+  "Enable quantization in K samplers for sharper and cleaner results. This may change existing seeds. Requires restart to apply.": "더 예리하고 깔끔한 결과물을 위해 K 샘플러들에 양자화를 적용합니다. 존재하는 시드가 변경될 수 있습니다. 재시작이 필요합니다.",
   "End Page": "마지막 페이지",
   "Enter hypernetwork layer structure": "하이퍼네트워크 레이어 구조 입력",
   "Error": "오류",
-  "escape (\\) brackets in deepbooru (so they are used as literal brackets and not for emphasis)": "escape (\\) brackets in deepbooru (so they are used as literal brackets and not for emphasis)",
+  "escape (\\) brackets in deepbooru (so they are used as literal brackets and not for emphasis)": "deepbooru에서 괄호를 역슬래시(\\)로 이스케이프 처리하기(가중치 강조가 아니라 실제 괄호로 사용되게 하기 위해)",
   "ESRGAN_4x": "ESRGAN_4x",
   "Eta": "Eta",
-  "eta (noise multiplier) for ancestral samplers": "eta (noise multiplier) for ancestral samplers",
-  "eta (noise multiplier) for DDIM": "eta (noise multiplier) for DDIM",
-  "Eta noise seed delta": "Eta noise seed delta",
+  "eta (noise multiplier) for ancestral samplers": "ancestral 샘플러를 위한 eta(노이즈 배수)값",
+  "eta (noise multiplier) for DDIM": "DDIM을 위한 eta(노이즈 배수)값",
+  "Eta noise seed delta": "Eta 노이즈 시드 변화",
   "Euler": "Euler",
   "Euler a": "Euler a",
   "Euler Ancestral - very creative, each can get a completely different picture depending on step count, setting steps to higher than 30-40 does not help": "Euler Ancestral - 매우 창의적, 스텝 수에 따라 완전히 다른 결과물이 나올 수 있음. 30~40보다 높은 스텝 수는 효과가 미미함",
   "Existing Caption txt Action": "이미 존재하는 캡션 텍스트 처리",
   "Extra": "고급",
   "Extras": "부가기능",
-  "extras history": "extras history",
-  "Face restoration": "Face restoration",
+  "extras history": "부가기능 기록",
+  "Face restoration": "얼굴 보정",
+  "Face restoration model": "얼굴 보정 모델",
   "Fall-off exponent (lower=higher detail)": "감쇠 지수 (낮을수록 디테일이 올라감)",
   "favorites": "즐겨찾기",
-  "File": "File",
-  "File format for grids": "File format for grids",
-  "File format for images": "File format for images",
+  "File": "파일",
+  "File format for grids": "그리드 이미지 파일 형식",
+  "File format for images": "이미지 파일 형식",
   "File Name": "파일 이름",
   "File with inputs": "설정값 파일",
-  "Filename join string": "Filename join string",
-  "Filename word regex": "Filename word regex",
+  "Filename join string": "파일명 병합 문자열",
+  "Filename word regex": "파일명 정규표현식",
   "fill": "채우기",
   "fill it with colors of the image": "이미지의 색상으로 채우기",
   "fill it with latent space noise": "잠재 공간 노이즈로 채우기",
   "fill it with latent space zeroes": "잠재 공간의 0값으로 채우기",
-  "Filter NSFW content": "Filter NSFW content",
+  "Filter NSFW content": "성인 컨텐츠 필터링하기",
   "First Page": "처음 페이지",
   "Firstpass height": "초기 세로길이",
   "Firstpass width": "초기 가로길이",
-  "Font for image grids that have text": "Font for image grids that have text",
+  "Font for image grids that have text": "텍스트가 존재하는 그리드 이미지의 폰트",
   "for detailed explanation.": "를 참조하십시오.",
   "For SD upscale, how much overlap in pixels should there be between tiles. Tiles overlap so that when they are merged back into one picture, there is no clearly visible seam.": "SD 업스케일링에서 타일 간 몇 픽셀을 겹치게 할지 결정하는 설정값입니다. 타일들이 다시 한 이미지로 합쳐질 때, 눈에 띄는 이음매가 없도록 서로 겹치게 됩니다.",
   "Generate": "생성",
   "Generate forever": "반복 생성",
   "Generate Info": "생성 정보",
   "GFPGAN visibility": "GFPGAN 가시성",
-  "Grid row count; use -1 for autodetect and 0 for it to be same as batch size": "Grid row count; use -1 for autodetect and 0 for it to be same as batch size",
+  "Grid row count; use -1 for autodetect and 0 for it to be same as batch size": "그리드 세로줄 수 : -1로 설정 시 자동 감지/0으로 설정 시 배치 크기와 동일",
   "Height": "세로",
   "Heun": "Heun",
   "hide": "api 숨기기",
-  "Hide samplers in user interface (requires restart)": "Hide samplers in user interface (requires restart)",
+  "Hide samplers in user interface (requires restart)": "사용자 인터페이스에서 숨길 샘플러 선택(재시작 필요)",
   "Highres. fix": "고해상도 보정",
   "History": "기록",
   "Image Browser": "이미지 브라우저",
+  "Images Browser": "이미지 브라우저",
   "Images directory": "이미지 경로",
   "extras": "부가기능",
-  "how fast should the training go. Low values will take longer to train, high values may fail to converge (not generate accurate results) and/or may break the embedding (This has happened if you see Loss: nan in the training info textbox. If this happens, you need to manually restore your embedding from an older not-broken backup).\n\nYou can set a single numeric value, or multiple learning rates using the syntax:\n\n   rate_1:max_steps_1, rate_2:max_steps_2, ...\n\nEG:   0.005:100, 1e-3:1000, 1e-5\n\nWill train with rate of 0.005 for first 100 steps, then 1e-3 until 1000 steps, then 1e-5 for all remaining steps.": "how fast should the training go. Low values will take longer to train, high values may fail to converge (not generate accurate results) and/or may break the embedding (This has happened if you see Loss: nan in the training info textbox. If this happens, you need to manually restore your embedding from an older not-broken backup).\n\nYou can set a single numeric value, or multiple learning rates using the syntax:\n\n   rate_1:max_steps_1, rate_2:max_steps_2, ...\n\nEG:   0.005:100, 1e-3:1000, 1e-5\n\nWill train with rate of 0.005 for first 100 steps, then 1e-3 until 1000 steps, then 1e-5 for all remaining steps.",
+  "how fast should the training go. Low values will take longer to train, high values may fail to converge (not generate accurate results) and/or may break the embedding (This has happened if you see Loss: nan in the training info textbox. If this happens, you need to manually restore your embedding from an older not-broken backup).\n\nYou can set a single numeric value, or multiple learning rates using the syntax:\n\n   rate_1:max_steps_1, rate_2:max_steps_2, ...\n\nEG:   0.005:100, 1e-3:1000, 1e-5\n\nWill train with rate of 0.005 for first 100 steps, then 1e-3 until 1000 steps, then 1e-5 for all remaining steps.": "훈련이 얼마나 빨리 이루어질지 정하는 값입니다. 값이 낮을수록 훈련 시간이 길어지고, 높은 값일수록 정확한 결과를 내는 데 실패하고 임베딩을 망가뜨릴 수 있습니다(임베딩이 망가진 경우에는 훈련 정보 텍스트박스에 손실(Loss) : nan 이라고 출력되게 됩니다. 이 경우에는 망가지지 않은 이전 백업본을 불러와야 합니다).\n\n학습률은 하나의 값으로 설정할 수도 있고, 다음 문법을 사용해 여러 값을 사용할 수도 있습니다 :\n\n학습률_1:최대 스텝수_1, 학습률_2:최대 스텝수_2, ...\n\n예 : 0.005:100, 1e-3:1000, 1e-5\n\n예의 설정값은 첫 100스텝동안 0.005의 학습률로, 그 이후 1000스텝까지는 1e-3으로, 남은 스텝은 1e-5로 훈련하게 됩니다.",
   "How many batches of images to create": "생성할 이미지 배치 수",
   "How many image to create in a single batch": "한 배치당 이미지 수",
   "How many times to improve the generated image iteratively; higher values take longer; very low values can produce bad results": "생성된 이미지를 향상할 횟수; 매우 낮은 값은 만족스럽지 못한 결과물을 출력할 수 있음",
@@ -166,111 +169,114 @@
   "Hypernet str.": "하이퍼네트워크 강도",
   "Hypernetwork": "하이퍼네트워크",
   "Hypernetwork Learning rate": "하이퍼네트워크 학습률",
-  "Hypernetwork strength": "Hypernetwork strength",
-  "If PNG image is larger than 4MB or any dimension is larger than 4000, downscale and save copy as JPG": "If PNG image is larger than 4MB or any dimension is larger than 4000, downscale and save copy as JPG",
-  "If this option is enabled, watermark will not be added to created images. Warning: if you do not add watermark, you may be behaving in an unethical manner.": "If this option is enabled, watermark will not be added to created images. Warning: if you do not add watermark, you may be behaving in an unethical manner.",
-  "If this values is non-zero, it will be added to seed and used to initialize RNG for noises when using samplers with Eta. You can use this to produce even more variation of images, or you can use this to match images of other software if you know what you are doing.": "If this values is non-zero, it will be added to seed and used to initialize RNG for noises when using samplers with Eta. You can use this to produce even more variation of images, or you can use this to match images of other software if you know what you are doing.",
+  "Hypernetwork strength": "하이퍼네트워크 강도",
+  "If PNG image is larger than 4MB or any dimension is larger than 4000, downscale and save copy as JPG": "PNG 이미지가 4MB보다 크거나 가로 또는 세로길이가 4000보다 클 경우, 다운스케일 후 JPG로 복사본 저장하기",
+  "If this option is enabled, watermark will not be added to created images. Warning: if you do not add watermark, you may be behaving in an unethical manner.": "이 옵션이 활성화되면 생성된 이미지에 워터마크가 추가되지 않습니다. 경고 : 워터마크를 추가하지 않는다면, 비윤리적인 행동을 하는 중일지도 모릅니다.",
+  "If this values is non-zero, it will be added to seed and used to initialize RNG for noises when using samplers with Eta. You can use this to produce even more variation of images, or you can use this to match images of other software if you know what you are doing.": "이 값이 0이 아니라면, 시드에 해당 값이 더해지고, Eta가 있는 샘플러를 사용할 때 노이즈의 RNG 조정을 위해 해당 값이 사용됩니다. 이 설정으로 더 다양한 이미지를 생성하거나, 잘 알고 계시다면 특정 소프트웨어의 결과값을 재현할 수도 있습니다.",
   "ignore": "무시",
-  "Image": "Image",
+  "Image": "이미지",
   "Image for img2img": "Image for img2img",
-  "Image for inpainting with mask": "Image for inpainting with mask",
-  "Images filename pattern": "Images filename pattern",
+  "Image for inpainting with mask": "마스크로 인페인팅할 이미지",
+  "Images filename pattern": "이미지 파일명 패턴",
   "img2img": "이미지→이미지",
   "img2img alternative test": "이미지→이미지 대체버전 테스트",
-  "img2img DDIM discretize": "img2img DDIM discretize",
-  "img2img history": "img2img history",
+  "img2img DDIM discretize": "이미지→이미지 DDIM 이산화",
+  "img2img history": "이미지→이미지 기록",
   "In loopback mode, on each loop the denoising strength is multiplied by this value. <1 means decreasing variety so your sequence will converge on a fixed picture. >1 means increasing variety so your sequence will become more and more chaotic.": "루프백 모드에서는 매 루프마다 디노이즈 강도에 이 값이 곱해집니다. 1보다 작을 경우 다양성이 낮아져 결과 이미지들이 고정된 형태로 모일 겁니다. 1보다 클 경우 다양성이 높아져 결과 이미지들이 갈수록 혼란스러워지겠죠.",
   "Include Separate Images": "분리된 이미지 포함하기",
-  "Increase coherency by padding from the last comma within n tokens when using more than 75 tokens": "Increase coherency by padding from the last comma within n tokens when using more than 75 tokens",
+  "Increase coherency by padding from the last comma within n tokens when using more than 75 tokens": "75개보다 많은 토큰을 사용시 마지막 쉼표로부터 N개의 토큰 이내에 패딩을 추가해 통일성 증가시키기",
   "Initialization text": "초기화 텍스트",
   "Inpaint": "인페인트",
   "Inpaint at full resolution": "전체 해상도로 인페인트하기",
-  "Inpaint at full resolution padding, pixels": "전체 해상도로 인페인트 패딩값(픽셀 단위)",
+  "Inpaint at full resolution padding, pixels": "전체 해상도로 인페인트시 패딩값(픽셀 단위)",
   "Inpaint masked": "마스크만 처리",
   "Inpaint not masked": "마스크 이외만 처리",
   "Input directory": "인풋 이미지 경로",
   "Interpolation Method": "보간 방법",
   "Interrogate\nCLIP": "CLIP\n분석",
   "Interrogate\nDeepBooru": "DeepBooru\n분석",
-  "Interrogate Options": "Interrogate Options",
-  "Interrogate: deepbooru score threshold": "Interrogate: deepbooru score threshold",
-  "Interrogate: deepbooru sort alphabetically": "Interrogate: deepbooru sort alphabetically",
-  "Interrogate: include ranks of model tags matches in results (Has no effect on caption-based interrogators).": "Interrogate: include ranks of model tags matches in results (Has no effect on caption-based interrogators).",
-  "Interrogate: keep models in VRAM": "Interrogate: keep models in VRAM",
-  "Interrogate: maximum description length": "Interrogate: maximum description length",
-  "Interrogate: minimum description length (excluding artists, etc..)": "Interrogate: minimum description length (excluding artists, etc..)",
-  "Interrogate: num_beams for BLIP": "Interrogate: num_beams for BLIP",
-  "Interrogate: use artists from artists.csv": "Interrogate: use artists from artists.csv",
+  "Interrogate Options": "분석 설정",
+  "Interrogate: deepbooru score threshold": "분석 : deepbooru 점수 임계값",
+  "Interrogate: deepbooru sort alphabetically": "분석 : deepbooru 알파벳 순서로 정렬하기",
+  "Interrogate: include ranks of model tags matches in results (Has no effect on caption-based interrogators).": "분석 : 결과물에 모델 태그의 랭크 포함하기 (캡션 바탕의 분석기에는 효과 없음)",
+  "Interrogate: keep models in VRAM": "분석 : VRAM에 모델 유지하기",
+  "Interrogate: maximum description length": "분석 : 설명 최대 길이",
+  "Interrogate: minimum description length (excluding artists, etc..)": "분석 : 설명 최소 길이(작가 등등..제외)",
+  "Interrogate: num_beams for BLIP": "분석 : BLIP의 num_beams값",
+  "Interrogate: use artists from artists.csv": "분석 : artists.csv의 작가들 사용하기",
   "Interrupt": "중단",
   "Is negative text": "네거티브 텍스트일시 체크",
   "Just resize": "리사이징",
   "Keep -1 for seeds": "시드값 -1로 유지",
   "keep whatever was there originally": "이미지 원본 유지",
-  "Label": "Label",
+  "Label": "라벨",
   "Lanczos": "Lanczos",
-  "Last prompt:": "Last prompt:",
-  "Last saved hypernetwork:": "Last saved hypernetwork:",
-  "Last saved image:": "Last saved image:",
+  "Last prompt:": "마지막 프롬프트 : ",
+  "Last saved hypernetwork:": "마지막으로 저장된 하이퍼네트워크 : ",
+  "Last saved image:": "마지막으로 저장된 이미지 : ",
   "latent noise": "잠재 노이즈",
   "latent nothing": "잠재 공백",
   "LDSR": "LDSR",
-  "LDSR processing steps. Lower = faster": "LDSR processing steps. Lower = faster",
+  "LDSR processing steps. Lower = faster": "LDSR 스텝 수. 낮은 값 = 빠른 속도",
   "leakyrelu": "leakyrelu",
   "Leave blank to save images to the default path.": "기존 저장 경로에 이미지들을 저장하려면 비워두세요.",
   "left": "왼쪽",
   "linear": "linear",
-  "List of setting names, separated by commas, for settings that should go to the quick access bar at the top, rather than the usual setting tab. See modules/shared.py for setting names. Requires restarting to apply.": "List of setting names, separated by commas, for settings that should go to the quick access bar at the top, rather than the usual setting tab. See modules/shared.py for setting names. Requires restarting to apply.",
+  "List of setting names, separated by commas, for settings that should go to the quick access bar at the top, rather than the usual setting tab. See modules/shared.py for setting names. Requires restarting to apply.": "설정 탭이 아니라 상단의 빠른 설정 바에 위치시킬 설정 이름을 쉼표로 분리해서 입력하십시오. 설정 이름은 modules/shared.py에서 찾을 수 있습니다. 재시작이 필요합니다.",
   "LMS": "LMS",
   "LMS Karras": "LMS Karras",
   "Load": "불러오기",
   "Loading...": "로딩 중...",
-  "Localization (requires restart)": "Localization (requires restart)",
+  "Localization (requires restart)": "현지화 (재시작 필요)",
   "Log directory": "로그 경로",
   "Loopback": "루프백",
   "Loops": "루프 수",
-  "Loss:": "Loss:",
+  "Loss:": "손실(Loss) : ",
   "Make an attempt to produce a picture similar to what would have been produced with same seed at specified resolution": "동일한 시드 값으로 생성되었을 이미지를 주어진 해상도로 최대한 유사하게 재현합니다.",
-  "Make K-diffusion samplers produce same images in a batch as when making a single image": "Make K-diffusion samplers produce same images in a batch as when making a single image",
+  "Make K-diffusion samplers produce same images in a batch as when making a single image": "K-diffusion 샘플러들이 단일 이미지를 생성하는 것처럼 배치에서도 동일한 이미지를 생성하게 하기",
   "Make Zip when Save?": "저장 시 Zip 생성하기",
   "Mask": "마스크",
   "Mask blur": "마스크 블러",
-  "Mask mode": "Mask mode",
+  "Mask mode": "마스크 모드",
   "Masked content": "마스크된 부분",
-  "Masking mode": "Masking mode",
-  "Max prompt words for [prompt_words] pattern": "Max prompt words for [prompt_words] pattern",
+  "Masking mode": "마스킹 모드",
+  "Max prompt words for [prompt_words] pattern": "[prompt_words] 패턴의 최대 프롬프트 단어 수",
   "Max steps": "최대 스텝 수",
   "Modules": "모듈",
-  "Move face restoration model from VRAM into RAM after processing": "Move face restoration model from VRAM into RAM after processing",
-  "Move VAE and CLIP to RAM when training hypernetwork. Saves VRAM.": "Move VAE and CLIP to RAM when training hypernetwork. Saves VRAM.",
+  "Move face restoration model from VRAM into RAM after processing": "처리가 완료되면 얼굴 보정 모델을 VRAM에서 RAM으로 옮기기",
+  "Move VAE and CLIP to RAM when training hypernetwork. Saves VRAM.": "하이퍼네트워크 훈련 진행 시 VAE와 CLIP을 RAM으로 옮기기. VRAM이 절약됩니다.",
   "Multiplier (M) - set to 0 to get model A": "배율 (M) - 0으로 적용하면 모델 A를 얻게 됩니다",
   "Name": "이름",
   "Negative prompt": "네거티브 프롬프트",
   "Negative prompt (press Ctrl+Enter or Alt+Enter to generate)": "네거티브 프롬프트 입력(Ctrl+Enter나 Alt+Enter로 생성 시작)",
   "Next batch": "다음 묶음",
   "Next Page": "다음 페이지",
-  "None": "None",
+  "None": "없음",
   "Nothing": "없음",
   "Nothing found in the image.": "Nothing found in the image.",
   "number of images to delete consecutively next": "연속적으로 삭제할 이미지 수",
-  "Number of repeats for a single input image per epoch; used only for displaying epoch number": "Number of repeats for a single input image per epoch; used only for displaying epoch number",
+  "Number of pictures displayed on each page": "각 페이지에 표시될 이미지 수",
+  "Minimum number of pages per load": "한번 불러올 때마다 불러올 최소 페이지 수",
+  "Number of grids in each row": "각 세로줄마다 표시될 그리드 수",
+  "Number of repeats for a single input image per epoch; used only for displaying epoch number": "세대(Epoch)당 단일 인풋 이미지의 반복 횟수 - 세대(Epoch) 숫자를 표시하는 데에만 사용됩니다. ",
   "Number of vectors per token": "토큰별 벡터 수",
   "Open for Clip Aesthetic!": "클립 스타일 기능을 활성화하려면 클릭!",
   "Open images output directory": "이미지 저장 경로 열기",
   "Open output directory": "저장 경로 열기",
-  "or": "or",
+  "or": "또는",
   "original": "원본 유지",
   "Original negative prompt": "기존 네거티브 프롬프트",
   "Original prompt": "기존 프롬프트",
   "Outpainting direction": "아웃페인팅 방향",
   "Outpainting mk2": "아웃페인팅 마크 2",
   "Output directory": "이미지 저장 경로",
-  "Output directory for grids; if empty, defaults to two directories below": "Output directory for grids; if empty, defaults to two directories below",
-  "Output directory for images from extras tab": "Output directory for images from extras tab",
-  "Output directory for images; if empty, defaults to three directories below": "Output directory for images; if empty, defaults to three directories below",
-  "Output directory for img2img grids": "Output directory for img2img grids",
-  "Output directory for img2img images": "Output directory for img2img images",
-  "Output directory for txt2img grids": "Output directory for txt2img grids",
-  "Output directory for txt2img images": "Output directory for txt2img images",
+  "Output directory for grids; if empty, defaults to two directories below": "그리드 이미지 저장 경로 - 비워둘 시 하단의 2가지 기본 경로로 설정됨",
+  "Output directory for images from extras tab": "부가기능 탭 저장 경로",
+  "Output directory for images; if empty, defaults to three directories below": "이미지 저장 경로 - 비워둘 시 하단의 3가지 기본 경로로 설정됨",
+  "Output directory for img2img grids": "이미지→이미지 그리드 저장 경로",
+  "Output directory for img2img images": "이미지→이미지 저장 경로",
+  "Output directory for txt2img grids": "텍스트→이미지 그리드 저장 경로",
+  "Output directory for txt2img images": "텍스트→이미지 저장 경로",
   "Override `Denoising strength` to 1?": "디노이즈 강도를 1로 적용할까요?",
   "Override `prompt` to the same value as `original prompt`?(and `negative prompt`)": "프롬프트 값을 기존 프롬프트와 동일하게 적용할까요?(네거티브 프롬프트 포함)",
   "Override `Sampling method` to Euler?(this method is built for it)": "샘플링 방법을 Euler로 적용할까요?(이 기능은 해당 샘플러를 위해 만들어져 있습니다)",
@@ -279,20 +285,21 @@
   "Overwrite Old Hypernetwork": "기존 하이퍼네트워크 덮어쓰기",
   "Page Index": "페이지 인덱스",
   "parameters": "설정값",
-  "Path to directory where to write outputs": "Path to directory where to write outputs",
+  "Path to directory where to write outputs": "결과물을 출력할 경로",
   "Path to directory with input images": "인풋 이미지가 있는 경로",
-  "Paths for saving": "Paths for saving",
+  "Paths for saving": "저장 경로",
   "Pixels to expand": "확장할 픽셀 수",
   "PLMS": "PLMS",
   "PNG Info": "PNG 정보",
   "Poor man's outpainting": "가난뱅이의 아웃페인팅",
-  "Preparing dataset from": "Preparing dataset from",
+  "Preload images at startup": "WebUI 가동 시 이미지 프리로드하기",
+  "Preparing dataset from": "준비된 데이터셋 경로 : ",
   "prepend": "앞에 삽입",
   "Preprocess": "전처리",
   "Preprocess images": "이미지 전처리",
   "Prev batch": "이전 묶음",
   "Prev Page": "이전 페이지",
-  "Prevent empty spots in grid (when set to autodetect)": "Prevent empty spots in grid (when set to autodetect)",
+  "Prevent empty spots in grid (when set to autodetect)": "(자동 감지 사용시)그리드에 빈칸이 생기는 것 방지하기",
   "Primary model (A)": "주 모델 (A)",
   "Process an image, use it as an input, repeat.": "이미지를 생성하고, 생성한 이미지를 다시 원본으로 사용하는 과정을 반복합니다.",
   "Process images in a directory on the same machine where the server is running.": "WebUI 서버가 돌아가고 있는 디바이스에 존재하는 디렉토리의 이미지들을 처리합니다.",
@@ -307,26 +314,26 @@
   "Prompts from file or textbox": "파일이나 텍스트박스로부터 프롬프트 불러오기",
   "Put variable parts at start of prompt": "변경되는 프롬프트를 앞에 위치시키기",
   "quad": "quad",
-  "Quality for saved jpeg images": "Quality for saved jpeg images",
-  "Quicksettings list": "Quicksettings list",
+  "Quality for saved jpeg images": "저장된 jpeg 이미지들의 품질",
+  "Quicksettings list": "빠른 설정 리스트",
   "R-ESRGAN 4x+ Anime6B": "R-ESRGAN 4x+ Anime6B",
   "Randomness": "랜덤성",
   "Read generation parameters from prompt or last generation if prompt is empty into user interface.": "클립보드에 복사된 정보로부터 설정값 읽어오기/프롬프트창이 비어있을경우 제일 최근 설정값 불러오기",
   "Read parameters (prompt, etc...) from txt2img tab when making previews": "프리뷰 이미지 생성 시 텍스트→이미지 탭에서 설정값(프롬프트 등) 읽어오기",
   "Recommended settings: Sampling Steps: 80-100, Sampler: Euler a, Denoising strength: 0.8": "추천 설정값 - 샘플링 스텝 수 : 80-100 , 샘플러 : Euler a, 디노이즈 강도 : 0.8",
-  "Reload custom script bodies (No ui updates, No restart)": "Reload custom script bodies (No ui updates, No restart)",
+  "Reload custom script bodies (No ui updates, No restart)": "커스텀 스크립트 리로드하기(UI 업데이트 없음, 재시작 없음)",
   "relu": "relu",
   "Renew Page": "Renew Page",
-  "Request browser notifications": "Request browser notifications",
+  "Request browser notifications": "브라우저 알림 권한 요청",
   "Resize": "리사이징 배수",
   "Resize and fill": "리사이징 후 채우기",
   "Resize image to target resolution. Unless height and width match, you will get incorrect aspect ratio.": "설정된 해상도로 이미지 리사이징을 진행합니다. 원본과 가로/세로 길이가 일치하지 않을 경우, 부정확한 화면비의 이미지를 얻게 됩니다.",
-  "Resize mode": "Resize mode",
+  "Resize mode": "리사이징 모드",
   "Resize seed from height": "시드 리사이징 가로길이",
   "Resize seed from width": "시드 리사이징 세로길이",
   "Resize the image so that entirety of image is inside target resolution. Fill empty space with image's colors.": "이미지 전체가 설정된 해상도 내부에 들어가게 리사이징을 진행합니다. 빈 공간은 이미지의 색상으로 채웁니다.",
   "Resize the image so that entirety of target resolution is filled with the image. Crop parts that stick out.": "설정된 해상도 전체가 이미지로 가득차게 리사이징을 진행합니다. 튀어나오는 부분은 잘라냅니다.",
-  "Restart Gradio and Refresh components (Custom Scripts, ui.py, js and css only)": "Restart Gradio and Refresh components (Custom Scripts, ui.py, js and css only)",
+  "Restart Gradio and Refresh components (Custom Scripts, ui.py, js and css only)": "Gradio를 재시작하고 컴포넌트 새로고침하기 (커스텀 스크립트, ui.py, js, css만 해당됨)",
   "Restore faces": "얼굴 보정",
   "Restore low quality faces using GFPGAN neural network": "GFPGAN 신경망을 이용해 저품질의 얼굴을 보정합니다.",
   "Result = A * (1 - M) + B * M": "결과물 = A * (1 - M) + B * M",
@@ -335,23 +342,23 @@
   "right": "오른쪽",
   "Run": "가동",
   "Sampler": "샘플러",
-  "Sampler parameters": "Sampler parameters",
+  "Sampler parameters": "샘플러 설정값",
   "Sampling method": "샘플링 방법",
   "Sampling Steps": "샘플링 스텝 수",
   "Save": "저장",
   "Save a copy of embedding to log directory every N steps, 0 to disable": "N스텝마다 로그 경로에 임베딩을 저장합니다, 비활성화하려면 0으로 설정하십시오.",
-  "Save a copy of image before applying color correction to img2img results": "Save a copy of image before applying color correction to img2img results",
-  "Save a copy of image before doing face restoration.": "Save a copy of image before doing face restoration.",
-  "Save an csv containing the loss to log directory every N steps, 0 to disable": "Save an csv containing the loss to log directory every N steps, 0 to disable",
+  "Save a copy of image before applying color correction to img2img results": "이미지→이미지 결과물에 색상 보정을 진행하기 전 이미지의 복사본을 저장하기",
+  "Save a copy of image before doing face restoration.": "얼굴 보정을 진행하기 전 이미지의 복사본을 저장하기",
+  "Save an csv containing the loss to log directory every N steps, 0 to disable": "N스텝마다 로그 경로에 손실(Loss)을 포함하는 csv 파일을 저장합니다, 비활성화하려면 0으로 설정하십시오.",
   "Save an image to log directory every N steps, 0 to disable": "N스텝마다 로그 경로에 이미지를 저장합니다, 비활성화하려면 0으로 설정하십시오.",
   "Save as float16": "float16으로 저장",
-  "Save grids to a subdirectory": "Save grids to a subdirectory",
-  "Save images to a subdirectory": "Save images to a subdirectory",
+  "Save grids to a subdirectory": "그리드 이미지를 하위 디렉토리에 저장하기",
+  "Save images to a subdirectory": "이미지를 하위 디렉토리에 저장하기",
   "Save images with embedding in PNG chunks": "PNG 청크로 이미지에 임베딩을 포함시켜 저장",
   "Save style": "스타일 저장",
-  "Save text information about generation parameters as chunks to png files": "Save text information about generation parameters as chunks to png files",
-  "Saving images/grids": "Saving images/grids",
-  "Saving to a directory": "Saving to a directory",
+  "Save text information about generation parameters as chunks to png files": "이미지 생성 설정값을 PNG 청크에 텍스트로 저장",
+  "Saving images/grids": "이미지/그리드 저장",
+  "Saving to a directory": "디렉토리에 저장",
   "Scale by": "스케일링 배수 지정",
   "Scale to": "스케일링 사이즈 지정",
   "Script": "스크립트",
@@ -363,6 +370,7 @@
   "Seed": "시드",
   "Seed of a different picture to be mixed into the generation.": "결과물에 섞일 다른 그림의 시드",
   "Select activation function of hypernetwork": "하이퍼네트워크 활성화 함수 선택",
+  "Select which Real-ESRGAN models to show in the web UI. (Requires restart)": "WebUI에 표시할 Real-ESRGAN 모델을 선택하십시오. (재시작 필요)",
   "Send to extras": "부가기능으로 전송",
   "Send to img2img": "이미지→이미지로 전송",
   "Send to inpaint": "인페인트로 전송",
@@ -374,29 +382,30 @@
   "set_index": "set_index",
   "Settings": "설정",
   "should be 2 or lower.": "이 2 이하여야 합니다.",
-  "Show generation progress in window title.": "Show generation progress in window title.",
-  "Show grid in results for web": "Show grid in results for web",
-  "Show image creation progress every N sampling steps. Set 0 to disable.": "Show image creation progress every N sampling steps. Set 0 to disable.",
-  "Show images zoomed in by default in full page image viewer": "Show images zoomed in by default in full page image viewer",
-  "Show progressbar": "Show progressbar",
+  "Show generation progress in window title.": "창 타이틀에 생성 진행도 보여주기",
+  "Show grid in results for web": "웹에서 결과창에 그리드 보여주기",
+  "Show image creation progress every N sampling steps. Set 0 to disable.": "N번째 샘플링 스텝마다 이미지 생성 과정 보이기 - 비활성화하려면 0으로 설정",
+  "Show images zoomed in by default in full page image viewer": "전체 페이지 이미지 뷰어에서 기본값으로 이미지 확대해서 보여주기",
+  "Show progressbar": "프로그레스 바 보이기",
   "Show result images": "이미지 결과 보이기",
   "Show Textbox": "텍스트박스 보이기",
+  "Show previews of all images generated in a batch as a grid": "배치에서 생성된 모든 이미지의 미리보기를 그리드 형식으로 보여주기",
   "Sigma adjustment for finding noise for image": "이미지 노이즈를 찾기 위해 시그마 조정",
   "Sigma Churn": "시그마 섞기",
-  "sigma churn": "sigma churn",
+  "sigma churn": "시그마 섞기",
   "Sigma max": "시그마 최댓값",
   "Sigma min": "시그마 최솟값",
   "Sigma noise": "시그마 노이즈",
-  "sigma noise": "sigma noise",
-  "sigma tmin": "sigma tmin",
+  "sigma noise": "시그마 노이즈",
+  "sigma tmin": "시그마 tmin",
   "Single Image": "단일 이미지",
   "Skip": "건너뛰기",
   "Slerp angle": "구면 선형 보간 각도",
   "Slerp interpolation": "구면 선형 보간",
   "Source": "원본",
   "Source directory": "원본 경로",
-  "Split image threshold": "Split image threshold",
-  "Split image overlap ratio": "Split image overlap ratio",
+  "Split image threshold": "이미지 분할 임계값",
+  "Split image overlap ratio": "이미지 분할 겹침 비율",
   "Split oversized images": "사이즈가 큰 이미지 분할하기",
   "Stable Diffusion": "Stable Diffusion",
   "Stable Diffusion checkpoint": "Stable Diffusion 체크포인트",
@@ -407,20 +416,20 @@
   "Stop processing images and return any results accumulated so far.": "이미지 생성을 중단하고 지금까지 진행된 결과물 출력",
   "Style 1": "스타일 1",
   "Style 2": "스타일 2",
-  "Style to apply; styles have components for both positive and negative prompts and apply to both": "Style to apply; styles have components for both positive and negative prompts and apply to both",
+  "Style to apply; styles have components for both positive and negative prompts and apply to both": "적용할 스타일 - 스타일은 긍정/부정 프롬프트 모두에 대한 설정값을 가지고 있고 양쪽 모두에 적용 가능합니다.",
   "SwinIR 4x": "SwinIR 4x",
   "Sys VRAM:": "시스템 VRAM : ",
-  "System": "System",
+  "System": "시스템",
   "Tertiary model (C)": "3차 모델 (C)",
-  "Textbox": "Textbox",
-  "This regular expression will be used extract words from filename, and they will be joined using the option below into label text used for training. Leave empty to keep filename text as it is.": "This regular expression will be used extract words from filename, and they will be joined using the option below into label text used for training. Leave empty to keep filename text as it is.",
-  "This string will be used to join split words into a single line if the option above is enabled.": "This string will be used to join split words into a single line if the option above is enabled.",
+  "Textbox": "텍스트박스",
+  "This regular expression will be used extract words from filename, and they will be joined using the option below into label text used for training. Leave empty to keep filename text as it is.": "이 정규표현식은 파일명으로부터 단어를 추출하는 데 사용됩니다. 추출된 단어들은 하단의 설정을 이용해 라벨 텍스트로 변환되어 훈련에 사용됩니다. 파일명 텍스트를 유지하려면 비워두십시오.",
+  "This string will be used to join split words into a single line if the option above is enabled.": "이 문자열은 상단 설정이 활성화되어있을 때 분리된 단어들을 한 줄로 합치는 데 사용됩니다.",
   "This text is used to rotate the feature space of the imgs embs": "이 텍스트는 이미지 임베딩의 특징 공간을 회전하는 데 사용됩니다.",
   "Tile overlap": "타일 겹침",
-  "Tile overlap, in pixels for ESRGAN upscalers. Low values = visible seam.": "Tile overlap, in pixels for ESRGAN upscalers. Low values = visible seam.",
-  "Tile overlap, in pixels for SwinIR. Low values = visible seam.": "Tile overlap, in pixels for SwinIR. Low values = visible seam.",
-  "Tile size for all SwinIR.": "Tile size for all SwinIR.",
-  "Tile size for ESRGAN upscalers. 0 = no tiling.": "Tile size for ESRGAN upscalers. 0 = no tiling.",
+  "Tile overlap, in pixels for ESRGAN upscalers. Low values = visible seam.": "ESRGAN 업스케일러들의 타일 중첩 수치, 픽셀 단위. 낮은 값 = 눈에 띄는 이음매.",
+  "Tile overlap, in pixels for SwinIR. Low values = visible seam.": "SwinIR의 타일 중첩 수치, 픽셀 단위. 낮은 값 = 눈에 띄는 이음매.",
+  "Tile size for all SwinIR.": "SwinIR의 타일 사이즈.",
+  "Tile size for ESRGAN upscalers. 0 = no tiling.": "ESRGAN 업스케일러들의 타일 사이즈. 0 = 타일링 없음.",
   "Tiling": "타일링",
   "Time taken:": "소요 시간 : ",
   "Torch active/reserved:": "활성화/예약된 Torch 양 : ",
@@ -429,51 +438,60 @@
   "Train an embedding or Hypernetwork; you must specify a directory with a set of 1:1 ratio images": "임베딩이나 하이퍼네트워크를 훈련시킵니다. 1:1 비율의 이미지가 있는 경로를 지정해야 합니다.",
   "Train Embedding": "임베딩 훈련",
   "Train Hypernetwork": "하이퍼네트워크 훈련",
-  "Training": "Training",
+  "Training": "훈련",
   "txt2img": "텍스트→이미지",
-  "txt2img history": "txt2img history",
+  "txt2img history": "텍스트→이미지 기록",
   "uniform": "uniform",
   "up": "위쪽",
   "Upload mask": "마스크 업로드하기",
-  "Upscale latent space image when doing hires. fix": "Upscale latent space image when doing hires. fix",
+  "Upscale latent space image when doing hires. fix": "고해상도 보정 사용시 잠재 공간 이미지 업스케일하기",
   "Upscale masked region to target resolution, do inpainting, downscale back and paste into original image": "마스크된 부분을 설정된 해상도로 업스케일하고, 인페인팅을 진행한 뒤, 다시 다운스케일 후 원본 이미지에 붙여넣습니다.",
   "Upscaler": "업스케일러",
   "Upscaler 1": "업스케일러 1",
   "Upscaler 2": "업스케일러 2",
   "Upscaler 2 visibility": "업스케일러 2 가시성",
-  "Upscaler for img2img": "Upscaler for img2img",
-  "Upscaling": "Upscaling",
+  "Upscaler for img2img": "이미지→이미지 업스케일러",
+  "Upscaling": "업스케일링",
   "Use a two step process to partially create an image at smaller resolution, upscale, and then improve details in it without changing composition": "저해상도 이미지를 1차적으로 생성 후 업스케일을 진행하여, 이미지의 전체적인 구성을 바꾸지 않고 세부적인 디테일을 향상시킵니다.",
   "Use an empty output directory to save pictures normally instead of writing to the output directory.": "저장 경로를 비워두면 기본 저장 폴더에 이미지들이 저장됩니다.",
   "Use BLIP for caption": "캡션에 BLIP 사용",
   "Use deepbooru for caption": "캡션에 deepbooru 사용",
   "Use dropout": "드롭아웃 사용",
-  "Use following tags to define how filenames for images are chosen: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; leave empty for default.": "Use following tags to define how filenames for images are chosen: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; leave empty for default.",
-  "Use following tags to define how subdirectories for images and grids are chosen: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; leave empty for default.": "Use following tags to define how subdirectories for images and grids are chosen: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; leave empty for default.",
-  "Use old emphasis implementation. Can be useful to reproduce old seeds.": "Use old emphasis implementation. Can be useful to reproduce old seeds.",
-  "Use original name for output filename during batch process in extras tab": "Use original name for output filename during batch process in extras tab",
-  "use spaces for tags in deepbooru": "use spaces for tags in deepbooru",
-  "User interface": "User interface",
+  "Use following tags to define how filenames for images are chosen: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; leave empty for default.": "다음 태그들을 사용해 이미지 파일명 형식을 결정하세요 : [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]. 비워두면 기본값으로 설정됩니다.",
+  "Use following tags to define how subdirectories for images and grids are chosen: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; leave empty for default.": "다음 태그들을 사용해 이미지와 그리드의 하위 디렉토리명의 형식을 결정하세요 : [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]. 비워두면 기본값으로 설정됩니다.",
+  "Use old emphasis implementation. Can be useful to reproduce old seeds.": "옛 방식의 강조 구현을 사용합니다. 옛 시드를 재현하는 데 효과적일 수 있습니다.",
+  "Use original name for output filename during batch process in extras tab": "부가기능 탭에서 이미지를 여러장 처리 시 결과물 파일명에 기존 파일명 사용하기",
+  "use spaces for tags in deepbooru": "deepbooru에서 태그에 공백 사용",
+  "User interface": "사용자 인터페이스",
   "Var. seed": "바리에이션 시드",
   "Var. strength": "바리에이션 강도",
   "Variation seed": "바리에이션 시드",
   "Variation strength": "바리에이션 강도",
   "view": "api 보이기",
-  "VRAM usage polls per second during generation. Set to 0 to disable.": "VRAM usage polls per second during generation. Set to 0 to disable.",
+  "VRAM usage polls per second during generation. Set to 0 to disable.": "생성 도중 초당 VRAM 사용량 폴링 수. 비활성화하려면 0으로 설정하십시오.",
   "Weighted sum": "가중 합",
   "What to put inside the masked area before processing it with Stable Diffusion.": "Stable Diffusion으로 이미지를 생성하기 전 마스크된 부분에 무엇을 채울지 결정하는 설정값",
-  "When reading generation parameters from text into UI (from PNG info or pasted text), do not change the selected model/checkpoint.": "When reading generation parameters from text into UI (from PNG info or pasted text), do not change the selected model/checkpoint.",
-  "When using \"Save\" button, save images to a subdirectory": "When using \"Save\" button, save images to a subdirectory",
-  "When using 'Save' button, only save a single selected image": "When using 'Save' button, only save a single selected image",
+  "When reading generation parameters from text into UI (from PNG info or pasted text), do not change the selected model/checkpoint.": "PNG 정보나 붙여넣은 텍스트로부터 생성 설정값을 읽어올 때, 선택된 모델/체크포인트는 변경하지 않기.",
+  "When using \"Save\" button, save images to a subdirectory": "저장 버튼 사용시, 이미지를 하위 디렉토리에 저장하기",
+  "When using 'Save' button, only save a single selected image": "저장 버튼 사용시, 선택된 이미지 1개만 저장하기",
   "Which algorithm to use to produce the image": "이미지를 생성할 때 사용할 알고리즘",
   "Width": "가로",
   "wiki": " 위키",
   "Will upscale the image to twice the dimensions; use width and height sliders to set tile size": "이미지를 설정된 사이즈의 2배로 업스케일합니다. 상단의 가로와 세로 슬라이더를 이용해 타일 사이즈를 지정하세요.",
-  "With img2img, do exactly the amount of steps the slider specifies (normally you'd do less with less denoising).": "With img2img, do exactly the amount of steps the slider specifies (normally you'd do less with less denoising).",
+  "With img2img, do exactly the amount of steps the slider specifies (normally you'd do less with less denoising).": "이미지→이미지 진행 시, 슬라이더로 설정한 스텝 수를 정확히 실행하기 (일반적으로 디노이즈 강도가 낮을수록 실제 설정된 스텝 수보다 적게 진행됨)",
   "Write image to a directory (default - log/images) and generation parameters into csv file.": "이미지를 경로에 저장하고, 설정값들을 csv 파일로 저장합니다. (기본 경로 - log/images)",
   "X type": "X축",
   "X values": "X 설정값",
   "X/Y plot": "X/Y 플롯",
   "Y type": "Y축",
-  "Y values": "Y 설정값"
+  "Y values": "Y 설정값",
+  "step1 min/max": "스텝1 최소/최대",
+  "step2 min/max": "스텝2 최소/최대",
+  "step count": "스텝 변화 횟수",
+  "cfg1 min/max": "CFG1 최소/최대",
+  "cfg2 min/max": "CFG2 최소/최대",
+  "cfg count": "CFG 변화 횟수",
+  "x/y change": "X/Y축 변경",
+  "Random": "랜덤",
+  "Random grid": "랜덤 그리드"
 }
\ No newline at end of file

From 2ce44fc48e3ee6c73042ea83748772fe3eb45b1e Mon Sep 17 00:00:00 2001
From: Dynamic <bradje@naver.com>
Date: Mon, 24 Oct 2022 04:38:16 +0900
Subject: [PATCH 16/73] Finalize ko_KR.json

---
 localizations/ko_KR.json | 44 ++++++++++++++++++++--------------------
 1 file changed, 22 insertions(+), 22 deletions(-)

diff --git a/localizations/ko_KR.json b/localizations/ko_KR.json
index 6889de46..ab12c37e 100644
--- a/localizations/ko_KR.json
+++ b/localizations/ko_KR.json
@@ -5,10 +5,10 @@
   "❮": "❮",
   "❯": "❯",
   "⤡": "⤡",
-  " images in this directory. Loaded ": "개의 이미지가 이 경로에 존재합니다. ",
   " images during ": "개의 이미지를 불러왔고, 생성 기간은 ",
-  ", divided into ": "입니다. ",
+  " images in this directory. Loaded ": "개의 이미지가 이 경로에 존재합니다. ",
   " pages": "페이지로 나뉘어 표시합니다.",
+  ", divided into ": "입니다. ",
   "1st and last digit must be 1. ex:'1, 2, 1'": "1st and last digit must be 1. ex:'1, 2, 1'",
   "[wiki]": " [위키] 참조",
   "A directory on the same machine where the server is running.": "WebUI 서버가 돌아가고 있는 디바이스에 존재하는 디렉토리를 선택해 주세요.",
@@ -43,7 +43,10 @@
   "BSRGAN 4x": "BSRGAN 4x",
   "built with gradio": "gradio로 제작되었습니다",
   "Cancel generate forever": "반복 생성 취소",
+  "cfg count": "CFG 변화 횟수",
   "CFG Scale": "CFG 스케일",
+  "cfg1 min/max": "CFG1 최소/최대",
+  "cfg2 min/max": "CFG2 최소/최대",
   "Check progress": "진행도 체크",
   "Check progress (first)": "진행도 체크 (처음)",
   "checkpoint": " 체크포인트 ",
@@ -57,8 +60,8 @@
   "CodeFormer visibility": "CodeFormer 가시성",
   "CodeFormer weight (0 = maximum effect, 1 = minimum effect)": "CodeFormer 가중치 (0 = 최대 효과, 1 = 최소 효과)",
   "CodeFormer weight parameter; 0 = maximum effect; 1 = minimum effect": "CodeFormer 가중치 설정값 (0 = 최대 효과, 1 = 최소 효과)",
-  "Color variation": "색깔 다양성",
   "Collect": "즐겨찾기",
+  "Color variation": "색깔 다양성",
   "copy": "복사",
   "Create a grid where images will have different parameters. Use inputs below to specify which parameters will be shared by columns and rows": "서로 다른 설정값으로 생성된 이미지의 그리드를 만듭니다. 아래의 설정으로 가로/세로에 어떤 설정값을 적용할지 선택하세요.",
   "Create a text file next to every image with generation parameters.": "생성된 이미지마다 생성 설정값을 담은 텍스트 파일 생성하기",
@@ -89,8 +92,8 @@
   "Do not save grids consisting of one picture": "이미지가 1개뿐인 그리드는 저장하지 않기",
   "Do not show any images in results for web": "웹에서 결과창에 아무 이미지도 보여주지 않기",
   "down": "아래쪽",
-  "Download localization template": "현지화 템플릿 다운로드",
   "Download": "다운로드",
+  "Download localization template": "현지화 템플릿 다운로드",
   "DPM adaptive": "DPM adaptive",
   "DPM fast": "DPM fast",
   "DPM2": "DPM2",
@@ -121,6 +124,7 @@
   "Existing Caption txt Action": "이미 존재하는 캡션 텍스트 처리",
   "Extra": "고급",
   "Extras": "부가기능",
+  "extras": "부가기능",
   "extras history": "부가기능 기록",
   "Face restoration": "얼굴 보정",
   "Face restoration model": "얼굴 보정 모델",
@@ -155,10 +159,6 @@
   "Hide samplers in user interface (requires restart)": "사용자 인터페이스에서 숨길 샘플러 선택(재시작 필요)",
   "Highres. fix": "고해상도 보정",
   "History": "기록",
-  "Image Browser": "이미지 브라우저",
-  "Images Browser": "이미지 브라우저",
-  "Images directory": "이미지 경로",
-  "extras": "부가기능",
   "how fast should the training go. Low values will take longer to train, high values may fail to converge (not generate accurate results) and/or may break the embedding (This has happened if you see Loss: nan in the training info textbox. If this happens, you need to manually restore your embedding from an older not-broken backup).\n\nYou can set a single numeric value, or multiple learning rates using the syntax:\n\n   rate_1:max_steps_1, rate_2:max_steps_2, ...\n\nEG:   0.005:100, 1e-3:1000, 1e-5\n\nWill train with rate of 0.005 for first 100 steps, then 1e-3 until 1000 steps, then 1e-5 for all remaining steps.": "훈련이 얼마나 빨리 이루어질지 정하는 값입니다. 값이 낮을수록 훈련 시간이 길어지고, 높은 값일수록 정확한 결과를 내는 데 실패하고 임베딩을 망가뜨릴 수 있습니다(임베딩이 망가진 경우에는 훈련 정보 텍스트박스에 손실(Loss) : nan 이라고 출력되게 됩니다. 이 경우에는 망가지지 않은 이전 백업본을 불러와야 합니다).\n\n학습률은 하나의 값으로 설정할 수도 있고, 다음 문법을 사용해 여러 값을 사용할 수도 있습니다 :\n\n학습률_1:최대 스텝수_1, 학습률_2:최대 스텝수_2, ...\n\n예 : 0.005:100, 1e-3:1000, 1e-5\n\n예의 설정값은 첫 100스텝동안 0.005의 학습률로, 그 이후 1000스텝까지는 1e-3으로, 남은 스텝은 1e-5로 훈련하게 됩니다.",
   "How many batches of images to create": "생성할 이미지 배치 수",
   "How many image to create in a single batch": "한 배치당 이미지 수",
@@ -175,8 +175,11 @@
   "If this values is non-zero, it will be added to seed and used to initialize RNG for noises when using samplers with Eta. You can use this to produce even more variation of images, or you can use this to match images of other software if you know what you are doing.": "이 값이 0이 아니라면, 시드에 해당 값이 더해지고, Eta가 있는 샘플러를 사용할 때 노이즈의 RNG 조정을 위해 해당 값이 사용됩니다. 이 설정으로 더 다양한 이미지를 생성하거나, 잘 알고 계시다면 특정 소프트웨어의 결과값을 재현할 수도 있습니다.",
   "ignore": "무시",
   "Image": "이미지",
+  "Image Browser": "이미지 브라우저",
   "Image for img2img": "Image for img2img",
   "Image for inpainting with mask": "마스크로 인페인팅할 이미지",
+  "Images Browser": "이미지 브라우저",
+  "Images directory": "이미지 경로",
   "Images filename pattern": "이미지 파일명 패턴",
   "img2img": "이미지→이미지",
   "img2img alternative test": "이미지→이미지 대체버전 테스트",
@@ -242,6 +245,7 @@
   "Masking mode": "마스킹 모드",
   "Max prompt words for [prompt_words] pattern": "[prompt_words] 패턴의 최대 프롬프트 단어 수",
   "Max steps": "최대 스텝 수",
+  "Minimum number of pages per load": "한번 불러올 때마다 불러올 최소 페이지 수",
   "Modules": "모듈",
   "Move face restoration model from VRAM into RAM after processing": "처리가 완료되면 얼굴 보정 모델을 VRAM에서 RAM으로 옮기기",
   "Move VAE and CLIP to RAM when training hypernetwork. Saves VRAM.": "하이퍼네트워크 훈련 진행 시 VAE와 CLIP을 RAM으로 옮기기. VRAM이 절약됩니다.",
@@ -254,10 +258,9 @@
   "None": "없음",
   "Nothing": "없음",
   "Nothing found in the image.": "Nothing found in the image.",
+  "Number of grids in each row": "각 세로줄마다 표시될 그리드 수",
   "number of images to delete consecutively next": "연속적으로 삭제할 이미지 수",
   "Number of pictures displayed on each page": "각 페이지에 표시될 이미지 수",
-  "Minimum number of pages per load": "한번 불러올 때마다 불러올 최소 페이지 수",
-  "Number of grids in each row": "각 세로줄마다 표시될 그리드 수",
   "Number of repeats for a single input image per epoch; used only for displaying epoch number": "세대(Epoch)당 단일 인풋 이미지의 반복 횟수 - 세대(Epoch) 숫자를 표시하는 데에만 사용됩니다. ",
   "Number of vectors per token": "토큰별 벡터 수",
   "Open for Clip Aesthetic!": "클립 스타일 기능을 활성화하려면 클릭!",
@@ -317,6 +320,8 @@
   "Quality for saved jpeg images": "저장된 jpeg 이미지들의 품질",
   "Quicksettings list": "빠른 설정 리스트",
   "R-ESRGAN 4x+ Anime6B": "R-ESRGAN 4x+ Anime6B",
+  "Random": "랜덤",
+  "Random grid": "랜덤 그리드",
   "Randomness": "랜덤성",
   "Read generation parameters from prompt or last generation if prompt is empty into user interface.": "클립보드에 복사된 정보로부터 설정값 읽어오기/프롬프트창이 비어있을경우 제일 최근 설정값 불러오기",
   "Read parameters (prompt, etc...) from txt2img tab when making previews": "프리뷰 이미지 생성 시 텍스트→이미지 탭에서 설정값(프롬프트 등) 읽어오기",
@@ -386,10 +391,10 @@
   "Show grid in results for web": "웹에서 결과창에 그리드 보여주기",
   "Show image creation progress every N sampling steps. Set 0 to disable.": "N번째 샘플링 스텝마다 이미지 생성 과정 보이기 - 비활성화하려면 0으로 설정",
   "Show images zoomed in by default in full page image viewer": "전체 페이지 이미지 뷰어에서 기본값으로 이미지 확대해서 보여주기",
+  "Show previews of all images generated in a batch as a grid": "배치에서 생성된 모든 이미지의 미리보기를 그리드 형식으로 보여주기",
   "Show progressbar": "프로그레스 바 보이기",
   "Show result images": "이미지 결과 보이기",
   "Show Textbox": "텍스트박스 보이기",
-  "Show previews of all images generated in a batch as a grid": "배치에서 생성된 모든 이미지의 미리보기를 그리드 형식으로 보여주기",
   "Sigma adjustment for finding noise for image": "이미지 노이즈를 찾기 위해 시그마 조정",
   "Sigma Churn": "시그마 섞기",
   "sigma churn": "시그마 섞기",
@@ -404,11 +409,14 @@
   "Slerp interpolation": "구면 선형 보간",
   "Source": "원본",
   "Source directory": "원본 경로",
-  "Split image threshold": "이미지 분할 임계값",
   "Split image overlap ratio": "이미지 분할 겹침 비율",
+  "Split image threshold": "이미지 분할 임계값",
   "Split oversized images": "사이즈가 큰 이미지 분할하기",
   "Stable Diffusion": "Stable Diffusion",
   "Stable Diffusion checkpoint": "Stable Diffusion 체크포인트",
+  "step count": "스텝 변화 횟수",
+  "step1 min/max": "스텝1 최소/최대",
+  "step2 min/max": "스텝2 최소/최대",
   "Step:": "Step:",
   "Steps": "스텝 수",
   "Stop At last layers of CLIP model": "CLIP 모델의 n번째 레이어에서 멈추기",
@@ -482,16 +490,8 @@
   "Write image to a directory (default - log/images) and generation parameters into csv file.": "이미지를 경로에 저장하고, 설정값들을 csv 파일로 저장합니다. (기본 경로 - log/images)",
   "X type": "X축",
   "X values": "X 설정값",
+  "x/y change": "X/Y축 변경",
   "X/Y plot": "X/Y 플롯",
   "Y type": "Y축",
-  "Y values": "Y 설정값",
-  "step1 min/max": "스텝1 최소/최대",
-  "step2 min/max": "스텝2 최소/최대",
-  "step count": "스텝 변화 횟수",
-  "cfg1 min/max": "CFG1 최소/최대",
-  "cfg2 min/max": "CFG2 최소/최대",
-  "cfg count": "CFG 변화 횟수",
-  "x/y change": "X/Y축 변경",
-  "Random": "랜덤",
-  "Random grid": "랜덤 그리드"
+  "Y values": "Y 설정값"
 }
\ No newline at end of file

From 8d8d4d8a1b6401ef3c21d21d7784eb2e1f82d955 Mon Sep 17 00:00:00 2001
From: Dynamic <bradje@naver.com>
Date: Mon, 24 Oct 2022 20:55:21 +0900
Subject: [PATCH 17/73] Update new strings in Settings tab

---
 localizations/ko_KR.json | 1 +
 1 file changed, 1 insertion(+)

diff --git a/localizations/ko_KR.json b/localizations/ko_KR.json
index ab12c37e..eb614c35 100644
--- a/localizations/ko_KR.json
+++ b/localizations/ko_KR.json
@@ -21,6 +21,7 @@
   "Add layer normalization": "레이어 정규화(normalization) 추가",
   "Add model hash to generation information": "생성 정보에 모델 해시 추가",
   "Add model name to generation information": "생성 정보에 모델 이름 추가",
+  "Add number to filename when saving": "이미지를 저장할 때 파일명에 숫자 추가하기",
   "Aesthetic imgs embedding": "스타일 이미지 임베딩",
   "Aesthetic learning rate": "스타일 학습 수",
   "Aesthetic steps": "스타일 스텝 수",

From e595b41c9d8a596b9b29d9505324e9afca2f12b5 Mon Sep 17 00:00:00 2001
From: Dynamic <bradje@naver.com>
Date: Tue, 25 Oct 2022 00:17:46 +0900
Subject: [PATCH 18/73] Update translations for renewed tooltip texts

---
 localizations/ko_KR.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/localizations/ko_KR.json b/localizations/ko_KR.json
index eb614c35..52ba4020 100644
--- a/localizations/ko_KR.json
+++ b/localizations/ko_KR.json
@@ -466,8 +466,8 @@
   "Use BLIP for caption": "캡션에 BLIP 사용",
   "Use deepbooru for caption": "캡션에 deepbooru 사용",
   "Use dropout": "드롭아웃 사용",
-  "Use following tags to define how filenames for images are chosen: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; leave empty for default.": "다음 태그들을 사용해 이미지 파일명 형식을 결정하세요 : [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]. 비워두면 기본값으로 설정됩니다.",
-  "Use following tags to define how subdirectories for images and grids are chosen: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; leave empty for default.": "다음 태그들을 사용해 이미지와 그리드의 하위 디렉토리명의 형식을 결정하세요 : [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]. 비워두면 기본값으로 설정됩니다.",
+  "Use following tags to define how filenames for images are chosen: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [datetime<Format>], [datetime<Format><Time Zone>], [job_timestamp]; leave empty for default.": "다음 태그들을 사용해 이미지 파일명 형식을 결정하세요 : [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [datetime<Format>], [datetime<Format><Time Zone>], [job_timestamp]. 비워두면 기본값으로 설정됩니다.",
+  "Use following tags to define how subdirectories for images and grids are chosen: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [datetime<Format>], [datetime<Format><Time Zone>], [job_timestamp]; leave empty for default.": "다음 태그들을 사용해 이미지와 그리드의 하위 디렉토리명의 형식을 결정하세요 : [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [datetime<Format>], [datetime<Format><Time Zone>], [job_timestamp]. 비워두면 기본값으로 설정됩니다.",
   "Use old emphasis implementation. Can be useful to reproduce old seeds.": "옛 방식의 강조 구현을 사용합니다. 옛 시드를 재현하는 데 효과적일 수 있습니다.",
   "Use original name for output filename during batch process in extras tab": "부가기능 탭에서 이미지를 여러장 처리 시 결과물 파일명에 기존 파일명 사용하기",
   "use spaces for tags in deepbooru": "deepbooru에서 태그에 공백 사용",

From 46cc0b3bc6833a793179e86ffae2498a54cdddaf Mon Sep 17 00:00:00 2001
From: Dynamic <bradje@naver.com>
Date: Tue, 25 Oct 2022 18:28:09 +0900
Subject: [PATCH 19/73] Update strings for some custom script/extensions

---
 localizations/ko_KR.json | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/localizations/ko_KR.json b/localizations/ko_KR.json
index 52ba4020..07c2797c 100644
--- a/localizations/ko_KR.json
+++ b/localizations/ko_KR.json
@@ -73,6 +73,7 @@
   "Create images embedding": "이미지 임베딩 생성하기",
   "Crop and resize": "잘라낸 후 리사이징",
   "Crop to fit": "잘라내서 맞추기",
+  "custom fold": "커스텀 경로",
   "Custom Name (Optional)": "병합 모델 이름 (선택사항)",
   "Dataset directory": "데이터셋 경로",
   "DDIM": "DDIM",
@@ -108,6 +109,7 @@
   "Embedding": "임베딩",
   "Embedding Learning rate": "임베딩 학습률",
   "Emphasis: use (text) to make model pay more attention to text and [text] to make it pay less attention": "강조 : (텍스트)를 이용해 모델의 텍스트에 대한 가중치를 더 강하게 주고 [텍스트]를 이용해 더 약하게 줍니다.",
+  "Enable Autocomplete": "태그 자동완성 사용",
   "Enable full page image viewer": "전체 페이지 이미지 뷰어 활성화",
   "Enable quantization in K samplers for sharper and cleaner results. This may change existing seeds. Requires restart to apply.": "더 예리하고 깔끔한 결과물을 위해 K 샘플러들에 양자화를 적용합니다. 존재하는 시드가 변경될 수 있습니다. 재시작이 필요합니다.",
   "End Page": "마지막 페이지",
@@ -196,6 +198,7 @@
   "Inpaint masked": "마스크만 처리",
   "Inpaint not masked": "마스크 이외만 처리",
   "Input directory": "인풋 이미지 경로",
+  "Input images directory": "이미지 경로 입력",
   "Interpolation Method": "보간 방법",
   "Interrogate\nCLIP": "CLIP\n분석",
   "Interrogate\nDeepBooru": "DeepBooru\n분석",
@@ -259,10 +262,12 @@
   "None": "없음",
   "Nothing": "없음",
   "Nothing found in the image.": "Nothing found in the image.",
+  "Number of columns on the page": "각 페이지마다 표시할 가로줄 수",
   "Number of grids in each row": "각 세로줄마다 표시될 그리드 수",
   "number of images to delete consecutively next": "연속적으로 삭제할 이미지 수",
   "Number of pictures displayed on each page": "각 페이지에 표시될 이미지 수",
   "Number of repeats for a single input image per epoch; used only for displaying epoch number": "세대(Epoch)당 단일 인풋 이미지의 반복 횟수 - 세대(Epoch) 숫자를 표시하는 데에만 사용됩니다. ",
+  "Number of rows on the page": "각 페이지마다 표시할 세로줄 수",
   "Number of vectors per token": "토큰별 벡터 수",
   "Open for Clip Aesthetic!": "클립 스타일 기능을 활성화하려면 클릭!",
   "Open images output directory": "이미지 저장 경로 열기",
@@ -470,6 +475,7 @@
   "Use following tags to define how subdirectories for images and grids are chosen: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [datetime<Format>], [datetime<Format><Time Zone>], [job_timestamp]; leave empty for default.": "다음 태그들을 사용해 이미지와 그리드의 하위 디렉토리명의 형식을 결정하세요 : [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [datetime<Format>], [datetime<Format><Time Zone>], [job_timestamp]. 비워두면 기본값으로 설정됩니다.",
   "Use old emphasis implementation. Can be useful to reproduce old seeds.": "옛 방식의 강조 구현을 사용합니다. 옛 시드를 재현하는 데 효과적일 수 있습니다.",
   "Use original name for output filename during batch process in extras tab": "부가기능 탭에서 이미지를 여러장 처리 시 결과물 파일명에 기존 파일명 사용하기",
+  "Use same seed for each image": "각 이미지에 동일한 시드 사용",
   "use spaces for tags in deepbooru": "deepbooru에서 태그에 공백 사용",
   "User interface": "사용자 인터페이스",
   "Var. seed": "바리에이션 시드",
@@ -486,6 +492,7 @@
   "Which algorithm to use to produce the image": "이미지를 생성할 때 사용할 알고리즘",
   "Width": "가로",
   "wiki": " 위키",
+  "Wildcards": "와일드카드",
   "Will upscale the image to twice the dimensions; use width and height sliders to set tile size": "이미지를 설정된 사이즈의 2배로 업스케일합니다. 상단의 가로와 세로 슬라이더를 이용해 타일 사이즈를 지정하세요.",
   "With img2img, do exactly the amount of steps the slider specifies (normally you'd do less with less denoising).": "이미지→이미지 진행 시, 슬라이더로 설정한 스텝 수를 정확히 실행하기 (일반적으로 디노이즈 강도가 낮을수록 실제 설정된 스텝 수보다 적게 진행됨)",
   "Write image to a directory (default - log/images) and generation parameters into csv file.": "이미지를 경로에 저장하고, 설정값들을 csv 파일로 저장합니다. (기본 경로 - log/images)",

From 3e6c2420c1177e9e79f2b566a5a7795b7416e34a Mon Sep 17 00:00:00 2001
From: captin411 <captindave@gmail.com>
Date: Tue, 25 Oct 2022 13:10:58 -0700
Subject: [PATCH 20/73] improve debug markers, fix algo weighting

---
 modules/textual_inversion/autocrop.py | 203 ++++++++++++++++----------
 1 file changed, 127 insertions(+), 76 deletions(-)

diff --git a/modules/textual_inversion/autocrop.py b/modules/textual_inversion/autocrop.py
index b2f9241c..caaf18c8 100644
--- a/modules/textual_inversion/autocrop.py
+++ b/modules/textual_inversion/autocrop.py
@@ -1,4 +1,5 @@
 import cv2
+import os
 from collections import defaultdict
 from math import log, sqrt
 import numpy as np
@@ -26,19 +27,9 @@ def crop_image(im, settings):
       scale_by = settings.crop_height / im.height
 
   im = im.resize((int(im.width * scale_by), int(im.height * scale_by)))
+  im_debug = im.copy()
 
-  if im.width == settings.crop_width and im.height == settings.crop_height:
-    if settings.annotate_image:
-      d = ImageDraw.Draw(im)
-      rect = [0, 0, im.width, im.height]
-      rect[2] -= 1
-      rect[3] -= 1
-      d.rectangle(rect, outline=GREEN)
-      if settings.destop_view_image:
-        im.show()
-    return im
-
-  focus = focal_point(im, settings)
+  focus = focal_point(im_debug, settings)
 
   # take the focal point and turn it into crop coordinates that try to center over the focal
   # point but then get adjusted back into the frame
@@ -62,89 +53,143 @@ def crop_image(im, settings):
 
   crop = [x1, y1, x2, y2]
 
+  results = []
+
+  results.append(im.crop(tuple(crop)))
+
   if settings.annotate_image:
-    d = ImageDraw.Draw(im)
+    d = ImageDraw.Draw(im_debug)
     rect = list(crop)
     rect[2] -= 1
     rect[3] -= 1
     d.rectangle(rect, outline=GREEN)
+    results.append(im_debug)
     if settings.destop_view_image:
-      im.show()
+      im_debug.show()
 
-  return im.crop(tuple(crop))
+  return results
 
 def focal_point(im, settings):
     corner_points = image_corner_points(im, settings)
     entropy_points = image_entropy_points(im, settings)
     face_points = image_face_points(im, settings)
 
-    total_points = len(corner_points) + len(entropy_points) + len(face_points)
-
-    corner_weight = settings.corner_points_weight
-    entropy_weight = settings.entropy_points_weight
-    face_weight = settings.face_points_weight
-
-    weight_pref_total = corner_weight + entropy_weight + face_weight
-
-    # weight things
     pois = []
-    if weight_pref_total == 0 or total_points == 0: 
-      return pois
 
-    pois.extend(
-      [ PointOfInterest( p.x, p.y, weight=p.weight * ( (corner_weight/weight_pref_total) / (len(corner_points)/total_points) )) for p in corner_points ]
-    )
-    pois.extend(
-      [ PointOfInterest( p.x, p.y, weight=p.weight * ( (entropy_weight/weight_pref_total) / (len(entropy_points)/total_points) )) for p in entropy_points ]
-    )
-    pois.extend(
-      [ PointOfInterest( p.x, p.y, weight=p.weight * ( (face_weight/weight_pref_total) / (len(face_points)/total_points) )) for p in face_points ]
-    )
+    weight_pref_total = 0
+    if len(corner_points) > 0:
+      weight_pref_total += settings.corner_points_weight
+    if len(entropy_points) > 0:
+      weight_pref_total += settings.entropy_points_weight
+    if len(face_points) > 0:
+      weight_pref_total += settings.face_points_weight
+
+    corner_centroid = None
+    if len(corner_points) > 0:
+      corner_centroid = centroid(corner_points)
+      corner_centroid.weight = settings.corner_points_weight / weight_pref_total 
+      pois.append(corner_centroid)
+
+    entropy_centroid = None
+    if len(entropy_points) > 0:
+      entropy_centroid = centroid(entropy_points)
+      entropy_centroid.weight = settings.entropy_points_weight / weight_pref_total
+      pois.append(entropy_centroid)
+
+    face_centroid = None
+    if len(face_points) > 0:
+      face_centroid = centroid(face_points)
+      face_centroid.weight = settings.face_points_weight / weight_pref_total 
+      pois.append(face_centroid)
 
     average_point = poi_average(pois, settings)
 
     if settings.annotate_image:
       d = ImageDraw.Draw(im)
-      for f in face_points:
-        d.rectangle(f.bounding(f.size), outline=RED)
-      for f in entropy_points:
-        d.rectangle(f.bounding(30), outline=BLUE)
-      for poi in pois:
-        w = max(4, 4 * 0.5 * sqrt(poi.weight))
-        d.ellipse(poi.bounding(w), fill=BLUE)
-      d.ellipse(average_point.bounding(25), outline=GREEN)
+      max_size = min(im.width, im.height) * 0.07
+      if corner_centroid is not None:
+        color = BLUE
+        box = corner_centroid.bounding(max_size * corner_centroid.weight)
+        d.text((box[0], box[1]-15), "Edge: %.02f" % corner_centroid.weight, fill=color)
+        d.ellipse(box, outline=color)
+        if len(corner_points) > 1:
+          for f in corner_points:
+            d.rectangle(f.bounding(4), outline=color)
+      if entropy_centroid is not None:
+        color = "#ff0"
+        box = entropy_centroid.bounding(max_size * entropy_centroid.weight)
+        d.text((box[0], box[1]-15), "Entropy: %.02f" % entropy_centroid.weight, fill=color)
+        d.ellipse(box, outline=color)
+        if len(entropy_points) > 1:
+          for f in entropy_points:
+            d.rectangle(f.bounding(4), outline=color)
+      if face_centroid is not None:
+        color = RED
+        box = face_centroid.bounding(max_size * face_centroid.weight)
+        d.text((box[0], box[1]-15), "Face: %.02f" % face_centroid.weight, fill=color)
+        d.ellipse(box, outline=color)
+        if len(face_points) > 1:
+          for f in face_points:
+            d.rectangle(f.bounding(4), outline=color)
+
+      d.ellipse(average_point.bounding(max_size), outline=GREEN)
       
     return average_point
 
 
 def image_face_points(im, settings):
-    np_im = np.array(im)
-    gray = cv2.cvtColor(np_im, cv2.COLOR_BGR2GRAY)
+    if settings.dnn_model_path is not None:
+      detector = cv2.FaceDetectorYN.create(
+          settings.dnn_model_path,
+          "",
+          (im.width, im.height),
+          0.8, # score threshold
+          0.3, # nms threshold
+          5000 # keep top k before nms
+      )
+      faces = detector.detect(np.array(im))
+      results = []
+      if faces[1] is not None:
+        for face in faces[1]:
+          x = face[0]
+          y = face[1]
+          w = face[2]
+          h = face[3]
+          results.append(
+            PointOfInterest(
+              int(x + (w * 0.5)), # face focus left/right is center
+              int(y + (h * 0)), # face focus up/down is close to the top of the head
+              size = w,
+              weight = 1/len(faces[1])
+            )
+          )
+      return results
+    else:
+      np_im = np.array(im)
+      gray = cv2.cvtColor(np_im, cv2.COLOR_BGR2GRAY)
 
-    tries = [
-      [ f'{cv2.data.haarcascades}haarcascade_eye.xml', 0.01 ],
-      [ f'{cv2.data.haarcascades}haarcascade_frontalface_default.xml', 0.05 ],
-      [ f'{cv2.data.haarcascades}haarcascade_profileface.xml', 0.05 ],
-      [ f'{cv2.data.haarcascades}haarcascade_frontalface_alt.xml', 0.05 ],
-      [ f'{cv2.data.haarcascades}haarcascade_frontalface_alt2.xml', 0.05 ],
-      [ f'{cv2.data.haarcascades}haarcascade_frontalface_alt_tree.xml', 0.05 ],
-      [ f'{cv2.data.haarcascades}haarcascade_eye_tree_eyeglasses.xml', 0.05 ],
-      [ f'{cv2.data.haarcascades}haarcascade_upperbody.xml', 0.05 ]
-    ]
+      tries = [
+        [ f'{cv2.data.haarcascades}haarcascade_eye.xml', 0.01 ],
+        [ f'{cv2.data.haarcascades}haarcascade_frontalface_default.xml', 0.05 ],
+        [ f'{cv2.data.haarcascades}haarcascade_profileface.xml', 0.05 ],
+        [ f'{cv2.data.haarcascades}haarcascade_frontalface_alt.xml', 0.05 ],
+        [ f'{cv2.data.haarcascades}haarcascade_frontalface_alt2.xml', 0.05 ],
+        [ f'{cv2.data.haarcascades}haarcascade_frontalface_alt_tree.xml', 0.05 ],
+        [ f'{cv2.data.haarcascades}haarcascade_eye_tree_eyeglasses.xml', 0.05 ],
+        [ f'{cv2.data.haarcascades}haarcascade_upperbody.xml', 0.05 ]
+      ]
+      for t in tries:
+        classifier = cv2.CascadeClassifier(t[0])
+        minsize = int(min(im.width, im.height) * t[1]) # at least N percent of the smallest side
+        try:
+          faces = classifier.detectMultiScale(gray, scaleFactor=1.1,
+            minNeighbors=7, minSize=(minsize, minsize), flags=cv2.CASCADE_SCALE_IMAGE)
+        except:
+          continue
 
-    for t in tries:
-      # print(t[0])
-      classifier = cv2.CascadeClassifier(t[0])
-      minsize = int(min(im.width, im.height) * t[1]) # at least N percent of the smallest side
-      try:
-        faces = classifier.detectMultiScale(gray, scaleFactor=1.1,
-          minNeighbors=7, minSize=(minsize, minsize), flags=cv2.CASCADE_SCALE_IMAGE)
-      except:
-        continue
-
-      if len(faces) > 0:
-        rects = [[f[0], f[1], f[0] + f[2], f[1] + f[3]] for f in faces]
-        return [PointOfInterest((r[0] +r[2]) // 2, (r[1] + r[3]) // 2, size=abs(r[0]-r[2])) for r in rects]
+        if len(faces) > 0:
+          rects = [[f[0], f[1], f[0] + f[2], f[1] + f[3]] for f in faces]
+          return [PointOfInterest((r[0] +r[2]) // 2, (r[1] + r[3]) // 2, size=abs(r[0]-r[2]), weight=1/len(rects)) for r in rects]
     return []
 
 
@@ -161,7 +206,7 @@ def image_corner_points(im, settings):
         np_im,
         maxCorners=100,
         qualityLevel=0.04,
-        minDistance=min(grayscale.width, grayscale.height)*0.07,
+        minDistance=min(grayscale.width, grayscale.height)*0.03,
         useHarrisDetector=False,
     )
 
@@ -171,7 +216,7 @@ def image_corner_points(im, settings):
     focal_points = []
     for point in points:
       x, y = point.ravel()
-      focal_points.append(PointOfInterest(x, y, size=4))
+      focal_points.append(PointOfInterest(x, y, size=4, weight=1/len(points)))
 
     return focal_points
 
@@ -205,17 +250,22 @@ def image_entropy_points(im, settings):
     x_mid = int(crop_best[0] + settings.crop_width/2)
     y_mid = int(crop_best[1] + settings.crop_height/2)
 
-    return [PointOfInterest(x_mid, y_mid, size=25)]
+    return [PointOfInterest(x_mid, y_mid, size=25, weight=1.0)]
 
 
 def image_entropy(im):
     # greyscale image entropy
-    # band = np.asarray(im.convert("L"))
-    band = np.asarray(im.convert("1"), dtype=np.uint8)
+    band = np.asarray(im.convert("L"))
+    # band = np.asarray(im.convert("1"), dtype=np.uint8)
     hist, _ = np.histogram(band, bins=range(0, 256))
     hist = hist[hist > 0]
     return -np.log2(hist / hist.sum()).sum()
 
+def centroid(pois):
+  x = [poi.x for poi in pois]
+  y = [poi.y for poi in pois]
+  return PointOfInterest(sum(x)/len(pois), sum(y)/len(pois))
+
 
 def poi_average(pois, settings):
     weight = 0.0
@@ -260,11 +310,12 @@ class PointOfInterest:
 
 
 class Settings:
-  def __init__(self, crop_width=512, crop_height=512, corner_points_weight=0.5, entropy_points_weight=0.5, face_points_weight=0.5, annotate_image=False):
+  def __init__(self, crop_width=512, crop_height=512, corner_points_weight=0.5, entropy_points_weight=0.5, face_points_weight=0.5, annotate_image=False, dnn_model_path=None):
     self.crop_width = crop_width
     self.crop_height = crop_height
     self.corner_points_weight = corner_points_weight
     self.entropy_points_weight = entropy_points_weight
-    self.face_points_weight = entropy_points_weight
+    self.face_points_weight = face_points_weight
     self.annotate_image = annotate_image
-    self.destop_view_image = False
\ No newline at end of file
+    self.destop_view_image = False
+    self.dnn_model_path = dnn_model_path
\ No newline at end of file

From db8ed5fe5cd6e967d12d43d96b7f83083e58626c Mon Sep 17 00:00:00 2001
From: captin411 <captindave@gmail.com>
Date: Tue, 25 Oct 2022 15:22:29 -0700
Subject: [PATCH 21/73] Focal crop UI elements

---
 modules/textual_inversion/preprocess.py | 26 ++++++++++++-------------
 modules/ui.py                           | 20 +++++++++++++++++--
 2 files changed, 31 insertions(+), 15 deletions(-)

diff --git a/modules/textual_inversion/preprocess.py b/modules/textual_inversion/preprocess.py
index a8c17c6f..1e4d4de8 100644
--- a/modules/textual_inversion/preprocess.py
+++ b/modules/textual_inversion/preprocess.py
@@ -13,7 +13,7 @@ if cmd_opts.deepdanbooru:
     import modules.deepbooru as deepbooru
 
 
-def preprocess(process_src, process_dst, process_width, process_height, preprocess_txt_action, process_flip, process_split, process_caption, process_caption_deepbooru=False, split_threshold=0.5, overlap_ratio=0.2, process_entropy_focus=False):
+def preprocess(process_src, process_dst, process_width, process_height, preprocess_txt_action, process_flip, process_split, process_caption, process_caption_deepbooru=False, split_threshold=0.5, overlap_ratio=0.2, process_focal_crop=False, process_focal_crop_face_weight=0.9, process_focal_crop_entropy_weight=0.3, process_focal_crop_edges_weight=0.5, process_focal_crop_debug=False):
     try:
         if process_caption:
             shared.interrogator.load()
@@ -23,7 +23,7 @@ def preprocess(process_src, process_dst, process_width, process_height, preproce
             db_opts[deepbooru.OPT_INCLUDE_RANKS] = False
             deepbooru.create_deepbooru_process(opts.interrogate_deepbooru_score_threshold, db_opts)
 
-        preprocess_work(process_src, process_dst, process_width, process_height, preprocess_txt_action, process_flip, process_split, process_caption, process_caption_deepbooru, split_threshold, overlap_ratio, process_entropy_focus)
+        preprocess_work(process_src, process_dst, process_width, process_height, preprocess_txt_action, process_flip, process_split, process_caption, process_caption_deepbooru, split_threshold, overlap_ratio, process_focal_crop, process_focal_crop_face_weight, process_focal_crop_entropy_weight, process_focal_crop_edges_weight, process_focal_crop_debug)
 
     finally:
 
@@ -35,7 +35,7 @@ def preprocess(process_src, process_dst, process_width, process_height, preproce
 
 
 
-def preprocess_work(process_src, process_dst, process_width, process_height, preprocess_txt_action, process_flip, process_split, process_caption, process_caption_deepbooru=False, split_threshold=0.5, overlap_ratio=0.2, process_entropy_focus=False):
+def preprocess_work(process_src, process_dst, process_width, process_height, preprocess_txt_action, process_flip, process_split, process_caption, process_caption_deepbooru=False, split_threshold=0.5, overlap_ratio=0.2, process_focal_crop=False, process_focal_crop_face_weight=0.9, process_focal_crop_entropy_weight=0.3, process_focal_crop_edges_weight=0.5, process_focal_crop_debug=False):
     width = process_width
     height = process_height
     src = os.path.abspath(process_src)
@@ -139,27 +139,27 @@ def preprocess_work(process_src, process_dst, process_width, process_height, pre
             ratio = (img.height * width) / (img.width * height)
             inverse_xy = True
 
-        processing_option_ran = False
+        process_default_resize = True
 
         if process_split and ratio < 1.0 and ratio <= split_threshold:
             for splitted in split_pic(img, inverse_xy):
                 save_pic(splitted, index, existing_caption=existing_caption)
-            processing_option_ran = True
+            process_default_resize = False
 
         if process_entropy_focus and img.height != img.width:
             autocrop_settings = autocrop.Settings(
                 crop_width = width,
                 crop_height = height,
-                face_points_weight = 0.9,
-                entropy_points_weight = 0.7,
-                corner_points_weight = 0.5,
-                annotate_image = False
+                face_points_weight = process_focal_crop_face_weight,
+                entropy_points_weight = process_focal_crop_entropy_weight,
+                corner_points_weight = process_focal_crop_edges_weight,
+                annotate_image = process_focal_crop_debug
             )
-            focal = autocrop.crop_image(img, autocrop_settings)
-            save_pic(focal, index, existing_caption=existing_caption)
-            processing_option_ran = True
+            for focal in autocrop.crop_image(img, autocrop_settings):
+                save_pic(focal, index, existing_caption=existing_caption)
+            process_default_resize = False
 
-        if not processing_option_ran:
+        if process_default_resize:
             img = images.resize_image(1, img, width, height)
             save_pic(img, index, existing_caption=existing_caption)
 
diff --git a/modules/ui.py b/modules/ui.py
index 028eb4e5..95b9c703 100644
--- a/modules/ui.py
+++ b/modules/ui.py
@@ -1260,7 +1260,7 @@ def create_ui(wrap_gradio_gpu_call):
                     with gr.Row():
                         process_flip = gr.Checkbox(label='Create flipped copies')
                         process_split = gr.Checkbox(label='Split oversized images')
-                        process_entropy_focus = gr.Checkbox(label='Create auto focal point crop')
+                        process_focal_crop = gr.Checkbox(label='Auto focal point crop')
                         process_caption = gr.Checkbox(label='Use BLIP for caption')
                         process_caption_deepbooru = gr.Checkbox(label='Use deepbooru for caption', visible=True if cmd_opts.deepdanbooru else False)
 
@@ -1268,6 +1268,12 @@ def create_ui(wrap_gradio_gpu_call):
                         process_split_threshold = gr.Slider(label='Split image threshold', value=0.5, minimum=0.0, maximum=1.0, step=0.05)
                         process_overlap_ratio = gr.Slider(label='Split image overlap ratio', value=0.2, minimum=0.0, maximum=0.9, step=0.05)
 
+                    with gr.Row(visible=False) as process_focal_crop_row:
+                        process_focal_crop_face_weight = gr.Slider(label='Focal point face weight', value=0.9, minimum=0.0, maximum=1.0, step=0.05)
+                        process_focal_crop_entropy_weight = gr.Slider(label='Focal point entropy weight', value=0.3, minimum=0.0, maximum=1.0, step=0.05)
+                        process_focal_crop_edges_weight = gr.Slider(label='Focal point edges weight', value=0.5, minimum=0.0, maximum=1.0, step=0.05)
+                        process_focal_crop_debug = gr.Checkbox(label='Create debug image')
+
                     with gr.Row():
                         with gr.Column(scale=3):
                             gr.HTML(value="")
@@ -1281,6 +1287,12 @@ def create_ui(wrap_gradio_gpu_call):
                         outputs=[process_split_extra_row],
                     )
 
+                    process_focal_crop.change(
+                        fn=lambda show: gr_show(show),
+                        inputs=[process_focal_crop],
+                        outputs=[process_focal_crop_row],
+                    )
+
                 with gr.Tab(label="Train"):
                     gr.HTML(value="<p style='margin-bottom: 0.7em'>Train an embedding or Hypernetwork; you must specify a directory with a set of 1:1 ratio images <a href=\"https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Textual-Inversion\" style=\"font-weight:bold;\">[wiki]</a></p>")
                     with gr.Row():
@@ -1368,7 +1380,11 @@ def create_ui(wrap_gradio_gpu_call):
                 process_caption_deepbooru,
                 process_split_threshold,
                 process_overlap_ratio,
-                process_entropy_focus,
+                process_focal_crop,
+                process_focal_crop_face_weight,
+                process_focal_crop_entropy_weight,
+                process_focal_crop_edges_weight,
+                process_focal_crop_debug,
             ],
             outputs=[
                 ti_output,

From 54f0c1482427a5b3f2248b97be55878e742cbcb1 Mon Sep 17 00:00:00 2001
From: captin411 <captindave@gmail.com>
Date: Tue, 25 Oct 2022 16:14:13 -0700
Subject: [PATCH 22/73] download better face detection module dynamically

---
 modules/textual_inversion/autocrop.py   | 20 ++++++++++++++++++++
 modules/textual_inversion/preprocess.py | 13 +++++++++++--
 requirements.txt                        |  2 ++
 3 files changed, 33 insertions(+), 2 deletions(-)

diff --git a/modules/textual_inversion/autocrop.py b/modules/textual_inversion/autocrop.py
index caaf18c8..01a92b12 100644
--- a/modules/textual_inversion/autocrop.py
+++ b/modules/textual_inversion/autocrop.py
@@ -1,4 +1,5 @@
 import cv2
+import requests
 import os
 from collections import defaultdict
 from math import log, sqrt
@@ -293,6 +294,25 @@ def is_square(w, h):
   return w == h
 
 
+def download_and_cache_models(dirname):
+  download_url = 'https://github.com/opencv/opencv_zoo/blob/91fb0290f50896f38a0ab1e558b74b16bc009428/models/face_detection_yunet/face_detection_yunet_2022mar.onnx?raw=true'
+  model_file_name = 'face_detection_yunet.onnx'
+
+  if not os.path.exists(dirname):
+    os.makedirs(dirname)
+
+  cache_file = os.path.join(dirname, model_file_name)
+  if not os.path.exists(cache_file):
+    print(f"downloading face detection model from '{download_url}' to '{cache_file}'")
+    response = requests.get(download_url)
+    with open(cache_file, "wb") as f:
+      f.write(response.content)
+
+  if os.path.exists(cache_file):
+    return cache_file
+  return None
+
+
 class PointOfInterest:
   def __init__(self, x, y, weight=1.0, size=10):
     self.x = x
diff --git a/modules/textual_inversion/preprocess.py b/modules/textual_inversion/preprocess.py
index 1e4d4de8..e13b1894 100644
--- a/modules/textual_inversion/preprocess.py
+++ b/modules/textual_inversion/preprocess.py
@@ -7,6 +7,7 @@ import tqdm
 import time
 
 from modules import shared, images
+from modules.paths import models_path
 from modules.shared import opts, cmd_opts
 from modules.textual_inversion import autocrop
 if cmd_opts.deepdanbooru:
@@ -146,14 +147,22 @@ def preprocess_work(process_src, process_dst, process_width, process_height, pre
                 save_pic(splitted, index, existing_caption=existing_caption)
             process_default_resize = False
 
-        if process_entropy_focus and img.height != img.width:
+        if process_focal_crop and img.height != img.width:
+
+            dnn_model_path = None
+            try:
+                dnn_model_path = autocrop.download_and_cache_models(os.path.join(models_path, "opencv"))
+            except Exception as e:
+                print("Unable to load face detection model for auto crop selection. Falling back to lower quality haar method.", e)
+
             autocrop_settings = autocrop.Settings(
                 crop_width = width,
                 crop_height = height,
                 face_points_weight = process_focal_crop_face_weight,
                 entropy_points_weight = process_focal_crop_entropy_weight,
                 corner_points_weight = process_focal_crop_edges_weight,
-                annotate_image = process_focal_crop_debug
+                annotate_image = process_focal_crop_debug,
+                dnn_model_path = dnn_model_path,
             )
             for focal in autocrop.crop_image(img, autocrop_settings):
                 save_pic(focal, index, existing_caption=existing_caption)
diff --git a/requirements.txt b/requirements.txt
index da1969cf..75b37c4f 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -8,6 +8,8 @@ gradio==3.5
 invisible-watermark
 numpy
 omegaconf
+opencv-python
+requests
 piexif
 Pillow
 pytorch_lightning

From df0c5ea29d7f0c682ac81f184f3e482a6450d018 Mon Sep 17 00:00:00 2001
From: captin411 <captindave@gmail.com>
Date: Tue, 25 Oct 2022 17:06:59 -0700
Subject: [PATCH 23/73] update default weights

---
 modules/textual_inversion/autocrop.py | 16 ++++++++--------
 modules/ui.py                         |  2 +-
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/modules/textual_inversion/autocrop.py b/modules/textual_inversion/autocrop.py
index 01a92b12..9859974a 100644
--- a/modules/textual_inversion/autocrop.py
+++ b/modules/textual_inversion/autocrop.py
@@ -71,9 +71,9 @@ def crop_image(im, settings):
   return results
 
 def focal_point(im, settings):
-    corner_points = image_corner_points(im, settings)
-    entropy_points = image_entropy_points(im, settings)
-    face_points = image_face_points(im, settings)
+    corner_points = image_corner_points(im, settings) if settings.corner_points_weight > 0 else []
+    entropy_points = image_entropy_points(im, settings) if settings.entropy_points_weight > 0 else []
+    face_points = image_face_points(im, settings) if settings.face_points_weight > 0 else []
 
     pois = []
 
@@ -144,7 +144,7 @@ def image_face_points(im, settings):
           settings.dnn_model_path,
           "",
           (im.width, im.height),
-          0.8, # score threshold
+          0.9, # score threshold
           0.3, # nms threshold
           5000 # keep top k before nms
       )
@@ -159,7 +159,7 @@ def image_face_points(im, settings):
           results.append(
             PointOfInterest(
               int(x + (w * 0.5)), # face focus left/right is center
-              int(y + (h * 0)), # face focus up/down is close to the top of the head
+              int(y + (h * 0.33)), # face focus up/down is close to the top of the head
               size = w,
               weight = 1/len(faces[1])
             )
@@ -207,7 +207,7 @@ def image_corner_points(im, settings):
         np_im,
         maxCorners=100,
         qualityLevel=0.04,
-        minDistance=min(grayscale.width, grayscale.height)*0.03,
+        minDistance=min(grayscale.width, grayscale.height)*0.06,
         useHarrisDetector=False,
     )
 
@@ -256,8 +256,8 @@ def image_entropy_points(im, settings):
 
 def image_entropy(im):
     # greyscale image entropy
-    band = np.asarray(im.convert("L"))
-    # band = np.asarray(im.convert("1"), dtype=np.uint8)
+    # band = np.asarray(im.convert("L"))
+    band = np.asarray(im.convert("1"), dtype=np.uint8)
     hist, _ = np.histogram(band, bins=range(0, 256))
     hist = hist[hist > 0]
     return -np.log2(hist / hist.sum()).sum()
diff --git a/modules/ui.py b/modules/ui.py
index 95b9c703..095200a8 100644
--- a/modules/ui.py
+++ b/modules/ui.py
@@ -1270,7 +1270,7 @@ def create_ui(wrap_gradio_gpu_call):
 
                     with gr.Row(visible=False) as process_focal_crop_row:
                         process_focal_crop_face_weight = gr.Slider(label='Focal point face weight', value=0.9, minimum=0.0, maximum=1.0, step=0.05)
-                        process_focal_crop_entropy_weight = gr.Slider(label='Focal point entropy weight', value=0.3, minimum=0.0, maximum=1.0, step=0.05)
+                        process_focal_crop_entropy_weight = gr.Slider(label='Focal point entropy weight', value=0.15, minimum=0.0, maximum=1.0, step=0.05)
                         process_focal_crop_edges_weight = gr.Slider(label='Focal point edges weight', value=0.5, minimum=0.0, maximum=1.0, step=0.05)
                         process_focal_crop_debug = gr.Checkbox(label='Create debug image')
 

From de096d0ce752c96e45508dcc7b9e84f7dbe10cca Mon Sep 17 00:00:00 2001
From: AngelBottomless <35677394+aria1th@users.noreply.github.com>
Date: Tue, 25 Oct 2022 14:48:49 +0900
Subject: [PATCH 24/73] Weight initialization and More activation func

add weight init

add weight init option in create_hypernetwork

fstringify hypernet info

save weight initialization info for further debugging

fill bias with zero for He/Xavier

initialize LayerNorm with Normal

fix loading weight_init
---
 modules/hypernetworks/hypernetwork.py | 47 ++++++++++++++++++++++-----
 modules/hypernetworks/ui.py           |  4 ++-
 modules/ui.py                         |  4 ++-
 3 files changed, 44 insertions(+), 11 deletions(-)

diff --git a/modules/hypernetworks/hypernetwork.py b/modules/hypernetworks/hypernetwork.py
index d647ea55..afbcdff8 100644
--- a/modules/hypernetworks/hypernetwork.py
+++ b/modules/hypernetworks/hypernetwork.py
@@ -5,6 +5,7 @@ import html
 import os
 import sys
 import traceback
+import inspect
 
 import modules.textual_inversion.dataset
 import torch
@@ -15,10 +16,12 @@ from modules import devices, processing, sd_models, shared
 from modules.textual_inversion import textual_inversion
 from modules.textual_inversion.learn_schedule import LearnRateScheduler
 from torch import einsum
+from torch.nn.init import normal_, xavier_normal_, xavier_uniform_, kaiming_normal_, kaiming_uniform_, zeros_
 
 from collections import defaultdict, deque
 from statistics import stdev, mean
 
+
 class HypernetworkModule(torch.nn.Module):
     multiplier = 1.0
     activation_dict = {
@@ -26,9 +29,12 @@ class HypernetworkModule(torch.nn.Module):
         "leakyrelu": torch.nn.LeakyReLU,
         "elu": torch.nn.ELU,
         "swish": torch.nn.Hardswish,
+        "tanh": torch.nn.Tanh,
+        "sigmoid": torch.nn.Sigmoid,
     }
+    activation_dict.update({cls_name: cls_obj for cls_name, cls_obj in inspect.getmembers(torch.nn.modules.activation) if inspect.isclass(cls_obj) and cls_obj.__module__ == 'torch.nn.modules.activation'})
 
-    def __init__(self, dim, state_dict=None, layer_structure=None, activation_func=None, add_layer_norm=False, use_dropout=False):
+    def __init__(self, dim, state_dict=None, layer_structure=None, activation_func=None, weight_init='Normal', add_layer_norm=False, use_dropout=False):
         super().__init__()
 
         assert layer_structure is not None, "layer_structure must not be None"
@@ -65,9 +71,24 @@ class HypernetworkModule(torch.nn.Module):
         else:
             for layer in self.linear:
                 if type(layer) == torch.nn.Linear or type(layer) == torch.nn.LayerNorm:
-                    layer.weight.data.normal_(mean=0.0, std=0.01)
-                    layer.bias.data.zero_()
-
+                    w, b = layer.weight.data, layer.bias.data
+                    if weight_init == "Normal" or type(layer) == torch.nn.LayerNorm:
+                        normal_(w, mean=0.0, std=0.01)
+                        normal_(b, mean=0.0, std=0.005)
+                    elif weight_init == 'XavierUniform':
+                        xavier_uniform_(w)
+                        zeros_(b)
+                    elif weight_init == 'XavierNormal':
+                        xavier_normal_(w)
+                        zeros_(b)
+                    elif weight_init == 'KaimingUniform':
+                        kaiming_uniform_(w, nonlinearity='leaky_relu' if 'leakyrelu' == activation_func else 'relu')
+                        zeros_(b)
+                    elif weight_init == 'KaimingNormal':
+                        kaiming_normal_(w, nonlinearity='leaky_relu' if 'leakyrelu' == activation_func else 'relu')
+                        zeros_(b)
+                    else:
+                        raise KeyError(f"Key {weight_init} is not defined as initialization!")
         self.to(devices.device)
 
     def fix_old_state_dict(self, state_dict):
@@ -105,7 +126,7 @@ class Hypernetwork:
     filename = None
     name = None
 
-    def __init__(self, name=None, enable_sizes=None, layer_structure=None, activation_func=None, add_layer_norm=False, use_dropout=False):
+    def __init__(self, name=None, enable_sizes=None, layer_structure=None, activation_func=None, weight_init=None, add_layer_norm=False, use_dropout=False):
         self.filename = None
         self.name = name
         self.layers = {}
@@ -114,13 +135,14 @@ class Hypernetwork:
         self.sd_checkpoint_name = None
         self.layer_structure = layer_structure
         self.activation_func = activation_func
+        self.weight_init = weight_init
         self.add_layer_norm = add_layer_norm
         self.use_dropout = use_dropout
 
         for size in enable_sizes or []:
             self.layers[size] = (
-                HypernetworkModule(size, None, self.layer_structure, self.activation_func, self.add_layer_norm, self.use_dropout),
-                HypernetworkModule(size, None, self.layer_structure, self.activation_func, self.add_layer_norm, self.use_dropout),
+                HypernetworkModule(size, None, self.layer_structure, self.activation_func, self.weight_init, self.add_layer_norm, self.use_dropout),
+                HypernetworkModule(size, None, self.layer_structure, self.activation_func, self.weight_init, self.add_layer_norm, self.use_dropout),
             )
 
     def weights(self):
@@ -144,6 +166,7 @@ class Hypernetwork:
         state_dict['layer_structure'] = self.layer_structure
         state_dict['activation_func'] = self.activation_func
         state_dict['is_layer_norm'] = self.add_layer_norm
+        state_dict['weight_initialization'] = self.weight_init
         state_dict['use_dropout'] = self.use_dropout
         state_dict['sd_checkpoint'] = self.sd_checkpoint
         state_dict['sd_checkpoint_name'] = self.sd_checkpoint_name
@@ -158,15 +181,21 @@ class Hypernetwork:
         state_dict = torch.load(filename, map_location='cpu')
 
         self.layer_structure = state_dict.get('layer_structure', [1, 2, 1])
+        print(self.layer_structure)
         self.activation_func = state_dict.get('activation_func', None)
+        print(f"Activation function is {self.activation_func}")
+        self.weight_init = state_dict.get('weight_initialization', 'Normal')
+        print(f"Weight initialization is {self.weight_init}")
         self.add_layer_norm = state_dict.get('is_layer_norm', False)
+        print(f"Layer norm is set to {self.add_layer_norm}")
         self.use_dropout = state_dict.get('use_dropout', False)
+        print(f"Dropout usage is set to {self.use_dropout}" )
 
         for size, sd in state_dict.items():
             if type(size) == int:
                 self.layers[size] = (
-                    HypernetworkModule(size, sd[0], self.layer_structure, self.activation_func, self.add_layer_norm, self.use_dropout),
-                    HypernetworkModule(size, sd[1], self.layer_structure, self.activation_func, self.add_layer_norm, self.use_dropout),
+                    HypernetworkModule(size, sd[0], self.layer_structure, self.activation_func, self.weight_init, self.add_layer_norm, self.use_dropout),
+                    HypernetworkModule(size, sd[1], self.layer_structure, self.activation_func, self.weight_init, self.add_layer_norm, self.use_dropout),
                 )
 
         self.name = state_dict.get('name', self.name)
diff --git a/modules/hypernetworks/ui.py b/modules/hypernetworks/ui.py
index 2b472d87..2c6c0470 100644
--- a/modules/hypernetworks/ui.py
+++ b/modules/hypernetworks/ui.py
@@ -8,8 +8,9 @@ import modules.textual_inversion.textual_inversion
 from modules import devices, sd_hijack, shared
 from modules.hypernetworks import hypernetwork
 
+keys = list(hypernetwork.HypernetworkModule.activation_dict.keys())
 
-def create_hypernetwork(name, enable_sizes, overwrite_old, layer_structure=None, activation_func=None, add_layer_norm=False, use_dropout=False):
+def create_hypernetwork(name, enable_sizes, overwrite_old, layer_structure=None, activation_func=None, weight_init=None, add_layer_norm=False, use_dropout=False):
     # Remove illegal characters from name.
     name = "".join( x for x in name if (x.isalnum() or x in "._- "))
 
@@ -25,6 +26,7 @@ def create_hypernetwork(name, enable_sizes, overwrite_old, layer_structure=None,
         enable_sizes=[int(x) for x in enable_sizes],
         layer_structure=layer_structure,
         activation_func=activation_func,
+        weight_init=weight_init,
         add_layer_norm=add_layer_norm,
         use_dropout=use_dropout,
     )
diff --git a/modules/ui.py b/modules/ui.py
index 03528968..8e343258 100644
--- a/modules/ui.py
+++ b/modules/ui.py
@@ -1238,7 +1238,8 @@ def create_ui(wrap_gradio_gpu_call):
                     new_hypernetwork_name = gr.Textbox(label="Name")
                     new_hypernetwork_sizes = gr.CheckboxGroup(label="Modules", value=["768", "320", "640", "1280"], choices=["768", "320", "640", "1280"])
                     new_hypernetwork_layer_structure = gr.Textbox("1, 2, 1", label="Enter hypernetwork layer structure", placeholder="1st and last digit must be 1. ex:'1, 2, 1'")
-                    new_hypernetwork_activation_func = gr.Dropdown(value="relu", label="Select activation function of hypernetwork", choices=["linear", "relu", "leakyrelu", "elu", "swish"])
+                    new_hypernetwork_activation_func = gr.Dropdown(value="relu", label="Select activation function of hypernetwork", choices=modules.hypernetworks.ui.keys)
+                    new_hypernetwork_initialization_option = gr.Dropdown(value = "Normal", label="Select Layer weights initialization. relu-like - Kaiming, sigmoid-like - Xavier is recommended", choices=["Normal", "KaimingUniform", "KaimingNormal", "XavierUniform", "XavierNormal"])
                     new_hypernetwork_add_layer_norm = gr.Checkbox(label="Add layer normalization")
                     new_hypernetwork_use_dropout = gr.Checkbox(label="Use dropout")
                     overwrite_old_hypernetwork = gr.Checkbox(value=False, label="Overwrite Old Hypernetwork")
@@ -1342,6 +1343,7 @@ def create_ui(wrap_gradio_gpu_call):
                 overwrite_old_hypernetwork,
                 new_hypernetwork_layer_structure,
                 new_hypernetwork_activation_func,
+                new_hypernetwork_initialization_option,
                 new_hypernetwork_add_layer_norm,
                 new_hypernetwork_use_dropout
             ],

From 7207e3bf49ed000464d288cd67e02f0ba8614dc3 Mon Sep 17 00:00:00 2001
From: AngelBottomless <35677394+aria1th@users.noreply.github.com>
Date: Tue, 25 Oct 2022 15:24:59 +0900
Subject: [PATCH 25/73] remove duplicate keys and lowercase

---
 modules/hypernetworks/hypernetwork.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/modules/hypernetworks/hypernetwork.py b/modules/hypernetworks/hypernetwork.py
index afbcdff8..842b6447 100644
--- a/modules/hypernetworks/hypernetwork.py
+++ b/modules/hypernetworks/hypernetwork.py
@@ -32,7 +32,7 @@ class HypernetworkModule(torch.nn.Module):
         "tanh": torch.nn.Tanh,
         "sigmoid": torch.nn.Sigmoid,
     }
-    activation_dict.update({cls_name: cls_obj for cls_name, cls_obj in inspect.getmembers(torch.nn.modules.activation) if inspect.isclass(cls_obj) and cls_obj.__module__ == 'torch.nn.modules.activation'})
+    activation_dict.update({cls_name.lower(): cls_obj for cls_name, cls_obj in inspect.getmembers(torch.nn.modules.activation) if inspect.isclass(cls_obj) and cls_obj.__module__ == 'torch.nn.modules.activation'})
 
     def __init__(self, dim, state_dict=None, layer_structure=None, activation_func=None, weight_init='Normal', add_layer_norm=False, use_dropout=False):
         super().__init__()

From cbb857b675cf0f169b21515c29da492b513cc8c4 Mon Sep 17 00:00:00 2001
From: AUTOMATIC <16777216c@gmail.com>
Date: Wed, 26 Oct 2022 09:44:02 +0300
Subject: [PATCH 26/73] enable creating embedding with --medvram

---
 modules/textual_inversion/textual_inversion.py | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/modules/textual_inversion/textual_inversion.py b/modules/textual_inversion/textual_inversion.py
index 529ed3e2..647ffe3e 100644
--- a/modules/textual_inversion/textual_inversion.py
+++ b/modules/textual_inversion/textual_inversion.py
@@ -157,6 +157,9 @@ def create_embedding(name, num_vectors_per_token, overwrite_old, init_text='*'):
     cond_model = shared.sd_model.cond_stage_model
     embedding_layer = cond_model.wrapped.transformer.text_model.embeddings
 
+    with devices.autocast():
+        cond_model([""])  # will send cond model to GPU if lowvram/medvram is active
+
     ids = cond_model.tokenizer(init_text, max_length=num_vectors_per_token, return_tensors="pt", add_special_tokens=False)["input_ids"]
     embedded = embedding_layer.token_embedding.wrapped(ids.to(devices.device)).squeeze(0)
     vec = torch.zeros((num_vectors_per_token, embedded.shape[1]), device=devices.device)

From db9ab1a46b5ad4d36ecce76dfee04b7164249829 Mon Sep 17 00:00:00 2001
From: Stephen <farrenzo47@gmail.com>
Date: Mon, 24 Oct 2022 11:16:07 -0400
Subject: [PATCH 27/73] [Bugfix][API] - Fix API response for colab users

---
 modules/api/api.py    | 17 +++++++++++++----
 modules/api/models.py | 10 ++++++----
 2 files changed, 19 insertions(+), 8 deletions(-)

diff --git a/modules/api/api.py b/modules/api/api.py
index a860a964..ba890243 100644
--- a/modules/api/api.py
+++ b/modules/api/api.py
@@ -7,6 +7,7 @@ import uvicorn
 from fastapi import Body, APIRouter, HTTPException
 from fastapi.responses import JSONResponse
 from pydantic import BaseModel, Field, Json
+from typing import List
 import json
 import io
 import base64
@@ -15,12 +16,12 @@ from PIL import Image
 sampler_to_index = lambda name: next(filter(lambda row: name.lower() == row[1].name.lower(), enumerate(all_samplers)), None)
 
 class TextToImageResponse(BaseModel):
-    images: list[str] = Field(default=None, title="Image", description="The generated image in base64 format.")
+    images: List[str] = Field(default=None, title="Image", description="The generated image in base64 format.")
     parameters: Json
     info: Json
 
 class ImageToImageResponse(BaseModel):
-    images: list[str] = Field(default=None, title="Image", description="The generated image in base64 format.")
+    images: List[str] = Field(default=None, title="Image", description="The generated image in base64 format.")
     parameters: Json
     info: Json
 
@@ -41,6 +42,9 @@ class Api:
         # convert base64 to PIL image
         return Image.open(io.BytesIO(imgdata))
 
+    def __processed_info_to_json(self, processed):
+        return json.dumps(processed.info)
+
     def text2imgapi(self, txt2imgreq: StableDiffusionTxt2ImgProcessingAPI):
         sampler_index = sampler_to_index(txt2imgreq.sampler_index)
         
@@ -65,7 +69,7 @@ class Api:
             i.save(buffer, format="png")
             b64images.append(base64.b64encode(buffer.getvalue()))
 
-        return TextToImageResponse(images=b64images, parameters=json.dumps(vars(txt2imgreq)), info=json.dumps(processed.info))
+        return TextToImageResponse(images=b64images, parameters=json.dumps(vars(txt2imgreq)), info=processed.js())
         
         
 
@@ -111,7 +115,12 @@ class Api:
             i.save(buffer, format="png")
             b64images.append(base64.b64encode(buffer.getvalue()))
 
-        return ImageToImageResponse(images=b64images, parameters=json.dumps(vars(img2imgreq)), info=json.dumps(processed.info))
+        if (not img2imgreq.include_init_images):
+            # remove img2imgreq.init_images and img2imgreq.mask
+            img2imgreq.init_images = None
+            img2imgreq.mask = None
+
+        return ImageToImageResponse(images=b64images, parameters=json.dumps(vars(img2imgreq)), info=processed.js())
 
     def extrasapi(self):
         raise NotImplementedError
diff --git a/modules/api/models.py b/modules/api/models.py
index f551fa35..c6d43606 100644
--- a/modules/api/models.py
+++ b/modules/api/models.py
@@ -31,6 +31,7 @@ class ModelDef(BaseModel):
     field_alias: str
     field_type: Any
     field_value: Any
+    field_exclude: bool = False
 
 
 class PydanticModelGenerator:
@@ -68,7 +69,7 @@ class PydanticModelGenerator:
                 field=underscore(k),
                 field_alias=k,
                 field_type=field_type_generator(k, v),
-                field_value=v.default
+                field_value=v.default,
             )
             for (k,v) in self._class_data.items() if k not in API_NOT_ALLOWED
         ]
@@ -78,7 +79,8 @@ class PydanticModelGenerator:
                 field=underscore(fields["key"]), 
                 field_alias=fields["key"], 
                 field_type=fields["type"],
-                field_value=fields["default"]))
+                field_value=fields["default"],
+                field_exclude=fields["exclude"] if "exclude" in fields else False))
 
     def generate_model(self):
         """
@@ -86,7 +88,7 @@ class PydanticModelGenerator:
         from the json and overrides provided at initialization
         """
         fields = {
-            d.field: (d.field_type, Field(default=d.field_value, alias=d.field_alias)) for d in self._model_def
+            d.field: (d.field_type, Field(default=d.field_value, alias=d.field_alias, exclude=d.field_exclude)) for d in self._model_def
         }
         DynamicModel = create_model(self._model_name, **fields)
         DynamicModel.__config__.allow_population_by_field_name = True
@@ -102,5 +104,5 @@ StableDiffusionTxt2ImgProcessingAPI = PydanticModelGenerator(
 StableDiffusionImg2ImgProcessingAPI = PydanticModelGenerator(
     "StableDiffusionProcessingImg2Img", 
     StableDiffusionProcessingImg2Img,
-    [{"key": "sampler_index", "type": str, "default": "Euler"}, {"key": "init_images", "type": list, "default": None}, {"key": "denoising_strength", "type": float, "default": 0.75}, {"key": "mask", "type": str, "default": None}]
+    [{"key": "sampler_index", "type": str, "default": "Euler"}, {"key": "init_images", "type": list, "default": None}, {"key": "denoising_strength", "type": float, "default": 0.75}, {"key": "mask", "type": str, "default": None}, {"key": "include_init_images", "type": bool, "default": False, "exclude" : True}]
 ).generate_model()
\ No newline at end of file

From b46c64c6e5b40d69521e4d50e2d35f6a35468129 Mon Sep 17 00:00:00 2001
From: Stephen <farrenzo47@gmail.com>
Date: Mon, 24 Oct 2022 12:18:54 -0400
Subject: [PATCH 28/73] clean

---
 modules/api/api.py    | 4 ----
 modules/api/models.py | 2 +-
 2 files changed, 1 insertion(+), 5 deletions(-)

diff --git a/modules/api/api.py b/modules/api/api.py
index ba890243..6e9d6097 100644
--- a/modules/api/api.py
+++ b/modules/api/api.py
@@ -42,9 +42,6 @@ class Api:
         # convert base64 to PIL image
         return Image.open(io.BytesIO(imgdata))
 
-    def __processed_info_to_json(self, processed):
-        return json.dumps(processed.info)
-
     def text2imgapi(self, txt2imgreq: StableDiffusionTxt2ImgProcessingAPI):
         sampler_index = sampler_to_index(txt2imgreq.sampler_index)
         
@@ -116,7 +113,6 @@ class Api:
             b64images.append(base64.b64encode(buffer.getvalue()))
 
         if (not img2imgreq.include_init_images):
-            # remove img2imgreq.init_images and img2imgreq.mask
             img2imgreq.init_images = None
             img2imgreq.mask = None
 
diff --git a/modules/api/models.py b/modules/api/models.py
index c6d43606..079e33d9 100644
--- a/modules/api/models.py
+++ b/modules/api/models.py
@@ -69,7 +69,7 @@ class PydanticModelGenerator:
                 field=underscore(k),
                 field_alias=k,
                 field_type=field_type_generator(k, v),
-                field_value=v.default,
+                field_value=v.default
             )
             for (k,v) in self._class_data.items() if k not in API_NOT_ALLOWED
         ]

From e86e2f7181e3e4acdcd21fa949677067a4040ba0 Mon Sep 17 00:00:00 2001
From: tumbly <tumbly@example.com>
Date: Tue, 25 Oct 2022 16:58:53 +0200
Subject: [PATCH 29/73] Add French localization

---
 localizations/fr-FR.json | 415 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 415 insertions(+)
 create mode 100644 localizations/fr-FR.json

diff --git a/localizations/fr-FR.json b/localizations/fr-FR.json
new file mode 100644
index 00000000..81c65d5e
--- /dev/null
+++ b/localizations/fr-FR.json
@@ -0,0 +1,415 @@
+{
+    "⤡": "⤡",
+    "⊞": "⊞",
+    "×": "×",
+    "❮": "❮",
+    "❯": "❯",
+    "Loading...": "Chargement...",
+    "view": "查看",
+    "api": "api",
+    "•": "•",
+    "built with gradio": "Construit avec Gradio",
+    "Stable Diffusion checkpoint": "checkpoint Stable Diffusion",
+    "txt2img": "txt2img",
+    "img2img": "img2img",
+    "Extras": "Extras",
+    "PNG Info": "Infos PNG",
+    "History": "Historique",
+    "Checkpoint Merger": "Fusion de checkpoints",
+    "Train": "Entrainer",
+    "Settings": "Paramètres",
+    "Prompt": "Prompt",
+    "Negative prompt": "Prompt négatif",
+    "Run": "Lancer",
+    "Skip": "Passer",
+    "Interrupt": "Interrrompre",
+    "Generate": "Générer",
+    "Style 1": "Style 1",
+    "Style 2": "Style 2",
+    "Label": "Etiquette",
+    "File": "Fichier",
+    "Drop File Here": "Déposer votre fichier ici",
+    "-": "-",
+    "or": "ou",
+    "Click to Upload": "Cliquer pour uploader",
+    "Image": "Image",
+    "Check progress": "Voir l'avancement",
+    "Check progress (first)": "Voir l'avancement (1er)",
+    "Sampling Steps": "Etapes d'échantillonnage",
+    "Sampling method": "Méthode d'échantillonnage",
+    "Euler a": "Euler a",
+    "Euler": "Euler",
+    "LMS": "LMS",
+    "Heun": "Heun",
+    "DPM2": "DPM2",
+    "DPM2 a": "DPM2 a",
+    "DPM fast": "DPM fast",
+    "DPM adaptive": "DPM adaptive",
+    "LMS Karras": "LMS Karras",
+    "DPM2 Karras": "DPM2 Karras",
+    "DPM2 a Karras": "DPM2 a Karras",
+    "DDIM": "DDIM",
+    "PLMS": "PLMS",
+    "Width": "Largeur",
+    "Height": "Hauteur",
+    "Restore faces": "Restaurer les visages",
+    "Tiling": "Mode Tuile",
+    "Highres. fix": "Correction haute résolution",
+    "Firstpass width": "Largeur première passe",
+    "Firstpass height": "Hauteur seconde passe",
+    "Denoising strength": "Puissance de réduction du bruit",
+    "Batch count": "Nombre de lots",
+    "Batch size": "Taille de lots",
+    "CFG Scale": "Echelle CFG",
+    "Seed": "Graine",
+    "Extra": "Extra",
+    "Variation seed": "Variation de la graine",
+    "Variation strength": "Puissance de variation",
+    "Resize seed from width": "Largeur de redimensionnement de la graine",
+    "Resize seed from height": "Hauteur de redimensionnement de la graine",
+    "Script": "Script",
+    "None": "Aucun",
+    "Prompt matrix": "Matrice de prompt",
+    "Prompts from file or textbox": "Prompts depuis un fichier ou une boite de dialogue",
+    "X/Y plot": "graphe X/Y",
+    "Put variable parts at start of prompt": "Mettre les mots clés variable au début du prompt",
+    "Show Textbox": "Afficher le champs texte",
+    "File with inputs": "Fichier d'entrée",
+    "Prompts": "Prompts",
+    "X type": "Axe X",
+    "Nothing": "Rien",
+    "Var. seed": "Graine variable",
+    "Var. strength": "Puissance variable",
+    "Steps": "Etapes",
+    "Prompt S/R": "Cherche et remplace dans le prompt",
+    "Prompt order": "Ordre du prompt",
+    "Sampler": "Echantilloneur",
+    "Checkpoint name": "Nom du checkpoint",
+    "Hypernetwork": "Hypernetwork",
+    "Hypernet str.": "Force de l'Hypernetwork",
+    "Sigma Churn": "Sigma Churn",
+    "Sigma min": "Sigma min.",
+    "Sigma max": "Sigma max.",
+    "Sigma noise": "Bruit Sigma",
+    "Eta": "Temps estimé",
+    "Clip skip": "Passer Clip",
+    "Denoising": "Réduction du bruit",
+    "X values": "Valeur X",
+    "Y type": "Type Y",
+    "Y values": "Valeur Y",
+    "Draw legend": "Afficher la légende",
+    "Include Separate Images": "Inclure les images séparées",
+    "Keep -1 for seeds": "Conserver -1 pour la graine",
+    "Drop Image Here": "Déposer l'image ici",
+    "Save": "Enregistrer",
+    "Send to img2img": "Envoyer vers img2img",
+    "Send to inpaint": "Envoyer vers inpaint",
+    "Send to extras": "Envoyer vers extras",
+    "Make Zip when Save?": "Créer un zip lors de l'enregistrement?",
+    "Textbox": "Champ texte",
+    "Interrogate\nCLIP": "Interroger\nCLIP",
+    "Interrogate\nDeepBooru": "Interroger\nDeepBooru",
+    "Inpaint": "Inpaint",
+    "Batch img2img": "Lot img2img",
+    "Image for img2img": "Image pour img2img",
+    "Image for inpainting with mask": "Image pour inpainting avec masque",
+    "Mask": "Masque",
+    "Mask blur": "Flou masque",
+    "Mask mode": "Mode masque",
+    "Draw mask": "Dessiner masque",
+    "Upload mask": "Uploader masque",
+    "Masking mode": "Mode de masquage",
+    "Inpaint masked": "Inpaint masqué",
+    "Inpaint not masked": "Inpaint non masqué",
+    "Masked content": "Contenu masqué",
+    "fill": "remplir",
+    "original": "original",
+    "latent noise": "bruit latent",
+    "latent nothing": "latent vide",
+    "Inpaint at full resolution": "Inpaint en pleine résolution",
+    "Inpaint at full resolution padding, pixels": "Padding de l'inpaint en pleine résolution, en pixels",
+    "Process images in a directory on the same machine where the server is running.": "Traite les images dans un dossier sur la même machine où le serveur tourne",
+    "Use an empty output directory to save pictures normally instead of writing to the output directory.": "Utiliser un dossier de sortie vide pour enregistrer les images normalement plutôt que d'écrire dans le dossier de sortie",
+    "Input directory": "Dossier d'entrée",
+    "Output directory": "Dossier de sortie",
+    "Resize mode": "Mode redimensionnement",
+    "Just resize": "Redimensionner uniquement",
+    "Crop and resize": "Recadrer et redimensionner",
+    "Resize and fill": "Redimensionner et remplir",
+    "img2img alternative test": "Test alternatif img2img",
+    "Loopback": "Bouclage",
+    "Outpainting mk2": "Outpainting v2",
+    "Poor man's outpainting": "Outpainting du pauvre",
+    "SD upscale": "Agrandissement SD",
+    "should be 2 or lower.": "doit être inférieur ou égal à 2",
+    "Override `Sampling method` to Euler?(this method is built for it)": "Forcer `Méthode d'échantillonnage` à Euler ? (cette méthode est dédiée à cela)",
+    "Override `prompt` to the same value as `original prompt`?(and `negative prompt`)": "Forcer le `prompt` au contenu du `prompt d'origine` ? (de même pour le `prompt négatif`)",
+    "Original prompt": "Prompt d'origine",
+    "Original negative prompt": "Prompt négatif d'origine",
+    "Override `Sampling Steps` to the same value as `Decode steps`?": "Forcer le valeur d'`Etapes d'échantillonnage` à la même valeur qu'`Etapes de décodage` ?",
+    "Decode steps": "Etapes de décodage",
+    "Override `Denoising strength` to 1?": "Forcer `Puissance de réduction du bruit` à 1 ?",
+    "Decode CFG scale": "Echelle CFG de décodage",
+    "Randomness": "Aléatoire",
+    "Sigma adjustment for finding noise for image": "Ajustement Sigma lors de la recherche du bruit dans l'image",
+    "Loops": "Boucles",
+    "Denoising strength change factor": "Facteur de changement de la puissance de réduction du bruit",
+    "Recommended settings: Sampling Steps: 80-100, Sampler: Euler a, Denoising strength: 0.8": "Paramètres recommandés : Etapes d'échantillonnage : 80-100, Echantillonneur : Euler a, Puissance de réduction du bruit : 0.8",
+    "Pixels to expand": "Pixels à étendre",
+    "Outpainting direction": "Direction de l'outpainting",
+    "left": "gauche",
+    "right": "droite",
+    "up": "haut",
+    "down": "bas",
+    "Fall-off exponent (lower=higher detail)": "Exposant de diminution (plus petit = plus de détails)",
+    "Color variation": "Variation de couleur",
+    "Will upscale the image to twice the dimensions; use width and height sliders to set tile size": "Agrandira l'image à deux fois sa taille; utilisez les glissières largeur et hauteur afin de choisir la taille de tuile",
+    "Tile overlap": "Chevauchement de tuile",
+    "Upscaler": "Agrandisseur",
+    "Lanczos": "Lanczos",
+    "LDSR": "LDSR",
+    "BSRGAN 4x": "BSRGAN 4x",
+    "ESRGAN_4x": "ESRGAN_4x",
+    "R-ESRGAN 4x+ Anime6B": "R-ESRGAN 4x+ Anime6B",
+    "ScuNET GAN": "ScuNET GAN",
+    "ScuNET PSNR": "ScuNET PSNR",
+    "SwinIR 4x": "SwinIR 4x",
+    "Single Image": "Image unique",
+    "Batch Process": "Traitement par lot",
+    "Batch from Directory": "Lot depuis un dossier",
+    "Source": "Source",
+    "Show result images": "Montrez les images résultantes",
+    "Scale by": "Mise à l'échelle de",
+    "Scale to": "Mise à l'échelle à",
+    "Resize": "Redimensionner",
+    "Crop to fit": "Recadrer à la taille",
+    "Upscaler 2": "Agrandisseur 2",
+    "Upscaler 2 visibility": "Visibilité de l'agrandisseur 2",
+    "GFPGAN visibility": "Visibilité GFPGAN",
+    "CodeFormer visibility": "Visibilité CodeFormer",
+    "CodeFormer weight (0 = maximum effect, 1 = minimum effect)": "Poids CodeFormer (0 = effet maximum, 1 = effet minimum)",
+    "Open output directory": "Ouvrir le dossier de sortie",
+    "Send to txt2img": "Envoyer vers txt2img",
+    "txt2img history": "historique txt2img",
+    "img2img history": "historique img2img",
+    "extras history": "historique extras",
+    "Renew Page": "Rafraichr la page",
+    "First Page": "Première page",
+    "Prev Page": "Page précendente",
+    "Page Index": "Index des pages",
+    "Next Page": "Page suivante",
+    "End Page": "Page de fin",
+    "number of images to delete consecutively next": "nombre d'image à supprimer consécutivement ensuite",
+    "Delete": "Supprimer",
+    "Generate Info": "Générer les informations",
+    "File Name": "Nom de fichier",
+    "set_index": "set_index",
+    "A merger of the two checkpoints will be generated in your": "Une fusion des deux checkpoints sera générée dans votre",
+    "checkpoint": "checkpoint",
+    "directory.": "dossier",
+    "Primary model (A)": "Modèle primaire (A)",
+    "Secondary model (B)": "Modèle secondaire (B)",
+    "Tertiary model (C)": "Modèle tertiaire (C)",
+    "Custom Name (Optional)": "Nom personnalisé (Optionel)",
+    "Multiplier (M) - set to 0 to get model A": "Multiplieur (M) - utiliser 0 pour le modèle A",
+    "Interpolation Method": "Méthode d'interpolation",
+    "Weighted sum": "Somme pondérée",
+    "Add difference": "Ajouter différence",
+    "Save as float16": "Enregistrer en tant que float16",
+    "See": "Voir",
+    "wiki": "wiki",
+    "for detailed explanation.": "pour une explication détaillée.",
+    "Create embedding": "Créer un embedding",
+    "Create hypernetwork": "Créer un hypernetwork",
+    "Preprocess images": "Pré-traite les images",
+    "Name": "Nom",
+    "Initialization text": "Texte d'initialisation",
+    "Number of vectors per token": "Nombre de vecteurs par jeton",
+    "Modules": "Modules",
+    "Source directory": "Dossier source",
+    "Destination directory": "Dossier destination",
+    "Create flipped copies": "Créer des copies en mirroir",
+    "Split oversized images into two": "Couper les images trop grandes en deux",
+    "Use BLIP for caption": "Utiliser BLIP pour les descriptions",
+    "Use deepbooru for caption": "Utiliser deepbooru pour les descriptions",
+    "Preprocess": "Pré-traite",
+    "Train an embedding; must specify a directory with a set of 1:1 ratio images": "Entrainer un embedding ; spécifiez un dossier contenant un ensemble d'images avec un ratio de 1:1",
+    "Embedding": "Embedding",
+    "Learning rate": "Vitesse d'apprentissage",
+    "Dataset directory": "Dossier des images d'entrée",
+    "Log directory": "Dossier de journalisation",
+    "Prompt template file": "Fichier modèle de prompts",
+    "Max steps": "Etapes max.",
+    "Save an image to log directory every N steps, 0 to disable": "Enregistrer une image dans le dossier de journalisation toutes les N étapes, 0 pour désactiver",
+    "Save a copy of embedding to log directory every N steps, 0 to disable": "Enregistrer une copie de l'embedding dans le dossier de journalisation toutes les N étapes, 0 pour désactiver",
+    "Save images with embedding in PNG chunks": "Sauvegarder les images incluant l'embedding dans leur blocs PNG",
+    "Read parameters (prompt, etc...) from txt2img tab when making previews": "Lire les paramètres (prompt, etc.) depuis l'onglet txt2img lors de la génération des previews",
+    "Train Hypernetwork": "Entrainer un Hypernetwork",
+    "Train Embedding": "Entrainer un Embedding",
+    "Apply settings": "Appliquer les paramètres",
+    "Saving images/grids": "Enregistrer les images/grilles",
+    "Always save all generated images": "Toujours enregistrer toutes les images",
+    "File format for images": "Format de fichier pour les images",
+    "Images filename pattern": "Motif pour le nom de fichier des images",
+    "Always save all generated image grids": "Toujours enregistrer toutes les grilles d'images générées",
+    "File format for grids": "Format de fichier pour les grilles",
+    "Add extended info (seed, prompt) to filename when saving grid": "Ajouter les informations étendues (graine, prompt) aux noms de fichiers lors de l'enregistrement d'une grille",
+    "Do not save grids consisting of one picture": "Ne pas enregistrer les grilles contenant une seule image",
+    "Prevent empty spots in grid (when set to autodetect)": "Eviter les vides dans la grille (quand autodétection est choisie)",
+    "Grid row count; use -1 for autodetect and 0 for it to be same as batch size": "Nombre de colonnes de la grille; utilisez -1 pour autodétection et 0 pour qu'il soit égal à la taille du lot",
+    "Save text information about generation parameters as chunks to png files": "Enregistrer l'information du text des paramètres de génération en tant que blocs dans les fichiers PNG",
+    "Create a text file next to every image with generation parameters.": "Créer un fichier texte contenant les paramètres de génération à côté de chaque image",
+    "Save a copy of image before doing face restoration.": "Enregistrer une copie de l'image avant de lancer la restauration de visage",
+    "Quality for saved jpeg images": "Qualité pour les images jpeg enregistrées",
+    "If PNG image is larger than 4MB or any dimension is larger than 4000, downscale and save copy as JPG": "Si l'image PNG est plus grande que 4MB or l'une des ses dimensions supérieure à 4000, réduire sa taille et enregistrer une copie en JPG",
+    "Use original name for output filename during batch process in extras tab": "Utiliser un nom de fichier original pour les fichiers de sortie durant le traitement par lot dans l'onglet Extras",
+    "When using 'Save' button, only save a single selected image": "A l'utilisation du bouton `Enregistrer`, n'enregistrer que l'image séléctionnée",
+    "Do not add watermark to images": "Ne pas ajouter de filigrane aux images",
+    "Paths for saving": "Chemins pour l'enregistrement",
+    "Output directory for images; if empty, defaults to three directories below": "Dossier de sortie pour les images; si non spécifié, le chemin par défaut sera trois niveau en dessous",
+    "Output directory for txt2img images": "Dossier de sortie pour les images txt2img",
+    "Output directory for img2img images": "Dossier de sortie pour les images img2img",
+    "Output directory for images from extras tab": "Dossier de sortie pour les images de l'onglet Extras",
+    "Output directory for grids; if empty, defaults to two directories below": "Dossier de sortie pour les grilles; si non spécifié, le chemin par défaut sera deux niveau en dessous",
+    "Output directory for txt2img grids": "Dossier de sortie pour les grilles txt2img",
+    "Output directory for img2img grids": "Dossier de sortie pour les grilles img2img",
+    "Directory for saving images using the Save button": "Dossier de sauvegarde des images pour le bouton `Enregistrer`",
+    "Saving to a directory": "Enregistrer dans un dossier",
+    "Save images to a subdirectory": "Enregistrer les images dans un sous dossier",
+    "Save grids to a subdirectory": "Enregistrer les grilles dans un sous dossier",
+    "When using \"Save\" button, save images to a subdirectory": "Lors de l'utilisation du bouton \"Enregistrer\", sauvegarder les images dans un sous dossier",
+    "Directory name pattern": "Motif pour le nom des dossiers",
+    "Max prompt words for [prompt_words] pattern": "Maximum de mot pour le motif [prompt_words]",
+    "Upscaling": "Agrandissement",
+    "Tile size for ESRGAN upscalers. 0 = no tiling.": "Taille des tuile for les agrandisseurs ESRGAN. 0 = mode tuile désactivé.",
+    "Tile overlap, in pixels for ESRGAN upscalers. Low values = visible seam.": "Chevauchement des tuiles, en pixel pour l'agrandisseur ESRGAN. Valeur faible = couture visible",
+    "Tile size for all SwinIR.": "Taille de la tuile pour tous les agrandisseur SwinIR.",
+    "Tile overlap, in pixels for SwinIR. Low values = visible seam.": "Chevauchement de tuile, en pixels pour SwinIR. Valeur faible = couture visible",
+    "LDSR processing steps. Lower = faster": "Echantillon du traitement LDSR. Valeur faible =  plus rapide",
+    "Upscaler for img2img": "Agrandisseur pour img2img",
+    "Upscale latent space image when doing hires. fix": "Agrandir l'image de l'espace latent lors de la correction haute résolution",
+    "Face restoration": "Restauration de visage",
+    "CodeFormer weight parameter; 0 = maximum effect; 1 = minimum effect": "Paramètre de poids pour CodeFormer; 0 = effet maximum ; 1 = effet minimum",
+    "Move face restoration model from VRAM into RAM after processing": "Déplacer le modèle de restauration de visage de la VRAM vers la RAM après traitement",
+    "System": "Système",
+    "VRAM usage polls per second during generation. Set to 0 to disable.": "Fréquence d'interrogation par seconde pendant la génération. Mettez la valeur à 0 pour désactiver.",
+    "Always print all generation info to standard output": "Toujours afficher toutes les informations de génération dans la sortie standard",
+    "Add a second progress bar to the console that shows progress for an entire job.": "Ajouter un seconde barre de progression dans la console montrant l'avancement pour un tâche complète.",
+    "Training": "Entrainement",
+    "Unload VAE and CLIP from VRAM when training": "Décharger VAE et CLIP de la VRAM pendant l'entrainement",
+    "Filename word regex": "Regex de mot",
+    "Filename join string": "Chaine de caractère pour lier les noms de fichier",
+    "Number of repeats for a single input image per epoch; used only for displaying epoch number": "Nombre de répétition pour une image unique par époque; utilisé seulement pour afficher le nombre d'époques",
+    "Save an csv containing the loss to log directory every N steps, 0 to disable": "Enregistrer un csv contenant la perte dans le dossier de journalisation toutes les N étapes, 0 pour désactiver",
+    "Stable Diffusion": "Stable Diffusion",
+    "Checkpoints to cache in RAM": "Checkpoint à mettre en cache dans la RAM",
+    "Hypernetwork strength": "Force de l'Hypernetwork",
+    "Apply color correction to img2img results to match original colors.": "Appliquer une correction de couleur aux résultats img2img afin de conserver les couleurs d'origine",
+    "Save a copy of image before applying color correction to img2img results": "Enregistrer une copie de l'image avant d'appliquer les résultats de la correction de couleur img2img",
+    "With img2img, do exactly the amount of steps the slider specifies (normally you'd do less with less denoising).": "Avec img2img, executer exactement le nombre d'étapes spécifiées par la glissière (normalement moins d'étapes sont executées quand la réduction du bruit est plus faible).",
+    "Enable quantization in K samplers for sharper and cleaner results. This may change existing seeds. Requires restart to apply.": "Activer la quantisation des échantillionneurs K pour des résultats plus nets et plus propres. Cela peut modifier les graines existantes. Requiert un redémarrage pour être actif.",
+    "Emphasis: use (text) to make model pay more attention to text and [text] to make it pay less attention": "Emphase : utilisez (texte) afin de forcer le modèle à porter plus d'attention au texte et [texte] afin qu'il y porte moins attention",
+    "Use old emphasis implementation. Can be useful to reproduce old seeds.": "Utilisez l'ancienne méthode d'emphase. Peut être utile afin de reproduire d'anciennes graines.",
+    "Make K-diffusion samplers produce same images in a batch as when making a single image": "Demander aux échantillionneurs K-diffusion de produire les mêmes dans un lot que lors de la génération d'une image unique",
+    "Increase coherency by padding from the last comma within n tokens when using more than 75 tokens": "Améliorer la cohérence en remplissant (padding) à partir de la dernière virgule dans les X jetons quand on en utilise plus de 75",
+    "Filter NSFW content": "Filtrer le contenu +18 (NSFW)",
+    "Stop At last layers of CLIP model": "S'arrêter aux derniers niveaux du modèle CLIP",
+    "Interrogate Options": "Options d'intérrogation",
+    "Interrogate: keep models in VRAM": "Interroger : conserver les modèles en VRAM",
+    "Interrogate: use artists from artists.csv": "Interroger : utiliser les artistes dans artists.csv",
+    "Interrogate: include ranks of model tags matches in results (Has no effect on caption-based interrogators).": "Interroger : inclure la correspondance du classement des labels de modèle dans les résultats (N'a pas d'effet sur les interrogateurs basés sur des descriptions) ",
+    "Interrogate: num_beams for BLIP": "Interroger : num_beams pour BLIP",
+    "Interrogate: minimum description length (excluding artists, etc..)": "Interroger : longueur minimale de la description (excluant les artistes, etc.)",
+    "Interrogate: maximum description length": "Interroger : longueur maximale de la description",
+    "CLIP: maximum number of lines in text file (0 = No limit)": "CLIP : nombre maximum de lignes dans le fichier texte (0 = pas de limite)",
+    "Interrogate: deepbooru score threshold": "Interroger : seuil du score deepbooru",
+    "Interrogate: deepbooru sort alphabetically": "Interroger : classement alphabétique deepbooru",
+    "use spaces for tags in deepbooru": "Utiliser des espaces pour les étiquettes dans deepbooru",
+    "escape (\\) brackets in deepbooru (so they are used as literal brackets and not for emphasis)": "échapper (\\) les crochets dans deepbooru (afin qu'ils puissent être utilisés littéralement et non pour mettre en emphase)",
+    "User interface": "Interface utilisateur",
+    "Show progressbar": "Afficher la barre de progression",
+    "Show image creation progress every N sampling steps. Set 0 to disable.": "Afficher l'état d'avancement de la création d'image toutes les X étapes d'échantillionnage. Utiliser 0 pour désactiver.",
+    "Show grid in results for web": "Afficher la grille dans les résultats web",
+    "Do not show any images in results for web": "N'afficher aucune image dans les résultats web'",
+    "Add model hash to generation information": "Ajouter le hash du modèle dans l'information de génération",
+    "Add model name to generation information": "Ajouter le nom du modèle dans l'information de génération",
+    "Font for image grids that have text": "Police pour les grilles d'images contenant du texte",
+    "Enable full page image viewer": "Activer l'affichage des images en plein écran",
+    "Show images zoomed in by default in full page image viewer": "Afficher les images zoomées par défaut lors de l'affichage en plein écran",
+    "Show generation progress in window title.": "Afficher l'avancement de la génération dans le titre de la fenêtre.",
+    "Quicksettings list": "Liste de réglages rapides",
+    "Localization (requires restart)": "Localisation (requiert un redémarrage)",
+    "Sampler parameters": "Paramètres de l'échantillionneur",
+    "Hide samplers in user interface (requires restart)": "Cacher les échantillonneurs dans l'interface utilisateur (requiert un redémarrage)",
+    "eta (noise multiplier) for DDIM": "eta (multiplicateur de bruit) pour DDIM",
+    "eta (noise multiplier) for ancestral samplers": "eta (multiplicateur de bruit) poru les échantillionneurs de type 'ancestral'",
+    "img2img DDIM discretize": "Discrétisation DDIM pour img2img",
+    "uniform": "uniforme",
+    "quad": "quad",
+    "sigma churn": "sigma churn",
+    "sigma tmin": "sigma tmin",
+    "sigma noise": "sigma noise",
+    "Eta noise seed delta": "Eta noise seed delta",
+    "Request browser notifications": "Demander les notifications au navigateur",
+    "Download localization template": "Télécharger le modèle de localisation",
+    "Reload custom script bodies (No ui updates, No restart)": "Recharger le contenu des scripts personnalisés (Pas de mise à jour de l'interface, Pas de redémarrage)",
+    "Restart Gradio and Refresh components (Custom Scripts, ui.py, js and css only)": "Redémarrer Gradio et rafraichir les composants (Scripts personnalisés, ui.py, js et css uniquement)",
+    "Prompt (press Ctrl+Enter or Alt+Enter to generate)": "Prompt (Ctrl + Entrée ou Alt + Entrée pour générer)",
+    "Negative prompt (press Ctrl+Enter or Alt+Enter to generate)": "Prompt négatif (Ctrl + Entrée ou Alt + Entrée pour générer)",
+    "Add a random artist to the prompt.": "Ajouter un artiste aléatoire au prompt",
+    "Read generation parameters from prompt or last generation if prompt is empty into user interface.": "Lire les paramètres de génération depuis le prompt, ou depuis la dernière génération si le prompt est vide dans l'interface utilisateur.",
+    "Save style": "Sauvegarder le style",
+    "Apply selected styles to current prompt": "Appliquer les styles séléctionnés au prompt actuel",
+    "Stop processing current image and continue processing.": "Arrêter le traitement de l'image actuelle et continuer le traitement.",
+    "Stop processing images and return any results accumulated so far.": "Arrêter le traitement des images et retourne les résultats accumulés depuis le début.",
+    "Style to apply; styles have components for both positive and negative prompts and apply to both": "Style à appliquer ; les styles sont composés de prompts positifs et négatifs et s'appliquent au deux",
+    "Do not do anything special": "Ne rien faire de particulier",
+    "Which algorithm to use to produce the image": "Quel algorithme utiliser pour produire l'image",
+    "Euler Ancestral - very creative, each can get a completely different picture depending on step count, setting steps to higher than 30-40 does not help": "Euler Ancestral - très créatif, peut générer des images complètement différentes en fonction du nombre d'étapes, utiliser plus de 30 à 40 étapes n'améliore pas le résultat",
+    "Denoising Diffusion Implicit Models - best at inpainting": "Modèles implicite de réduction du bruit à diffusion - utile pour l'inpainting",
+    "Produce an image that can be tiled.": "Produit une image qui peut être bouclée (tuile).",
+    "Use a two step process to partially create an image at smaller resolution, upscale, and then improve details in it without changing composition": "Utilise un processus en deux étapes afin de créer partiellement une image dans une résolution plus faible, l'agrandir et améliorer ses détails sans modifier la composition",
+    "Determines how little respect the algorithm should have for image's content. At 0, nothing will change, and at 1 you'll get an unrelated image. With values below 1.0, processing will take less steps than the Sampling Steps slider specifies.": "Détermine à quel point l'algorithme doit respecter le contenu de l'image. A 0 rien ne changera, à 1 l'image sera entièrement différente. Avec des valeurs inférieures à 1.0 le traitement utilisera moins d'étapes que ce que la glissière Etapes d'échantillionnage spécifie. ",
+    "How many batches of images to create": "Combien de lots d'images créer",
+    "How many image to create in a single batch": "Combien d'images créer par lot",
+    "Classifier Free Guidance Scale - how strongly the image should conform to prompt - lower values produce more creative results": "Classifier Free Guidance Scale - spécifie à quel point l'image doit se conformer au prompt - des valeurs plus faibles produisent des résultats plus créatifs",
+    "A value that determines the output of random number generator - if you create an image with same parameters and seed as another image, you'll get the same result": "Une valeur qui détermine la sortie du générateur de nombres aléatoires - si vous créez une image avec les mêmes paramètres et graine qu'une autre, le résultat sera identique",
+    "Set seed to -1, which will cause a new random number to be used every time": "Passer la graine à -1, cela causera qu'un nombre aléatoire différent sera utilisé à chaque fois",
+    "Reuse seed from last generation, mostly useful if it was randomed": "Réutiliser la graine de la dernière génération, généralement utile uniquement si elle était randomisée",
+    "Seed of a different picture to be mixed into the generation.": "Graine d'une image différente à mélanger dans la génération",
+    "How strong of a variation to produce. At 0, there will be no effect. At 1, you will get the complete picture with variation seed (except for ancestral samplers, where you will just get something).": "Force de la variation à produire. A 0 il n'y aura pas d'effet. A 1 l'image sera composée uniquement de la graine variable spécifiée (à l'exception des échantillionneurs `ancestral`)",
+    "Make an attempt to produce a picture similar to what would have been produced with same seed at specified resolution": "Essayer de produire une image similaire à ce qu'elle aurait été avec la même graine, mais dans la résolution spécifiée",
+    "Separate values for X axis using commas.": "Séparer les valeurs pour l'axe X par des virgules",
+    "Separate values for Y axis using commas.": "Séparer les valeurs pour l'axe Y par des virgules",
+    "Write image to a directory (default - log/images) and generation parameters into csv file.": "Ecrire l'image dans un dossier (par défaut - log/images) et les paramètres de génération dans un fichier csv.",
+    "Open images output directory": "Ouvrir le dossier de sortie des images",
+    "How much to blur the mask before processing, in pixels.": "Quantité de flou à appliquer au masque avant traitement, en pixels",
+    "What to put inside the masked area before processing it with Stable Diffusion.": "Avec quoi remplir la zone masquée avant traitement par Stable Diffusion.",
+    "fill it with colors of the image": "remplir avec les couleurs de l'image",
+    "keep whatever was there originally": "conserver ce qui était présent à l'origine",
+    "fill it with latent space noise": "remplir avec le bruit de l'espace latent",
+    "fill it with latent space zeroes": "remplir avec des zéros dans l'espace latent",
+    "Upscale masked region to target resolution, do inpainting, downscale back and paste into original image": "Agrandir la région masquées à la résolution cible, exécuter l'inpainting, réduire à nouveau puis coller dans l'image originale",
+    "Resize image to target resolution. Unless height and width match, you will get incorrect aspect ratio.": "Redimensionner l'image dans la résolution cible. A moins que la hauteur et la largeur coincident le ratio de l'image sera incorrect.",
+    "Resize the image so that entirety of target resolution is filled with the image. Crop parts that stick out.": "Redimensionner l'image afin que l'entièreté de la résolution cible soit remplie par l'image. Recadrer les parties qui dépassent.",
+    "Resize the image so that entirety of image is inside target resolution. Fill empty space with image's colors.": "Redimensionner l'image afin que l'entièreté de l'image soit contenue dans la résolution cible. Remplir l'espace vide avec les couleurs de l'image.",
+    "How many times to repeat processing an image and using it as input for the next iteration": "Combien de fois répéter le traitement d'une image et l'utiliser comme entrée pour la prochaine itération",
+    "In loopback mode, on each loop the denoising strength is multiplied by this value. <1 means decreasing variety so your sequence will converge on a fixed picture. >1 means increasing variety so your sequence will become more and more chaotic.": "En mode bouclage (Loopback), à chaque tour de la boucle la force du réducteur de bruit est multipliée par cette valeur. <1 signifie réduire la variation donc votre séquence convergera vers une image fixe. >1 signifie augmenter la variation donc votre séquence deviendra de plus en plus chaotique. ",
+    "For SD upscale, how much overlap in pixels should there be between tiles. Tiles overlap so that when they are merged back into one picture, there is no clearly visible seam.": "Pour l'agrandissement SD, de combien les tuiles doivent se chevaucher, en pixels. Les tuiles se chevauchent de manière à ce qu'il n'y ait pas de couture visible une fois fusionnées en une image. ",
+    "A directory on the same machine where the server is running.": "Un dossier sur la même machine où le serveur tourne.",
+    "Leave blank to save images to the default path.": "Laisser vide pour sauvegarder les images dans le chemin par défaut.",
+    "Result = A * (1 - M) + B * M": "Résultat = A * (1 - M) + B * M",
+    "Result = A + (B - C) * M": "Résultat = A + (B - C) * M",
+    "Path to directory with input images": "Chemin vers le dossier contenant les images d'entrée",
+    "Path to directory where to write outputs": "Chemin vers le dossier où écrire les sorties",
+    "Use following tags to define how filenames for images are chosen: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; leave empty for default.": "Utiliser les étiquettes suivantes pour définir le nom des images : [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp] ; laisser vide pour le nom par défaut.",
+    "If this option is enabled, watermark will not be added to created images. Warning: if you do not add watermark, you may be behaving in an unethical manner.": "Si cette option est activée le filigrane ne sera pas ajouté au images crées. Attention : si vous n'ajoutez pas de filigrane vous pourriez vous comporter de manière non éthique.",
+    "Use following tags to define how subdirectories for images and grids are chosen: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; leave empty for default.": "Utiliser les étiquettes suivantes pour définir le nom des sous dossiers pour les images et les grilles  : [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp] ; laisser vide pour le nom par défaut.",
+    "Restore low quality faces using GFPGAN neural network": "Restaurer les visages de basse qualité en utilisant le réseau neuronal GFPGAN",
+    "This regular expression will be used extract words from filename, and they will be joined using the option below into label text used for training. Leave empty to keep filename text as it is.": "Cette expression régulière sera utilisée pour extraire les mots depuis le nom de fichier ; ils seront joints en utilisant l'option ci dessous en une étiquette utilisée pour l'entrainement. Laisser vide pour conserver le texte du nom de fichier tel quel.",
+    "This string will be used to join split words into a single line if the option above is enabled.": "Cette chaine de caractères sera utilisée pour joindre les mots séparés en une ligne unique si l'option ci dessus est activée.",
+    "List of setting names, separated by commas, for settings that should go to the quick access bar at the top, rather than the usual setting tab. See modules/shared.py for setting names. Requires restarting to apply.": "Liste des noms de paramètres, séparés par des virgules, pour les paramètres de la barre d'accès rapide en haut de page, plutôt que dans la page habituelle des paramètres. Voir modules/shared.py pour définir les noms. Requiert un redémarrage pour s'appliquer.",
+    "If this values is non-zero, it will be added to seed and used to initialize RNG for noises when using samplers with Eta. You can use this to produce even more variation of images, or you can use this to match images of other software if you know what you are doing.": "Si cette valeur est différente de zéro elle sera ajoutée à la graine et utilisée pour initialiser le générateur de nombres aléatoires du bruit lors de l'utilisation des échantillonneurs supportants Eta. Vous pouvez l'utiliser pour produire encore plus de variation dans les images, ou vous pouvez utiliser ceci pour faire correspondre les images avec d'autres logiciels si vous savez ce que vous faites.",
+    "Enable Autocomplete": "Activer l'autocomplétion",
+    "/0.0": "/0.0"
+}
\ No newline at end of file

From 1ecfa5977ebdd59a09d52636894ab76451c9d17e Mon Sep 17 00:00:00 2001
From: tumbly <tumbly@example.com>
Date: Tue, 25 Oct 2022 21:55:58 +0200
Subject: [PATCH 30/73] Fix typos and proper wording per salco's comments

---
 localizations/fr-FR.json | 88 ++++++++++++++++++++--------------------
 1 file changed, 44 insertions(+), 44 deletions(-)

diff --git a/localizations/fr-FR.json b/localizations/fr-FR.json
index 81c65d5e..5c1e97c7 100644
--- a/localizations/fr-FR.json
+++ b/localizations/fr-FR.json
@@ -5,7 +5,7 @@
     "❮": "❮",
     "❯": "❯",
     "Loading...": "Chargement...",
-    "view": "查看",
+    "view": "vue",
     "api": "api",
     "•": "•",
     "built with gradio": "Construit avec Gradio",
@@ -18,8 +18,8 @@
     "Checkpoint Merger": "Fusion de checkpoints",
     "Train": "Entrainer",
     "Settings": "Paramètres",
-    "Prompt": "Prompt",
-    "Negative prompt": "Prompt négatif",
+    "Prompt": "Requête",
+    "Negative prompt": "Requête négative",
     "Run": "Lancer",
     "Skip": "Passer",
     "Interrupt": "Interrrompre",
@@ -35,7 +35,7 @@
     "Image": "Image",
     "Check progress": "Voir l'avancement",
     "Check progress (first)": "Voir l'avancement (1er)",
-    "Sampling Steps": "Etapes d'échantillonnage",
+    "Sampling Steps": "Étapes d'échantillonnage",
     "Sampling method": "Méthode d'échantillonnage",
     "Euler a": "Euler a",
     "Euler": "Euler",
@@ -61,28 +61,28 @@
     "Batch count": "Nombre de lots",
     "Batch size": "Taille de lots",
     "CFG Scale": "Echelle CFG",
-    "Seed": "Graine",
+    "Seed": "Valeur aléatoire",
     "Extra": "Extra",
-    "Variation seed": "Variation de la graine",
+    "Variation seed": "Variation de la valeur aléatoire",
     "Variation strength": "Puissance de variation",
-    "Resize seed from width": "Largeur de redimensionnement de la graine",
-    "Resize seed from height": "Hauteur de redimensionnement de la graine",
+    "Resize seed from width": "Largeur de redimensionnement de la valeur aléatoire",
+    "Resize seed from height": "Hauteur de redimensionnement de la valeur aléatoire",
     "Script": "Script",
     "None": "Aucun",
-    "Prompt matrix": "Matrice de prompt",
-    "Prompts from file or textbox": "Prompts depuis un fichier ou une boite de dialogue",
+    "Prompt matrix": "Matrice de requête",
+    "Prompts from file or textbox": "Requêtes depuis un fichier ou une boite de dialogue",
     "X/Y plot": "graphe X/Y",
-    "Put variable parts at start of prompt": "Mettre les mots clés variable au début du prompt",
+    "Put variable parts at start of prompt": "Mettre les mots clés variable au début de la requête",
     "Show Textbox": "Afficher le champs texte",
     "File with inputs": "Fichier d'entrée",
-    "Prompts": "Prompts",
+    "Prompts": "Requêtes",
     "X type": "Axe X",
     "Nothing": "Rien",
-    "Var. seed": "Graine variable",
+    "Var. seed": "Valeur aléatoire variable",
     "Var. strength": "Puissance variable",
-    "Steps": "Etapes",
-    "Prompt S/R": "Cherche et remplace dans le prompt",
-    "Prompt order": "Ordre du prompt",
+    "Steps": "Étapes",
+    "Prompt S/R": "Cherche et remplace dans la requête",
+    "Prompt order": "Ordre de la requête",
     "Sampler": "Echantilloneur",
     "Checkpoint name": "Nom du checkpoint",
     "Hypernetwork": "Hypernetwork",
@@ -99,7 +99,7 @@
     "Y values": "Valeur Y",
     "Draw legend": "Afficher la légende",
     "Include Separate Images": "Inclure les images séparées",
-    "Keep -1 for seeds": "Conserver -1 pour la graine",
+    "Keep -1 for seeds": "Conserver -1 pour la valeur aléatoire",
     "Drop Image Here": "Déposer l'image ici",
     "Save": "Enregistrer",
     "Send to img2img": "Envoyer vers img2img",
@@ -143,18 +143,18 @@
     "SD upscale": "Agrandissement SD",
     "should be 2 or lower.": "doit être inférieur ou égal à 2",
     "Override `Sampling method` to Euler?(this method is built for it)": "Forcer `Méthode d'échantillonnage` à Euler ? (cette méthode est dédiée à cela)",
-    "Override `prompt` to the same value as `original prompt`?(and `negative prompt`)": "Forcer le `prompt` au contenu du `prompt d'origine` ? (de même pour le `prompt négatif`)",
-    "Original prompt": "Prompt d'origine",
-    "Original negative prompt": "Prompt négatif d'origine",
-    "Override `Sampling Steps` to the same value as `Decode steps`?": "Forcer le valeur d'`Etapes d'échantillonnage` à la même valeur qu'`Etapes de décodage` ?",
-    "Decode steps": "Etapes de décodage",
+    "Override `prompt` to the same value as `original prompt`?(and `negative prompt`)": "Forcer la `requête` au contenu de la `requête d'origine` ? (de même pour la `requête négative`)",
+    "Original prompt": "Requête d'origine",
+    "Original negative prompt": "Requête négative d'origine",
+    "Override `Sampling Steps` to the same value as `Decode steps`?": "Forcer le valeur d'`Étapes d'échantillonnage` à la même valeur qu'`Étapes de décodage` ?",
+    "Decode steps": "Étapes de décodage",
     "Override `Denoising strength` to 1?": "Forcer `Puissance de réduction du bruit` à 1 ?",
     "Decode CFG scale": "Echelle CFG de décodage",
     "Randomness": "Aléatoire",
     "Sigma adjustment for finding noise for image": "Ajustement Sigma lors de la recherche du bruit dans l'image",
     "Loops": "Boucles",
     "Denoising strength change factor": "Facteur de changement de la puissance de réduction du bruit",
-    "Recommended settings: Sampling Steps: 80-100, Sampler: Euler a, Denoising strength: 0.8": "Paramètres recommandés : Etapes d'échantillonnage : 80-100, Echantillonneur : Euler a, Puissance de réduction du bruit : 0.8",
+    "Recommended settings: Sampling Steps: 80-100, Sampler: Euler a, Denoising strength: 0.8": "Paramètres recommandés : Étapes d'échantillonnage : 80-100, Echantillonneur : Euler a, Puissance de réduction du bruit : 0.8",
     "Pixels to expand": "Pixels à étendre",
     "Outpainting direction": "Direction de l'outpainting",
     "left": "gauche",
@@ -238,12 +238,12 @@
     "Learning rate": "Vitesse d'apprentissage",
     "Dataset directory": "Dossier des images d'entrée",
     "Log directory": "Dossier de journalisation",
-    "Prompt template file": "Fichier modèle de prompts",
-    "Max steps": "Etapes max.",
+    "Prompt template file": "Fichier modèle de requêtes",
+    "Max steps": "Étapes max.",
     "Save an image to log directory every N steps, 0 to disable": "Enregistrer une image dans le dossier de journalisation toutes les N étapes, 0 pour désactiver",
     "Save a copy of embedding to log directory every N steps, 0 to disable": "Enregistrer une copie de l'embedding dans le dossier de journalisation toutes les N étapes, 0 pour désactiver",
     "Save images with embedding in PNG chunks": "Sauvegarder les images incluant l'embedding dans leur blocs PNG",
-    "Read parameters (prompt, etc...) from txt2img tab when making previews": "Lire les paramètres (prompt, etc.) depuis l'onglet txt2img lors de la génération des previews",
+    "Read parameters (prompt, etc...) from txt2img tab when making previews": "Lire les paramètres (requête, etc.) depuis l'onglet txt2img lors de la génération des previews",
     "Train Hypernetwork": "Entrainer un Hypernetwork",
     "Train Embedding": "Entrainer un Embedding",
     "Apply settings": "Appliquer les paramètres",
@@ -253,7 +253,7 @@
     "Images filename pattern": "Motif pour le nom de fichier des images",
     "Always save all generated image grids": "Toujours enregistrer toutes les grilles d'images générées",
     "File format for grids": "Format de fichier pour les grilles",
-    "Add extended info (seed, prompt) to filename when saving grid": "Ajouter les informations étendues (graine, prompt) aux noms de fichiers lors de l'enregistrement d'une grille",
+    "Add extended info (seed, prompt) to filename when saving grid": "Ajouter les informations étendues (valeur aléatoire, requête) aux noms de fichiers lors de l'enregistrement d'une grille",
     "Do not save grids consisting of one picture": "Ne pas enregistrer les grilles contenant une seule image",
     "Prevent empty spots in grid (when set to autodetect)": "Eviter les vides dans la grille (quand autodétection est choisie)",
     "Grid row count; use -1 for autodetect and 0 for it to be same as batch size": "Nombre de colonnes de la grille; utilisez -1 pour autodétection et 0 pour qu'il soit égal à la taille du lot",
@@ -307,9 +307,9 @@
     "Apply color correction to img2img results to match original colors.": "Appliquer une correction de couleur aux résultats img2img afin de conserver les couleurs d'origine",
     "Save a copy of image before applying color correction to img2img results": "Enregistrer une copie de l'image avant d'appliquer les résultats de la correction de couleur img2img",
     "With img2img, do exactly the amount of steps the slider specifies (normally you'd do less with less denoising).": "Avec img2img, executer exactement le nombre d'étapes spécifiées par la glissière (normalement moins d'étapes sont executées quand la réduction du bruit est plus faible).",
-    "Enable quantization in K samplers for sharper and cleaner results. This may change existing seeds. Requires restart to apply.": "Activer la quantisation des échantillionneurs K pour des résultats plus nets et plus propres. Cela peut modifier les graines existantes. Requiert un redémarrage pour être actif.",
+    "Enable quantization in K samplers for sharper and cleaner results. This may change existing seeds. Requires restart to apply.": "Activer la quantisation des échantillionneurs K pour des résultats plus nets et plus propres. Cela peut modifier les valeurs aléatoires existantes. Requiert un redémarrage pour être actif.",
     "Emphasis: use (text) to make model pay more attention to text and [text] to make it pay less attention": "Emphase : utilisez (texte) afin de forcer le modèle à porter plus d'attention au texte et [texte] afin qu'il y porte moins attention",
-    "Use old emphasis implementation. Can be useful to reproduce old seeds.": "Utilisez l'ancienne méthode d'emphase. Peut être utile afin de reproduire d'anciennes graines.",
+    "Use old emphasis implementation. Can be useful to reproduce old seeds.": "Utilisez l'ancienne méthode d'emphase. Peut être utile afin de reproduire d'anciennes valeurs aléatoires.",
     "Make K-diffusion samplers produce same images in a batch as when making a single image": "Demander aux échantillionneurs K-diffusion de produire les mêmes dans un lot que lors de la génération d'une image unique",
     "Increase coherency by padding from the last comma within n tokens when using more than 75 tokens": "Améliorer la cohérence en remplissant (padding) à partir de la dernière virgule dans les X jetons quand on en utilise plus de 75",
     "Filter NSFW content": "Filtrer le contenu +18 (NSFW)",
@@ -354,31 +354,31 @@
     "Download localization template": "Télécharger le modèle de localisation",
     "Reload custom script bodies (No ui updates, No restart)": "Recharger le contenu des scripts personnalisés (Pas de mise à jour de l'interface, Pas de redémarrage)",
     "Restart Gradio and Refresh components (Custom Scripts, ui.py, js and css only)": "Redémarrer Gradio et rafraichir les composants (Scripts personnalisés, ui.py, js et css uniquement)",
-    "Prompt (press Ctrl+Enter or Alt+Enter to generate)": "Prompt (Ctrl + Entrée ou Alt + Entrée pour générer)",
-    "Negative prompt (press Ctrl+Enter or Alt+Enter to generate)": "Prompt négatif (Ctrl + Entrée ou Alt + Entrée pour générer)",
-    "Add a random artist to the prompt.": "Ajouter un artiste aléatoire au prompt",
-    "Read generation parameters from prompt or last generation if prompt is empty into user interface.": "Lire les paramètres de génération depuis le prompt, ou depuis la dernière génération si le prompt est vide dans l'interface utilisateur.",
+    "Prompt (press Ctrl+Enter or Alt+Enter to generate)": "Requête (Ctrl + Entrée ou Alt + Entrée pour générer)",
+    "Negative prompt (press Ctrl+Enter or Alt+Enter to generate)": "Requête négative (Ctrl + Entrée ou Alt + Entrée pour générer)",
+    "Add a random artist to the prompt.": "Ajouter un artiste aléatoire à la requête",
+    "Read generation parameters from prompt or last generation if prompt is empty into user interface.": "Lire les paramètres de génération depuis la requête, ou depuis la dernière génération si la requête est vide dans l'interface utilisateur.",
     "Save style": "Sauvegarder le style",
-    "Apply selected styles to current prompt": "Appliquer les styles séléctionnés au prompt actuel",
+    "Apply selected styles to current prompt": "Appliquer les styles séléctionnés à la requête actuelle",
     "Stop processing current image and continue processing.": "Arrêter le traitement de l'image actuelle et continuer le traitement.",
     "Stop processing images and return any results accumulated so far.": "Arrêter le traitement des images et retourne les résultats accumulés depuis le début.",
-    "Style to apply; styles have components for both positive and negative prompts and apply to both": "Style à appliquer ; les styles sont composés de prompts positifs et négatifs et s'appliquent au deux",
+    "Style to apply; styles have components for both positive and negative prompts and apply to both": "Style à appliquer ; les styles sont composés de requêtes positives et négatives et s'appliquent au deux",
     "Do not do anything special": "Ne rien faire de particulier",
     "Which algorithm to use to produce the image": "Quel algorithme utiliser pour produire l'image",
     "Euler Ancestral - very creative, each can get a completely different picture depending on step count, setting steps to higher than 30-40 does not help": "Euler Ancestral - très créatif, peut générer des images complètement différentes en fonction du nombre d'étapes, utiliser plus de 30 à 40 étapes n'améliore pas le résultat",
     "Denoising Diffusion Implicit Models - best at inpainting": "Modèles implicite de réduction du bruit à diffusion - utile pour l'inpainting",
     "Produce an image that can be tiled.": "Produit une image qui peut être bouclée (tuile).",
     "Use a two step process to partially create an image at smaller resolution, upscale, and then improve details in it without changing composition": "Utilise un processus en deux étapes afin de créer partiellement une image dans une résolution plus faible, l'agrandir et améliorer ses détails sans modifier la composition",
-    "Determines how little respect the algorithm should have for image's content. At 0, nothing will change, and at 1 you'll get an unrelated image. With values below 1.0, processing will take less steps than the Sampling Steps slider specifies.": "Détermine à quel point l'algorithme doit respecter le contenu de l'image. A 0 rien ne changera, à 1 l'image sera entièrement différente. Avec des valeurs inférieures à 1.0 le traitement utilisera moins d'étapes que ce que la glissière Etapes d'échantillionnage spécifie. ",
+    "Determines how little respect the algorithm should have for image's content. At 0, nothing will change, and at 1 you'll get an unrelated image. With values below 1.0, processing will take less steps than the Sampling Steps slider specifies.": "Détermine à quel point l'algorithme doit respecter le contenu de l'image. A 0 rien ne changera, à 1 l'image sera entièrement différente. Avec des valeurs inférieures à 1.0 le traitement utilisera moins d'étapes que ce que la glissière Étapes d'échantillionnage spécifie. ",
     "How many batches of images to create": "Combien de lots d'images créer",
     "How many image to create in a single batch": "Combien d'images créer par lot",
-    "Classifier Free Guidance Scale - how strongly the image should conform to prompt - lower values produce more creative results": "Classifier Free Guidance Scale - spécifie à quel point l'image doit se conformer au prompt - des valeurs plus faibles produisent des résultats plus créatifs",
-    "A value that determines the output of random number generator - if you create an image with same parameters and seed as another image, you'll get the same result": "Une valeur qui détermine la sortie du générateur de nombres aléatoires - si vous créez une image avec les mêmes paramètres et graine qu'une autre, le résultat sera identique",
-    "Set seed to -1, which will cause a new random number to be used every time": "Passer la graine à -1, cela causera qu'un nombre aléatoire différent sera utilisé à chaque fois",
-    "Reuse seed from last generation, mostly useful if it was randomed": "Réutiliser la graine de la dernière génération, généralement utile uniquement si elle était randomisée",
-    "Seed of a different picture to be mixed into the generation.": "Graine d'une image différente à mélanger dans la génération",
-    "How strong of a variation to produce. At 0, there will be no effect. At 1, you will get the complete picture with variation seed (except for ancestral samplers, where you will just get something).": "Force de la variation à produire. A 0 il n'y aura pas d'effet. A 1 l'image sera composée uniquement de la graine variable spécifiée (à l'exception des échantillionneurs `ancestral`)",
-    "Make an attempt to produce a picture similar to what would have been produced with same seed at specified resolution": "Essayer de produire une image similaire à ce qu'elle aurait été avec la même graine, mais dans la résolution spécifiée",
+    "Classifier Free Guidance Scale - how strongly the image should conform to prompt - lower values produce more creative results": "Classifier Free Guidance Scale - spécifie à quel point l'image doit se conformer à la requête - des valeurs plus faibles produisent des résultats plus créatifs",
+    "A value that determines the output of random number generator - if you create an image with same parameters and seed as another image, you'll get the same result": "Une valeur qui détermine la sortie du générateur de nombres aléatoires - si vous créez une image avec les mêmes paramètres et valeur aléatoire qu'une autre, le résultat sera identique",
+    "Set seed to -1, which will cause a new random number to be used every time": "Passer la valeur aléatoire à -1, cela causera qu'un nombre aléatoire différent sera utilisé à chaque fois",
+    "Reuse seed from last generation, mostly useful if it was randomed": "Réutiliser la valeur aléatoire de la dernière génération, généralement utile uniquement si elle était randomisée",
+    "Seed of a different picture to be mixed into the generation.": "Valeur aléatoire d'une image différente à mélanger dans la génération",
+    "How strong of a variation to produce. At 0, there will be no effect. At 1, you will get the complete picture with variation seed (except for ancestral samplers, where you will just get something).": "Force de la variation à produire. A 0 il n'y aura pas d'effet. A 1 l'image sera composée uniquement de la valeur aléatoire variable spécifiée (à l'exception des échantillionneurs `ancestral`)",
+    "Make an attempt to produce a picture similar to what would have been produced with same seed at specified resolution": "Essayer de produire une image similaire à ce qu'elle aurait été avec la même valeur aléatoire, mais dans la résolution spécifiée",
     "Separate values for X axis using commas.": "Séparer les valeurs pour l'axe X par des virgules",
     "Separate values for Y axis using commas.": "Séparer les valeurs pour l'axe Y par des virgules",
     "Write image to a directory (default - log/images) and generation parameters into csv file.": "Ecrire l'image dans un dossier (par défaut - log/images) et les paramètres de génération dans un fichier csv.",
@@ -409,7 +409,7 @@
     "This regular expression will be used extract words from filename, and they will be joined using the option below into label text used for training. Leave empty to keep filename text as it is.": "Cette expression régulière sera utilisée pour extraire les mots depuis le nom de fichier ; ils seront joints en utilisant l'option ci dessous en une étiquette utilisée pour l'entrainement. Laisser vide pour conserver le texte du nom de fichier tel quel.",
     "This string will be used to join split words into a single line if the option above is enabled.": "Cette chaine de caractères sera utilisée pour joindre les mots séparés en une ligne unique si l'option ci dessus est activée.",
     "List of setting names, separated by commas, for settings that should go to the quick access bar at the top, rather than the usual setting tab. See modules/shared.py for setting names. Requires restarting to apply.": "Liste des noms de paramètres, séparés par des virgules, pour les paramètres de la barre d'accès rapide en haut de page, plutôt que dans la page habituelle des paramètres. Voir modules/shared.py pour définir les noms. Requiert un redémarrage pour s'appliquer.",
-    "If this values is non-zero, it will be added to seed and used to initialize RNG for noises when using samplers with Eta. You can use this to produce even more variation of images, or you can use this to match images of other software if you know what you are doing.": "Si cette valeur est différente de zéro elle sera ajoutée à la graine et utilisée pour initialiser le générateur de nombres aléatoires du bruit lors de l'utilisation des échantillonneurs supportants Eta. Vous pouvez l'utiliser pour produire encore plus de variation dans les images, ou vous pouvez utiliser ceci pour faire correspondre les images avec d'autres logiciels si vous savez ce que vous faites.",
+    "If this values is non-zero, it will be added to seed and used to initialize RNG for noises when using samplers with Eta. You can use this to produce even more variation of images, or you can use this to match images of other software if you know what you are doing.": "Si cette valeur est différente de zéro elle sera ajoutée à la valeur aléatoire et utilisée pour initialiser le générateur de nombres aléatoires du bruit lors de l'utilisation des échantillonneurs supportants Eta. Vous pouvez l'utiliser pour produire encore plus de variation dans les images, ou vous pouvez utiliser ceci pour faire correspondre les images avec d'autres logiciels si vous savez ce que vous faites.",
     "Enable Autocomplete": "Activer l'autocomplétion",
     "/0.0": "/0.0"
 }
\ No newline at end of file

From c7af69f893227b58935fc9da083910e5c90925de Mon Sep 17 00:00:00 2001
From: tumbly <tumbly@example.com>
Date: Tue, 25 Oct 2022 22:03:02 +0200
Subject: [PATCH 31/73] Add missed fixes from salco's comments, tweak some

---
 localizations/fr-FR.json | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/localizations/fr-FR.json b/localizations/fr-FR.json
index 5c1e97c7..b33d0838 100644
--- a/localizations/fr-FR.json
+++ b/localizations/fr-FR.json
@@ -69,14 +69,14 @@
     "Resize seed from height": "Hauteur de redimensionnement de la valeur aléatoire",
     "Script": "Script",
     "None": "Aucun",
-    "Prompt matrix": "Matrice de requête",
-    "Prompts from file or textbox": "Requêtes depuis un fichier ou une boite de dialogue",
+    "Prompt matrix": "Matrice de requète",
+    "Prompts from file or textbox": "Requètes depuis un fichier ou une boite de dialogue",
     "X/Y plot": "graphe X/Y",
     "Put variable parts at start of prompt": "Mettre les mots clés variable au début de la requête",
     "Show Textbox": "Afficher le champs texte",
     "File with inputs": "Fichier d'entrée",
     "Prompts": "Requêtes",
-    "X type": "Axe X",
+    "X type": "Paramètre axe X",
     "Nothing": "Rien",
     "Var. seed": "Valeur aléatoire variable",
     "Var. strength": "Puissance variable",
@@ -94,9 +94,9 @@
     "Eta": "Temps estimé",
     "Clip skip": "Passer Clip",
     "Denoising": "Réduction du bruit",
-    "X values": "Valeur X",
-    "Y type": "Type Y",
-    "Y values": "Valeur Y",
+    "X values": "Valeurs X",
+    "Y type": "Paramètre axe Y",
+    "Y values": "Valeurs Y",
     "Draw legend": "Afficher la légende",
     "Include Separate Images": "Inclure les images séparées",
     "Keep -1 for seeds": "Conserver -1 pour la valeur aléatoire",

From 146856f66d7e06a762f5ef5bf61a226057de6757 Mon Sep 17 00:00:00 2001
From: Milly <milly.ca@gmail.com>
Date: Tue, 25 Oct 2022 06:21:31 +0900
Subject: [PATCH 32/73] images: allow nested bracket in filename pattern

---
 modules/images.py | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/modules/images.py b/modules/images.py
index 286de2ae..ed448a8a 100644
--- a/modules/images.py
+++ b/modules/images.py
@@ -277,7 +277,7 @@ invalid_filename_chars = '<>:"/\\|?*\n'
 invalid_filename_prefix = ' '
 invalid_filename_postfix = ' .'
 re_nonletters = re.compile(r'[\s' + string.punctuation + ']+')
-re_pattern = re.compile(r"([^\[\]]+|\[([^]]+)]|[\[\]]*)")
+re_pattern = re.compile(r"(.*?)(?:\[([^\[\]]+)\]|$)")
 re_pattern_arg = re.compile(r"(.*)<([^>]*)>$")
 max_filename_part_length = 128
 
@@ -362,9 +362,9 @@ class FilenameGenerator:
 
         for m in re_pattern.finditer(x):
             text, pattern = m.groups()
+            res += text
 
             if pattern is None:
-                res += text
                 continue
 
             pattern_args = []
@@ -385,12 +385,9 @@ class FilenameGenerator:
                     print(f"Error adding [{pattern}] to filename", file=sys.stderr)
                     print(traceback.format_exc(), file=sys.stderr)
 
-                if replacement is None:
-                    res += f'[{pattern}]'
-                else:
+                if replacement is not None:
                     res += str(replacement)
-
-                continue
+                    continue
 
             res += f'[{pattern}]'
 

From 757264c453eca533ee1c9ea7e9d9b45a009367d7 Mon Sep 17 00:00:00 2001
From: w-e-w <40751091+w-e-w@users.noreply.github.com>
Date: Tue, 25 Oct 2022 23:39:21 +0900
Subject: [PATCH 33/73] default_time_format if format is blank

---
 modules/images.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/modules/images.py b/modules/images.py
index ed448a8a..bfc2ba06 100644
--- a/modules/images.py
+++ b/modules/images.py
@@ -343,7 +343,7 @@ class FilenameGenerator:
     def datetime(self, *args):
         time_datetime = datetime.datetime.now()
 
-        time_format = args[0] if len(args) > 0 else self.default_time_format
+        time_format = args[0] if len(args) > 0 and args[0] != "" else self.default_time_format
         try:
             time_zone = pytz.timezone(args[1]) if len(args) > 1 else None
         except pytz.exceptions.UnknownTimeZoneError as _:

From 9d82c351ac36d1511f5f65b24443c60250ee3e9e Mon Sep 17 00:00:00 2001
From: AUTOMATIC <16777216c@gmail.com>
Date: Wed, 26 Oct 2022 09:56:25 +0300
Subject: [PATCH 34/73] fix typo in on_save_imaged/on_image_saved; hope no
 extension is using it yet

---
 modules/script_callbacks.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/modules/script_callbacks.py b/modules/script_callbacks.py
index dc520abc..6803d57b 100644
--- a/modules/script_callbacks.py
+++ b/modules/script_callbacks.py
@@ -90,7 +90,7 @@ def on_ui_settings(callback):
     add_callback(callbacks_ui_settings, callback)
 
 
-def on_save_imaged(callback):
+def on_image_saved(callback):
     """register a function to be called after modules.images.save_image is called.
     The callback is called with three arguments:
         - p - procesing object (or a dummy object with same fields if the image is saved using save button)

From cb49800c08a9f6619733250401952e5571dc12f8 Mon Sep 17 00:00:00 2001
From: timntorres <timothynarcisotorres@gmail.com>
Date: Tue, 25 Oct 2022 01:39:59 -0700
Subject: [PATCH 35/73] img2img, use smartphone photos' EXIF orientation

---
 modules/img2img.py | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/modules/img2img.py b/modules/img2img.py
index 8d9f7cf9..9c0cf23e 100644
--- a/modules/img2img.py
+++ b/modules/img2img.py
@@ -39,6 +39,8 @@ def process_batch(p, input_dir, output_dir, args):
             break
 
         img = Image.open(image)
+        # Use the EXIF orientation of photos taken by smartphones.
+        img = ImageOps.exif_transpose(img) 
         p.init_images = [img] * p.batch_size
 
         proc = modules.scripts.scripts_img2img.run(p, *args)
@@ -61,19 +63,25 @@ def img2img(mode: int, prompt: str, negative_prompt: str, prompt_style: str, pro
     is_batch = mode == 2
 
     if is_inpaint:
+        # Drawn mask
         if mask_mode == 0:
             image = init_img_with_mask['image']
             mask = init_img_with_mask['mask']
             alpha_mask = ImageOps.invert(image.split()[-1]).convert('L').point(lambda x: 255 if x > 0 else 0, mode='1')
             mask = ImageChops.lighter(alpha_mask, mask.convert('L')).convert('L')
             image = image.convert('RGB')
+        # Uploaded mask
         else:
             image = init_img_inpaint
             mask = init_mask_inpaint
+    # No mask
     else:
         image = init_img
         mask = None
 
+    # Use the EXIF orientation of photos taken by smartphones.
+    image = ImageOps.exif_transpose(image) 
+
     assert 0. <= denoising_strength <= 1., 'can only work with strength in [0.0, 1.0]'
 
     p = StableDiffusionProcessingImg2Img(

From a524d137d0a89bb19a6676dc9b8fbb5d1b580678 Mon Sep 17 00:00:00 2001
From: timntorres <timothynarcisotorres@gmail.com>
Date: Mon, 24 Oct 2022 23:48:05 -0700
Subject: [PATCH 36/73] patch bug (SeverianVoid's comment on 5245c7a)

---
 modules/hypernetworks/hypernetwork.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/modules/hypernetworks/hypernetwork.py b/modules/hypernetworks/hypernetwork.py
index 842b6447..8113b35b 100644
--- a/modules/hypernetworks/hypernetwork.py
+++ b/modules/hypernetworks/hypernetwork.py
@@ -487,7 +487,7 @@ def train_hypernetwork(hypernetwork_name, learn_rate, batch_size, data_root, log
 
             if image is not None:
                 shared.state.current_image = image
-                last_saved_image, last_text_info = images.save_image(image, images_dir, "", p.seed, p.prompt, shared.opts.samples_format, processed.infotexts[0], p=p, forced_filename=forced_filename)
+                last_saved_image, last_text_info = images.save_image(image, images_dir, "", p.seed, p.prompt, shared.opts.samples_format, processed.infotexts[0], p=p, forced_filename=forced_filename, save_to_dirs=False)
                 last_saved_image += f", prompt: {preview_text}"
 
         shared.state.job_no = hypernetwork.step

From c2dc9bfa89070b8e1d857f8773a790b752f1b709 Mon Sep 17 00:00:00 2001
From: timntorres <timothynarcisotorres@gmail.com>
Date: Mon, 24 Oct 2022 23:22:58 -0700
Subject: [PATCH 37/73] Implement PR #3189 but for embeddings.

---
 modules/textual_inversion/textual_inversion.py | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/modules/textual_inversion/textual_inversion.py b/modules/textual_inversion/textual_inversion.py
index 647ffe3e..22c7b54b 100644
--- a/modules/textual_inversion/textual_inversion.py
+++ b/modules/textual_inversion/textual_inversion.py
@@ -10,7 +10,7 @@ import csv
 
 from PIL import Image, PngImagePlugin
 
-from modules import shared, devices, sd_hijack, processing, sd_models
+from modules import shared, devices, sd_hijack, processing, sd_models, images
 import modules.textual_inversion.dataset
 from modules.textual_inversion.learn_schedule import LearnRateScheduler
 
@@ -247,6 +247,7 @@ def train_embedding(embedding_name, learn_rate, batch_size, data_root, log_direc
 
     last_saved_file = "<none>"
     last_saved_image = "<none>"
+    forced_filename = "<none>"
     embedding_yet_to_be_embedded = False
 
     ititial_step = embedding.step or 0
@@ -296,8 +297,8 @@ def train_embedding(embedding_name, learn_rate, batch_size, data_root, log_direc
         })
 
         if embedding.step > 0 and images_dir is not None and embedding.step % create_image_every == 0:
-            last_saved_image = os.path.join(images_dir, f'{embedding_name}-{embedding.step}.png')
-
+            forced_filename = f'{embedding_name}-{embedding.step}'
+            last_saved_image = os.path.join(images_dir, forced_filename)
             p = processing.StableDiffusionProcessingTxt2Img(
                 sd_model=shared.sd_model,
                 do_not_save_grid=True,
@@ -353,8 +354,7 @@ def train_embedding(embedding_name, learn_rate, batch_size, data_root, log_direc
                 captioned_image.save(last_saved_image_chunks, "PNG", pnginfo=info)
                 embedding_yet_to_be_embedded = False
 
-            image.save(last_saved_image)
-
+            last_saved_image, last_text_info = images.save_image(image, images_dir, "", p.seed, p.prompt, shared.opts.samples_format, processed.infotexts[0], p=p, forced_filename=forced_filename)
             last_saved_image += f", prompt: {preview_text}"
 
         shared.state.job_no = embedding.step

From 4875a6c217df5cc06ee2bf11fb645b172c7156a8 Mon Sep 17 00:00:00 2001
From: timntorres <timothynarcisotorres@gmail.com>
Date: Mon, 24 Oct 2022 23:38:07 -0700
Subject: [PATCH 38/73] Implement PR #3309 but for embeddings.

---
 modules/textual_inversion/textual_inversion.py | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/modules/textual_inversion/textual_inversion.py b/modules/textual_inversion/textual_inversion.py
index 22c7b54b..4921bd01 100644
--- a/modules/textual_inversion/textual_inversion.py
+++ b/modules/textual_inversion/textual_inversion.py
@@ -167,6 +167,8 @@ def create_embedding(name, num_vectors_per_token, overwrite_old, init_text='*'):
     for i in range(num_vectors_per_token):
         vec[i] = embedded[i * int(embedded.shape[0]) // num_vectors_per_token]
 
+    # Remove illegal characters from name.
+    name = "".join( x for x in name if (x.isalnum() or x in "._- "))
     fn = os.path.join(shared.cmd_opts.embeddings_dir, f"{name}.pt")
     if not overwrite_old:
         assert not os.path.exists(fn), f"file {fn} already exists"
@@ -287,7 +289,9 @@ def train_embedding(embedding_name, learn_rate, batch_size, data_root, log_direc
         pbar.set_description(f"[Epoch {epoch_num}: {epoch_step}/{len(ds)}]loss: {losses.mean():.7f}")
 
         if embedding.step > 0 and embedding_dir is not None and embedding.step % save_embedding_every == 0:
-            last_saved_file = os.path.join(embedding_dir, f'{embedding_name}-{embedding.step}.pt')
+            # Before saving, change name to match current checkpoint.
+            embedding.name = f'{embedding_name}-{embedding.step}'
+            last_saved_file = os.path.join(embedding_dir, f'{embedding.name}.pt')
             embedding.save(last_saved_file)
             embedding_yet_to_be_embedded = True
 
@@ -374,6 +378,9 @@ Last saved image: {html.escape(last_saved_image)}<br/>
     embedding.sd_checkpoint = checkpoint.hash
     embedding.sd_checkpoint_name = checkpoint.model_name
     embedding.cached_checksum = None
+    # Before saving for the last time, change name back to base name (as opposed to the save_embedding_every step-suffixed naming convention).
+    embedding.name = embedding_name
+    filename = os.path.join(shared.cmd_opts.embedding_dir, f'{embedding.name}.pt')
     embedding.save(filename)
 
     return embedding, filename

From f4e14642173a04723200b131deb417c6c79cab17 Mon Sep 17 00:00:00 2001
From: timntorres <timothynarcisotorres@gmail.com>
Date: Tue, 25 Oct 2022 00:04:25 -0700
Subject: [PATCH 39/73] Implement PR #3625 but for embeddings.

---
 modules/textual_inversion/textual_inversion.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/modules/textual_inversion/textual_inversion.py b/modules/textual_inversion/textual_inversion.py
index 4921bd01..4fcebe74 100644
--- a/modules/textual_inversion/textual_inversion.py
+++ b/modules/textual_inversion/textual_inversion.py
@@ -358,7 +358,7 @@ def train_embedding(embedding_name, learn_rate, batch_size, data_root, log_direc
                 captioned_image.save(last_saved_image_chunks, "PNG", pnginfo=info)
                 embedding_yet_to_be_embedded = False
 
-            last_saved_image, last_text_info = images.save_image(image, images_dir, "", p.seed, p.prompt, shared.opts.samples_format, processed.infotexts[0], p=p, forced_filename=forced_filename)
+            last_saved_image, last_text_info = images.save_image(image, images_dir, "", p.seed, p.prompt, shared.opts.samples_format, processed.infotexts[0], p=p, forced_filename=forced_filename, save_to_dirs=False)
             last_saved_image += f", prompt: {preview_text}"
 
         shared.state.job_no = embedding.step

From 1e428238db4e399b7a06ad5251cb16eef23a014d Mon Sep 17 00:00:00 2001
From: AUTOMATIC <16777216c@gmail.com>
Date: Wed, 26 Oct 2022 11:47:07 +0300
Subject: [PATCH 40/73] add override_settings to API as an alternative to #3629

---
 modules/processing.py | 25 ++++++++++++++++++++-----
 modules/shared.py     |  4 ++--
 2 files changed, 22 insertions(+), 7 deletions(-)

diff --git a/modules/processing.py b/modules/processing.py
index c61bbfbd..4efba946 100644
--- a/modules/processing.py
+++ b/modules/processing.py
@@ -77,9 +77,8 @@ def get_correct_sampler(p):
 class StableDiffusionProcessing():
     """
     The first set of paramaters: sd_models -> do_not_reload_embeddings represent the minimum required to create a StableDiffusionProcessing
-    
     """
-    def __init__(self, sd_model=None, outpath_samples=None, outpath_grids=None, prompt: str="", styles: List[str]=None, seed: int=-1, subseed: int=-1, subseed_strength: float=0, seed_resize_from_h: int=-1, seed_resize_from_w: int=-1, seed_enable_extras: bool=True, sampler_index: int=0, batch_size: int=1, n_iter: int=1, steps:int =50, cfg_scale:float=7.0, width:int=512, height:int=512, restore_faces:bool=False, tiling:bool=False, do_not_save_samples:bool=False, do_not_save_grid:bool=False, extra_generation_params: Dict[Any,Any]=None, overlay_images: Any=None, negative_prompt: str=None, eta: float =None, do_not_reload_embeddings: bool=False, denoising_strength: float = 0, ddim_discretize: str = "uniform", s_churn: float = 0.0, s_tmax: float = None, s_tmin: float = 0.0, s_noise: float = 1.0):
+    def __init__(self, sd_model=None, outpath_samples=None, outpath_grids=None, prompt: str = "", styles: List[str] = None, seed: int = -1, subseed: int = -1, subseed_strength: float = 0, seed_resize_from_h: int = -1, seed_resize_from_w: int = -1, seed_enable_extras: bool = True, sampler_index: int = 0, batch_size: int = 1, n_iter: int = 1, steps: int = 50, cfg_scale: float = 7.0, width: int = 512, height: int = 512, restore_faces: bool = False, tiling: bool = False, do_not_save_samples: bool = False, do_not_save_grid: bool = False, extra_generation_params: Dict[Any, Any] = None, overlay_images: Any = None, negative_prompt: str = None, eta: float = None, do_not_reload_embeddings: bool = False, denoising_strength: float = 0, ddim_discretize: str = None, s_churn: float = 0.0, s_tmax: float = None, s_tmin: float = 0.0, s_noise: float = 1.0, override_settings: Dict[str, Any] = None):
         self.sd_model = sd_model
         self.outpath_samples: str = outpath_samples
         self.outpath_grids: str = outpath_grids
@@ -109,13 +108,14 @@ class StableDiffusionProcessing():
         self.do_not_reload_embeddings = do_not_reload_embeddings
         self.paste_to = None
         self.color_corrections = None
-        self.denoising_strength: float = 0
+        self.denoising_strength: float = denoising_strength
         self.sampler_noise_scheduler_override = None
-        self.ddim_discretize = opts.ddim_discretize
+        self.ddim_discretize = ddim_discretize or opts.ddim_discretize
         self.s_churn = s_churn or opts.s_churn
         self.s_tmin = s_tmin or opts.s_tmin
         self.s_tmax = s_tmax or float('inf')  # not representable as a standard ui option
         self.s_noise = s_noise or opts.s_noise
+        self.override_settings = {k: v for k, v in (override_settings or {}).items() if k not in shared.restricted_opts}
 
         if not seed_enable_extras:
             self.subseed = -1
@@ -129,7 +129,6 @@ class StableDiffusionProcessing():
         self.all_seeds = None
         self.all_subseeds = None
 
-
     def init(self, all_prompts, all_seeds, all_subseeds):
         pass
 
@@ -351,6 +350,22 @@ def create_infotext(p, all_prompts, all_seeds, all_subseeds, comments, iteration
 
 
 def process_images(p: StableDiffusionProcessing) -> Processed:
+    stored_opts = {k: opts.data[k] for k in p.override_settings.keys()}
+
+    try:
+        for k, v in p.override_settings.items():
+            opts.data[k] = v  # we don't call onchange for simplicity which makes changing model, hypernet impossible
+
+        res = process_images_inner(p)
+
+    finally:
+        for k, v in stored_opts.items():
+            opts.data[k] = v
+
+    return res
+
+
+def process_images_inner(p: StableDiffusionProcessing) -> Processed:
     """this is the main loop that both txt2img and img2img use; it calls func_init once inside all the scopes and func_sample once per batch"""
 
     if type(p.prompt) == list:
diff --git a/modules/shared.py b/modules/shared.py
index 308fccce..1a9b8289 100644
--- a/modules/shared.py
+++ b/modules/shared.py
@@ -84,7 +84,7 @@ parser.add_argument("--ui-debug-mode", action='store_true', help="Don't load mod
 parser.add_argument("--device-id", type=str, help="Select the default CUDA device to use (export CUDA_VISIBLE_DEVICES=0,1,etc might be needed before)", default=None)
 
 cmd_opts = parser.parse_args()
-restricted_opts = [
+restricted_opts = {
     "samples_filename_pattern",
     "directories_filename_pattern",
     "outdir_samples",
@@ -94,7 +94,7 @@ restricted_opts = [
     "outdir_grids",
     "outdir_txt2img_grids",
     "outdir_save",
-]
+}
 
 devices.device, devices.device_interrogate, devices.device_gfpgan, devices.device_swinir, devices.device_esrgan, devices.device_scunet, devices.device_codeformer = \
 (devices.cpu if any(y in cmd_opts.use_cpu for y in [x, 'all']) else devices.get_optimal_device() for x in ['sd', 'interrogate', 'gfpgan', 'swinir', 'esrgan', 'scunet', 'codeformer'])

From d3fc0f7fc46b6f293db67604d43370db7812edb3 Mon Sep 17 00:00:00 2001
From: Dynamic <bradje@naver.com>
Date: Wed, 26 Oct 2022 17:59:10 +0900
Subject: [PATCH 41/73] Update new strings

---
 localizations/ko_KR.json | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/localizations/ko_KR.json b/localizations/ko_KR.json
index 07c2797c..ff70f1ea 100644
--- a/localizations/ko_KR.json
+++ b/localizations/ko_KR.json
@@ -36,6 +36,7 @@
   "Apply color correction to img2img results to match original colors.": "이미지→이미지 결과물이 기존 색상과 일치하도록 색상 보정 적용하기",
   "Apply selected styles to current prompt": "현재 프롬프트에 선택된 스타일 적용",
   "Apply settings": "설정 적용하기",
+  "Auto focal point crop": "초점 기준 크롭(자동 감지)",
   "Batch count": "배치 수",
   "Batch from Directory": "저장 경로로부터 여러장 처리",
   "Batch img2img": "이미지→이미지 배치",
@@ -67,6 +68,7 @@
   "Create a grid where images will have different parameters. Use inputs below to specify which parameters will be shared by columns and rows": "서로 다른 설정값으로 생성된 이미지의 그리드를 만듭니다. 아래의 설정으로 가로/세로에 어떤 설정값을 적용할지 선택하세요.",
   "Create a text file next to every image with generation parameters.": "생성된 이미지마다 생성 설정값을 담은 텍스트 파일 생성하기",
   "Create aesthetic images embedding": "스타일 이미지 임베딩 생성하기",
+  "Create debug image": "디버그 이미지 생성",
   "Create embedding": "임베딩 생성",
   "Create flipped copies": "좌우로 뒤집은 복사본 생성",
   "Create hypernetwork": "하이퍼네트워크 생성",
@@ -148,6 +150,9 @@
   "First Page": "처음 페이지",
   "Firstpass height": "초기 세로길이",
   "Firstpass width": "초기 가로길이",
+  "Focal point edges weight": "경계면 가중치",
+  "Focal point entropy weight": "엔트로피 가중치",
+  "Focal point face weight": "얼굴 가중치",
   "Font for image grids that have text": "텍스트가 존재하는 그리드 이미지의 폰트",
   "for detailed explanation.": "를 참조하십시오.",
   "For SD upscale, how much overlap in pixels should there be between tiles. Tiles overlap so that when they are merged back into one picture, there is no clearly visible seam.": "SD 업스케일링에서 타일 간 몇 픽셀을 겹치게 할지 결정하는 설정값입니다. 타일들이 다시 한 이미지로 합쳐질 때, 눈에 띄는 이음매가 없도록 서로 겹치게 됩니다.",
@@ -381,6 +386,7 @@
   "Seed": "시드",
   "Seed of a different picture to be mixed into the generation.": "결과물에 섞일 다른 그림의 시드",
   "Select activation function of hypernetwork": "하이퍼네트워크 활성화 함수 선택",
+  "Select Layer weights initialization. relu-like - Kaiming, sigmoid-like - Xavier is recommended": "레이어 가중치 초기화 방식 선택 - relu류 : Kaiming 추천, sigmoid류 : Xavier 추천",
   "Select which Real-ESRGAN models to show in the web UI. (Requires restart)": "WebUI에 표시할 Real-ESRGAN 모델을 선택하십시오. (재시작 필요)",
   "Send to extras": "부가기능으로 전송",
   "Send to img2img": "이미지→이미지로 전송",

From 0cd74602531a40f72d1a75b471a8a9166135d333 Mon Sep 17 00:00:00 2001
From: AUTOMATIC <16777216c@gmail.com>
Date: Wed, 26 Oct 2022 13:12:44 +0300
Subject: [PATCH 42/73] add script callback for before image save and change
 callback for after image save to use a class with parameters

---
 modules/images.py           | 42 ++++++++++++++++++--------------
 modules/script_callbacks.py | 48 ++++++++++++++++++++++++++++++-------
 2 files changed, 64 insertions(+), 26 deletions(-)

diff --git a/modules/images.py b/modules/images.py
index bfc2ba06..7870b5b7 100644
--- a/modules/images.py
+++ b/modules/images.py
@@ -451,17 +451,6 @@ def save_image(image, path, basename, seed=None, prompt=None, extension='png', i
     """
     namegen = FilenameGenerator(p, seed, prompt)
 
-    if extension == 'png' and opts.enable_pnginfo and info is not None:
-        pnginfo = PngImagePlugin.PngInfo()
-
-        if existing_info is not None:
-            for k, v in existing_info.items():
-                pnginfo.add_text(k, str(v))
-
-        pnginfo.add_text(pnginfo_section_name, info)
-    else:
-        pnginfo = None
-
     if save_to_dirs is None:
         save_to_dirs = (grid and opts.grid_save_to_dirs) or (not grid and opts.save_to_dirs and not no_prompt)
 
@@ -489,19 +478,27 @@ def save_image(image, path, basename, seed=None, prompt=None, extension='png', i
         if add_number:
             basecount = get_next_sequence_number(path, basename)
             fullfn = None
-            fullfn_without_extension = None
             for i in range(500):
                 fn = f"{basecount + i:05}" if basename == '' else f"{basename}-{basecount + i:04}"
                 fullfn = os.path.join(path, f"{fn}{file_decoration}.{extension}")
-                fullfn_without_extension = os.path.join(path, f"{fn}{file_decoration}")
                 if not os.path.exists(fullfn):
                     break
         else:
             fullfn = os.path.join(path, f"{file_decoration}.{extension}")
-            fullfn_without_extension = os.path.join(path, file_decoration)
     else:
         fullfn = os.path.join(path, f"{forced_filename}.{extension}")
-        fullfn_without_extension = os.path.join(path, forced_filename)
+
+    pnginfo = existing_info or {}
+    if info is not None:
+        pnginfo[pnginfo_section_name] = info
+
+    params = script_callbacks.ImageSaveParams(image, p, fullfn, pnginfo)
+    script_callbacks.before_image_saved_callback(params)
+
+    image = params.image
+    fullfn = params.filename
+    info = params.pnginfo.get(pnginfo_section_name, None)
+    fullfn_without_extension, extension = os.path.splitext(params.filename)
 
     def exif_bytes():
         return piexif.dump({
@@ -510,12 +507,20 @@ def save_image(image, path, basename, seed=None, prompt=None, extension='png', i
             },
         })
 
-    if extension.lower() in ("jpg", "jpeg", "webp"):
+    if extension.lower() == '.png':
+        pnginfo_data = PngImagePlugin.PngInfo()
+        for k, v in params.pnginfo.items():
+            pnginfo_data.add_text(k, str(v))
+
+        image.save(fullfn, quality=opts.jpeg_quality, pnginfo=pnginfo_data)
+
+    elif extension.lower() in (".jpg", ".jpeg", ".webp"):
         image.save(fullfn, quality=opts.jpeg_quality)
+
         if opts.enable_pnginfo and info is not None:
             piexif.insert(exif_bytes(), fullfn)
     else:
-        image.save(fullfn, quality=opts.jpeg_quality, pnginfo=pnginfo)
+        image.save(fullfn, quality=opts.jpeg_quality)
 
     target_side_length = 4000
     oversize = image.width > target_side_length or image.height > target_side_length
@@ -538,7 +543,8 @@ def save_image(image, path, basename, seed=None, prompt=None, extension='png', i
     else:
         txt_fullfn = None
 
-    script_callbacks.image_saved_callback(image, p, fullfn, txt_fullfn)
+    script_callbacks.image_saved_callback(params)
+
     return fullfn, txt_fullfn
 
 
diff --git a/modules/script_callbacks.py b/modules/script_callbacks.py
index 6803d57b..6ea58d61 100644
--- a/modules/script_callbacks.py
+++ b/modules/script_callbacks.py
@@ -9,15 +9,34 @@ def report_exception(c, job):
     print(traceback.format_exc(), file=sys.stderr)
 
 
+class ImageSaveParams:
+    def __init__(self, image, p, filename, pnginfo):
+        self.image = image
+        """the PIL image itself"""
+
+        self.p = p
+        """p object with processing parameters; either StableDiffusionProcessing or an object with same fields"""
+
+        self.filename = filename
+        """name of file that the image would be saved to"""
+
+        self.pnginfo = pnginfo
+        """dictionary with parameters for image's PNG info data; infotext will have the key 'parameters'"""
+
+
 ScriptCallback = namedtuple("ScriptCallback", ["script", "callback"])
 callbacks_model_loaded = []
 callbacks_ui_tabs = []
 callbacks_ui_settings = []
+callbacks_before_image_saved = []
 callbacks_image_saved = []
 
+
 def clear_callbacks():
     callbacks_model_loaded.clear()
     callbacks_ui_tabs.clear()
+    callbacks_ui_settings.clear()
+    callbacks_before_image_saved.clear()
     callbacks_image_saved.clear()
 
 
@@ -49,10 +68,18 @@ def ui_settings_callback():
             report_exception(c, 'ui_settings_callback')
 
 
-def image_saved_callback(image, p, fullfn, txt_fullfn):
+def before_image_saved_callback(params: ImageSaveParams):
     for c in callbacks_image_saved:
         try:
-            c.callback(image, p, fullfn, txt_fullfn)
+            c.callback(params)
+        except Exception:
+            report_exception(c, 'before_image_saved_callback')
+
+
+def image_saved_callback(params: ImageSaveParams):
+    for c in callbacks_image_saved:
+        try:
+            c.callback(params)
         except Exception:
             report_exception(c, 'image_saved_callback')
 
@@ -64,7 +91,6 @@ def add_callback(callbacks, fun):
     callbacks.append(ScriptCallback(filename, fun))
 
 
-
 def on_model_loaded(callback):
     """register a function to be called when the stable diffusion model is created; the model is
     passed as an argument"""
@@ -90,11 +116,17 @@ def on_ui_settings(callback):
     add_callback(callbacks_ui_settings, callback)
 
 
+def on_before_image_saved(callback):
+    """register a function to be called before an image is saved to a file.
+    The callback is called with one argument:
+        - params: ImageSaveParams - parameters the image is to be saved with. You can change fields in this object.
+    """
+    add_callback(callbacks_before_image_saved, callback)
+
+
 def on_image_saved(callback):
-    """register a function to be called after modules.images.save_image is called.
-    The callback is called with three arguments:
-        - p - procesing object (or a dummy object with same fields if the image is saved using save button)
-        - fullfn - image filename
-        - txt_fullfn - text file with parameters; may be None
+    """register a function to be called after an image is saved to a file.
+    The callback is called with one argument:
+        - params: ImageSaveParams - parameters the image was saved with. Changing fields in this object does nothing.
     """
     add_callback(callbacks_image_saved, callback)

From 0c38baeb20086c05eac86a6812a4cca740f69c21 Mon Sep 17 00:00:00 2001
From: camenduru <54370274+camenduru@users.noreply.github.com>
Date: Tue, 25 Oct 2022 12:15:17 +0300
Subject: [PATCH 43/73] =?UTF-8?q?=F0=9F=A7=BF=20Turkish=20localization?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

translated with deepl, it needs some tweaks I will fix 🔧
---
 localizations/tr_TR.json | 423 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 423 insertions(+)
 create mode 100644 localizations/tr_TR.json

diff --git a/localizations/tr_TR.json b/localizations/tr_TR.json
new file mode 100644
index 00000000..511b8882
--- /dev/null
+++ b/localizations/tr_TR.json
@@ -0,0 +1,423 @@
+{
+    "⤡": "⤡",
+    "⊞": "⊞",
+    "×": "×",
+    "❮": "❮",
+    "❯": "❯",
+    "Loading...": "Yükleniyor...",
+    "view": "görünüm",
+    "api": "api",
+    "•": "-",
+    "built with gradio": "gradio ile inşa edildi",
+    "Stable Diffusion checkpoint": "Kararlı Difüzyon kontrol noktası",
+    "txt2img": "txt2img",
+    "img2img": "img2img",
+    "Extras": "Ekstralar",
+    "PNG Info": "PNG Bilgisi",
+    "Checkpoint Merger": "Checkpoint Birleşmesi",
+    "Train": "Tren",
+    "Settings": "Ayarlar",
+    "Prompt": "İstem",
+    "Negative prompt": "Negatif istem",
+    "Run": "Koşmak",
+    "Skip": "Atla",
+    "Interrupt": "Kesinti",
+    "Generate": "Oluşturmak",
+    "Style 1": "Stil 1",
+    "Style 2": "Stil 2",
+    "Label": "Etiket",
+    "File": "Dosya",
+    "Drop File Here": "Dosyayı Buraya Bırakın",
+    "-": "-",
+    "or": "veya",
+    "Click to Upload": "Yüklemek için Tıklayınız",
+    "Image": "Resim",
+    "Check progress": "İlerlemeyi kontrol edin",
+    "Check progress (first)": "İlerlemeyi kontrol edin (önce)",
+    "Sampling Steps": "Örnekleme Adımları",
+    "Sampling method": "Örnekleme yöntemi",
+    "Euler a": "Euler a",
+    "Euler": "Euler",
+    "LMS": "LMS",
+    "Heun": "Heun",
+    "DPM2": "DPM2",
+    "DPM2 a": "DPM2 a",
+    "DPM fast": "DPM hızlı",
+    "DPM adaptive": "DPM uyarlanabilir",
+    "LMS Karras": "LMS Karras",
+    "DPM2 Karras": "DPM2 Karras",
+    "DPM2 a Karras": "DPM2 a Karras",
+    "DDIM": "DDIM",
+    "PLMS": "PLMS",
+    "Width": "Genişlik",
+    "Height": "Yükseklik",
+    "Restore faces": "Yüzleri geri yükle",
+    "Tiling": "Döşeme",
+    "Highres. fix": "Highres. düzeltme",
+    "Firstpass width": "İlk geçiş genişliği",
+    "Firstpass height": "İlk geçiş yüksekliği",
+    "Denoising strength": "Denoising gücü",
+    "Batch count": "Parti sayısı",
+    "Batch size": "Parti büyüklüğü",
+    "CFG Scale": "CFG Ölçeği",
+    "Seed": "Tohum",
+    "Extra": "Ekstra",
+    "Variation seed": "Varyasyon tohumu",
+    "Variation strength": "Varyasyon gücü",
+    "Resize seed from width": "Tohumu genişlikten yeniden boyutlandırma",
+    "Resize seed from height": "Tohumu yükseklikten yeniden boyutlandırma",
+    "Script": "Senaryo",
+    "None": "Hiçbiri",
+    "Prompt matrix": "İstem matrisi",
+    "Prompts from file or textbox": "Dosyadan veya metin kutusundan istemler",
+    "X/Y plot": "X/Y grafiği",
+    "Put variable parts at start of prompt": "Değişken parçaları komut isteminin başına koyun",
+    "Show Textbox": "Metin Kutusunu Göster",
+    "File with inputs": "Girdileri içeren dosya",
+    "Prompts": "İpuçları",
+    "X type": "X tipi",
+    "Nothing": "Hiçbir şey",
+    "Var. seed": "Var. tohum",
+    "Var. strength": "Var. güç",
+    "Steps": "Adımlar",
+    "Prompt S/R": "Hızlı S/R",
+    "Prompt order": "Hızlı sipariş",
+    "Sampler": "Örnekleyici",
+    "Checkpoint name": "Kontrol noktası adı",
+    "Hypernetwork": "Hipernetwork",
+    "Hypernet str.": "Hypernet str.",
+    "Sigma Churn": "Sigma Churn",
+    "Sigma min": "Sigma dakika",
+    "Sigma max": "Sigma maksimum",
+    "Sigma noise": "Sigma gürültüsü",
+    "Eta": "Eta",
+    "Clip skip": "Klip atlama",
+    "Denoising": "Denoising",
+    "X values": "X değerleri",
+    "Y type": "Y tipi",
+    "Y values": "Y değerleri",
+    "Draw legend": "Gösterge çizin",
+    "Include Separate Images": "Ayrı Görseller Ekleyin",
+    "Keep -1 for seeds": "Tohumlar için -1'i saklayın",
+    "Drop Image Here": "Resmi Buraya Bırakın",
+    "Save": "Kaydet",
+    "Send to img2img": "img2img'ye gönder",
+    "Send to inpaint": "Inpaint'e gönder",
+    "Send to extras": "Ekstralara gönder",
+    "Make Zip when Save?": "Kaydederken Zip Yap?",
+    "Textbox": "Metin Kutusu",
+    "Interrogate\nCLIP": "Sorgula\nCLIP",
+    "Inpaint": "Inpaint",
+    "Batch img2img": "Toplu img2img",
+    "Image for img2img": "img2img için resim",
+    "Image for inpainting with mask": "Maske ile inpainting için görüntü",
+    "Mask": "Maske",
+    "Mask blur": "Maske bulanıklığı",
+    "Mask mode": "Maske modu",
+    "Draw mask": "Maske çizin",
+    "Upload mask": "Maske yükle",
+    "Masking mode": "Maskeleme modu",
+    "Inpaint masked": "Maskeli inpaint",
+    "Inpaint not masked": "Boya maskelenmemiş",
+    "Masked content": "Maskelenmiş içerik",
+    "fill": "doldurun",
+    "original": "orijinal",
+    "latent noise": "gizli gürültü",
+    "latent nothing": "gizli hiçbir şey",
+    "Inpaint at full resolution": "Tam çözünürlükte inpaint",
+    "Inpaint at full resolution padding, pixels": "Tam çözünürlükte inpaint dolgu, piksel",
+    "Process images in a directory on the same machine where the server is running.": "Görüntüleri sunucunun çalıştığı makinedeki bir dizinde işleyin.",
+    "Use an empty output directory to save pictures normally instead of writing to the output directory.": "Resimleri çıktı dizinine yazmak yerine normal şekilde kaydetmek için boş bir çıktı dizini kullanın.",
+    "Input directory": "Girdi dizini",
+    "Output directory": "Çıktı dizini",
+    "Resize mode": "Yeniden boyutlandırma modu",
+    "Just resize": "Sadece yeniden boyutlandır",
+    "Crop and resize": "Kırpma ve yeniden boyutlandırma",
+    "Resize and fill": "Yeniden boyutlandırın ve doldurun",
+    "img2img alternative test": "img2img alternatif test",
+    "Loopback": "Geri Döngü",
+    "Outpainting mk2": "Outpainting mk2",
+    "Poor man's outpainting": "Zavallı adamın dış boyaması",
+    "SD upscale": "SD lüks",
+    "should be 2 or lower.": "2 veya daha düşük olmalıdır.",
+    "Override `Sampling method` to Euler?(this method is built for it)": "Euler için `Örnekleme yöntemini` geçersiz kılın (bu yöntem bunun için oluşturulmuştur)",
+    "Override `prompt` to the same value as `original prompt`?(and `negative prompt`)": "Prompt` değerini `orijinal prompt` ile aynı değere geçersiz kılma (ve `negatif prompt`)",
+    "Original prompt": "Orijinal bilgi istemi",
+    "Original negative prompt": "Orijinal negatif istem",
+    "Override `Sampling Steps` to the same value as `Decode steps`?": "Örnekleme Adımlarını `Kod çözme adımları` ile aynı değere mi geçersiz kılıyorsunuz?",
+    "Decode steps": "Kod çözme adımları",
+    "Override `Denoising strength` to 1?": "`Denoising strength` değerini 1 olarak geçersiz kıl?",
+    "Decode CFG scale": "CFG ölçeğinin kodunu çöz",
+    "Randomness": "Rastgelelik",
+    "Sigma adjustment for finding noise for image": "Görüntü için gürültü bulmaya yönelik Sigma ayarı",
+    "Loops": "Döngüler",
+    "Denoising strength change factor": "Denoising gücü değişim faktörü",
+    "Recommended settings: Sampling Steps: 80-100, Sampler: Euler a, Denoising strength: 0.8": "Önerilen ayarlar: Örnekleme Adımları: 80-100, Örnekleyici: Euler a, Denoising gücü: 0.8",
+    "Pixels to expand": "Genişletilecek pikseller",
+    "Outpainting direction": "Dış boyama yönü",
+    "left": "sol",
+    "right": "doğru",
+    "up": "yukarı",
+    "down": "aşağı",
+    "Fall-off exponent (lower=higher detail)": "Düşme üssü (düşük=daha yüksek detay)",
+    "Color variation": "Renk çeşitliliği",
+    "Will upscale the image to twice the dimensions; use width and height sliders to set tile size": "Görüntüyü boyutlarının iki katına yükseltir; döşeme boyutunu ayarlamak için genişlik ve yükseklik kaydırıcılarını kullanın",
+    "Tile overlap": "Karo örtüşmesi",
+    "Upscaler": "Upscaler",
+    "Lanczos": "Lanczos",
+    "LDSR": "LDSR",
+    "SwinIR 4x": "SwinIR 4x",
+    "ScuNET GAN": "ScuNET GAN",
+    "ScuNET PSNR": "ScuNET PSNR",
+    "ESRGAN_4x": "ESRGAN_4x",
+    "Single Image": "Tek Resim",
+    "Batch Process": "Toplu İşlem",
+    "Batch from Directory": "Dizinden Toplu İş",
+    "Source": "Kaynak",
+    "Show result images": "Sonuç resimlerini göster",
+    "Scale by": "Ölçek tarafından",
+    "Scale to": "Ölçeklendirmek",
+    "Resize": "Yeniden Boyutlandır",
+    "Crop to fit": "Sığdırmak için kırpın",
+    "Upscaler 2 visibility": "Upscaler 2 görünürlüğü",
+    "GFPGAN visibility": "GFPGAN görünürlüğü",
+    "CodeFormer visibility": "CodeFormer görünürlüğü",
+    "CodeFormer weight (0 = maximum effect, 1 = minimum effect)": "CodeFormer ağırlığı (0 = maksimum etki, 1 = minimum etki)",
+    "Open output directory": "Çıktı dizinini aç",
+    "Send to txt2img": "txt2img'ye gönder",
+    "A merger of the two checkpoints will be generated in your": "İki kontrol noktasının bir birleşimi sizin kontrol noktanızda oluşturulacaktır.",
+    "checkpoint": "kontrol noktası",
+    "directory.": "dizin.",
+    "Primary model (A)": "Birincil model (A)",
+    "Secondary model (B)": "İkincil model (B)",
+    "Tertiary model (C)": "Tersiyer model (C)",
+    "Custom Name (Optional)": "Özel Ad (İsteğe Bağlı)",
+    "Multiplier (M) - set to 0 to get model A": "Çarpan (M) - A modelini elde etmek için 0'a ayarlayın",
+    "Interpolation Method": "İnterpolasyon Yöntemi",
+    "Weighted sum": "Ağırlıklı toplam",
+    "Add difference": "Farklılık ekleyin",
+    "Save as float16": "float16 olarak kaydet",
+    "See": "Bkz.",
+    "wiki": "wiki",
+    "for detailed explanation.": "ayrıntılı açıklama için.",
+    "Create embedding": "Yerleştirme oluşturma",
+    "Create hypernetwork": "Hipernet oluşturun",
+    "Preprocess images": "Görüntüleri ön işleme",
+    "Name": "İsim",
+    "Initialization text": "Başlatma metni",
+    "Number of vectors per token": "Belirteç başına vektör sayısı",
+    "Overwrite Old Embedding": "Eski Yerleştirmenin Üzerine Yaz",
+    "Modules": "Modüller",
+    "Enter hypernetwork layer structure": "Hipernetwork katman yapısına girin",
+    "Select activation function of hypernetwork": "Hipernetwork'ün aktivasyon fonksiyonunu seçin",
+    "linear": "doğrusal",
+    "relu": "relu",
+    "leakyrelu": "leakyrelu",
+    "elu": "elu",
+    "swish": "swish",
+    "Add layer normalization": "Katman normalizasyonu ekleyin",
+    "Use dropout": "Bırakmayı kullanın",
+    "Overwrite Old Hypernetwork": "Eski Hipernetwork'ün Üzerine Yazma",
+    "Source directory": "Kaynak dizini",
+    "Destination directory": "Hedef dizini",
+    "Existing Caption txt Action": "Mevcut Başlık txt Eylem",
+    "ignore": "görmezden gel",
+    "copy": "kopya",
+    "prepend": "prepend",
+    "append": "ekle",
+    "Create flipped copies": "Ters çevrilmiş kopyalar oluşturun",
+    "Split oversized images": "Büyük boyutlu görüntüleri bölme",
+    "Use BLIP for caption": "Başlık için BLIP kullanın",
+    "Use deepbooru for caption": "Başlık için deepbooru kullanın",
+    "Split image threshold": "Bölünmüş görüntü eşiği",
+    "Split image overlap ratio": "Bölünmüş görüntü örtüşme oranı",
+    "Preprocess": "Ön işlem",
+    "Train an embedding or Hypernetwork; you must specify a directory with a set of 1:1 ratio images": "Bir gömme veya Hipernetwork eğitin; 1:1 oranlı görüntülerin bulunduğu bir dizin belirtmelisiniz",
+    "[wiki]": "[wiki]",
+    "Embedding": "Yerleştirme",
+    "Embedding Learning rate": "Gömme Öğrenme oranı",
+    "Hypernetwork Learning rate": "Hypernetwork Öğrenme oranı",
+    "Dataset directory": "Veri seti dizini",
+    "Log directory": "Günlük dizini",
+    "Prompt template file": "Komut istemi şablon dosyası",
+    "Max steps": "Maksimum adım",
+    "Save an image to log directory every N steps, 0 to disable": "Her N adımda bir görüntüyü günlük dizinine kaydet, 0 devre dışı bırakmak için",
+    "Save a copy of embedding to log directory every N steps, 0 to disable": "Katıştırmanın bir kopyasını her N adımda bir günlük dizinine kaydedin, devre dışı bırakmak için 0",
+    "Save images with embedding in PNG chunks": "Görüntüleri PNG parçalarına yerleştirerek kaydedin",
+    "Read parameters (prompt, etc...) from txt2img tab when making previews": "Önizleme yaparken txt2img sekmesinden parametreleri (istem, vb...) okuma",
+    "Train Hypernetwork": "Tren Hipernetwork",
+    "Train Embedding": "Tren Gömme",
+    "Apply settings": "Ayarları uygula",
+    "Saving images/grids": "Görüntüleri/gridleri kaydetme",
+    "Always save all generated images": "Oluşturulan tüm görüntüleri her zaman kaydedin",
+    "File format for images": "Görüntüler için dosya formatı",
+    "Images filename pattern": "Görüntü dosya adı deseni",
+    "Add number to filename when saving": "Kaydederken dosya adına numara ekle",
+    "Always save all generated image grids": "Oluşturulan tüm görüntü ızgaralarını her zaman kaydedin",
+    "File format for grids": "Izgaralar için dosya formatı",
+    "Add extended info (seed, prompt) to filename when saving grid": "Izgarayı kaydederken dosya adına genişletilmiş bilgi (tohum, istem) ekleyin",
+    "Do not save grids consisting of one picture": "Tek resimden oluşan ızgaraları kaydetmeyin",
+    "Prevent empty spots in grid (when set to autodetect)": "Izgaradaki boş noktaları önleme (otomatik algılamaya ayarlandığında)",
+    "Grid row count; use -1 for autodetect and 0 for it to be same as batch size": "Izgara satır sayısı; otomatik algılama için -1, yığın boyutuyla aynı olması için 0 kullanın",
+    "Save text information about generation parameters as chunks to png files": "Üretim parametreleri hakkındaki metin bilgilerini png dosyalarına parçalar halinde kaydedin",
+    "Create a text file next to every image with generation parameters.": "Oluşturma parametreleri ile her görüntünün yanında bir metin dosyası oluşturun.",
+    "Save a copy of image before doing face restoration.": "Yüz restorasyonu yapmadan önce görüntünün bir kopyasını kaydedin.",
+    "Quality for saved jpeg images": "Kaydedilen jpeg görüntüleri için kalite",
+    "If PNG image is larger than 4MB or any dimension is larger than 4000, downscale and save copy as JPG": "PNG görüntüsü 4MB'den büyükse veya herhangi bir boyut 4000'den büyükse, ölçeği küçültün ve kopyayı JPG olarak kaydedin",
+    "Use original name for output filename during batch process in extras tab": "Ekstralar sekmesinde toplu işlem sırasında çıktı dosya adı için orijinal adı kullan",
+    "When using 'Save' button, only save a single selected image": "'Kaydet' düğmesini kullanırken, yalnızca seçilen tek bir resmi kaydedin",
+    "Do not add watermark to images": "Görüntülere filigran eklemeyin",
+    "Paths for saving": "Tasarruf için yollar",
+    "Output directory for images; if empty, defaults to three directories below": "Görüntüler için çıktı dizini; boşsa, varsayılan olarak aşağıdaki üç dizine gider",
+    "Output directory for txt2img images": "txt2img görüntüleri için çıktı dizini",
+    "Output directory for img2img images": "img2img görüntüleri için çıktı dizini",
+    "Output directory for images from extras tab": "Ekstralar sekmesindeki görüntüler için çıktı dizini",
+    "Output directory for grids; if empty, defaults to two directories below": "Izgaralar için çıktı dizini; boşsa, varsayılan olarak aşağıdaki iki dizine gider",
+    "Output directory for txt2img grids": "txt2img ızgaraları için çıktı dizini",
+    "Output directory for img2img grids": "img2img ızgaraları için çıktı dizini",
+    "Directory for saving images using the Save button": "Kaydet düğmesini kullanarak görüntüleri kaydetmek için dizin",
+    "Saving to a directory": "Bir dizine kaydetme",
+    "Save images to a subdirectory": "Görüntüleri bir alt dizine kaydetme",
+    "Save grids to a subdirectory": "Izgaraları bir alt dizine kaydetme",
+    "When using \"Save\" button, save images to a subdirectory": "\"Kaydet\" düğmesini kullanırken, görüntüleri bir alt dizine kaydedin",
+    "Directory name pattern": "Dizin adı kalıbı",
+    "Max prompt words for [prompt_words] pattern": "prompt_words] kalıbı için maksimum istem sözcükleri",
+    "Upscaling": "Yükseltme",
+    "Tile size for ESRGAN upscalers. 0 = no tiling.": "ESRGAN yükselticileri için döşeme boyutu. 0 = döşeme yok.",
+    "Tile overlap, in pixels for ESRGAN upscalers. Low values = visible seam.": "ESRGAN yükselticileri için piksel cinsinden döşeme örtüşmesi. Düşük değerler = görünür dikiş.",
+    "Tile size for all SwinIR.": "Tüm SwinIR için döşeme boyutu.",
+    "Tile overlap, in pixels for SwinIR. Low values = visible seam.": "SwinIR için piksel cinsinden döşeme örtüşmesi. Düşük değerler = görünür dikiş.",
+    "LDSR processing steps. Lower = faster": "LDSR işleme adımları. Düşük = daha hızlı",
+    "Upscaler for img2img": "img2img için üst ölçekleyici",
+    "Upscale latent space image when doing hires. fix": "İşe alım yaparken gizli alan görüntüsünü yükselt. düzelt",
+    "Face restoration": "Yüz restorasyonu",
+    "CodeFormer weight parameter; 0 = maximum effect; 1 = minimum effect": "CodeFormer ağırlık parametresi; 0 = maksimum etki; 1 = minimum etki",
+    "Move face restoration model from VRAM into RAM after processing": "İşlemden sonra yüz restorasyon modelini VRAM'den RAM'e taşıma",
+    "System": "Sistem",
+    "VRAM usage polls per second during generation. Set to 0 to disable.": "Üretim sırasında saniye başına VRAM kullanım yoklamaları. Devre dışı bırakmak için 0 olarak ayarlayın.",
+    "Always print all generation info to standard output": "Tüm üretim bilgilerini her zaman standart çıktıya yazdır",
+    "Add a second progress bar to the console that shows progress for an entire job.": "Konsola tüm iş için ilerlemeyi gösteren ikinci bir ilerleme çubuğu ekleyin.",
+    "Training": "Eğitim",
+    "Move VAE and CLIP to RAM when training hypernetwork. Saves VRAM.": "Hiperneti eğitirken VAE ve CLIP'i RAM'e taşıyın. VRAM'den tasarruf sağlar.",
+    "Filename word regex": "Dosya adı kelime regex",
+    "Filename join string": "Dosya adı birleştirme dizesi",
+    "Number of repeats for a single input image per epoch; used only for displaying epoch number": "Epok başına tek bir girdi görüntüsü için tekrar sayısı; yalnızca epok numarasını görüntülemek için kullanılır",
+    "Save an csv containing the loss to log directory every N steps, 0 to disable": "Her N adımda bir günlük dizinine kaybı içeren bir csv kaydedin, devre dışı bırakmak için 0",
+    "Stable Diffusion": "Kararlı Difüzyon",
+    "Checkpoints to cache in RAM": "RAM'de önbelleğe alınacak kontrol noktaları",
+    "Hypernetwork strength": "Hipernetwork gücü",
+    "Apply color correction to img2img results to match original colors.": "Orijinal renklerle eşleştirmek için img2img sonuçlarına renk düzeltmesi uygulayın.",
+    "Save a copy of image before applying color correction to img2img results": "img2img sonuçlarına renk düzeltmesi uygulamadan önce görüntünün bir kopyasını kaydedin",
+    "With img2img, do exactly the amount of steps the slider specifies (normally you'd do less with less denoising).": "img2img ile, kaydırıcının belirttiği adım miktarını tam olarak yapın (normalde daha az denoising ile daha az yaparsınız).",
+    "Enable quantization in K samplers for sharper and cleaner results. This may change existing seeds. Requires restart to apply.": "Daha keskin ve temiz sonuçlar için K örnekleyicilerinde nicelemeyi etkinleştirin. Bu, mevcut tohumları değiştirebilir. Uygulamak için yeniden başlatma gerektirir.",
+    "Emphasis: use (text) to make model pay more attention to text and [text] to make it pay less attention": "Vurgu: modelin metne daha fazla dikkat etmesini sağlamak için (metin) ve daha az dikkat etmesini sağlamak için [metin] kullanın",
+    "Use old emphasis implementation. Can be useful to reproduce old seeds.": "Eski vurgu uygulamasını kullanın. Eski tohumları yeniden üretmek faydalı olabilir.",
+    "Make K-diffusion samplers produce same images in a batch as when making a single image": "K-difüzyon örnekleyicilerinin tek bir görüntü oluştururken olduğu gibi toplu halde aynı görüntüleri üretmesini sağlayın",
+    "Increase coherency by padding from the last comma within n tokens when using more than 75 tokens": "75'ten fazla belirteç kullanıldığında n belirteç içindeki son virgülden itibaren dolgu yaparak tutarlılığı artırın",
+    "Filter NSFW content": "NSFW içeriği filtreleme",
+    "Stop At last layers of CLIP model": "Durdur CLIP modelinin son katmanlarında",
+    "Interrogate Options": "Sorgulama Seçenekleri",
+    "Interrogate: keep models in VRAM": "Sorgula: modelleri VRAM'de tut",
+    "Interrogate: use artists from artists.csv": "Sorgula: artists.csv dosyasındaki sanatçıları kullan",
+    "Interrogate: include ranks of model tags matches in results (Has no effect on caption-based interrogators).": "Interrogate: sonuçlara eşleşen model etiketlerinin sıralarını dahil et (Başlık tabanlı sorgulayıcılar üzerinde etkisi yoktur).",
+    "Interrogate: num_beams for BLIP": "Sorgula: BLIP için num_beams",
+    "Interrogate: minimum description length (excluding artists, etc..)": "Sorgula: minimum açıklama uzunluğu (sanatçılar vb. hariç)",
+    "Interrogate: maximum description length": "Sorgula: maksimum açıklama uzunluğu",
+    "CLIP: maximum number of lines in text file (0 = No limit)": "CLIP: metin dosyasındaki maksimum satır sayısı (0 = Sınır yok)",
+    "Interrogate: deepbooru score threshold": "Sorgula: deepbooru puan eşiği",
+    "Interrogate: deepbooru sort alphabetically": "Sorgula: deepbooru alfabetik olarak sırala",
+    "use spaces for tags in deepbooru": "deepbooru'da etiketler için boşluk kullanın",
+    "escape (\\) brackets in deepbooru (so they are used as literal brackets and not for emphasis)": "deepbooru'da kaçış (\\) parantezleri (böylece vurgu için değil, gerçek parantez olarak kullanılırlar)",
+    "User interface": "Kullanıcı arayüzü",
+    "Show progressbar": "İlerleme çubuğunu göster",
+    "Show image creation progress every N sampling steps. Set 0 to disable.": "Her N örnekleme adımında görüntü oluşturma ilerlemesini gösterir. Devre dışı bırakmak için 0 olarak ayarlayın.",
+    "Show previews of all images generated in a batch as a grid": "Bir toplu işte oluşturulan tüm görüntülerin önizlemelerini ızgara olarak göster",
+    "Show grid in results for web": "Web için sonuçlarda ızgarayı göster",
+    "Do not show any images in results for web": "Web için sonuçlarda herhangi bir resim gösterme",
+    "Add model hash to generation information": "Üretim bilgilerine model karması ekleyin",
+    "Add model name to generation information": "Üretim bilgilerine model adı ekleme",
+    "When reading generation parameters from text into UI (from PNG info or pasted text), do not change the selected model/checkpoint.": "Üretim parametrelerini metinden kullanıcı arayüzüne okurken (PNG bilgisinden veya yapıştırılan metinden), seçilen modeli/denetim noktasını değiştirmeyin.",
+    "Font for image grids that have text": "Metin içeren görüntü ızgaraları için yazı tipi",
+    "Enable full page image viewer": "Tam sayfa resim görüntüleyiciyi etkinleştir",
+    "Show images zoomed in by default in full page image viewer": "Tam sayfa resim görüntüleyicide resimleri varsayılan olarak yakınlaştırılmış olarak gösterme",
+    "Show generation progress in window title.": "Pencere başlığında üretim ilerlemesini göster.",
+    "Quicksettings list": "Hızlı ayarlar listesi",
+    "Localization (requires restart)": "Yerelleştirme (yeniden başlatma gerektirir)",
+    "ko_KR": "ko_KR",
+    "ru_RU": "ru_RU",
+    "es_ES": "es_ES",
+    "ja_JP": "ja_JP",
+    "ar_AR": "ar_AR",
+    "Sampler parameters": "Örnekleyici parametreleri",
+    "Hide samplers in user interface (requires restart)": "Kullanıcı arayüzünde örnekleyicileri gizle (yeniden başlatma gerektirir)",
+    "eta (noise multiplier) for DDIM": "DDIM için eta (gürültü çarpanı)",
+    "eta (noise multiplier) for ancestral samplers": "atasal örnekleyiciler için eta (gürültü çarpanı)",
+    "img2img DDIM discretize": "img2img DDIM discretize",
+    "uniform": "üniforma",
+    "quad": "dörtlü",
+    "sigma churn": "sigma churn",
+    "sigma tmin": "sigma tmin",
+    "sigma noise": "sigma gürültüsü",
+    "Eta noise seed delta": "Eta gürültü tohum deltası",
+    "Request browser notifications": "Tarayıcı bildirimleri isteyin",
+    "Download localization template": "Yerelleştirme şablonunu indirin",
+    "Reload custom script bodies (No ui updates, No restart)": "Özel komut dosyası gövdelerini yeniden yükle (Kullanıcı arayüzü güncellemesi yok, yeniden başlatma yok)",
+    "Restart Gradio and Refresh components (Custom Scripts, ui.py, js and css only)": "Gradio'yu yeniden başlatın ve bileşenleri yenileyin (yalnızca Özel Komut Dosyaları, ui.py, js ve css)",
+    "Prompt (press Ctrl+Enter or Alt+Enter to generate)": "İstem (oluşturmak için Ctrl+Enter veya Alt+Enter tuşlarına basın)",
+    "Negative prompt (press Ctrl+Enter or Alt+Enter to generate)": "Negatif istem (oluşturmak için Ctrl+Enter veya Alt+Enter tuşlarına basın)",
+    "Add a random artist to the prompt.": "Komut istemine rastgele bir sanatçı ekleyin.",
+    "Read generation parameters from prompt or last generation if prompt is empty into user interface.": "Kullanıcı arayüzüne istemden veya istem boşsa son üretimden üretim parametrelerini okuyun.",
+    "Save style": "Stil kaydet",
+    "Apply selected styles to current prompt": "Seçilen stilleri geçerli komut istemine uygulama",
+    "Stop processing current image and continue processing.": "Geçerli görüntüyü işlemeyi durdurun ve işlemeye devam edin.",
+    "Stop processing images and return any results accumulated so far.": "Görüntüleri işlemeyi durdurun ve o ana kadar biriken tüm sonuçları döndürün.",
+    "Style to apply; styles have components for both positive and negative prompts and apply to both": "Uygulanacak stil; stillerin hem pozitif hem de negatif istemler için bileşenleri vardır ve her ikisine de uygulanır",
+    "Do not do anything special": "Özel bir şey yapmayın",
+    "Which algorithm to use to produce the image": "Görüntüyü üretmek için hangi algoritmanın kullanılacağı",
+    "Euler Ancestral - very creative, each can get a completely different picture depending on step count, setting steps to higher than 30-40 does not help": "Euler Ancestral - çok yaratıcı, adım sayısına bağlı olarak her biri tamamen farklı bir resim elde edebilir, adımları 30-40'tan daha yükseğe ayarlamak yardımcı olmaz",
+    "Denoising Diffusion Implicit Models - best at inpainting": "Denoising Difüzyon Örtük Modelleri - en iyi inpainting",
+    "Produce an image that can be tiled.": "Döşenebilen bir görüntü üretin.",
+    "Use a two step process to partially create an image at smaller resolution, upscale, and then improve details in it without changing composition": "Bir görüntüyü kısmen daha düşük çözünürlükte oluşturmak, büyütmek ve ardından kompozisyonu değiştirmeden ayrıntıları iyileştirmek için iki adımlı bir işlem kullanın",
+    "Determines how little respect the algorithm should have for image's content. At 0, nothing will change, and at 1 you'll get an unrelated image. With values below 1.0, processing will take less steps than the Sampling Steps slider specifies.": "Algoritmanın resmin içeriğine ne kadar az saygı göstermesi gerektiğini belirler. 0'da hiçbir şey değişmez ve 1'de ilgisiz bir görüntü elde edersiniz. 1,0'ın altındaki değerlerde işleme, Örnekleme Adımları kaydırıcısının belirttiğinden daha az adım atacaktır.",
+    "How many batches of images to create": "Kaç görüntü grubu oluşturulacağı",
+    "How many image to create in a single batch": "Tek bir partide kaç görüntü oluşturulacağı",
+    "Classifier Free Guidance Scale - how strongly the image should conform to prompt - lower values produce more creative results": "Sınıflandırıcı Serbest Rehberlik Ölçeği - görüntünün istemle ne kadar uyumlu olması gerektiği - düşük değerler daha yaratıcı sonuçlar üretir",
+    "A value that determines the output of random number generator - if you create an image with same parameters and seed as another image, you'll get the same result": "Rastgele sayı üretecinin çıktısını belirleyen bir değer - başka bir resimle aynı parametrelere ve tohuma sahip bir resim oluşturursanız, aynı sonucu alırsınız",
+    "Set seed to -1, which will cause a new random number to be used every time": "Tohum değerini -1 olarak ayarlayın, bu her seferinde yeni bir rastgele sayı kullanılmasına neden olacaktır",
+    "Reuse seed from last generation, mostly useful if it was randomed": "Son nesilden tohumu yeniden kullanın, çoğunlukla rastgele ise kullanışlıdır",
+    "Seed of a different picture to be mixed into the generation.": "Nesle karıştırılacak farklı bir resmin tohumu.",
+    "How strong of a variation to produce. At 0, there will be no effect. At 1, you will get the complete picture with variation seed (except for ancestral samplers, where you will just get something).": "Ne kadar güçlü bir varyasyon üretileceği. 0'da hiçbir etki olmayacaktır. 1'de, varyasyon tohumu ile tam bir resim elde edersiniz (sadece bir şey alacağınız atasal örnekleyiciler hariç).",
+    "Make an attempt to produce a picture similar to what would have been produced with same seed at specified resolution": "Belirtilen çözünürlükte aynı tohumla üretilecek olana benzer bir resim üretme girişiminde bulunun",
+    "Separate values for X axis using commas.": "X ekseni için değerleri virgül kullanarak ayırın.",
+    "Separate values for Y axis using commas.": "Y ekseni için değerleri virgül kullanarak ayırın.",
+    "Write image to a directory (default - log/images) and generation parameters into csv file.": "Görüntüyü bir dizine (varsayılan - log/images) ve üretim parametrelerini csv dosyasına yazın.",
+    "Open images output directory": "Görüntü çıktı dizinini açın",
+    "How much to blur the mask before processing, in pixels.": "İşlemeden önce maskenin piksel cinsinden ne kadar bulanıklaştırılacağı.",
+    "What to put inside the masked area before processing it with Stable Diffusion.": "Kararlı Difüzyon ile işlemeden önce maskelenmiş alanın içine ne konulacağı.",
+    "fill it with colors of the image": "Görüntünün renkleriyle doldurun",
+    "keep whatever was there originally": "başlangıçta orada ne varsa saklayın",
+    "fill it with latent space noise": "gizli alan gürültüsü ile doldurun",
+    "fill it with latent space zeroes": "gizli uzay sıfırları ile doldurun",
+    "Upscale masked region to target resolution, do inpainting, downscale back and paste into original image": "Maskelenmiş bölgeyi hedef çözünürlüğe yükseltme, inpainting yapma, ölçeği küçültme ve orijinal görüntüye yapıştırma",
+    "Resize image to target resolution. Unless height and width match, you will get incorrect aspect ratio.": "Görüntüyü hedef çözünürlüğe göre yeniden boyutlandırın. Yükseklik ve genişlik eşleşmediği sürece, yanlış en boy oranı elde edersiniz.",
+    "Resize the image so that entirety of target resolution is filled with the image. Crop parts that stick out.": "Görüntüyü, hedef çözünürlüğün tamamı görüntüyle dolacak şekilde yeniden boyutlandırın. Dışarıda kalan kısımları kırpın.",
+    "Resize the image so that entirety of image is inside target resolution. Fill empty space with image's colors.": "Görüntünün tamamı hedef çözünürlüğün içinde olacak şekilde görüntüyü yeniden boyutlandırın. Boş alanı görüntünün renkleriyle doldurun.",
+    "How many times to repeat processing an image and using it as input for the next iteration": "Bir görüntüyü işlemeyi kaç kez tekrarlamak ve bir sonraki yineleme için girdi olarak kullanmak",
+    "In loopback mode, on each loop the denoising strength is multiplied by this value. <1 means decreasing variety so your sequence will converge on a fixed picture. >1 means increasing variety so your sequence will become more and more chaotic.": "Geri döngü modunda, her döngüde denoising gücü bu değerle çarpılır. <1 çeşitliliğin azalması anlamına gelir, böylece diziniz sabit bir resme yakınsayacaktır. >1'den büyük olması çeşitliliğin artması anlamına gelir, böylece sekansınız gittikçe daha kaotik hale gelecektir.",
+    "For SD upscale, how much overlap in pixels should there be between tiles. Tiles overlap so that when they are merged back into one picture, there is no clearly visible seam.": "SD yükseltme için karolar arasında piksel olarak ne kadar örtüşme olmalıdır. Döşemeler, tekrar tek bir resimde birleştirildiklerinde açıkça görülebilen bir dikiş olmayacak şekilde üst üste biner.",
+    "A directory on the same machine where the server is running.": "Sunucunun çalıştığı makinedeki bir dizin.",
+    "Leave blank to save images to the default path.": "Görüntüleri varsayılan yola kaydetmek için boş bırakın.",
+    "Result = A * (1 - M) + B * M": "Sonuç = A * (1 - M) + B * M",
+    "Result = A + (B - C) * M": "Sonuç = A + (B - C) * M",
+    "1st and last digit must be 1. ex:'1, 2, 1'": "1. ve son rakam 1 olmalıdır. örn:'1, 2, 1'",
+    "Path to directory with input images": "Girdi resimlerinin bulunduğu dizinin yolu",
+    "Path to directory where to write outputs": "Çıktıların yazılacağı dizinin yolu",
+    "Use following tags to define how filenames for images are chosen: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [datetime<Format>], [datetime<Format><Time Zone>], [job_timestamp]; leave empty for default.": "Görüntülerin dosya adlarının nasıl seçileceğini tanımlamak için aşağıdaki etiketleri kullanın: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [datetime<Format>], [datetime<Format><Time Zone>], [job_timestamp]; varsayılan için boş bırakın.",
+    "If this option is enabled, watermark will not be added to created images. Warning: if you do not add watermark, you may be behaving in an unethical manner.": "Bu seçenek etkinleştirilirse, oluşturulan görüntülere filigran eklenmeyecektir. Uyarı: filigran eklemezseniz, etik olmayan bir şekilde davranıyor olabilirsiniz.",
+    "Use following tags to define how subdirectories for images and grids are chosen: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [datetime<Format>], [datetime<Format><Time Zone>], [job_timestamp]; leave empty for default.": "Görüntüler ve ızgaralar için alt dizinlerin nasıl seçileceğini tanımlamak için aşağıdaki etiketleri kullanın: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [datetime<Format>], [datetime<Format><Time Zone>], [job_timestamp]; varsayılan için boş bırakın.",
+    "Restore low quality faces using GFPGAN neural network": "GFPGAN sinir ağını kullanarak düşük kaliteli yüzleri geri yükleme",
+    "This regular expression will be used extract words from filename, and they will be joined using the option below into label text used for training. Leave empty to keep filename text as it is.": "Bu düzenli ifade, dosya adından sözcükleri ayıklamak için kullanılır ve bunlar aşağıdaki seçenek kullanılarak eğitim için kullanılan etiket metnine birleştirilir. Dosya adı metnini olduğu gibi tutmak için boş bırakın.",
+    "This string will be used to join split words into a single line if the option above is enabled.": "Bu dize, yukarıdaki seçenek etkinleştirilirse bölünmüş kelimeleri tek bir satırda birleştirmek için kullanılacaktır.",
+    "List of setting names, separated by commas, for settings that should go to the quick access bar at the top, rather than the usual setting tab. See modules/shared.py for setting names. Requires restarting to apply.": "Normal ayar sekmesi yerine üstteki hızlı erişim çubuğuna gitmesi gereken ayarlar için virgülle ayrılmış ayar adlarının listesi. Ayar adları için modules/shared.py dosyasına bakın. Uygulanması için yeniden başlatma gerekir.",
+    "If this values is non-zero, it will be added to seed and used to initialize RNG for noises when using samplers with Eta. You can use this to produce even more variation of images, or you can use this to match images of other software if you know what you are doing.": "Bu değer sıfır değilse, tohuma eklenecek ve Eta ile örnekleyiciler kullanılırken gürültüler için RNG'yi başlatmak için kullanılacaktır. Bunu daha fazla görüntü çeşitliliği üretmek için kullanabilir veya ne yaptığınızı biliyorsanız diğer yazılımların görüntülerini eşleştirmek için kullanabilirsiniz.."
+}

From ef53f7ffcfe022e6f392a6161b6cd926e81ad292 Mon Sep 17 00:00:00 2001
From: camenduru <54370274+camenduru@users.noreply.github.com>
Date: Wed, 26 Oct 2022 12:24:04 +0300
Subject: [PATCH 44/73] Fix Turkish Localization
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

it's good enough to merge 🎉
---
 localizations/tr_TR.json | 50 ++++++++++++++++++++--------------------
 1 file changed, 25 insertions(+), 25 deletions(-)

diff --git a/localizations/tr_TR.json b/localizations/tr_TR.json
index 511b8882..74cdf056 100644
--- a/localizations/tr_TR.json
+++ b/localizations/tr_TR.json
@@ -5,8 +5,8 @@
     "❮": "❮",
     "❯": "❯",
     "Loading...": "Yükleniyor...",
-    "view": "görünüm",
-    "api": "api",
+    "view": "arayüz",
+    "api": "",
     "•": "-",
     "built with gradio": "gradio ile inşa edildi",
     "Stable Diffusion checkpoint": "Kararlı Difüzyon kontrol noktası",
@@ -14,15 +14,15 @@
     "img2img": "img2img",
     "Extras": "Ekstralar",
     "PNG Info": "PNG Bilgisi",
-    "Checkpoint Merger": "Checkpoint Birleşmesi",
-    "Train": "Tren",
+    "Checkpoint Merger": "Checkpoint Birleştir",
+    "Train": "Eğitim",
     "Settings": "Ayarlar",
     "Prompt": "İstem",
     "Negative prompt": "Negatif istem",
     "Run": "Koşmak",
     "Skip": "Atla",
-    "Interrupt": "Kesinti",
-    "Generate": "Oluşturmak",
+    "Interrupt": "Durdur",
+    "Generate": "Oluştur",
     "Style 1": "Stil 1",
     "Style 2": "Stil 2",
     "Label": "Etiket",
@@ -33,7 +33,7 @@
     "Click to Upload": "Yüklemek için Tıklayınız",
     "Image": "Resim",
     "Check progress": "İlerlemeyi kontrol edin",
-    "Check progress (first)": "İlerlemeyi kontrol edin (önce)",
+    "Check progress (first)": "Önce ilerlemeyi kontrol edin",
     "Sampling Steps": "Örnekleme Adımları",
     "Sampling method": "Örnekleme yöntemi",
     "Euler a": "Euler a",
@@ -51,22 +51,22 @@
     "PLMS": "PLMS",
     "Width": "Genişlik",
     "Height": "Yükseklik",
-    "Restore faces": "Yüzleri geri yükle",
-    "Tiling": "Döşeme",
+    "Restore faces": "Yüzleri düzeltme",
+    "Tiling": "Döşeme Oluştur",
     "Highres. fix": "Highres. düzeltme",
     "Firstpass width": "İlk geçiş genişliği",
     "Firstpass height": "İlk geçiş yüksekliği",
-    "Denoising strength": "Denoising gücü",
-    "Batch count": "Parti sayısı",
-    "Batch size": "Parti büyüklüğü",
+    "Denoising strength": "Gürültü arındırma gücü",
+    "Batch count": "Grup sayısı",
+    "Batch size": "Grup büyüklüğü",
     "CFG Scale": "CFG Ölçeği",
     "Seed": "Tohum",
     "Extra": "Ekstra",
     "Variation seed": "Varyasyon tohumu",
     "Variation strength": "Varyasyon gücü",
-    "Resize seed from width": "Tohumu genişlikten yeniden boyutlandırma",
-    "Resize seed from height": "Tohumu yükseklikten yeniden boyutlandırma",
-    "Script": "Senaryo",
+    "Resize seed from width": "Tohumu genişlik ile yeniden boyutlandırma",
+    "Resize seed from height": "Tohumu yükseklik ile yeniden boyutlandırma",
+    "Script": "Scriptler",
     "None": "Hiçbiri",
     "Prompt matrix": "İstem matrisi",
     "Prompts from file or textbox": "Dosyadan veya metin kutusundan istemler",
@@ -80,8 +80,8 @@
     "Var. seed": "Var. tohum",
     "Var. strength": "Var. güç",
     "Steps": "Adımlar",
-    "Prompt S/R": "Hızlı S/R",
-    "Prompt order": "Hızlı sipariş",
+    "Prompt S/R": "İstem S/R",
+    "Prompt order": "İstem sırası",
     "Sampler": "Örnekleyici",
     "Checkpoint name": "Kontrol noktası adı",
     "Hypernetwork": "Hipernetwork",
@@ -176,7 +176,7 @@
     "Source": "Kaynak",
     "Show result images": "Sonuç resimlerini göster",
     "Scale by": "Ölçek tarafından",
-    "Scale to": "Ölçeklendirmek",
+    "Scale to": "Ölçeklendir",
     "Resize": "Yeniden Boyutlandır",
     "Crop to fit": "Sığdırmak için kırpın",
     "Upscaler 2 visibility": "Upscaler 2 görünürlüğü",
@@ -190,16 +190,16 @@
     "directory.": "dizin.",
     "Primary model (A)": "Birincil model (A)",
     "Secondary model (B)": "İkincil model (B)",
-    "Tertiary model (C)": "Tersiyer model (C)",
+    "Tertiary model (C)": "Üçüncü model (C)",
     "Custom Name (Optional)": "Özel Ad (İsteğe Bağlı)",
     "Multiplier (M) - set to 0 to get model A": "Çarpan (M) - A modelini elde etmek için 0'a ayarlayın",
     "Interpolation Method": "İnterpolasyon Yöntemi",
     "Weighted sum": "Ağırlıklı toplam",
     "Add difference": "Farklılık ekleyin",
     "Save as float16": "float16 olarak kaydet",
-    "See": "Bkz.",
+    "See": "Bkz. ",
     "wiki": "wiki",
-    "for detailed explanation.": "ayrıntılı açıklama için.",
+    "for detailed explanation.": " ayrıntılı açıklama için.",
     "Create embedding": "Yerleştirme oluşturma",
     "Create hypernetwork": "Hipernet oluşturun",
     "Preprocess images": "Görüntüleri ön işleme",
@@ -284,7 +284,7 @@
     "Max prompt words for [prompt_words] pattern": "prompt_words] kalıbı için maksimum istem sözcükleri",
     "Upscaling": "Yükseltme",
     "Tile size for ESRGAN upscalers. 0 = no tiling.": "ESRGAN yükselticileri için döşeme boyutu. 0 = döşeme yok.",
-    "Tile overlap, in pixels for ESRGAN upscalers. Low values = visible seam.": "ESRGAN yükselticileri için piksel cinsinden döşeme örtüşmesi. Düşük değerler = görünür dikiş.",
+    "Tile overlap, in pixels for ESRGAN upscalers. Low values = visible seam.": "ESRGAN yükselticileri için piksel cinsinden döşeme örtüşmesi. Düşük değerler = görünür bağlantı hattı.",
     "Tile size for all SwinIR.": "Tüm SwinIR için döşeme boyutu.",
     "Tile overlap, in pixels for SwinIR. Low values = visible seam.": "SwinIR için piksel cinsinden döşeme örtüşmesi. Düşük değerler = görünür dikiş.",
     "LDSR processing steps. Lower = faster": "LDSR işleme adımları. Düşük = daha hızlı",
@@ -351,7 +351,7 @@
     "Sampler parameters": "Örnekleyici parametreleri",
     "Hide samplers in user interface (requires restart)": "Kullanıcı arayüzünde örnekleyicileri gizle (yeniden başlatma gerektirir)",
     "eta (noise multiplier) for DDIM": "DDIM için eta (gürültü çarpanı)",
-    "eta (noise multiplier) for ancestral samplers": "atasal örnekleyiciler için eta (gürültü çarpanı)",
+    "eta (noise multiplier) for ancestral samplers": "eta örnekleyiciler için eta (gürültü çarpanı)",
     "img2img DDIM discretize": "img2img DDIM discretize",
     "uniform": "üniforma",
     "quad": "dörtlü",
@@ -360,8 +360,8 @@
     "sigma noise": "sigma gürültüsü",
     "Eta noise seed delta": "Eta gürültü tohum deltası",
     "Request browser notifications": "Tarayıcı bildirimleri isteyin",
-    "Download localization template": "Yerelleştirme şablonunu indirin",
-    "Reload custom script bodies (No ui updates, No restart)": "Özel komut dosyası gövdelerini yeniden yükle (Kullanıcı arayüzü güncellemesi yok, yeniden başlatma yok)",
+    "Download localization template": "Dil şablonunu indirin",
+    "Reload custom script bodies (No ui updates, No restart)": "Kişisel komut dosyası gövdelerini yeniden yükle (Kullanıcı arayüzü güncellemesi yok, yeniden başlatma yok)",
     "Restart Gradio and Refresh components (Custom Scripts, ui.py, js and css only)": "Gradio'yu yeniden başlatın ve bileşenleri yenileyin (yalnızca Özel Komut Dosyaları, ui.py, js ve css)",
     "Prompt (press Ctrl+Enter or Alt+Enter to generate)": "İstem (oluşturmak için Ctrl+Enter veya Alt+Enter tuşlarına basın)",
     "Negative prompt (press Ctrl+Enter or Alt+Enter to generate)": "Negatif istem (oluşturmak için Ctrl+Enter veya Alt+Enter tuşlarına basın)",

From 7e0e4d21d469b2d08af1dd302f6d56388c525ba3 Mon Sep 17 00:00:00 2001
From: Leo Mozoloa <leo.drrty@gmail.com>
Date: Tue, 25 Oct 2022 21:51:22 +0200
Subject: [PATCH 45/73] Prevent people from just saying "latest version"

in the bug report form
---
 .github/ISSUE_TEMPLATE/bug_report.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index 9c2ff313..ed372f22 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -44,7 +44,7 @@ body:
     id: commit
     attributes:
       label: Commit where the problem happens
-      description: Which commit are you running ? (copy the **Commit hash** shown in the cmd/terminal when you launch the UI)
+      description: Which commit are you running ? (Do not write *Latest version/repo/commit*, as this means nothing and will have changed by the time we read your issue. Rather, copy the **Commit hash** shown in the cmd/terminal when you launch the UI)
     validations:
       required: true
   - type: dropdown

From 366fe8dbd08e88ea96d9017886e7803e2bcb0102 Mon Sep 17 00:00:00 2001
From: dtlnor <dtlnor@hotmail.com>
Date: Sat, 22 Oct 2022 01:29:33 +0900
Subject: [PATCH 46/73] Create zh-hans.json

---
 localizations/zh-hans.json | 456 +++++++++++++++++++++++++++++++++++++
 1 file changed, 456 insertions(+)
 create mode 100644 localizations/zh-hans.json

diff --git a/localizations/zh-hans.json b/localizations/zh-hans.json
new file mode 100644
index 00000000..113df5f7
--- /dev/null
+++ b/localizations/zh-hans.json
@@ -0,0 +1,456 @@
+{
+    "⤡": "⤡",
+    "⊞": "⊞",
+    "×": "×",
+    "❮": "❮",
+    "❯": "❯",
+    "Loading...": "载入中...",
+    "view": "查看",
+    "api": "api",
+    "•": "•",
+    "built with gradio": "基于 Gradio 库编译",
+    "Stable Diffusion checkpoint": "Stable Diffusion 模型(ckpt)",
+    "txt2img": "文转图",
+    "img2img": "图转图",
+    "Extras": "后处理",
+    "PNG Info": "PNG 信息",
+    "History": "历史记录",
+    "Checkpoint Merger": "模型(ckpt)合并工具",
+    "Train": "训练",
+    "Settings": "设置",
+    "Prompt": "提示词",
+    "Negative prompt": "否定提示词",
+    "Run": "运行",
+    "Skip": "略过",
+    "Interrupt": "中断",
+    "Generate": "生成",
+    "Style 1": "模版风格 1",
+    "Style 2": "模版风格 2",
+    "Label": "标签",
+    "File": "文件",
+    "Drop File Here": "拖拽文件到这里",
+    "-": "-",
+    "or": "或",
+    "Click to Upload": "点击上传",
+    "Image": "图像",
+    "Check progress": "查看进度",
+    "Check progress (first)": "查看进度 (1st)",
+    "Sampling Steps": "采样迭代步数",
+    "Sampling method": "采样方法",
+    "Euler a": "Euler a",
+    "Euler": "Euler",
+    "LMS": "LMS",
+    "Heun": "Heun",
+    "DPM2": "DPM2",
+    "DPM2 a": "DPM2 a",
+    "DPM fast": "DPM fast",
+    "DPM adaptive": "DPM adaptive",
+    "LMS Karras": "LMS Karras",
+    "DPM2 Karras": "DPM2 Karras",
+    "DPM2 a Karras": "DPM2 a Karras",
+    "DDIM": "DDIM",
+    "PLMS": "PLMS",
+    "Width": "宽度",
+    "Height": "高度",
+    "Restore faces": "面部修复",
+    "Tiling": "密铺",
+    "Highres. fix": "高分辨率修复",
+    "Firstpass width": "第一遍宽度",
+    "Firstpass height": "第一遍高度",
+    "Denoising strength": "降噪(模糊)强度",
+    "Batch count": "批量数量",
+    "Batch size": "批量大小",
+    "CFG Scale": "提示词相关性(CFG Scale)",
+    "Seed": "随机种子",
+    "Extra": "额外参数",
+    "Variation seed": "差异随机种子",
+    "Variation strength": "差异强度",
+    "Resize seed from width": "自宽度缩放种子",
+    "Resize seed from height": "自高度缩放种子",
+    "Open for Clip Aesthetic!": "打开美学Clip!",
+    "▼": "▼",
+    "Aesthetic weight": "美学权重",
+    "Aesthetic steps": "美学迭代步数",
+    "Aesthetic learning rate": "美学学习率",
+    "Slerp interpolation": "Slerp 插值",
+    "Aesthetic imgs embedding": "美学图片 embedding",
+    "None": "无",
+    "Aesthetic text for imgs": "描述图片的美学文字",
+    "Slerp angle": "Slerp 角度",
+    "Is negative text": "是否定类文字",
+    "Script": "脚本",
+    "Prompt matrix": "提示词矩阵",
+    "Prompts from file or textbox": "来自文本框或文件载入提示词",
+    "X/Y plot": "X/Y 图表",
+    "Put variable parts at start of prompt": "把变量部分放在提示词文本的开头",
+    "Show Textbox": "显示文本框",
+    "File with inputs": "含输入内容的文件",
+    "Prompts": "提示词",
+    "X type": "X轴类型",
+    "Nothing": "无",
+    "Var. seed": "差异种子",
+    "Var. strength": "差异强度",
+    "Steps": "迭代步数",
+    "Prompt S/R": "提示词替换",
+    "Prompt order": "提示词顺序",
+    "Sampler": "采样器",
+    "Checkpoint name": "模型(ckpt)名",
+    "Hypernetwork": "Hypernetwork",
+    "Hypernet str.": "Hypernetwork 强度",
+    "Sigma Churn": "Sigma Churn",
+    "Sigma min": "最小 Sigma",
+    "Sigma max": "最大 Sigma",
+    "Sigma noise": "Sigma noise",
+    "Eta": "Eta",
+    "Clip skip": "Clip 略过",
+    "Denoising": "降噪",
+    "X values": "X轴数值",
+    "Y type": "Y轴类型",
+    "Y values": "Y轴数值",
+    "Draw legend": "在图表中包括轴标题",
+    "Include Separate Images": "包括独立的图像",
+    "Keep -1 for seeds": "保持随机种子为-1",
+    "Drop Image Here": "拖拽图像到此",
+    "Save": "保存",
+    "Send to img2img": "传送到图转图",
+    "Send to inpaint": "传送到内补绘制",
+    "Send to extras": "传送到后处理",
+    "Make Zip when Save?": "保存时生成压缩档?",
+    "Textbox": "文本框",
+    "Interrogate\nCLIP": "推断提示词\nCLIP",
+    "Interrogate\nDeepBooru": "推断提示词\nDeepBooru",
+    "Inpaint": "内补绘制",
+    "Batch img2img": "批量图转图",
+    "Image for img2img": "图转图的图像",
+    "Image for inpainting with mask": "用在内补绘制蒙版内容的图像",
+    "Mask": "蒙版",
+    "Mask blur": "蒙版模糊",
+    "Mask mode": "蒙版模式",
+    "Draw mask": "绘制蒙版",
+    "Upload mask": "上传蒙版",
+    "Masking mode": "蒙版模式",
+    "Inpaint masked": "内补绘制蒙版内容",
+    "Inpaint not masked": "内补绘制非蒙版内容",
+    "Masked content": "蒙版蒙住的内容",
+    "fill": "填空",
+    "original": "原图",
+    "latent noise": "latent noise",
+    "latent nothing": "latent nothing",
+    "Inpaint at full resolution": "以完整分辨率进行内补绘制",
+    "Inpaint at full resolution padding, pixels": "以完整分辨率进行内补绘制 - 填空像素",
+    "Process images in a directory on the same machine where the server is running.": "在服务器主机上的目录中处理图像",
+    "Use an empty output directory to save pictures normally instead of writing to the output directory.": "指定一个空的文件夹为输出目录而非默认的 output 文件夹为输出目录",
+    "Disabled when launched with --hide-ui-dir-config.": "启动 --hide-ui-dir-config 时禁用",
+    "Input directory": "输入目录",
+    "Output directory": "输出目录",
+    "Resize mode": "缩放模式",
+    "Just resize": "只缩放",
+    "Crop and resize": "剪裁后缩放",
+    "Resize and fill": "缩放并填空",
+    "img2img alternative test": "图转图的另一种测试",
+    "Loopback": "回送",
+    "Outpainting mk2": "外补绘制第二版",
+    "Poor man's outpainting": "Poor man 的外补绘制",
+    "SD upscale": "SD 超采样",
+    "should be 2 or lower.": "必须小于等于2",
+    "Override `Sampling method` to Euler?(this method is built for it)": "覆写 `采样方法` 为 Euler?(这个方法就是为这样做设计的)",
+    "Override `prompt` to the same value as `original prompt`?(and `negative prompt`)": "覆写 `提示词` 为 `原始提示词`?(包括`否定提示词`)",
+    "Original prompt": "原始提示词",
+    "Original negative prompt": "原始否定提示词",
+    "Override `Sampling Steps` to the same value as `Decode steps`?": "覆写 `采样迭代步数` 为 `解码迭代步数`?",
+    "Decode steps": "解码迭代步数",
+    "Override `Denoising strength` to 1?": "覆写 `降噪强度` 为 1?",
+    "Decode CFG scale": "解码提示词相关性(CFG scale)",
+    "Randomness": "随机强度",
+    "Sigma adjustment for finding noise for image": "为寻找图中噪点的 Sigma 调整",
+    "Loops": "循环",
+    "Denoising strength change factor": "降噪强度的调整因数",
+    "Recommended settings: Sampling Steps: 80-100, Sampler: Euler a, Denoising strength: 0.8": "推荐设置:采样迭代步数:80-100,采样器:Euler a,降噪强度:0.8",
+    "Pixels to expand": "拓展的像素",
+    "Outpainting direction": "外填充的方向",
+    "left": "左",
+    "right": "右",
+    "up": "上",
+    "down": "下",
+    "Fall-off exponent (lower=higher detail)": "衰减指数(低=高细节)",
+    "Color variation": "色彩变化",
+    "Will upscale the image to twice the dimensions; use width and height sliders to set tile size": "将图像放大到两倍尺寸; 使用宽度和高度滑块设置密铺大小",
+    "Tile overlap": "密铺重叠像素",
+    "Upscaler": "放大算法",
+    "Lanczos": "Lanczos",
+    "LDSR": "LDSR",
+    "BSRGAN 4x": "BSRGAN 4x",
+    "ESRGAN_4x": "ESRGAN_4x",
+    "R-ESRGAN 4x+ Anime6B": "R-ESRGAN 4x+ Anime6B",
+    "ScuNET GAN": "ScuNET GAN",
+    "ScuNET PSNR": "ScuNET PSNR",
+    "SwinIR_4x": "SwinIR 4x",
+    "Single Image": "单个图像",
+    "Batch Process": "批量处理",
+    "Batch from Directory": "从目录进行批量处理",
+    "Source": "来源",
+    "Show result images": "显示输出图像",
+    "Scale by": "缩放到",
+    "Scale to": "缩放为",
+    "Resize": "缩放",
+    "Crop to fit": "裁剪以适应",
+    "Upscaler 2": "放大算法 2",
+    "Upscaler 2 visibility": "放大算法 2 可见度",
+    "GFPGAN visibility": "GFPGAN 可见度",
+    "CodeFormer visibility": "CodeFormer 可见度",
+    "CodeFormer weight (0 = maximum effect, 1 = minimum effect)": "CodeFormer 权重 (0 = 最大效果, 1 = 最小效果)",
+    "Open output directory": "打开输出目录",
+    "Send to txt2img": "输出到文转图",
+    "txt2img history": "文转图历史记录",
+    "img2img history": "图转图历史记录",
+    "extras history": "后处理历史记录",
+    "Renew Page": "刷新页面",
+    "First Page": "第一页",
+    "Prev Page": "上一页",
+    "Page Index": "页数",
+    "Next Page": "下一页",
+    "End Page": "尾页",
+    "number of images to delete consecutively next": "下一批要批量删除的图像数",
+    "Delete": "删除",
+    "Generate Info": "生成信息",
+    "File Name": "文件名",
+    "set_index": "设置索引",
+    "A merger of the two checkpoints will be generated in your": "合并后的模型(ckpt)会生成在你的",
+    "checkpoint": "模型(ckpt)",
+    "directory.": "目录",
+    "Primary model (A)": "主要模型 (A)",
+    "Secondary model (B)": "第二模型 (B)",
+    "Tertiary model (C)": "第三模型 (C)",
+    "Custom Name (Optional)": "自定义名字 (可选)",
+    "Multiplier (M) - set to 0 to get model A": "倍率 (M) - 设为 0 等价于模型 A",
+    "Interpolation Method": "插值方法",
+    "Weighted sum": "加权和",
+    "Add difference": "添加差分",
+    "Save as float16": "以 float16 储存",
+    "See": "查看",
+    "wiki": "wiki",
+    "for detailed explanation.": "想看详细解释的话",
+    "Create embedding": "生成 embedding",
+    "Create aesthetic images embedding": "生成美学图片 embedding",
+    "Create hypernetwork": "生成 hypernetwork",
+    "Preprocess images": "图像预处理",
+    "Name": "名称",
+    "Initialization text": "初始化文字",
+    "Number of vectors per token": "每个令牌(token)的向量数",
+    "Overwrite Old Embedding": "覆写旧的 Embedding",
+    "Source directory": "源目录",
+    "Create images embedding": "生成 embedding 图片",
+    "Modules": "模组",
+    "Enter hypernetwork layer structure": "输入 hypernetwork 层结构",
+    "Add layer normalization": "添加层标准化",
+    "Overwrite Old Hypernetwork": "Overwrite Old Hypernetwork",
+    "Select activation function of hypernetwork": "选择 hypernetwork 的激活函数",
+    "linear": "linear",
+    "relu": "relu",
+    "leakyrelu": "leakyrelu",
+    "Destination directory": "目标目录",
+    "Existing Caption txt Action": "对已有说明文字的 txt 的行为",
+    "ignore": "无视",
+    "copy": "复制",
+    "prepend": "放前面",
+    "append": "放后面",
+    "Create flipped copies": "生成镜像副本",
+    "Split oversized images into two": "将过大的图像分为两份",
+    "Split oversized images": "分割过大的图像",
+    "Use BLIP for caption": "使用 BLIP 生成说明文字(自然语言描述)",
+    "Use deepbooru for caption": "使用 deepbooru 生成说明文字(tags)",
+    "Split image threshold": "图像分割阈值",
+    "Split image overlap ratio": "分割图像重叠的比率",
+    "Preprocess": "预处理",
+    "Train an embedding; must specify a directory with a set of 1:1 ratio images": "训练 embedding; 必须指定一组具有 1:1 比例图像的目录",
+    "Train an embedding or Hypernetwork; you must specify a directory with a set of 1:1 ratio images": "训练 embedding 或者 hypernetwork; 必须指定一组具有 1:1 比例图像的目录",
+    "[wiki]": "[wiki]",
+    "Embedding": "Embedding",
+    "Embedding Learning rate": "Embedding 学习率",
+    "Hypernetwork Learning rate": "Hypernetwork 学习率",
+    "Learning rate": "学习率",
+    "Dataset directory": "数据集目录",
+    "Log directory": "日志目录",
+    "Prompt template file": "提示词模版文件",
+    "Max steps": "最大迭代步数",
+    "Save an image to log directory every N steps, 0 to disable": "每 N 步保存一个图像到日志目录,0 表示禁用",
+    "Save a copy of embedding to log directory every N steps, 0 to disable": "每 N 步将 embedding 的副本保存到日志目录,0 表示禁用",
+    "Save images with embedding in PNG chunks": "保存图像並在 PNG 文件中嵌入 embedding 文件",
+    "Read parameters (prompt, etc...) from txt2img tab when making previews": "进行预览时从文转图选项卡中读取参数(提示词等)",
+    "Train Hypernetwork": "训练 Hypernetwork",
+    "Train Embedding": "训练 Embedding",
+    "Apply settings": "保存设置",
+    "Saving images/grids": "保存图像/概览图",
+    "Always save all generated images": "始终保存所有生成的图像",
+    "File format for images": "图像的文件格式",
+    "Images filename pattern": "图像文件名格式",
+    "Always save all generated image grids": "始终保存所有生成的概览图",
+    "File format for grids": "概览图的文件格式",
+    "Add extended info (seed, prompt) to filename when saving grid": "保存概览时将扩展信息(种子、提示词)添加到文件名",
+    "Do not save grids consisting of one picture": "不要保存由一张图像组成的概览图",
+    "Prevent empty spots in grid (when set to autodetect)": "防止概览图中出现空白点(设置为自动检测时)",
+    "Grid row count; use -1 for autodetect and 0 for it to be same as batch size": "概览行数; 使用 -1 进行自动检测,使用 0 使其与批量大小相同",
+    "Save text information about generation parameters as chunks to png files": "将有关生成参数的文本信息作为块保存到 png 文件中",
+    "Create a text file next to every image with generation parameters.": "保存图像时在每个图像旁边创建一个文本文件储存生成参数",
+    "Save a copy of image before doing face restoration.": "在进行面部恢复之前保存图像副本",
+    "Quality for saved jpeg images": "保存的 jpeg 图像的质量",
+    "If PNG image is larger than 4MB or any dimension is larger than 4000, downscale and save copy as JPG": "如果 PNG 图像大于 4MB 或宽高大于 4000,则缩小并保存副本为 JPG",
+    "Use original name for output filename during batch process in extras tab": "在后处理选项卡中的批处理过程中使用原始名称作为输出文件名",
+    "When using 'Save' button, only save a single selected image": "使用“保存”按钮时,只保存一个选定的图像",
+    "Do not add watermark to images": "不要给图像加水印",
+    "Paths for saving": "保存目录",
+    "Output directory for images; if empty, defaults to three directories below": "图像的输出目录; 如果为空,则默认为下面三个目录",
+    "Output directory for txt2img images": "文转图的输出目录",
+    "Output directory for img2img images": "图转图的输出目录",
+    "Output directory for images from extras tab": "后处理的输出目录",
+    "Output directory for grids; if empty, defaults to two directories below": "概览图的输出目录; 如果为空,则默认为以下两个目录",
+    "Output directory for txt2img grids": "文转图概览的输出目录",
+    "Output directory for img2img grids": "图转图概览的输出目录",
+    "Directory for saving images using the Save button": "使用“保存”按钮保存图像的目录",
+    "Saving to a directory": "保存到目录",
+    "Save images to a subdirectory": "将图像保存到子目录",
+    "Save grids to a subdirectory": "将概览图保存到子目录",
+    "When using \"Save\" button, save images to a subdirectory": "使用“保存”按钮时,将图像保存到子目录",
+    "Directory name pattern": "目录名称格式",
+    "Max prompt words for [prompt_words] pattern": "[prompt_words] 格式的最大提示词数量",
+    "Upscaling": "放大",
+    "Tile size for ESRGAN upscalers. 0 = no tiling.": "ESRGAN 的密铺大小。 0 = 不密铺",
+    "Tile overlap, in pixels for ESRGAN upscalers. Low values = visible seam.": "密铺重叠,以 ESRGAN 的像素为单位。 低值 = 可见接缝",
+    "Tile size for all SwinIR.": "所有 SwinIR 的密铺尺寸",
+    "Tile overlap, in pixels for SwinIR. Low values = visible seam.": "密铺重叠,以 SwinIR 的像素为单位。 低值 = 可见接缝",
+    "LDSR processing steps. Lower = faster": "LDSR 处理迭代步数。 更低 = 更快",
+    "Upscaler for img2img": "图转图的放大器",
+    "Upscale latent space image when doing hires. fix": "做高分辨率修复时也放大 latent 空间图像",
+    "Face restoration": "面部修复",
+    "CodeFormer weight parameter; 0 = maximum effect; 1 = minimum effect": "CodeFormer 权重参数; 0 = 最大效果; 1 = 最小效果",
+    "Move face restoration model from VRAM into RAM after processing": "人脸修复处理完成后将人脸修复模型从显存(VRAM)移至内存(RAM)",
+    "System": "系统",
+    "VRAM usage polls per second during generation. Set to 0 to disable.": "生成图像时每秒轮询显存(VRAM)使用情况的次数。 设置为 0 以禁用",
+    "Always print all generation info to standard output": "始终将所有生成信息输出到 standard output (一般为控制台)",
+    "Add a second progress bar to the console that shows progress for an entire job.": "向控制台添加第二个进度条,显示整个作业的进度",
+    "Training": "训练",
+    "Unload VAE and CLIP from VRAM when training": "训练时从显存(VRAM)中取消 VAE 和 CLIP 的加载",
+    "Move VAE and CLIP to RAM when training hypernetwork. Saves VRAM.": "训练时将 VAE 和 CLIP 从显存(VRAM)移放到内存(RAM),节省显存(VRAM)",
+    "Filename word regex": "文件名用词的正则表达式",
+    "Filename join string": "文件名连接用字符",
+    "Number of repeats for a single input image per epoch; used only for displaying epoch number": "每个 epoch 中单个输入图像的重复次数; 仅用于显示 epoch 数",
+    "Save an csv containing the loss to log directory every N steps, 0 to disable": "每 N 步保存一个包含 loss 的 csv 到日志目录,0 表示禁用",
+    "Stable Diffusion": "Stable Diffusion",
+    "Checkpoints to cache in RAM": "缓存在内存(RAM)中的模型(ckpt)",
+    "Hypernetwork strength": "Hypernetwork 强度",
+    "Apply color correction to img2img results to match original colors.": "对图转图结果应用颜色校正以匹配原始颜色",
+    "Save a copy of image before applying color correction to img2img results": "在对图转图结果应用颜色校正之前保存图像副本",
+    "With img2img, do exactly the amount of steps the slider specifies (normally you'd do less with less denoising).": "在进行图转图的时候,确切地执行滑块指定的迭代步数(通常更少的降噪会做更少的迭代步数)",
+    "Enable quantization in K samplers for sharper and cleaner results. This may change existing seeds. Requires restart to apply.": "在 K 采样器中启用量化以获得更清晰、更清晰的结果。 这可能会改变现有的种子。 需要重新启动才能应用",
+    "Emphasis: use (text) to make model pay more attention to text and [text] to make it pay less attention": "强调符:使用 (文字) 使模型更关注该文本,使用 [文字] 使其减少关注",
+    "Use old emphasis implementation. Can be useful to reproduce old seeds.": "使用旧的强调符实现。 可用于复现旧种子",
+    "Make K-diffusion samplers produce same images in a batch as when making a single image": "使 K-diffusion 采样器批量生成与生成单个图像时产出相同的图像",
+    "Increase coherency by padding from the last comma within n tokens when using more than 75 tokens": "当使用超过 75 个令牌(token)时,通过从 n 个令牌(token)中的最后一个逗号填空来提高一致性",
+    "Filter NSFW content": "过滤成人内容",
+    "Stop At last layers of CLIP model": "在 CLIP 模型的最后哪一层停下",
+    "Interrogate Options": "逆向生成提示词选项",
+    "Interrogate: keep models in VRAM": "逆向生成: 将模型保存在显存(VRAM)中",
+    "Interrogate: use artists from artists.csv": "逆向生成: 使用 artists.csv 中的艺术家",
+    "Interrogate: include ranks of model tags matches in results (Has no effect on caption-based interrogators).": "逆向生成: 在生成结果中包含与模型标签(tags)相匹配的等级(对基于生成自然语言描述的逆向生成没有影响)",
+    "Interrogate: num_beams for BLIP": "逆向生成: BLIP 的 num_beams",
+    "Interrogate: minimum description length (excluding artists, etc..)": "逆向生成: 最小描述长度(不包括艺术家, 等…)",
+    "Interrogate: maximum description length": "逆向生成: 最大描述长度",
+    "CLIP: maximum number of lines in text file (0 = No limit)": "CLIP: 文本文件中的最大行数(0 = 无限制)",
+    "Interrogate: deepbooru score threshold": "逆向生成: deepbooru 分数阈值",
+    "Interrogate: deepbooru sort alphabetically": "逆向生成: deepbooru 按字母顺序排序",
+    "use spaces for tags in deepbooru": "在 deepbooru 中为标签使用空格",
+    "escape (\\) brackets in deepbooru (so they are used as literal brackets and not for emphasis)": "在 deepbooru 中使用转义 (\\) 括号(因此它们用作文字括号而不是强调符号)",
+    "User interface": "用户界面",
+    "Show progressbar": "显示进度条",
+    "Show image creation progress every N sampling steps. Set 0 to disable.": "每 N 个采样迭代步数显示图像生成进度。 设置 0 禁用",
+    "Show grid in results for web": "在网页的结果中显示概览图",
+    "Do not show any images in results for web": "不在网页的结果中显示任何图像",
+    "Add model hash to generation information": "将模型的哈希值添加到生成信息",
+    "Add model name to generation information": "将模型名称添加到生成信息",
+    "When reading generation parameters from text into UI (from PNG info or pasted text), do not change the selected model/checkpoint.": "当从文本读取生成参数到 UI(从 PNG 信息或粘贴文本)时,不要更改选定的模型(ckpt)",
+    "Font for image grids that have text": "有文字的概览图使用的字体",
+    "Enable full page image viewer": "启用整页图像查看器",
+    "Show images zoomed in by default in full page image viewer": "在整页图像查看器中默认放大显示图像",
+    "Show generation progress in window title.": "在窗口标题中显示生成进度",
+    "Quicksettings list": "快速设置列表",
+    "Localization (requires restart)": "本地化(需要重新启动)",
+    "Sampler parameters": "采样器参数",
+    "Hide samplers in user interface (requires restart)": "在用户界面中隐藏采样器(需要重新启动)",
+    "eta (noise multiplier) for DDIM": "DDIM 的 eta (噪声倍增器) ",
+    "eta (noise multiplier) for ancestral samplers": "ancestral 采样器的 eta (噪声倍增器)",
+    "img2img DDIM discretize": "图转图 DDIM 离散化",
+    "uniform": "均勻",
+    "quad": "二阶",
+    "sigma churn": "sigma churn",
+    "sigma tmin": "最小(tmin) sigma",
+    "sigma noise": "sigma 噪声",
+    "Eta noise seed delta": "Eta 噪声种子偏移(noise seed delta)",
+    "Request browser notifications": "请求浏览器通知",
+    "Download localization template": "下载本地化模板",
+    "Reload custom script bodies (No ui updates, No restart)": "重新加载自定义脚本主体(无 ui 更新,无重启)",
+    "Restart Gradio and Refresh components (Custom Scripts, ui.py, js and css only)": "重启 Gradio 及刷新组件(仅限自定义脚本、ui.py、js 和 css)",
+    "Prompt (press Ctrl+Enter or Alt+Enter to generate)": "提示词(按 Ctrl+Enter 或 Alt+Enter 生成)",
+    "Negative prompt (press Ctrl+Enter or Alt+Enter to generate)": "否定提示词(按 Ctrl+Enter 或 Alt+Enter 生成)",
+    "Add a random artist to the prompt.": "随机添加一个艺术家到提示词中",
+    "Read generation parameters from prompt or last generation if prompt is empty into user interface.": "从提示词中读取生成参数,如果提示词为空,则读取上一次的生成参数到用户界面",
+    "Save style": "储存为模版风格",
+    "Apply selected styles to current prompt": "将所选样式应用于当前提示",
+    "Stop processing current image and continue processing.": "停止处理当前图像并继续处理下一个",
+    "Stop processing images and return any results accumulated so far.": "停止处理图像并返回迄今为止累积的任何结果",
+    "Style to apply; styles have components for both positive and negative prompts and apply to both": "要应用的模版风格; 模版风格包含正面和负面提示词,并应用于两者",
+    "Do not do anything special": "并没有做什么特别的事情",
+    "Which algorithm to use to produce the image": "使用哪种算法生成图像",
+    "Euler Ancestral - very creative, each can get a completely different picture depending on step count, setting steps to higher than 30-40 does not help": "Euler Ancestral - 非常有创意,可以根据迭代步数获得完全不同的图片,将迭代步数设置为高于 30-40 不会有正面作用",
+    "Denoising Diffusion Implicit Models - best at inpainting": "Denoising Diffusion Implicit models - 最擅长内补绘制",
+    "Produce an image that can be tiled.": "生成可以密铺的图像",
+    "Use a two step process to partially create an image at smaller resolution, upscale, and then improve details in it without changing composition": "使用两步处理的时候以较小的分辨率生成初步图像、接着上采样,然后在不更改合成的情况下改进其中的细节",
+    "Determines how little respect the algorithm should have for image's content. At 0, nothing will change, and at 1 you'll get an unrelated image. With values below 1.0, processing will take less steps than the Sampling Steps slider specifies.": "决定算法对图像内容的影响程度。 设置 0 时,什么都不会改变,而在 1 时,你将获得不相关的图像。 值低于 1.0 时,处理的迭代步数将少于“采样迭代步数”滑块指定的步数",
+    "How many batches of images to create": "创建多少批次的图像",
+    "How many image to create in a single batch": "每批创建多少图像",
+    "Classifier Free Guidance Scale - how strongly the image should conform to prompt - lower values produce more creative results": "Classifier Free Guidance Scale - 图像应在多大程度上服从提示词 - 较低的值会产生更有创意的结果",
+    "A value that determines the output of random number generator - if you create an image with same parameters and seed as another image, you'll get the same result": "一个固定随机数生成器输出的值 - 以相同参数和种子生成的图像会得到相同的结果",
+    "Set seed to -1, which will cause a new random number to be used every time": "将种子设置为-1,则每次都会使用一个新的随机数",
+    "Reuse seed from last generation, mostly useful if it was randomed": "重用上一次使用的种子,如果它是随机的就有用",
+    "Seed of a different picture to be mixed into the generation.": "将要参与生成的另一张图的种子",
+    "How strong of a variation to produce. At 0, there will be no effect. At 1, you will get the complete picture with variation seed (except for ancestral samplers, where you will just get something).": "想要产生多强烈的变化。 设为 0 时,将没有效果。 设为 1 时,你将获得完全产自偏差种子的图片(ancestral 采样器除外,你只是生成了一些东西)",
+    "Make an attempt to produce a picture similar to what would have been produced with same seed at specified resolution": "尝试生成与在指定分辨率下使用相同种子生成的图片相似的图片",
+    "This text is used to rotate the feature space of the imgs embs": "此文本用于旋转imgs embs的特征空间",
+    "Separate values for X axis using commas.": "使用逗号分隔 X 轴的值",
+    "Separate values for Y axis using commas.": "使用逗号分隔 Y 轴的值",
+    "Write image to a directory (default - log/images) and generation parameters into csv file.": "将图像写入目录(默认 - log/images)并将生成参数写入 csv 文件",
+    "Open images output directory": "打开图像输出目录",
+    "How much to blur the mask before processing, in pixels.": "处理前要对蒙版进行多强的模糊,以像素为单位",
+    "What to put inside the masked area before processing it with Stable Diffusion.": "在使用 Stable Diffusion 处理蒙版区域之前要在蒙版区域内放置什么",
+    "fill it with colors of the image": "用图像的颜色填充它",
+    "keep whatever was there originally": "保留原来的东西",
+    "fill it with latent space noise": "用 latent 空间的噪声填充它",
+    "fill it with latent space zeroes": "用 latent 空间的零填充它",
+    "Upscale masked region to target resolution, do inpainting, downscale back and paste into original image": "将蒙版区域放大到目标分辨率,做内补绘制,缩小后粘贴到原始图像中",
+    "Resize image to target resolution. Unless height and width match, you will get incorrect aspect ratio.": "将图像大小调整为目标分辨率。 除非高度和宽度匹配,否则你将获得不正确的纵横比",
+    "Resize the image so that entirety of target resolution is filled with the image. Crop parts that stick out.": "调整图像大小,使整个目标分辨率都被图像填充。 裁剪多出来的部分",
+    "Resize the image so that entirety of image is inside target resolution. Fill empty space with image's colors.": "调整图像大小,使整个图像在目标分辨率内。 用图像的颜色填充空白区域",
+    "How many times to repeat processing an image and using it as input for the next iteration": "重复处理图像多少次并将其用作下一次迭代的输入",
+    "In loopback mode, on each loop the denoising strength is multiplied by this value. <1 means decreasing variety so your sequence will converge on a fixed picture. >1 means increasing variety so your sequence will become more and more chaotic.": "在回送模式下,在每个循环中,降噪强度都会乘以该值。 <1 表示减少多样性,因此你的这一组图将集中在固定的图片上。 >1 意味着增加多样性,因此你的这一组图将变得越来越混乱",
+    "For SD upscale, how much overlap in pixels should there be between tiles. Tiles overlap so that when they are merged back into one picture, there is no clearly visible seam.": "对于 SD 超采样,图块之间应该有多少像素重叠。 图块需要重叠才可以让它们合并回一张图片时,没有清晰可见的接缝",
+    "A directory on the same machine where the server is running.": "与服务器主机上的目录",
+    "Leave blank to save images to the default path.": "留空以将图像保存到默认目录",
+    "Result = A * (1 - M) + B * M": "结果 = A * (1 - M) + B * M",
+    "Result = A + (B - C) * M": "结果 = A + (B - C) * M",
+    "1st and last digit must be 1. ex:'1, 2, 1'": "第一个和最后一个数字必须是 1。例:'1, 2, 1'",
+    "how fast should the training go. Low values will take longer to train, high values may fail to converge (not generate accurate results) and/or may break the embedding (This has happened if you see Loss: nan in the training info textbox. If this happens, you need to manually restore your embedding from an older not-broken backup).\n\nYou can set a single numeric value, or multiple learning rates using the syntax:\n\n   rate_1:max_steps_1, rate_2:max_steps_2, ...\n\nEG:   0.005:100, 1e-3:1000, 1e-5\n\nWill train with rate of 0.005 for first 100 steps, then 1e-3 until 1000 steps, then 1e-5 for all remaining steps.": "训练应该多快。 低值将需要更长的时间来训练,高值可能无法收敛(无法产生准确的结果)以及/也许可能会破坏 embedding(如果你在训练信息文本框中看到 Loss: nan 就会发生这种情况。如果发生这种情况,你需要从较旧的未损坏的备份手动恢复 embedding)\n\n你可以使用以下语法设置单个数值或多个学习率:\n\n   率1:步限1, 率2:步限2, ...\n\n如:   0.005:100, 1e-3:1000, 1e-5\n\n即前 100 步将以 0.005 的速率训练,接着直到 1000 步为止以 1e-3 训练,然后剩余所有步以 1e-5 训练",
+    "Path to directory with input images": "带有输入图像的目录",
+    "Path to directory where to write outputs": "进行输出的目录",
+    "Use following tags to define how filenames for images are chosen: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; leave empty for default.": "使用以下标签定义如何选择图像的文件名: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; 默认请留空",
+    "If this option is enabled, watermark will not be added to created images. Warning: if you do not add watermark, you may be behaving in an unethical manner.": "如果启用此选项,水印将不会添加到生成出来的图像中。 警告:如果你不添加水印,你的行为可能是不符合专业操守的",
+    "Use following tags to define how subdirectories for images and grids are chosen: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; leave empty for default.": "使用以下标签定义如何选择图像和概览图的子目录: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; 默认请留空",
+    "Restore low quality faces using GFPGAN neural network": "使用 GFPGAN 神经网络恢复低质量人脸",
+    "This regular expression will be used extract words from filename, and they will be joined using the option below into label text used for training. Leave empty to keep filename text as it is.": "此正则表达式将用于从文件名中提取单词,并将使用以下选项将它们接合到用于训练的标签文本中。 留空以保持文件名文本不变",
+    "This string will be used to join split words into a single line if the option above is enabled.": "如果启用了上述选项,则此处的字符会用于将拆分的单词接合为同一行",
+    "List of setting names, separated by commas, for settings that should go to the quick access bar at the top, rather than the usual setting tab. See modules/shared.py for setting names. Requires restarting to apply.": "设置名称列表,以逗号分隔,设置应转到顶部的快速访问栏,而不是通常的设置选项卡。 有关设置名称,请参见 modules/shared.py。 需要重新启动才能应用",
+    "If this values is non-zero, it will be added to seed and used to initialize RNG for noises when using samplers with Eta. You can use this to produce even more variation of images, or you can use this to match images of other software if you know what you are doing.": "如果这个值不为零,它将被添加到随机种子中,并在使用带有 Eta 的采样器时用于初始化随机噪声你可以使用它来产生更多的图像变化,或者你可以使用它来模仿其他软件生成的图像,如果你知道你在做什么",
+    "Enable Autocomplete": "开启Tag补全",
+    "Allowed categories for random artists selection when using the Roll button": "使用抽选艺术家按钮时将会随机的艺术家类别",
+    "Roll three": "抽三位出來",
+    "Generate forever": "不停地生成",
+    "Cancel generate forever": "取消不停地生成"
+}

From 5784aae925feed97a6325cd16ccfec0488ccd40f Mon Sep 17 00:00:00 2001
From: dtlnor <dtlnor@hotmail.com>
Date: Sat, 22 Oct 2022 21:58:23 +0900
Subject: [PATCH 47/73] Update zh-hans.json

---
 localizations/zh-hans.json | 75 ++++++++++++++++++++++++--------------
 1 file changed, 47 insertions(+), 28 deletions(-)

diff --git a/localizations/zh-hans.json b/localizations/zh-hans.json
index 113df5f7..e2e175e2 100644
--- a/localizations/zh-hans.json
+++ b/localizations/zh-hans.json
@@ -8,15 +8,17 @@
     "view": "查看",
     "api": "api",
     "•": "•",
-    "built with gradio": "基于 Gradio 库编译",
+    "built with gradio": "基于 Gradio 构建",
     "Stable Diffusion checkpoint": "Stable Diffusion 模型(ckpt)",
     "txt2img": "文转图",
     "img2img": "图转图",
     "Extras": "后处理",
     "PNG Info": "PNG 信息",
+    "Image Browser": "图库浏览器",
     "History": "历史记录",
     "Checkpoint Merger": "模型(ckpt)合并工具",
     "Train": "训练",
+    "Create aesthetic embedding": "生成美术风格 embedding",
     "Settings": "设置",
     "Prompt": "提示词",
     "Negative prompt": "否定提示词",
@@ -67,15 +69,15 @@
     "Variation strength": "差异强度",
     "Resize seed from width": "自宽度缩放种子",
     "Resize seed from height": "自高度缩放种子",
-    "Open for Clip Aesthetic!": "打开美学Clip!",
+    "Open for Clip Aesthetic!": "打开美术风格 Clip!",
     "▼": "▼",
-    "Aesthetic weight": "美学权重",
-    "Aesthetic steps": "美学迭代步数",
-    "Aesthetic learning rate": "美学学习率",
+    "Aesthetic weight": "美术风格权重",
+    "Aesthetic steps": "美术风格迭代步数",
+    "Aesthetic learning rate": "美术风格学习率",
     "Slerp interpolation": "Slerp 插值",
-    "Aesthetic imgs embedding": "美学图片 embedding",
+    "Aesthetic imgs embedding": "美术风格图像 embedding",
     "None": "无",
-    "Aesthetic text for imgs": "描述图片的美学文字",
+    "Aesthetic text for imgs": "描述图像的美术风格文字",
     "Slerp angle": "Slerp 角度",
     "Is negative text": "是否定类文字",
     "Script": "脚本",
@@ -134,8 +136,8 @@
     "Masked content": "蒙版蒙住的内容",
     "fill": "填空",
     "original": "原图",
-    "latent noise": "latent noise",
-    "latent nothing": "latent nothing",
+    "latent noise": "潜空间噪声",
+    "latent nothing": "潜空间数值零",
     "Inpaint at full resolution": "以完整分辨率进行内补绘制",
     "Inpaint at full resolution padding, pixels": "以完整分辨率进行内补绘制 - 填空像素",
     "Process images in a directory on the same machine where the server is running.": "在服务器主机上的目录中处理图像",
@@ -151,7 +153,7 @@
     "Loopback": "回送",
     "Outpainting mk2": "外补绘制第二版",
     "Poor man's outpainting": "Poor man 的外补绘制",
-    "SD upscale": "SD 超采样",
+    "SD upscale": "使用 SD 放大(SD upscale)",
     "should be 2 or lower.": "必须小于等于2",
     "Override `Sampling method` to Euler?(this method is built for it)": "覆写 `采样方法` 为 Euler?(这个方法就是为这样做设计的)",
     "Override `prompt` to the same value as `original prompt`?(and `negative prompt`)": "覆写 `提示词` 为 `原始提示词`?(包括`否定提示词`)",
@@ -167,7 +169,7 @@
     "Denoising strength change factor": "降噪强度的调整因数",
     "Recommended settings: Sampling Steps: 80-100, Sampler: Euler a, Denoising strength: 0.8": "推荐设置:采样迭代步数:80-100,采样器:Euler a,降噪强度:0.8",
     "Pixels to expand": "拓展的像素",
-    "Outpainting direction": "外填充的方向",
+    "Outpainting direction": "外补绘制的方向",
     "left": "左",
     "right": "右",
     "up": "上",
@@ -205,6 +207,12 @@
     "img2img history": "图转图历史记录",
     "extras history": "后处理历史记录",
     "Renew Page": "刷新页面",
+    "extras": "后处理",
+    "favorites": "我的收藏",
+    "Load": "载入",
+    "Images directory": "图像路径",
+    "Prev batch": "上一批",
+    "Next batch": "下一批",
     "First Page": "第一页",
     "Prev Page": "上一页",
     "Page Index": "页数",
@@ -214,7 +222,12 @@
     "Delete": "删除",
     "Generate Info": "生成信息",
     "File Name": "文件名",
+    "Collect": "收藏",
+    "Refresh page": "刷新页面",
+    "Date to": "日期至",
+    "Number": "数量",
     "set_index": "设置索引",
+    "Checkbox": "勾选框",
     "A merger of the two checkpoints will be generated in your": "合并后的模型(ckpt)会生成在你的",
     "checkpoint": "模型(ckpt)",
     "directory.": "目录",
@@ -229,21 +242,20 @@
     "Save as float16": "以 float16 储存",
     "See": "查看",
     "wiki": "wiki",
-    "for detailed explanation.": "想看详细解释的话",
+    "for detailed explanation.": "以了解详细说明",
     "Create embedding": "生成 embedding",
-    "Create aesthetic images embedding": "生成美学图片 embedding",
+    "Create aesthetic images embedding": "生成美术风格图像 embedding",
     "Create hypernetwork": "生成 hypernetwork",
     "Preprocess images": "图像预处理",
     "Name": "名称",
     "Initialization text": "初始化文字",
-    "Number of vectors per token": "每个令牌(token)的向量数",
+    "Number of vectors per token": "每个 token 的向量数",
     "Overwrite Old Embedding": "覆写旧的 Embedding",
     "Source directory": "源目录",
-    "Create images embedding": "生成 embedding 图片",
-    "Modules": "模组",
+    "Modules": "模块",
     "Enter hypernetwork layer structure": "输入 hypernetwork 层结构",
     "Add layer normalization": "添加层标准化",
-    "Overwrite Old Hypernetwork": "Overwrite Old Hypernetwork",
+    "Overwrite Old Hypernetwork": "覆写旧的 Hypernetwork",
     "Select activation function of hypernetwork": "选择 hypernetwork 的激活函数",
     "linear": "linear",
     "relu": "relu",
@@ -275,10 +287,12 @@
     "Max steps": "最大迭代步数",
     "Save an image to log directory every N steps, 0 to disable": "每 N 步保存一个图像到日志目录,0 表示禁用",
     "Save a copy of embedding to log directory every N steps, 0 to disable": "每 N 步将 embedding 的副本保存到日志目录,0 表示禁用",
-    "Save images with embedding in PNG chunks": "保存图像並在 PNG 文件中嵌入 embedding 文件",
+    "Save images with embedding in PNG chunks": "保存图像并在 PNG 文件中嵌入 embedding 文件",
     "Read parameters (prompt, etc...) from txt2img tab when making previews": "进行预览时从文转图选项卡中读取参数(提示词等)",
     "Train Hypernetwork": "训练 Hypernetwork",
     "Train Embedding": "训练 Embedding",
+    "Create an aesthetic embedding out of any number of images": "从任意数量的图像中创建美术风格 embedding",
+    "Create images embedding": "生成 embedding 图像",
     "Apply settings": "保存设置",
     "Saving images/grids": "保存图像/概览图",
     "Always save all generated images": "始终保存所有生成的图像",
@@ -320,7 +334,7 @@
     "Tile overlap, in pixels for SwinIR. Low values = visible seam.": "密铺重叠,以 SwinIR 的像素为单位。 低值 = 可见接缝",
     "LDSR processing steps. Lower = faster": "LDSR 处理迭代步数。 更低 = 更快",
     "Upscaler for img2img": "图转图的放大器",
-    "Upscale latent space image when doing hires. fix": "做高分辨率修复时也放大 latent 空间图像",
+    "Upscale latent space image when doing hires. fix": "做高分辨率修复时也放大潜空间图像",
     "Face restoration": "面部修复",
     "CodeFormer weight parameter; 0 = maximum effect; 1 = minimum effect": "CodeFormer 权重参数; 0 = 最大效果; 1 = 最小效果",
     "Move face restoration model from VRAM into RAM after processing": "人脸修复处理完成后将人脸修复模型从显存(VRAM)移至内存(RAM)",
@@ -345,7 +359,7 @@
     "Emphasis: use (text) to make model pay more attention to text and [text] to make it pay less attention": "强调符:使用 (文字) 使模型更关注该文本,使用 [文字] 使其减少关注",
     "Use old emphasis implementation. Can be useful to reproduce old seeds.": "使用旧的强调符实现。 可用于复现旧种子",
     "Make K-diffusion samplers produce same images in a batch as when making a single image": "使 K-diffusion 采样器批量生成与生成单个图像时产出相同的图像",
-    "Increase coherency by padding from the last comma within n tokens when using more than 75 tokens": "当使用超过 75 个令牌(token)时,通过从 n 个令牌(token)中的最后一个逗号填空来提高一致性",
+    "Increase coherency by padding from the last comma within n tokens when using more than 75 tokens": "当使用超过 75 个 token 时,通过从 n 个 token 中的最后一个逗号填空来提高一致性",
     "Filter NSFW content": "过滤成人内容",
     "Stop At last layers of CLIP model": "在 CLIP 模型的最后哪一层停下",
     "Interrogate Options": "逆向生成提示词选项",
@@ -385,6 +399,11 @@
     "sigma tmin": "最小(tmin) sigma",
     "sigma noise": "sigma 噪声",
     "Eta noise seed delta": "Eta 噪声种子偏移(noise seed delta)",
+    "Images Browser": "图库浏览器",
+    "Preload images at startup": "在启动时预载图像",
+    "Number of pictures displayed on each page": "每页显示的图像数量",
+    "Minimum number of pages per load": "每次加载的最小页数",
+    "Number of grids in each row": "每行显示多少格",
     "Request browser notifications": "请求浏览器通知",
     "Download localization template": "下载本地化模板",
     "Reload custom script bodies (No ui updates, No restart)": "重新加载自定义脚本主体(无 ui 更新,无重启)",
@@ -400,7 +419,7 @@
     "Style to apply; styles have components for both positive and negative prompts and apply to both": "要应用的模版风格; 模版风格包含正面和负面提示词,并应用于两者",
     "Do not do anything special": "并没有做什么特别的事情",
     "Which algorithm to use to produce the image": "使用哪种算法生成图像",
-    "Euler Ancestral - very creative, each can get a completely different picture depending on step count, setting steps to higher than 30-40 does not help": "Euler Ancestral - 非常有创意,可以根据迭代步数获得完全不同的图片,将迭代步数设置为高于 30-40 不会有正面作用",
+    "Euler Ancestral - very creative, each can get a completely different picture depending on step count, setting steps to higher than 30-40 does not help": "Euler Ancestral - 非常有创意,可以根据迭代步数获得完全不同的图像,将迭代步数设置为高于 30-40 不会有正面作用",
     "Denoising Diffusion Implicit Models - best at inpainting": "Denoising Diffusion Implicit models - 最擅长内补绘制",
     "Produce an image that can be tiled.": "生成可以密铺的图像",
     "Use a two step process to partially create an image at smaller resolution, upscale, and then improve details in it without changing composition": "使用两步处理的时候以较小的分辨率生成初步图像、接着上采样,然后在不更改合成的情况下改进其中的细节",
@@ -412,9 +431,9 @@
     "Set seed to -1, which will cause a new random number to be used every time": "将种子设置为-1,则每次都会使用一个新的随机数",
     "Reuse seed from last generation, mostly useful if it was randomed": "重用上一次使用的种子,如果它是随机的就有用",
     "Seed of a different picture to be mixed into the generation.": "将要参与生成的另一张图的种子",
-    "How strong of a variation to produce. At 0, there will be no effect. At 1, you will get the complete picture with variation seed (except for ancestral samplers, where you will just get something).": "想要产生多强烈的变化。 设为 0 时,将没有效果。 设为 1 时,你将获得完全产自偏差种子的图片(ancestral 采样器除外,你只是生成了一些东西)",
-    "Make an attempt to produce a picture similar to what would have been produced with same seed at specified resolution": "尝试生成与在指定分辨率下使用相同种子生成的图片相似的图片",
-    "This text is used to rotate the feature space of the imgs embs": "此文本用于旋转imgs embs的特征空间",
+    "How strong of a variation to produce. At 0, there will be no effect. At 1, you will get the complete picture with variation seed (except for ancestral samplers, where you will just get something).": "想要产生多强烈的变化。 设为 0 时,将没有效果。 设为 1 时,你将获得完全产自偏差种子的图像(ancestral 采样器除外,你只是生成了一些东西)",
+    "Make an attempt to produce a picture similar to what would have been produced with same seed at specified resolution": "尝试生成与在指定分辨率下使用相同种子生成的图像相似的图片",
+    "This text is used to rotate the feature space of the imgs embs": "此文本用于旋转图像 embeddings 的特征空间",
     "Separate values for X axis using commas.": "使用逗号分隔 X 轴的值",
     "Separate values for Y axis using commas.": "使用逗号分隔 Y 轴的值",
     "Write image to a directory (default - log/images) and generation parameters into csv file.": "将图像写入目录(默认 - log/images)并将生成参数写入 csv 文件",
@@ -423,15 +442,15 @@
     "What to put inside the masked area before processing it with Stable Diffusion.": "在使用 Stable Diffusion 处理蒙版区域之前要在蒙版区域内放置什么",
     "fill it with colors of the image": "用图像的颜色填充它",
     "keep whatever was there originally": "保留原来的东西",
-    "fill it with latent space noise": "用 latent 空间的噪声填充它",
-    "fill it with latent space zeroes": "用 latent 空间的零填充它",
+    "fill it with latent space noise": "用潜空间的噪声填充它",
+    "fill it with latent space zeroes": "用潜空间的零填充它",
     "Upscale masked region to target resolution, do inpainting, downscale back and paste into original image": "将蒙版区域放大到目标分辨率,做内补绘制,缩小后粘贴到原始图像中",
     "Resize image to target resolution. Unless height and width match, you will get incorrect aspect ratio.": "将图像大小调整为目标分辨率。 除非高度和宽度匹配,否则你将获得不正确的纵横比",
     "Resize the image so that entirety of target resolution is filled with the image. Crop parts that stick out.": "调整图像大小,使整个目标分辨率都被图像填充。 裁剪多出来的部分",
     "Resize the image so that entirety of image is inside target resolution. Fill empty space with image's colors.": "调整图像大小,使整个图像在目标分辨率内。 用图像的颜色填充空白区域",
     "How many times to repeat processing an image and using it as input for the next iteration": "重复处理图像多少次并将其用作下一次迭代的输入",
-    "In loopback mode, on each loop the denoising strength is multiplied by this value. <1 means decreasing variety so your sequence will converge on a fixed picture. >1 means increasing variety so your sequence will become more and more chaotic.": "在回送模式下,在每个循环中,降噪强度都会乘以该值。 <1 表示减少多样性,因此你的这一组图将集中在固定的图片上。 >1 意味着增加多样性,因此你的这一组图将变得越来越混乱",
-    "For SD upscale, how much overlap in pixels should there be between tiles. Tiles overlap so that when they are merged back into one picture, there is no clearly visible seam.": "对于 SD 超采样,图块之间应该有多少像素重叠。 图块需要重叠才可以让它们合并回一张图片时,没有清晰可见的接缝",
+    "In loopback mode, on each loop the denoising strength is multiplied by this value. <1 means decreasing variety so your sequence will converge on a fixed picture. >1 means increasing variety so your sequence will become more and more chaotic.": "在回送模式下,在每个循环中,降噪强度都会乘以该值。 <1 表示减少多样性,因此你的这一组图将集中在固定的图像上。 >1 意味着增加多样性,因此你的这一组图将变得越来越混乱",
+    "For SD upscale, how much overlap in pixels should there be between tiles. Tiles overlap so that when they are merged back into one picture, there is no clearly visible seam.": "对于 SD 超采样,图块之间应该有多少像素重叠。 图块需要重叠才可以让它们合并回一张图像时,没有清晰可见的接缝",
     "A directory on the same machine where the server is running.": "与服务器主机上的目录",
     "Leave blank to save images to the default path.": "留空以将图像保存到默认目录",
     "Result = A * (1 - M) + B * M": "结果 = A * (1 - M) + B * M",

From 046bb3b16aac1f7c5fb3c93604c03bd6e74e0b16 Mon Sep 17 00:00:00 2001
From: dtlnor <dtlnor@hotmail.com>
Date: Sat, 22 Oct 2022 23:58:01 +0900
Subject: [PATCH 48/73] Update zh-hans.json

- fix translation of Tile / Tiling
- fix translation of Negative prompt
---
 localizations/zh-hans.json | 30 +++++++++++++++---------------
 1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/localizations/zh-hans.json b/localizations/zh-hans.json
index e2e175e2..1a9fc731 100644
--- a/localizations/zh-hans.json
+++ b/localizations/zh-hans.json
@@ -21,9 +21,9 @@
     "Create aesthetic embedding": "生成美术风格 embedding",
     "Settings": "设置",
     "Prompt": "提示词",
-    "Negative prompt": "否定提示词",
+    "Negative prompt": "反向提示词",
     "Run": "运行",
-    "Skip": "略过",
+    "Skip": "跳过",
     "Interrupt": "中断",
     "Generate": "生成",
     "Style 1": "模版风格 1",
@@ -55,7 +55,7 @@
     "Width": "宽度",
     "Height": "高度",
     "Restore faces": "面部修复",
-    "Tiling": "密铺",
+    "Tiling": "分块(Tiling)",
     "Highres. fix": "高分辨率修复",
     "Firstpass width": "第一遍宽度",
     "Firstpass height": "第一遍高度",
@@ -156,9 +156,9 @@
     "SD upscale": "使用 SD 放大(SD upscale)",
     "should be 2 or lower.": "必须小于等于2",
     "Override `Sampling method` to Euler?(this method is built for it)": "覆写 `采样方法` 为 Euler?(这个方法就是为这样做设计的)",
-    "Override `prompt` to the same value as `original prompt`?(and `negative prompt`)": "覆写 `提示词` 为 `原始提示词`?(包括`否定提示词`)",
+    "Override `prompt` to the same value as `original prompt`?(and `negative prompt`)": "覆写 `提示词` 为 `原始提示词`?(包括`反向提示词`)",
     "Original prompt": "原始提示词",
-    "Original negative prompt": "原始否定提示词",
+    "Original negative prompt": "原始反向提示词",
     "Override `Sampling Steps` to the same value as `Decode steps`?": "覆写 `采样迭代步数` 为 `解码迭代步数`?",
     "Decode steps": "解码迭代步数",
     "Override `Denoising strength` to 1?": "覆写 `降噪强度` 为 1?",
@@ -176,8 +176,8 @@
     "down": "下",
     "Fall-off exponent (lower=higher detail)": "衰减指数(低=高细节)",
     "Color variation": "色彩变化",
-    "Will upscale the image to twice the dimensions; use width and height sliders to set tile size": "将图像放大到两倍尺寸; 使用宽度和高度滑块设置密铺大小",
-    "Tile overlap": "密铺重叠像素",
+    "Will upscale the image to twice the dimensions; use width and height sliders to set tile size": "将图像放大到两倍尺寸; 使用宽度和高度滑块设置图块大小(tile size)",
+    "Tile overlap": "图块重叠的像素(Tile overlap)",
     "Upscaler": "放大算法",
     "Lanczos": "Lanczos",
     "LDSR": "LDSR",
@@ -328,10 +328,10 @@
     "Directory name pattern": "目录名称格式",
     "Max prompt words for [prompt_words] pattern": "[prompt_words] 格式的最大提示词数量",
     "Upscaling": "放大",
-    "Tile size for ESRGAN upscalers. 0 = no tiling.": "ESRGAN 的密铺大小。 0 = 不密铺",
-    "Tile overlap, in pixels for ESRGAN upscalers. Low values = visible seam.": "密铺重叠,以 ESRGAN 的像素为单位。 低值 = 可见接缝",
-    "Tile size for all SwinIR.": "所有 SwinIR 的密铺尺寸",
-    "Tile overlap, in pixels for SwinIR. Low values = visible seam.": "密铺重叠,以 SwinIR 的像素为单位。 低值 = 可见接缝",
+    "Tile size for ESRGAN upscalers. 0 = no tiling.": "ESRGAN 的图块大小(Tile size)。 0 = 不分块(no tiling)",
+    "Tile overlap, in pixels for ESRGAN upscalers. Low values = visible seam.": "图块重叠(Tile overlap),以 ESRGAN 的像素为单位。 低值 = 可见接缝",
+    "Tile size for all SwinIR.": "所有 SwinIR 的图块尺寸(Tile size)",
+    "Tile overlap, in pixels for SwinIR. Low values = visible seam.": "图块重叠(Tile overlap),以 SwinIR 的像素为单位。 低值 = 可见接缝",
     "LDSR processing steps. Lower = faster": "LDSR 处理迭代步数。 更低 = 更快",
     "Upscaler for img2img": "图转图的放大器",
     "Upscale latent space image when doing hires. fix": "做高分辨率修复时也放大潜空间图像",
@@ -409,19 +409,19 @@
     "Reload custom script bodies (No ui updates, No restart)": "重新加载自定义脚本主体(无 ui 更新,无重启)",
     "Restart Gradio and Refresh components (Custom Scripts, ui.py, js and css only)": "重启 Gradio 及刷新组件(仅限自定义脚本、ui.py、js 和 css)",
     "Prompt (press Ctrl+Enter or Alt+Enter to generate)": "提示词(按 Ctrl+Enter 或 Alt+Enter 生成)",
-    "Negative prompt (press Ctrl+Enter or Alt+Enter to generate)": "否定提示词(按 Ctrl+Enter 或 Alt+Enter 生成)",
+    "Negative prompt (press Ctrl+Enter or Alt+Enter to generate)": "反向提示词(按 Ctrl+Enter 或 Alt+Enter 生成)",
     "Add a random artist to the prompt.": "随机添加一个艺术家到提示词中",
     "Read generation parameters from prompt or last generation if prompt is empty into user interface.": "从提示词中读取生成参数,如果提示词为空,则读取上一次的生成参数到用户界面",
     "Save style": "储存为模版风格",
     "Apply selected styles to current prompt": "将所选样式应用于当前提示",
     "Stop processing current image and continue processing.": "停止处理当前图像并继续处理下一个",
     "Stop processing images and return any results accumulated so far.": "停止处理图像并返回迄今为止累积的任何结果",
-    "Style to apply; styles have components for both positive and negative prompts and apply to both": "要应用的模版风格; 模版风格包含正面和负面提示词,并应用于两者",
+    "Style to apply; styles have components for both positive and negative prompts and apply to both": "要应用的模版风格; 模版风格包含正向和反向提示词,并应用于两者",
     "Do not do anything special": "并没有做什么特别的事情",
     "Which algorithm to use to produce the image": "使用哪种算法生成图像",
     "Euler Ancestral - very creative, each can get a completely different picture depending on step count, setting steps to higher than 30-40 does not help": "Euler Ancestral - 非常有创意,可以根据迭代步数获得完全不同的图像,将迭代步数设置为高于 30-40 不会有正面作用",
     "Denoising Diffusion Implicit Models - best at inpainting": "Denoising Diffusion Implicit models - 最擅长内补绘制",
-    "Produce an image that can be tiled.": "生成可以密铺的图像",
+    "Produce an image that can be tiled.": "生成可以分块(Tiling)的图像",
     "Use a two step process to partially create an image at smaller resolution, upscale, and then improve details in it without changing composition": "使用两步处理的时候以较小的分辨率生成初步图像、接着上采样,然后在不更改合成的情况下改进其中的细节",
     "Determines how little respect the algorithm should have for image's content. At 0, nothing will change, and at 1 you'll get an unrelated image. With values below 1.0, processing will take less steps than the Sampling Steps slider specifies.": "决定算法对图像内容的影响程度。 设置 0 时,什么都不会改变,而在 1 时,你将获得不相关的图像。 值低于 1.0 时,处理的迭代步数将少于“采样迭代步数”滑块指定的步数",
     "How many batches of images to create": "创建多少批次的图像",
@@ -450,7 +450,7 @@
     "Resize the image so that entirety of image is inside target resolution. Fill empty space with image's colors.": "调整图像大小,使整个图像在目标分辨率内。 用图像的颜色填充空白区域",
     "How many times to repeat processing an image and using it as input for the next iteration": "重复处理图像多少次并将其用作下一次迭代的输入",
     "In loopback mode, on each loop the denoising strength is multiplied by this value. <1 means decreasing variety so your sequence will converge on a fixed picture. >1 means increasing variety so your sequence will become more and more chaotic.": "在回送模式下,在每个循环中,降噪强度都会乘以该值。 <1 表示减少多样性,因此你的这一组图将集中在固定的图像上。 >1 意味着增加多样性,因此你的这一组图将变得越来越混乱",
-    "For SD upscale, how much overlap in pixels should there be between tiles. Tiles overlap so that when they are merged back into one picture, there is no clearly visible seam.": "对于 SD 超采样,图块之间应该有多少像素重叠。 图块需要重叠才可以让它们合并回一张图像时,没有清晰可见的接缝",
+    "For SD upscale, how much overlap in pixels should there be between tiles. Tiles overlap so that when they are merged back into one picture, there is no clearly visible seam.": "对于 SD 超采样,图块(Tiles)之间应该有多少像素重叠。 图块(Tiles)需要重叠才可以让它们合并回一张图像时,没有清晰可见的接缝",
     "A directory on the same machine where the server is running.": "与服务器主机上的目录",
     "Leave blank to save images to the default path.": "留空以将图像保存到默认目录",
     "Result = A * (1 - M) + B * M": "结果 = A * (1 - M) + B * M",

From 69576d3398a1cc9a091ce1b24acadc404091ab39 Mon Sep 17 00:00:00 2001
From: dtlnor <dtlnor@hotmail.com>
Date: Sun, 23 Oct 2022 03:16:44 +0900
Subject: [PATCH 49/73] Update zh-hans.json

- unify the translation of upscale / upscaler
- unify the translation of seed / random seed
- correct images embedding's translation
---
 localizations/zh-hans.json | 42 +++++++++++++++++++-------------------
 1 file changed, 21 insertions(+), 21 deletions(-)

diff --git a/localizations/zh-hans.json b/localizations/zh-hans.json
index 1a9fc731..1bce1dae 100644
--- a/localizations/zh-hans.json
+++ b/localizations/zh-hans.json
@@ -67,19 +67,19 @@
     "Extra": "额外参数",
     "Variation seed": "差异随机种子",
     "Variation strength": "差异强度",
-    "Resize seed from width": "自宽度缩放种子",
-    "Resize seed from height": "自高度缩放种子",
+    "Resize seed from width": "自宽度缩放随机种子",
+    "Resize seed from height": "自高度缩放随机种子",
     "Open for Clip Aesthetic!": "打开美术风格 Clip!",
     "▼": "▼",
     "Aesthetic weight": "美术风格权重",
     "Aesthetic steps": "美术风格迭代步数",
     "Aesthetic learning rate": "美术风格学习率",
     "Slerp interpolation": "Slerp 插值",
-    "Aesthetic imgs embedding": "美术风格图像 embedding",
+    "Aesthetic imgs embedding": "美术风格 图类 embedding",
     "None": "无",
-    "Aesthetic text for imgs": "描述图像的美术风格文字",
+    "Aesthetic text for imgs": "用于 图类 embedding 的美术风格描述",
     "Slerp angle": "Slerp 角度",
-    "Is negative text": "是否定类文字",
+    "Is negative text": "属于否定类文字",
     "Script": "脚本",
     "Prompt matrix": "提示词矩阵",
     "Prompts from file or textbox": "来自文本框或文件载入提示词",
@@ -90,7 +90,7 @@
     "Prompts": "提示词",
     "X type": "X轴类型",
     "Nothing": "无",
-    "Var. seed": "差异种子",
+    "Var. seed": "差异随机种子",
     "Var. strength": "差异强度",
     "Steps": "迭代步数",
     "Prompt S/R": "提示词替换",
@@ -244,7 +244,7 @@
     "wiki": "wiki",
     "for detailed explanation.": "以了解详细说明",
     "Create embedding": "生成 embedding",
-    "Create aesthetic images embedding": "生成美术风格图像 embedding",
+    "Create aesthetic images embedding": "生成美术风格 图类 embedding",
     "Create hypernetwork": "生成 hypernetwork",
     "Preprocess images": "图像预处理",
     "Name": "名称",
@@ -292,7 +292,7 @@
     "Train Hypernetwork": "训练 Hypernetwork",
     "Train Embedding": "训练 Embedding",
     "Create an aesthetic embedding out of any number of images": "从任意数量的图像中创建美术风格 embedding",
-    "Create images embedding": "生成 embedding 图像",
+    "Create images embedding": "生成 图类 embedding",
     "Apply settings": "保存设置",
     "Saving images/grids": "保存图像/概览图",
     "Always save all generated images": "始终保存所有生成的图像",
@@ -300,7 +300,7 @@
     "Images filename pattern": "图像文件名格式",
     "Always save all generated image grids": "始终保存所有生成的概览图",
     "File format for grids": "概览图的文件格式",
-    "Add extended info (seed, prompt) to filename when saving grid": "保存概览时将扩展信息(种子、提示词)添加到文件名",
+    "Add extended info (seed, prompt) to filename when saving grid": "保存概览时将扩展信息(随机种子、提示词)添加到文件名",
     "Do not save grids consisting of one picture": "不要保存由一张图像组成的概览图",
     "Prevent empty spots in grid (when set to autodetect)": "防止概览图中出现空白点(设置为自动检测时)",
     "Grid row count; use -1 for autodetect and 0 for it to be same as batch size": "概览行数; 使用 -1 进行自动检测,使用 0 使其与批量大小相同",
@@ -333,7 +333,7 @@
     "Tile size for all SwinIR.": "所有 SwinIR 的图块尺寸(Tile size)",
     "Tile overlap, in pixels for SwinIR. Low values = visible seam.": "图块重叠(Tile overlap),以 SwinIR 的像素为单位。 低值 = 可见接缝",
     "LDSR processing steps. Lower = faster": "LDSR 处理迭代步数。 更低 = 更快",
-    "Upscaler for img2img": "图转图的放大器",
+    "Upscaler for img2img": "图转图的放大算法",
     "Upscale latent space image when doing hires. fix": "做高分辨率修复时也放大潜空间图像",
     "Face restoration": "面部修复",
     "CodeFormer weight parameter; 0 = maximum effect; 1 = minimum effect": "CodeFormer 权重参数; 0 = 最大效果; 1 = 最小效果",
@@ -355,9 +355,9 @@
     "Apply color correction to img2img results to match original colors.": "对图转图结果应用颜色校正以匹配原始颜色",
     "Save a copy of image before applying color correction to img2img results": "在对图转图结果应用颜色校正之前保存图像副本",
     "With img2img, do exactly the amount of steps the slider specifies (normally you'd do less with less denoising).": "在进行图转图的时候,确切地执行滑块指定的迭代步数(通常更少的降噪会做更少的迭代步数)",
-    "Enable quantization in K samplers for sharper and cleaner results. This may change existing seeds. Requires restart to apply.": "在 K 采样器中启用量化以获得更清晰、更清晰的结果。 这可能会改变现有的种子。 需要重新启动才能应用",
+    "Enable quantization in K samplers for sharper and cleaner results. This may change existing seeds. Requires restart to apply.": "在 K 采样器中启用量化以获得更清晰、更清晰的结果。 这可能会改变现有的随机种子。 需要重新启动才能应用",
     "Emphasis: use (text) to make model pay more attention to text and [text] to make it pay less attention": "强调符:使用 (文字) 使模型更关注该文本,使用 [文字] 使其减少关注",
-    "Use old emphasis implementation. Can be useful to reproduce old seeds.": "使用旧的强调符实现。 可用于复现旧种子",
+    "Use old emphasis implementation. Can be useful to reproduce old seeds.": "使用旧的强调符实现。 可用于复现旧随机种子",
     "Make K-diffusion samplers produce same images in a batch as when making a single image": "使 K-diffusion 采样器批量生成与生成单个图像时产出相同的图像",
     "Increase coherency by padding from the last comma within n tokens when using more than 75 tokens": "当使用超过 75 个 token 时,通过从 n 个 token 中的最后一个逗号填空来提高一致性",
     "Filter NSFW content": "过滤成人内容",
@@ -422,18 +422,18 @@
     "Euler Ancestral - very creative, each can get a completely different picture depending on step count, setting steps to higher than 30-40 does not help": "Euler Ancestral - 非常有创意,可以根据迭代步数获得完全不同的图像,将迭代步数设置为高于 30-40 不会有正面作用",
     "Denoising Diffusion Implicit Models - best at inpainting": "Denoising Diffusion Implicit models - 最擅长内补绘制",
     "Produce an image that can be tiled.": "生成可以分块(Tiling)的图像",
-    "Use a two step process to partially create an image at smaller resolution, upscale, and then improve details in it without changing composition": "使用两步处理的时候以较小的分辨率生成初步图像、接着上采样,然后在不更改合成的情况下改进其中的细节",
+    "Use a two step process to partially create an image at smaller resolution, upscale, and then improve details in it without changing composition": "使用两步处理的时候以较小的分辨率生成初步图像、接着放大图片,然后在不更改构图的情况下改进其中的细节",
     "Determines how little respect the algorithm should have for image's content. At 0, nothing will change, and at 1 you'll get an unrelated image. With values below 1.0, processing will take less steps than the Sampling Steps slider specifies.": "决定算法对图像内容的影响程度。 设置 0 时,什么都不会改变,而在 1 时,你将获得不相关的图像。 值低于 1.0 时,处理的迭代步数将少于“采样迭代步数”滑块指定的步数",
     "How many batches of images to create": "创建多少批次的图像",
     "How many image to create in a single batch": "每批创建多少图像",
     "Classifier Free Guidance Scale - how strongly the image should conform to prompt - lower values produce more creative results": "Classifier Free Guidance Scale - 图像应在多大程度上服从提示词 - 较低的值会产生更有创意的结果",
-    "A value that determines the output of random number generator - if you create an image with same parameters and seed as another image, you'll get the same result": "一个固定随机数生成器输出的值 - 以相同参数和种子生成的图像会得到相同的结果",
-    "Set seed to -1, which will cause a new random number to be used every time": "将种子设置为-1,则每次都会使用一个新的随机数",
-    "Reuse seed from last generation, mostly useful if it was randomed": "重用上一次使用的种子,如果它是随机的就有用",
-    "Seed of a different picture to be mixed into the generation.": "将要参与生成的另一张图的种子",
-    "How strong of a variation to produce. At 0, there will be no effect. At 1, you will get the complete picture with variation seed (except for ancestral samplers, where you will just get something).": "想要产生多强烈的变化。 设为 0 时,将没有效果。 设为 1 时,你将获得完全产自偏差种子的图像(ancestral 采样器除外,你只是生成了一些东西)",
-    "Make an attempt to produce a picture similar to what would have been produced with same seed at specified resolution": "尝试生成与在指定分辨率下使用相同种子生成的图像相似的图片",
-    "This text is used to rotate the feature space of the imgs embs": "此文本用于旋转图像 embeddings 的特征空间",
+    "A value that determines the output of random number generator - if you create an image with same parameters and seed as another image, you'll get the same result": "一个固定随机数生成器输出的值 - 以相同参数和随机种子生成的图像会得到相同的结果",
+    "Set seed to -1, which will cause a new random number to be used every time": "将随机种子设置为-1,则每次都会使用一个新的随机数",
+    "Reuse seed from last generation, mostly useful if it was randomed": "重用上一次使用的随机种子,如果它是随机出来的话就有用",
+    "Seed of a different picture to be mixed into the generation.": "将要参与生成的另一张图的随机种子",
+    "How strong of a variation to produce. At 0, there will be no effect. At 1, you will get the complete picture with variation seed (except for ancestral samplers, where you will just get something).": "想要产生多强烈的变化。 设为 0 时,将没有效果。 设为 1 时,你将获得完全产自差异随机种子的图像(ancestral 采样器除外,你只是单纯地生成了一些东西)",
+    "Make an attempt to produce a picture similar to what would have been produced with same seed at specified resolution": "尝试生成与在指定分辨率下使用相同随机种子生成的图像相似的图片",
+    "This text is used to rotate the feature space of the imgs embs": "此文本用于旋转 图类 embeddings 的特征空间",
     "Separate values for X axis using commas.": "使用逗号分隔 X 轴的值",
     "Separate values for Y axis using commas.": "使用逗号分隔 Y 轴的值",
     "Write image to a directory (default - log/images) and generation parameters into csv file.": "将图像写入目录(默认 - log/images)并将生成参数写入 csv 文件",
@@ -450,7 +450,7 @@
     "Resize the image so that entirety of image is inside target resolution. Fill empty space with image's colors.": "调整图像大小,使整个图像在目标分辨率内。 用图像的颜色填充空白区域",
     "How many times to repeat processing an image and using it as input for the next iteration": "重复处理图像多少次并将其用作下一次迭代的输入",
     "In loopback mode, on each loop the denoising strength is multiplied by this value. <1 means decreasing variety so your sequence will converge on a fixed picture. >1 means increasing variety so your sequence will become more and more chaotic.": "在回送模式下,在每个循环中,降噪强度都会乘以该值。 <1 表示减少多样性,因此你的这一组图将集中在固定的图像上。 >1 意味着增加多样性,因此你的这一组图将变得越来越混乱",
-    "For SD upscale, how much overlap in pixels should there be between tiles. Tiles overlap so that when they are merged back into one picture, there is no clearly visible seam.": "对于 SD 超采样,图块(Tiles)之间应该有多少像素重叠。 图块(Tiles)需要重叠才可以让它们合并回一张图像时,没有清晰可见的接缝",
+    "For SD upscale, how much overlap in pixels should there be between tiles. Tiles overlap so that when they are merged back into one picture, there is no clearly visible seam.": "使用 SD 放大(SD upscale)时,图块(Tiles)之间应该有多少像素重叠。 图块之间(Tiles)需要重叠才可以让它们在合并回一张图像时,没有清晰可见的接缝",
     "A directory on the same machine where the server is running.": "与服务器主机上的目录",
     "Leave blank to save images to the default path.": "留空以将图像保存到默认目录",
     "Result = A * (1 - M) + B * M": "结果 = A * (1 - M) + B * M",

From 7e6a6266ad7ec77c0e40a0f39e794532cd2c2649 Mon Sep 17 00:00:00 2001
From: dtlnor <dtlnor@hotmail.com>
Date: Sun, 23 Oct 2022 05:35:12 +0900
Subject: [PATCH 50/73] Update zh-hans.json

- update to latest
---
 localizations/zh-hans.json | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/localizations/zh-hans.json b/localizations/zh-hans.json
index 1bce1dae..2d5b4798 100644
--- a/localizations/zh-hans.json
+++ b/localizations/zh-hans.json
@@ -251,15 +251,18 @@
     "Initialization text": "初始化文字",
     "Number of vectors per token": "每个 token 的向量数",
     "Overwrite Old Embedding": "覆写旧的 Embedding",
-    "Source directory": "源目录",
     "Modules": "模块",
     "Enter hypernetwork layer structure": "输入 hypernetwork 层结构",
-    "Add layer normalization": "添加层标准化",
-    "Overwrite Old Hypernetwork": "覆写旧的 Hypernetwork",
     "Select activation function of hypernetwork": "选择 hypernetwork 的激活函数",
     "linear": "linear",
     "relu": "relu",
     "leakyrelu": "leakyrelu",
+    "elu": "elu",
+    "swish": "swish",
+    "Add layer normalization": "添加层标准化",
+    "Use dropout": "采用 dropout 防止过拟合",
+    "Overwrite Old Hypernetwork": "覆写旧的 Hypernetwork",
+    "Source directory": "源目录",
     "Destination directory": "目标目录",
     "Existing Caption txt Action": "对已有说明文字的 txt 的行为",
     "ignore": "无视",
@@ -377,6 +380,7 @@
     "User interface": "用户界面",
     "Show progressbar": "显示进度条",
     "Show image creation progress every N sampling steps. Set 0 to disable.": "每 N 个采样迭代步数显示图像生成进度。 设置 0 禁用",
+    "Show previews of all images generated in a batch as a grid": "以网格的形式预览所有批量生成出来的图片",
     "Show grid in results for web": "在网页的结果中显示概览图",
     "Do not show any images in results for web": "不在网页的结果中显示任何图像",
     "Add model hash to generation information": "将模型的哈希值添加到生成信息",
@@ -404,6 +408,8 @@
     "Number of pictures displayed on each page": "每页显示的图像数量",
     "Minimum number of pages per load": "每次加载的最小页数",
     "Number of grids in each row": "每行显示多少格",
+    "Wildcards": "通配符",
+    "Use same seed for all images": "为所有图像使用同一个随机种子",
     "Request browser notifications": "请求浏览器通知",
     "Download localization template": "下载本地化模板",
     "Reload custom script bodies (No ui updates, No restart)": "重新加载自定义脚本主体(无 ui 更新,无重启)",
@@ -453,6 +459,7 @@
     "For SD upscale, how much overlap in pixels should there be between tiles. Tiles overlap so that when they are merged back into one picture, there is no clearly visible seam.": "使用 SD 放大(SD upscale)时,图块(Tiles)之间应该有多少像素重叠。 图块之间(Tiles)需要重叠才可以让它们在合并回一张图像时,没有清晰可见的接缝",
     "A directory on the same machine where the server is running.": "与服务器主机上的目录",
     "Leave blank to save images to the default path.": "留空以将图像保存到默认目录",
+    "Input images directory": "输入图像目录",
     "Result = A * (1 - M) + B * M": "结果 = A * (1 - M) + B * M",
     "Result = A + (B - C) * M": "结果 = A + (B - C) * M",
     "1st and last digit must be 1. ex:'1, 2, 1'": "第一个和最后一个数字必须是 1。例:'1, 2, 1'",

From e05a4a90f21bf2246f805a38286be316acde7a52 Mon Sep 17 00:00:00 2001
From: dtlnor <dtlnor@hotmail.com>
Date: Sun, 23 Oct 2022 17:58:09 +0800
Subject: [PATCH 51/73] Update localizations/zh-hans.json

Co-authored-by: liggest <43201720+liggest@users.noreply.github.com>
---
 localizations/zh-hans.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/localizations/zh-hans.json b/localizations/zh-hans.json
index 2d5b4798..9d750ecb 100644
--- a/localizations/zh-hans.json
+++ b/localizations/zh-hans.json
@@ -30,7 +30,7 @@
     "Style 2": "模版风格 2",
     "Label": "标签",
     "File": "文件",
-    "Drop File Here": "拖拽文件到这里",
+    "Drop File Here": "拖拽文件到此",
     "-": "-",
     "or": "或",
     "Click to Upload": "点击上传",

From db23be8bcdec82ea26681c12ac6cd076164b47c8 Mon Sep 17 00:00:00 2001
From: dtlnor <dtlnor@hotmail.com>
Date: Sun, 23 Oct 2022 17:59:09 +0800
Subject: [PATCH 52/73] Update localizations/zh-hans.json

Co-authored-by: liggest <43201720+liggest@users.noreply.github.com>
---
 localizations/zh-hans.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/localizations/zh-hans.json b/localizations/zh-hans.json
index 9d750ecb..698e8694 100644
--- a/localizations/zh-hans.json
+++ b/localizations/zh-hans.json
@@ -202,7 +202,7 @@
     "CodeFormer visibility": "CodeFormer 可见度",
     "CodeFormer weight (0 = maximum effect, 1 = minimum effect)": "CodeFormer 权重 (0 = 最大效果, 1 = 最小效果)",
     "Open output directory": "打开输出目录",
-    "Send to txt2img": "输出到文转图",
+    "Send to txt2img": "传送到文转图",
     "txt2img history": "文转图历史记录",
     "img2img history": "图转图历史记录",
     "extras history": "后处理历史记录",

From e125f1cd2f8ab71b2caaa16bbd24aaf2a3cb470e Mon Sep 17 00:00:00 2001
From: dtlnor <dtlnor@hotmail.com>
Date: Sun, 23 Oct 2022 18:07:12 +0800
Subject: [PATCH 53/73] Update localizations/zh-hans.json

Co-authored-by: liggest <43201720+liggest@users.noreply.github.com>
---
 localizations/zh-hans.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/localizations/zh-hans.json b/localizations/zh-hans.json
index 698e8694..91e745c4 100644
--- a/localizations/zh-hans.json
+++ b/localizations/zh-hans.json
@@ -119,8 +119,8 @@
     "Send to extras": "传送到后处理",
     "Make Zip when Save?": "保存时生成压缩档?",
     "Textbox": "文本框",
-    "Interrogate\nCLIP": "推断提示词\nCLIP",
-    "Interrogate\nDeepBooru": "推断提示词\nDeepBooru",
+    "Interrogate\nCLIP": "CLIP\n逆向生成提示词",
+    "Interrogate\nDeepBooru": "DeepBooru\n逆向生成提示词",
     "Inpaint": "内补绘制",
     "Batch img2img": "批量图转图",
     "Image for img2img": "图转图的图像",

From e34653eac03aff6041fd3c32ec324b8a9d835cee Mon Sep 17 00:00:00 2001
From: dtlnor <dtlnor@hotmail.com>
Date: Sun, 23 Oct 2022 19:15:17 +0900
Subject: [PATCH 54/73] Update zh-hans.json

- fix according to https://github.com/AUTOMATIC1111/stable-diffusion-webui/pull/3348#issuecomment-1287923525
---
 localizations/zh-hans.json | 112 ++++++++++++++++++-------------------
 1 file changed, 56 insertions(+), 56 deletions(-)

diff --git a/localizations/zh-hans.json b/localizations/zh-hans.json
index 91e745c4..3fbcac6b 100644
--- a/localizations/zh-hans.json
+++ b/localizations/zh-hans.json
@@ -24,7 +24,7 @@
     "Negative prompt": "反向提示词",
     "Run": "运行",
     "Skip": "跳过",
-    "Interrupt": "中断",
+    "Interrupt": "中止",
     "Generate": "生成",
     "Style 1": "模版风格 1",
     "Style 2": "模版风格 2",
@@ -57,11 +57,11 @@
     "Restore faces": "面部修复",
     "Tiling": "分块(Tiling)",
     "Highres. fix": "高分辨率修复",
-    "Firstpass width": "第一遍宽度",
-    "Firstpass height": "第一遍高度",
+    "Firstpass width": "第一遍的宽度",
+    "Firstpass height": "第一遍的高度",
     "Denoising strength": "降噪(模糊)强度",
-    "Batch count": "批量数量",
-    "Batch size": "批量大小",
+    "Batch count": "批次",
+    "Batch size": "批量",
     "CFG Scale": "提示词相关性(CFG Scale)",
     "Seed": "随机种子",
     "Extra": "额外参数",
@@ -75,9 +75,9 @@
     "Aesthetic steps": "美术风格迭代步数",
     "Aesthetic learning rate": "美术风格学习率",
     "Slerp interpolation": "Slerp 插值",
-    "Aesthetic imgs embedding": "美术风格 图类 embedding",
+    "Aesthetic imgs embedding": "美术风格图集 embedding",
     "None": "无",
-    "Aesthetic text for imgs": "用于 图类 embedding 的美术风格描述",
+    "Aesthetic text for imgs": "用于图集的美术风格描述",
     "Slerp angle": "Slerp 角度",
     "Is negative text": "属于否定类文字",
     "Script": "脚本",
@@ -104,7 +104,7 @@
     "Sigma max": "最大 Sigma",
     "Sigma noise": "Sigma noise",
     "Eta": "Eta",
-    "Clip skip": "Clip 略过",
+    "Clip skip": "Clip 跳过",
     "Denoising": "降噪",
     "X values": "X轴数值",
     "Y type": "Y轴类型",
@@ -147,28 +147,28 @@
     "Output directory": "输出目录",
     "Resize mode": "缩放模式",
     "Just resize": "只缩放",
-    "Crop and resize": "剪裁后缩放",
+    "Crop and resize": "缩放并剪裁",
     "Resize and fill": "缩放并填空",
     "img2img alternative test": "图转图的另一种测试",
     "Loopback": "回送",
     "Outpainting mk2": "外补绘制第二版",
-    "Poor man's outpainting": "Poor man 的外补绘制",
+    "Poor man's outpainting": "效果稍差的外补绘制",
     "SD upscale": "使用 SD 放大(SD upscale)",
     "should be 2 or lower.": "必须小于等于2",
     "Override `Sampling method` to Euler?(this method is built for it)": "覆写 `采样方法` 为 Euler?(这个方法就是为这样做设计的)",
-    "Override `prompt` to the same value as `original prompt`?(and `negative prompt`)": "覆写 `提示词` 为 `原始提示词`?(包括`反向提示词`)",
-    "Original prompt": "原始提示词",
-    "Original negative prompt": "原始反向提示词",
+    "Override `prompt` to the same value as `original prompt`?(and `negative prompt`)": "覆写 `提示词` 为 `初始提示词`?(包括`反向提示词`)",
+    "Original prompt": "初始提示词",
+    "Original negative prompt": "初始反向提示词",
     "Override `Sampling Steps` to the same value as `Decode steps`?": "覆写 `采样迭代步数` 为 `解码迭代步数`?",
     "Decode steps": "解码迭代步数",
     "Override `Denoising strength` to 1?": "覆写 `降噪强度` 为 1?",
     "Decode CFG scale": "解码提示词相关性(CFG scale)",
-    "Randomness": "随机强度",
+    "Randomness": "随机度",
     "Sigma adjustment for finding noise for image": "为寻找图中噪点的 Sigma 调整",
     "Loops": "循环",
-    "Denoising strength change factor": "降噪强度的调整因数",
+    "Denoising strength change factor": "降噪强度的调整系数",
     "Recommended settings: Sampling Steps: 80-100, Sampler: Euler a, Denoising strength: 0.8": "推荐设置:采样迭代步数:80-100,采样器:Euler a,降噪强度:0.8",
-    "Pixels to expand": "拓展的像素",
+    "Pixels to expand": "拓展的像素数",
     "Outpainting direction": "外补绘制的方向",
     "left": "左",
     "right": "右",
@@ -192,8 +192,8 @@
     "Batch from Directory": "从目录进行批量处理",
     "Source": "来源",
     "Show result images": "显示输出图像",
-    "Scale by": "缩放到",
-    "Scale to": "缩放为",
+    "Scale by": "等比缩放",
+    "Scale to": "指定尺寸缩放",
     "Resize": "缩放",
     "Crop to fit": "裁剪以适应",
     "Upscaler 2": "放大算法 2",
@@ -208,9 +208,9 @@
     "extras history": "后处理历史记录",
     "Renew Page": "刷新页面",
     "extras": "后处理",
-    "favorites": "我的收藏",
+    "favorites": "收藏夹",
     "Load": "载入",
-    "Images directory": "图像路径",
+    "Images directory": "图像目录",
     "Prev batch": "上一批",
     "Next batch": "下一批",
     "First Page": "第一页",
@@ -218,7 +218,7 @@
     "Page Index": "页数",
     "Next Page": "下一页",
     "End Page": "尾页",
-    "number of images to delete consecutively next": "下一批要批量删除的图像数",
+    "number of images to delete consecutively next": "接下来要连续删除的图像数",
     "Delete": "删除",
     "Generate Info": "生成信息",
     "File Name": "文件名",
@@ -244,7 +244,7 @@
     "wiki": "wiki",
     "for detailed explanation.": "以了解详细说明",
     "Create embedding": "生成 embedding",
-    "Create aesthetic images embedding": "生成美术风格 图类 embedding",
+    "Create aesthetic images embedding": "生成美术风格图集 embedding",
     "Create hypernetwork": "生成 hypernetwork",
     "Preprocess images": "图像预处理",
     "Name": "名称",
@@ -295,7 +295,7 @@
     "Train Hypernetwork": "训练 Hypernetwork",
     "Train Embedding": "训练 Embedding",
     "Create an aesthetic embedding out of any number of images": "从任意数量的图像中创建美术风格 embedding",
-    "Create images embedding": "生成 图类 embedding",
+    "Create images embedding": "生成图集 embedding",
     "Apply settings": "保存设置",
     "Saving images/grids": "保存图像/概览图",
     "Always save all generated images": "始终保存所有生成的图像",
@@ -309,13 +309,13 @@
     "Grid row count; use -1 for autodetect and 0 for it to be same as batch size": "概览行数; 使用 -1 进行自动检测,使用 0 使其与批量大小相同",
     "Save text information about generation parameters as chunks to png files": "将有关生成参数的文本信息作为块保存到 png 文件中",
     "Create a text file next to every image with generation parameters.": "保存图像时在每个图像旁边创建一个文本文件储存生成参数",
-    "Save a copy of image before doing face restoration.": "在进行面部恢复之前保存图像副本",
+    "Save a copy of image before doing face restoration.": "在进行面部修复之前保存图像副本",
     "Quality for saved jpeg images": "保存的 jpeg 图像的质量",
     "If PNG image is larger than 4MB or any dimension is larger than 4000, downscale and save copy as JPG": "如果 PNG 图像大于 4MB 或宽高大于 4000,则缩小并保存副本为 JPG",
-    "Use original name for output filename during batch process in extras tab": "在后处理选项卡中的批处理过程中使用原始名称作为输出文件名",
+    "Use original name for output filename during batch process in extras tab": "在后处理选项卡中的批量处理过程中使用原始名称作为输出文件名",
     "When using 'Save' button, only save a single selected image": "使用“保存”按钮时,只保存一个选定的图像",
     "Do not add watermark to images": "不要给图像加水印",
-    "Paths for saving": "保存目录",
+    "Paths for saving": "保存路径",
     "Output directory for images; if empty, defaults to three directories below": "图像的输出目录; 如果为空,则默认为下面三个目录",
     "Output directory for txt2img images": "文转图的输出目录",
     "Output directory for img2img images": "图转图的输出目录",
@@ -331,25 +331,25 @@
     "Directory name pattern": "目录名称格式",
     "Max prompt words for [prompt_words] pattern": "[prompt_words] 格式的最大提示词数量",
     "Upscaling": "放大",
-    "Tile size for ESRGAN upscalers. 0 = no tiling.": "ESRGAN 的图块大小(Tile size)。 0 = 不分块(no tiling)",
-    "Tile overlap, in pixels for ESRGAN upscalers. Low values = visible seam.": "图块重叠(Tile overlap),以 ESRGAN 的像素为单位。 低值 = 可见接缝",
+    "Tile size for ESRGAN upscalers. 0 = no tiling.": "ESRGAN 的图块大小(Tile size)。0 = 不分块(no tiling)",
+    "Tile overlap, in pixels for ESRGAN upscalers. Low values = visible seam.": "图块重叠(Tile overlap),以 ESRGAN 的像素为单位。低值 = 可见接缝",
     "Tile size for all SwinIR.": "所有 SwinIR 的图块尺寸(Tile size)",
-    "Tile overlap, in pixels for SwinIR. Low values = visible seam.": "图块重叠(Tile overlap),以 SwinIR 的像素为单位。 低值 = 可见接缝",
-    "LDSR processing steps. Lower = faster": "LDSR 处理迭代步数。 更低 = 更快",
+    "Tile overlap, in pixels for SwinIR. Low values = visible seam.": "图块重叠(Tile overlap),以 SwinIR 的像素为单位。低值 = 可见接缝",
+    "LDSR processing steps. Lower = faster": "LDSR 处理迭代步数。更低 = 更快",
     "Upscaler for img2img": "图转图的放大算法",
     "Upscale latent space image when doing hires. fix": "做高分辨率修复时也放大潜空间图像",
     "Face restoration": "面部修复",
     "CodeFormer weight parameter; 0 = maximum effect; 1 = minimum effect": "CodeFormer 权重参数; 0 = 最大效果; 1 = 最小效果",
-    "Move face restoration model from VRAM into RAM after processing": "人脸修复处理完成后将人脸修复模型从显存(VRAM)移至内存(RAM)",
+    "Move face restoration model from VRAM into RAM after processing": "面部修复处理完成后将面部修复模型从显存(VRAM)移至内存(RAM)",
     "System": "系统",
-    "VRAM usage polls per second during generation. Set to 0 to disable.": "生成图像时每秒轮询显存(VRAM)使用情况的次数。 设置为 0 以禁用",
+    "VRAM usage polls per second during generation. Set to 0 to disable.": "生成图像时每秒轮询显存(VRAM)使用情况的次数。设置为 0 以禁用",
     "Always print all generation info to standard output": "始终将所有生成信息输出到 standard output (一般为控制台)",
     "Add a second progress bar to the console that shows progress for an entire job.": "向控制台添加第二个进度条,显示整个作业的进度",
     "Training": "训练",
     "Unload VAE and CLIP from VRAM when training": "训练时从显存(VRAM)中取消 VAE 和 CLIP 的加载",
     "Move VAE and CLIP to RAM when training hypernetwork. Saves VRAM.": "训练时将 VAE 和 CLIP 从显存(VRAM)移放到内存(RAM),节省显存(VRAM)",
     "Filename word regex": "文件名用词的正则表达式",
-    "Filename join string": "文件名连接用字符",
+    "Filename join string": "文件名连接用字符串",
     "Number of repeats for a single input image per epoch; used only for displaying epoch number": "每个 epoch 中单个输入图像的重复次数; 仅用于显示 epoch 数",
     "Save an csv containing the loss to log directory every N steps, 0 to disable": "每 N 步保存一个包含 loss 的 csv 到日志目录,0 表示禁用",
     "Stable Diffusion": "Stable Diffusion",
@@ -358,9 +358,9 @@
     "Apply color correction to img2img results to match original colors.": "对图转图结果应用颜色校正以匹配原始颜色",
     "Save a copy of image before applying color correction to img2img results": "在对图转图结果应用颜色校正之前保存图像副本",
     "With img2img, do exactly the amount of steps the slider specifies (normally you'd do less with less denoising).": "在进行图转图的时候,确切地执行滑块指定的迭代步数(通常更少的降噪会做更少的迭代步数)",
-    "Enable quantization in K samplers for sharper and cleaner results. This may change existing seeds. Requires restart to apply.": "在 K 采样器中启用量化以获得更清晰、更清晰的结果。 这可能会改变现有的随机种子。 需要重新启动才能应用",
+    "Enable quantization in K samplers for sharper and cleaner results. This may change existing seeds. Requires restart to apply.": "在 K 采样器中启用量化以获得更清晰、更清晰的结果。这可能会改变现有的随机种子。需要重新启动才能应用",
     "Emphasis: use (text) to make model pay more attention to text and [text] to make it pay less attention": "强调符:使用 (文字) 使模型更关注该文本,使用 [文字] 使其减少关注",
-    "Use old emphasis implementation. Can be useful to reproduce old seeds.": "使用旧的强调符实现。 可用于复现旧随机种子",
+    "Use old emphasis implementation. Can be useful to reproduce old seeds.": "使用旧的强调符实现。可用于复现旧随机种子",
     "Make K-diffusion samplers produce same images in a batch as when making a single image": "使 K-diffusion 采样器批量生成与生成单个图像时产出相同的图像",
     "Increase coherency by padding from the last comma within n tokens when using more than 75 tokens": "当使用超过 75 个 token 时,通过从 n 个 token 中的最后一个逗号填空来提高一致性",
     "Filter NSFW content": "过滤成人内容",
@@ -379,8 +379,8 @@
     "escape (\\) brackets in deepbooru (so they are used as literal brackets and not for emphasis)": "在 deepbooru 中使用转义 (\\) 括号(因此它们用作文字括号而不是强调符号)",
     "User interface": "用户界面",
     "Show progressbar": "显示进度条",
-    "Show image creation progress every N sampling steps. Set 0 to disable.": "每 N 个采样迭代步数显示图像生成进度。 设置 0 禁用",
-    "Show previews of all images generated in a batch as a grid": "以网格的形式预览所有批量生成出来的图片",
+    "Show image creation progress every N sampling steps. Set 0 to disable.": "每 N 个采样迭代步数显示图像生成进度。设置 0 禁用",
+    "Show previews of all images generated in a batch as a grid": "以网格的形式预览所有批量生成出来的图像",
     "Show grid in results for web": "在网页的结果中显示概览图",
     "Do not show any images in results for web": "不在网页的结果中显示任何图像",
     "Add model hash to generation information": "将模型的哈希值添加到生成信息",
@@ -423,13 +423,13 @@
     "Stop processing current image and continue processing.": "停止处理当前图像并继续处理下一个",
     "Stop processing images and return any results accumulated so far.": "停止处理图像并返回迄今为止累积的任何结果",
     "Style to apply; styles have components for both positive and negative prompts and apply to both": "要应用的模版风格; 模版风格包含正向和反向提示词,并应用于两者",
-    "Do not do anything special": "并没有做什么特别的事情",
+    "Do not do anything special": "什么都不做",
     "Which algorithm to use to produce the image": "使用哪种算法生成图像",
     "Euler Ancestral - very creative, each can get a completely different picture depending on step count, setting steps to higher than 30-40 does not help": "Euler Ancestral - 非常有创意,可以根据迭代步数获得完全不同的图像,将迭代步数设置为高于 30-40 不会有正面作用",
     "Denoising Diffusion Implicit Models - best at inpainting": "Denoising Diffusion Implicit models - 最擅长内补绘制",
     "Produce an image that can be tiled.": "生成可以分块(Tiling)的图像",
-    "Use a two step process to partially create an image at smaller resolution, upscale, and then improve details in it without changing composition": "使用两步处理的时候以较小的分辨率生成初步图像、接着放大图片,然后在不更改构图的情况下改进其中的细节",
-    "Determines how little respect the algorithm should have for image's content. At 0, nothing will change, and at 1 you'll get an unrelated image. With values below 1.0, processing will take less steps than the Sampling Steps slider specifies.": "决定算法对图像内容的影响程度。 设置 0 时,什么都不会改变,而在 1 时,你将获得不相关的图像。 值低于 1.0 时,处理的迭代步数将少于“采样迭代步数”滑块指定的步数",
+    "Use a two step process to partially create an image at smaller resolution, upscale, and then improve details in it without changing composition": "使用两步处理的时候以较小的分辨率生成初步图像、接着放大图像,然后在不更改构图的情况下改进其中的细节",
+    "Determines how little respect the algorithm should have for image's content. At 0, nothing will change, and at 1 you'll get an unrelated image. With values below 1.0, processing will take less steps than the Sampling Steps slider specifies.": "决定算法对图像内容的影响程度。设置 0 时,什么都不会改变,而在 1 时,你将获得不相关的图像。值低于 1.0 时,处理的迭代步数将少于“采样迭代步数”滑块指定的步数",
     "How many batches of images to create": "创建多少批次的图像",
     "How many image to create in a single batch": "每批创建多少图像",
     "Classifier Free Guidance Scale - how strongly the image should conform to prompt - lower values produce more creative results": "Classifier Free Guidance Scale - 图像应在多大程度上服从提示词 - 较低的值会产生更有创意的结果",
@@ -437,9 +437,9 @@
     "Set seed to -1, which will cause a new random number to be used every time": "将随机种子设置为-1,则每次都会使用一个新的随机数",
     "Reuse seed from last generation, mostly useful if it was randomed": "重用上一次使用的随机种子,如果它是随机出来的话就有用",
     "Seed of a different picture to be mixed into the generation.": "将要参与生成的另一张图的随机种子",
-    "How strong of a variation to produce. At 0, there will be no effect. At 1, you will get the complete picture with variation seed (except for ancestral samplers, where you will just get something).": "想要产生多强烈的变化。 设为 0 时,将没有效果。 设为 1 时,你将获得完全产自差异随机种子的图像(ancestral 采样器除外,你只是单纯地生成了一些东西)",
+    "How strong of a variation to produce. At 0, there will be no effect. At 1, you will get the complete picture with variation seed (except for ancestral samplers, where you will just get something).": "想要产生多强烈的变化。设为 0 时,将没有效果。设为 1 时,你将获得完全产自差异随机种子的图像(ancestral 采样器除外,你只是单纯地生成了一些东西)",
     "Make an attempt to produce a picture similar to what would have been produced with same seed at specified resolution": "尝试生成与在指定分辨率下使用相同随机种子生成的图像相似的图片",
-    "This text is used to rotate the feature space of the imgs embs": "此文本用于旋转 图类 embeddings 的特征空间",
+    "This text is used to rotate the feature space of the imgs embs": "此文本用于旋转图集 embeddings 的特征空间",
     "Separate values for X axis using commas.": "使用逗号分隔 X 轴的值",
     "Separate values for Y axis using commas.": "使用逗号分隔 Y 轴的值",
     "Write image to a directory (default - log/images) and generation parameters into csv file.": "将图像写入目录(默认 - log/images)并将生成参数写入 csv 文件",
@@ -451,29 +451,29 @@
     "fill it with latent space noise": "用潜空间的噪声填充它",
     "fill it with latent space zeroes": "用潜空间的零填充它",
     "Upscale masked region to target resolution, do inpainting, downscale back and paste into original image": "将蒙版区域放大到目标分辨率,做内补绘制,缩小后粘贴到原始图像中",
-    "Resize image to target resolution. Unless height and width match, you will get incorrect aspect ratio.": "将图像大小调整为目标分辨率。 除非高度和宽度匹配,否则你将获得不正确的纵横比",
-    "Resize the image so that entirety of target resolution is filled with the image. Crop parts that stick out.": "调整图像大小,使整个目标分辨率都被图像填充。 裁剪多出来的部分",
-    "Resize the image so that entirety of image is inside target resolution. Fill empty space with image's colors.": "调整图像大小,使整个图像在目标分辨率内。 用图像的颜色填充空白区域",
+    "Resize image to target resolution. Unless height and width match, you will get incorrect aspect ratio.": "将图像大小调整为目标分辨率。除非高度和宽度匹配,否则你将获得不正确的纵横比",
+    "Resize the image so that entirety of target resolution is filled with the image. Crop parts that stick out.": "调整图像大小,使整个目标分辨率都被图像填充。裁剪多出来的部分",
+    "Resize the image so that entirety of image is inside target resolution. Fill empty space with image's colors.": "调整图像大小,使整个图像在目标分辨率内。用图像的颜色填充空白区域",
     "How many times to repeat processing an image and using it as input for the next iteration": "重复处理图像多少次并将其用作下一次迭代的输入",
-    "In loopback mode, on each loop the denoising strength is multiplied by this value. <1 means decreasing variety so your sequence will converge on a fixed picture. >1 means increasing variety so your sequence will become more and more chaotic.": "在回送模式下,在每个循环中,降噪强度都会乘以该值。 <1 表示减少多样性,因此你的这一组图将集中在固定的图像上。 >1 意味着增加多样性,因此你的这一组图将变得越来越混乱",
-    "For SD upscale, how much overlap in pixels should there be between tiles. Tiles overlap so that when they are merged back into one picture, there is no clearly visible seam.": "使用 SD 放大(SD upscale)时,图块(Tiles)之间应该有多少像素重叠。 图块之间(Tiles)需要重叠才可以让它们在合并回一张图像时,没有清晰可见的接缝",
+    "In loopback mode, on each loop the denoising strength is multiplied by this value. <1 means decreasing variety so your sequence will converge on a fixed picture. >1 means increasing variety so your sequence will become more and more chaotic.": "在回送模式下,在每个循环中,降噪强度都会乘以该值。<1 表示减少多样性,因此你的这一组图将集中在固定的图像上。>1 意味着增加多样性,因此你的这一组图将变得越来越混乱",
+    "For SD upscale, how much overlap in pixels should there be between tiles. Tiles overlap so that when they are merged back into one picture, there is no clearly visible seam.": "使用 SD 放大(SD upscale)时,图块(Tiles)之间应该有多少像素重叠。图块之间(Tiles)需要重叠才可以让它们在合并回一张图像时,没有清晰可见的接缝",
     "A directory on the same machine where the server is running.": "与服务器主机上的目录",
-    "Leave blank to save images to the default path.": "留空以将图像保存到默认目录",
+    "Leave blank to save images to the default path.": "留空以将图像保存到默认路径",
     "Input images directory": "输入图像目录",
     "Result = A * (1 - M) + B * M": "结果 = A * (1 - M) + B * M",
     "Result = A + (B - C) * M": "结果 = A + (B - C) * M",
     "1st and last digit must be 1. ex:'1, 2, 1'": "第一个和最后一个数字必须是 1。例:'1, 2, 1'",
-    "how fast should the training go. Low values will take longer to train, high values may fail to converge (not generate accurate results) and/or may break the embedding (This has happened if you see Loss: nan in the training info textbox. If this happens, you need to manually restore your embedding from an older not-broken backup).\n\nYou can set a single numeric value, or multiple learning rates using the syntax:\n\n   rate_1:max_steps_1, rate_2:max_steps_2, ...\n\nEG:   0.005:100, 1e-3:1000, 1e-5\n\nWill train with rate of 0.005 for first 100 steps, then 1e-3 until 1000 steps, then 1e-5 for all remaining steps.": "训练应该多快。 低值将需要更长的时间来训练,高值可能无法收敛(无法产生准确的结果)以及/也许可能会破坏 embedding(如果你在训练信息文本框中看到 Loss: nan 就会发生这种情况。如果发生这种情况,你需要从较旧的未损坏的备份手动恢复 embedding)\n\n你可以使用以下语法设置单个数值或多个学习率:\n\n   率1:步限1, 率2:步限2, ...\n\n如:   0.005:100, 1e-3:1000, 1e-5\n\n即前 100 步将以 0.005 的速率训练,接着直到 1000 步为止以 1e-3 训练,然后剩余所有步以 1e-5 训练",
-    "Path to directory with input images": "带有输入图像的目录",
-    "Path to directory where to write outputs": "进行输出的目录",
+    "how fast should the training go. Low values will take longer to train, high values may fail to converge (not generate accurate results) and/or may break the embedding (This has happened if you see Loss: nan in the training info textbox. If this happens, you need to manually restore your embedding from an older not-broken backup).\n\nYou can set a single numeric value, or multiple learning rates using the syntax:\n\n   rate_1:max_steps_1, rate_2:max_steps_2, ...\n\nEG:   0.005:100, 1e-3:1000, 1e-5\n\nWill train with rate of 0.005 for first 100 steps, then 1e-3 until 1000 steps, then 1e-5 for all remaining steps.": "训练应该多快。低值将需要更长的时间来训练,高值可能无法收敛(无法产生准确的结果)以及/也许可能会破坏 embedding(如果你在训练信息文本框中看到 Loss: nan 就会发生这种情况。如果发生这种情况,你需要从较旧的未损坏的备份手动恢复 embedding)\n\n你可以使用以下语法设置单个数值或多个学习率:\n\n   率1:步限1, 率2:步限2, ...\n\n如:   0.005:100, 1e-3:1000, 1e-5\n\n即前 100 步将以 0.005 的速率训练,接着直到 1000 步为止以 1e-3 训练,然后剩余所有步以 1e-5 训练",
+    "Path to directory with input images": "带有输入图像的路径",
+    "Path to directory where to write outputs": "进行输出的路径",
     "Use following tags to define how filenames for images are chosen: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; leave empty for default.": "使用以下标签定义如何选择图像的文件名: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; 默认请留空",
-    "If this option is enabled, watermark will not be added to created images. Warning: if you do not add watermark, you may be behaving in an unethical manner.": "如果启用此选项,水印将不会添加到生成出来的图像中。 警告:如果你不添加水印,你的行为可能是不符合专业操守的",
+    "If this option is enabled, watermark will not be added to created images. Warning: if you do not add watermark, you may be behaving in an unethical manner.": "如果启用此选项,水印将不会添加到生成出来的图像中。警告:如果你不添加水印,你的行为可能是不符合专业操守的",
     "Use following tags to define how subdirectories for images and grids are chosen: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; leave empty for default.": "使用以下标签定义如何选择图像和概览图的子目录: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; 默认请留空",
-    "Restore low quality faces using GFPGAN neural network": "使用 GFPGAN 神经网络恢复低质量人脸",
-    "This regular expression will be used extract words from filename, and they will be joined using the option below into label text used for training. Leave empty to keep filename text as it is.": "此正则表达式将用于从文件名中提取单词,并将使用以下选项将它们接合到用于训练的标签文本中。 留空以保持文件名文本不变",
+    "Restore low quality faces using GFPGAN neural network": "使用 GFPGAN 神经网络修复低质量面部",
+    "This regular expression will be used extract words from filename, and they will be joined using the option below into label text used for training. Leave empty to keep filename text as it is.": "此正则表达式将用于从文件名中提取单词,并将使用以下选项将它们接合到用于训练的标签文本中。留空以保持文件名文本不变",
     "This string will be used to join split words into a single line if the option above is enabled.": "如果启用了上述选项,则此处的字符会用于将拆分的单词接合为同一行",
-    "List of setting names, separated by commas, for settings that should go to the quick access bar at the top, rather than the usual setting tab. See modules/shared.py for setting names. Requires restarting to apply.": "设置名称列表,以逗号分隔,设置应转到顶部的快速访问栏,而不是通常的设置选项卡。 有关设置名称,请参见 modules/shared.py。 需要重新启动才能应用",
-    "If this values is non-zero, it will be added to seed and used to initialize RNG for noises when using samplers with Eta. You can use this to produce even more variation of images, or you can use this to match images of other software if you know what you are doing.": "如果这个值不为零,它将被添加到随机种子中,并在使用带有 Eta 的采样器时用于初始化随机噪声你可以使用它来产生更多的图像变化,或者你可以使用它来模仿其他软件生成的图像,如果你知道你在做什么",
+    "List of setting names, separated by commas, for settings that should go to the quick access bar at the top, rather than the usual setting tab. See modules/shared.py for setting names. Requires restarting to apply.": "设置名称列表,以逗号分隔,设置应转到顶部的快速访问栏,而不是通常的设置选项卡。有关设置名称,请参见 modules/shared.py。需要重新启动才能应用",
+    "If this values is non-zero, it will be added to seed and used to initialize RNG for noises when using samplers with Eta. You can use this to produce even more variation of images, or you can use this to match images of other software if you know what you are doing.": "如果这个值不为零,它将被添加到随机种子中,并在使用带有 Eta 的采样器时用于初始化随机噪声。你可以使用它来产生更多的图像变化,或者你可以使用它来模仿其他软件生成的图像,如果你知道你在做什么",
     "Enable Autocomplete": "开启Tag补全",
     "Allowed categories for random artists selection when using the Roll button": "使用抽选艺术家按钮时将会随机的艺术家类别",
     "Roll three": "抽三位出來",

From 168aa1cf67440ecc9134c9f81daf800558f67135 Mon Sep 17 00:00:00 2001
From: dtlnor <dtlnor@hotmail.com>
Date: Sun, 23 Oct 2022 20:11:40 +0900
Subject: [PATCH 55/73] Update zh-hans.json

---
 localizations/zh-hans.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/localizations/zh-hans.json b/localizations/zh-hans.json
index 3fbcac6b..9d20fa17 100644
--- a/localizations/zh-hans.json
+++ b/localizations/zh-hans.json
@@ -77,9 +77,9 @@
     "Slerp interpolation": "Slerp 插值",
     "Aesthetic imgs embedding": "美术风格图集 embedding",
     "None": "无",
-    "Aesthetic text for imgs": "用于图集的美术风格描述",
+    "Aesthetic text for imgs": "该图集的美术风格描述",
     "Slerp angle": "Slerp 角度",
-    "Is negative text": "属于否定类文字",
+    "Is negative text": "是反向提示词",
     "Script": "脚本",
     "Prompt matrix": "提示词矩阵",
     "Prompts from file or textbox": "来自文本框或文件载入提示词",

From c7e000bedde0d8fbf50ecd7601cb8344f0ec2202 Mon Sep 17 00:00:00 2001
From: dtlnor <dtlnor@hotmail.com>
Date: Mon, 24 Oct 2022 04:07:28 +0900
Subject: [PATCH 56/73] Update zh-hans.json

---
 localizations/zh-hans.json | 80 +++++++++++++++++++-------------------
 1 file changed, 40 insertions(+), 40 deletions(-)

diff --git a/localizations/zh-hans.json b/localizations/zh-hans.json
index 9d20fa17..6276f573 100644
--- a/localizations/zh-hans.json
+++ b/localizations/zh-hans.json
@@ -10,8 +10,8 @@
     "•": "•",
     "built with gradio": "基于 Gradio 构建",
     "Stable Diffusion checkpoint": "Stable Diffusion 模型(ckpt)",
-    "txt2img": "文转图",
-    "img2img": "图转图",
+    "txt2img": "文生图",
+    "img2img": "图生图",
     "Extras": "后处理",
     "PNG Info": "PNG 信息",
     "Image Browser": "图库浏览器",
@@ -82,7 +82,7 @@
     "Is negative text": "是反向提示词",
     "Script": "脚本",
     "Prompt matrix": "提示词矩阵",
-    "Prompts from file or textbox": "来自文本框或文件载入提示词",
+    "Prompts from file or textbox": "从文本框或文件载入提示词",
     "X/Y plot": "X/Y 图表",
     "Put variable parts at start of prompt": "把变量部分放在提示词文本的开头",
     "Show Textbox": "显示文本框",
@@ -114,16 +114,16 @@
     "Keep -1 for seeds": "保持随机种子为-1",
     "Drop Image Here": "拖拽图像到此",
     "Save": "保存",
-    "Send to img2img": "传送到图转图",
-    "Send to inpaint": "传送到内补绘制",
-    "Send to extras": "传送到后处理",
-    "Make Zip when Save?": "保存时生成压缩档?",
+    "Send to img2img": ">> 图生图",
+    "Send to inpaint": ">> 内补绘制",
+    "Send to extras": ">> 后处理",
+    "Make Zip when Save?": "保存时生成zip压缩文件?",
     "Textbox": "文本框",
-    "Interrogate\nCLIP": "CLIP\n逆向生成提示词",
-    "Interrogate\nDeepBooru": "DeepBooru\n逆向生成提示词",
+    "Interrogate\nCLIP": "CLIP\n反推提示词",
+    "Interrogate\nDeepBooru": "DeepBooru\n反推提示词",
     "Inpaint": "内补绘制",
-    "Batch img2img": "批量图转图",
-    "Image for img2img": "图转图的图像",
+    "Batch img2img": "批量图生图",
+    "Image for img2img": "图生图的图像",
     "Image for inpainting with mask": "用在内补绘制蒙版内容的图像",
     "Mask": "蒙版",
     "Mask blur": "蒙版模糊",
@@ -149,7 +149,7 @@
     "Just resize": "只缩放",
     "Crop and resize": "缩放并剪裁",
     "Resize and fill": "缩放并填空",
-    "img2img alternative test": "图转图的另一种测试",
+    "img2img alternative test": "图生图的另一种测试",
     "Loopback": "回送",
     "Outpainting mk2": "外补绘制第二版",
     "Poor man's outpainting": "效果稍差的外补绘制",
@@ -176,7 +176,7 @@
     "down": "下",
     "Fall-off exponent (lower=higher detail)": "衰减指数(低=高细节)",
     "Color variation": "色彩变化",
-    "Will upscale the image to twice the dimensions; use width and height sliders to set tile size": "将图像放大到两倍尺寸; 使用宽度和高度滑块设置图块大小(tile size)",
+    "Will upscale the image to twice the dimensions; use width and height sliders to set tile size": "将图像放大到两倍尺寸; 使用宽度和高度滑块设置图块尺寸(tile size)",
     "Tile overlap": "图块重叠的像素(Tile overlap)",
     "Upscaler": "放大算法",
     "Lanczos": "Lanczos",
@@ -202,9 +202,9 @@
     "CodeFormer visibility": "CodeFormer 可见度",
     "CodeFormer weight (0 = maximum effect, 1 = minimum effect)": "CodeFormer 权重 (0 = 最大效果, 1 = 最小效果)",
     "Open output directory": "打开输出目录",
-    "Send to txt2img": "传送到文转图",
-    "txt2img history": "文转图历史记录",
-    "img2img history": "图转图历史记录",
+    "Send to txt2img": ">> 文生图",
+    "txt2img history": "文生图历史记录",
+    "img2img history": "图生图历史记录",
     "extras history": "后处理历史记录",
     "Renew Page": "刷新页面",
     "extras": "后处理",
@@ -291,7 +291,7 @@
     "Save an image to log directory every N steps, 0 to disable": "每 N 步保存一个图像到日志目录,0 表示禁用",
     "Save a copy of embedding to log directory every N steps, 0 to disable": "每 N 步将 embedding 的副本保存到日志目录,0 表示禁用",
     "Save images with embedding in PNG chunks": "保存图像并在 PNG 文件中嵌入 embedding 文件",
-    "Read parameters (prompt, etc...) from txt2img tab when making previews": "进行预览时从文转图选项卡中读取参数(提示词等)",
+    "Read parameters (prompt, etc...) from txt2img tab when making previews": "进行预览时从文生图选项卡中读取参数(提示词等)",
     "Train Hypernetwork": "训练 Hypernetwork",
     "Train Embedding": "训练 Embedding",
     "Create an aesthetic embedding out of any number of images": "从任意数量的图像中创建美术风格 embedding",
@@ -317,12 +317,12 @@
     "Do not add watermark to images": "不要给图像加水印",
     "Paths for saving": "保存路径",
     "Output directory for images; if empty, defaults to three directories below": "图像的输出目录; 如果为空,则默认为下面三个目录",
-    "Output directory for txt2img images": "文转图的输出目录",
-    "Output directory for img2img images": "图转图的输出目录",
+    "Output directory for txt2img images": "文生图的输出目录",
+    "Output directory for img2img images": "图生图的输出目录",
     "Output directory for images from extras tab": "后处理的输出目录",
     "Output directory for grids; if empty, defaults to two directories below": "概览图的输出目录; 如果为空,则默认为以下两个目录",
-    "Output directory for txt2img grids": "文转图概览的输出目录",
-    "Output directory for img2img grids": "图转图概览的输出目录",
+    "Output directory for txt2img grids": "文生图概览的输出目录",
+    "Output directory for img2img grids": "图生图概览的输出目录",
     "Directory for saving images using the Save button": "使用“保存”按钮保存图像的目录",
     "Saving to a directory": "保存到目录",
     "Save images to a subdirectory": "将图像保存到子目录",
@@ -331,12 +331,12 @@
     "Directory name pattern": "目录名称格式",
     "Max prompt words for [prompt_words] pattern": "[prompt_words] 格式的最大提示词数量",
     "Upscaling": "放大",
-    "Tile size for ESRGAN upscalers. 0 = no tiling.": "ESRGAN 的图块大小(Tile size)。0 = 不分块(no tiling)",
-    "Tile overlap, in pixels for ESRGAN upscalers. Low values = visible seam.": "图块重叠(Tile overlap),以 ESRGAN 的像素为单位。低值 = 可见接缝",
-    "Tile size for all SwinIR.": "所有 SwinIR 的图块尺寸(Tile size)",
-    "Tile overlap, in pixels for SwinIR. Low values = visible seam.": "图块重叠(Tile overlap),以 SwinIR 的像素为单位。低值 = 可见接缝",
+    "Tile size for ESRGAN upscalers. 0 = no tiling.": "ESRGAN 的图块尺寸(Tile size)。0 = 不分块(no tiling)",
+    "Tile overlap, in pixels for ESRGAN upscalers. Low values = visible seam.": "ESRGAN 的图块重叠(Tile overlap)像素。低值 = 可见接缝",
+    "Tile size for all SwinIR.": "适用所有 SwinIR 系算法的图块尺寸(Tile size)",
+    "Tile overlap, in pixels for SwinIR. Low values = visible seam.": "SwinIR 的图块重叠(Tile overlap)像素。低值 = 可见接缝",
     "LDSR processing steps. Lower = faster": "LDSR 处理迭代步数。更低 = 更快",
-    "Upscaler for img2img": "图转图的放大算法",
+    "Upscaler for img2img": "图生图的放大算法",
     "Upscale latent space image when doing hires. fix": "做高分辨率修复时也放大潜空间图像",
     "Face restoration": "面部修复",
     "CodeFormer weight parameter; 0 = maximum effect; 1 = minimum effect": "CodeFormer 权重参数; 0 = 最大效果; 1 = 最小效果",
@@ -355,9 +355,9 @@
     "Stable Diffusion": "Stable Diffusion",
     "Checkpoints to cache in RAM": "缓存在内存(RAM)中的模型(ckpt)",
     "Hypernetwork strength": "Hypernetwork 强度",
-    "Apply color correction to img2img results to match original colors.": "对图转图结果应用颜色校正以匹配原始颜色",
-    "Save a copy of image before applying color correction to img2img results": "在对图转图结果应用颜色校正之前保存图像副本",
-    "With img2img, do exactly the amount of steps the slider specifies (normally you'd do less with less denoising).": "在进行图转图的时候,确切地执行滑块指定的迭代步数(通常更少的降噪会做更少的迭代步数)",
+    "Apply color correction to img2img results to match original colors.": "对图生图结果应用颜色校正以匹配原始颜色",
+    "Save a copy of image before applying color correction to img2img results": "在对图生图结果应用颜色校正之前保存图像副本",
+    "With img2img, do exactly the amount of steps the slider specifies (normally you'd do less with less denoising).": "在进行图生图的时候,确切地执行滑块指定的迭代步数(通常更少的降噪会做更少的迭代步数)",
     "Enable quantization in K samplers for sharper and cleaner results. This may change existing seeds. Requires restart to apply.": "在 K 采样器中启用量化以获得更清晰、更清晰的结果。这可能会改变现有的随机种子。需要重新启动才能应用",
     "Emphasis: use (text) to make model pay more attention to text and [text] to make it pay less attention": "强调符:使用 (文字) 使模型更关注该文本,使用 [文字] 使其减少关注",
     "Use old emphasis implementation. Can be useful to reproduce old seeds.": "使用旧的强调符实现。可用于复现旧随机种子",
@@ -365,16 +365,16 @@
     "Increase coherency by padding from the last comma within n tokens when using more than 75 tokens": "当使用超过 75 个 token 时,通过从 n 个 token 中的最后一个逗号填空来提高一致性",
     "Filter NSFW content": "过滤成人内容",
     "Stop At last layers of CLIP model": "在 CLIP 模型的最后哪一层停下",
-    "Interrogate Options": "逆向生成提示词选项",
-    "Interrogate: keep models in VRAM": "逆向生成: 将模型保存在显存(VRAM)中",
-    "Interrogate: use artists from artists.csv": "逆向生成: 使用 artists.csv 中的艺术家",
-    "Interrogate: include ranks of model tags matches in results (Has no effect on caption-based interrogators).": "逆向生成: 在生成结果中包含与模型标签(tags)相匹配的等级(对基于生成自然语言描述的逆向生成没有影响)",
-    "Interrogate: num_beams for BLIP": "逆向生成: BLIP 的 num_beams",
-    "Interrogate: minimum description length (excluding artists, etc..)": "逆向生成: 最小描述长度(不包括艺术家, 等…)",
-    "Interrogate: maximum description length": "逆向生成: 最大描述长度",
+    "Interrogate Options": "反推提示词选项",
+    "Interrogate: keep models in VRAM": "反推: 将模型保存在显存(VRAM)中",
+    "Interrogate: use artists from artists.csv": "反推: 使用 artists.csv 中的艺术家",
+    "Interrogate: include ranks of model tags matches in results (Has no effect on caption-based interrogators).": "反推: 在生成结果中包含与模型标签(tags)相匹配的等级(对基于生成自然语言描述的反推没有影响)",
+    "Interrogate: num_beams for BLIP": "反推: BLIP 的 num_beams",
+    "Interrogate: minimum description length (excluding artists, etc..)": "反推: 最小描述长度(不包括艺术家, 等…)",
+    "Interrogate: maximum description length": "反推: 最大描述长度",
     "CLIP: maximum number of lines in text file (0 = No limit)": "CLIP: 文本文件中的最大行数(0 = 无限制)",
-    "Interrogate: deepbooru score threshold": "逆向生成: deepbooru 分数阈值",
-    "Interrogate: deepbooru sort alphabetically": "逆向生成: deepbooru 按字母顺序排序",
+    "Interrogate: deepbooru score threshold": "反推: deepbooru 分数阈值",
+    "Interrogate: deepbooru sort alphabetically": "反推: deepbooru 按字母顺序排序",
     "use spaces for tags in deepbooru": "在 deepbooru 中为标签使用空格",
     "escape (\\) brackets in deepbooru (so they are used as literal brackets and not for emphasis)": "在 deepbooru 中使用转义 (\\) 括号(因此它们用作文字括号而不是强调符号)",
     "User interface": "用户界面",
@@ -396,7 +396,7 @@
     "Hide samplers in user interface (requires restart)": "在用户界面中隐藏采样器(需要重新启动)",
     "eta (noise multiplier) for DDIM": "DDIM 的 eta (噪声倍增器) ",
     "eta (noise multiplier) for ancestral samplers": "ancestral 采样器的 eta (噪声倍增器)",
-    "img2img DDIM discretize": "图转图 DDIM 离散化",
+    "img2img DDIM discretize": "图生图 DDIM 离散化",
     "uniform": "均勻",
     "quad": "二阶",
     "sigma churn": "sigma churn",
@@ -456,7 +456,7 @@
     "Resize the image so that entirety of image is inside target resolution. Fill empty space with image's colors.": "调整图像大小,使整个图像在目标分辨率内。用图像的颜色填充空白区域",
     "How many times to repeat processing an image and using it as input for the next iteration": "重复处理图像多少次并将其用作下一次迭代的输入",
     "In loopback mode, on each loop the denoising strength is multiplied by this value. <1 means decreasing variety so your sequence will converge on a fixed picture. >1 means increasing variety so your sequence will become more and more chaotic.": "在回送模式下,在每个循环中,降噪强度都会乘以该值。<1 表示减少多样性,因此你的这一组图将集中在固定的图像上。>1 意味着增加多样性,因此你的这一组图将变得越来越混乱",
-    "For SD upscale, how much overlap in pixels should there be between tiles. Tiles overlap so that when they are merged back into one picture, there is no clearly visible seam.": "使用 SD 放大(SD upscale)时,图块(Tiles)之间应该有多少像素重叠。图块之间(Tiles)需要重叠才可以让它们在合并回一张图像时,没有清晰可见的接缝",
+    "For SD upscale, how much overlap in pixels should there be between tiles. Tiles overlap so that when they are merged back into one picture, there is no clearly visible seam.": "使用 SD 放大(SD upscale)时,图块(Tiles)之间应该有多少像素重叠。图块(Tiles)之间需要重叠才可以让它们在合并回一张图像时,没有清晰可见的接缝",
     "A directory on the same machine where the server is running.": "与服务器主机上的目录",
     "Leave blank to save images to the default path.": "留空以将图像保存到默认路径",
     "Input images directory": "输入图像目录",

From f9b20482fc5f71a5efead408a4006e73471fa1bc Mon Sep 17 00:00:00 2001
From: dtlnor <dtlnor@hotmail.com>
Date: Mon, 24 Oct 2022 04:22:43 +0900
Subject: [PATCH 57/73] Update zh-hans.json

---
 localizations/zh-hans.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/localizations/zh-hans.json b/localizations/zh-hans.json
index 6276f573..e206da88 100644
--- a/localizations/zh-hans.json
+++ b/localizations/zh-hans.json
@@ -55,7 +55,7 @@
     "Width": "宽度",
     "Height": "高度",
     "Restore faces": "面部修复",
-    "Tiling": "分块(Tiling)",
+    "Tiling": "可平铺(Tiling)",
     "Highres. fix": "高分辨率修复",
     "Firstpass width": "第一遍的宽度",
     "Firstpass height": "第一遍的高度",
@@ -427,7 +427,7 @@
     "Which algorithm to use to produce the image": "使用哪种算法生成图像",
     "Euler Ancestral - very creative, each can get a completely different picture depending on step count, setting steps to higher than 30-40 does not help": "Euler Ancestral - 非常有创意,可以根据迭代步数获得完全不同的图像,将迭代步数设置为高于 30-40 不会有正面作用",
     "Denoising Diffusion Implicit Models - best at inpainting": "Denoising Diffusion Implicit models - 最擅长内补绘制",
-    "Produce an image that can be tiled.": "生成可以分块(Tiling)的图像",
+    "Produce an image that can be tiled.": "生成可用于平铺(tiled)的图像",
     "Use a two step process to partially create an image at smaller resolution, upscale, and then improve details in it without changing composition": "使用两步处理的时候以较小的分辨率生成初步图像、接着放大图像,然后在不更改构图的情况下改进其中的细节",
     "Determines how little respect the algorithm should have for image's content. At 0, nothing will change, and at 1 you'll get an unrelated image. With values below 1.0, processing will take less steps than the Sampling Steps slider specifies.": "决定算法对图像内容的影响程度。设置 0 时,什么都不会改变,而在 1 时,你将获得不相关的图像。值低于 1.0 时,处理的迭代步数将少于“采样迭代步数”滑块指定的步数",
     "How many batches of images to create": "创建多少批次的图像",

From 57b90a8b19494dfcd8be9a00c8e591b63d4564bd Mon Sep 17 00:00:00 2001
From: dtlnor <dtlnor@hotmail.com>
Date: Mon, 24 Oct 2022 09:51:05 +0800
Subject: [PATCH 58/73] Update localizations/zh-hans.json

Co-authored-by: liggest <43201720+liggest@users.noreply.github.com>
---
 localizations/zh-hans.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/localizations/zh-hans.json b/localizations/zh-hans.json
index e206da88..da020248 100644
--- a/localizations/zh-hans.json
+++ b/localizations/zh-hans.json
@@ -454,7 +454,7 @@
     "Resize image to target resolution. Unless height and width match, you will get incorrect aspect ratio.": "将图像大小调整为目标分辨率。除非高度和宽度匹配,否则你将获得不正确的纵横比",
     "Resize the image so that entirety of target resolution is filled with the image. Crop parts that stick out.": "调整图像大小,使整个目标分辨率都被图像填充。裁剪多出来的部分",
     "Resize the image so that entirety of image is inside target resolution. Fill empty space with image's colors.": "调整图像大小,使整个图像在目标分辨率内。用图像的颜色填充空白区域",
-    "How many times to repeat processing an image and using it as input for the next iteration": "重复处理图像多少次并将其用作下一次迭代的输入",
+    "How many times to repeat processing an image and using it as input for the next iteration": "处理图片并作为下次迭代输入的重复次数",
     "In loopback mode, on each loop the denoising strength is multiplied by this value. <1 means decreasing variety so your sequence will converge on a fixed picture. >1 means increasing variety so your sequence will become more and more chaotic.": "在回送模式下,在每个循环中,降噪强度都会乘以该值。<1 表示减少多样性,因此你的这一组图将集中在固定的图像上。>1 意味着增加多样性,因此你的这一组图将变得越来越混乱",
     "For SD upscale, how much overlap in pixels should there be between tiles. Tiles overlap so that when they are merged back into one picture, there is no clearly visible seam.": "使用 SD 放大(SD upscale)时,图块(Tiles)之间应该有多少像素重叠。图块(Tiles)之间需要重叠才可以让它们在合并回一张图像时,没有清晰可见的接缝",
     "A directory on the same machine where the server is running.": "与服务器主机上的目录",

From f9e31c6bddb62245208ad607da4550e7559b50f9 Mon Sep 17 00:00:00 2001
From: dtlnor <dtlnor@hotmail.com>
Date: Mon, 24 Oct 2022 09:56:20 +0800
Subject: [PATCH 59/73] Update localizations/zh-hans.json

Co-authored-by: liggest <43201720+liggest@users.noreply.github.com>
---
 localizations/zh-hans.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/localizations/zh-hans.json b/localizations/zh-hans.json
index da020248..ab589856 100644
--- a/localizations/zh-hans.json
+++ b/localizations/zh-hans.json
@@ -165,7 +165,7 @@
     "Decode CFG scale": "解码提示词相关性(CFG scale)",
     "Randomness": "随机度",
     "Sigma adjustment for finding noise for image": "为寻找图中噪点的 Sigma 调整",
-    "Loops": "循环",
+    "Loops": "迭代次数",
     "Denoising strength change factor": "降噪强度的调整系数",
     "Recommended settings: Sampling Steps: 80-100, Sampler: Euler a, Denoising strength: 0.8": "推荐设置:采样迭代步数:80-100,采样器:Euler a,降噪强度:0.8",
     "Pixels to expand": "拓展的像素数",

From f1103b67500a647483538f820e48bacc8de9c478 Mon Sep 17 00:00:00 2001
From: dtlnor <dtlnor@hotmail.com>
Date: Mon, 24 Oct 2022 10:07:56 +0800
Subject: [PATCH 60/73] Update localizations/zh-hans.json

Co-authored-by: liggest <43201720+liggest@users.noreply.github.com>
---
 localizations/zh-hans.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/localizations/zh-hans.json b/localizations/zh-hans.json
index ab589856..42faebe2 100644
--- a/localizations/zh-hans.json
+++ b/localizations/zh-hans.json
@@ -174,7 +174,7 @@
     "right": "右",
     "up": "上",
     "down": "下",
-    "Fall-off exponent (lower=higher detail)": "衰减指数(低=高细节)",
+    "Fall-off exponent (lower=higher detail)": "衰减指数(越低细节越好)",
     "Color variation": "色彩变化",
     "Will upscale the image to twice the dimensions; use width and height sliders to set tile size": "将图像放大到两倍尺寸; 使用宽度和高度滑块设置图块尺寸(tile size)",
     "Tile overlap": "图块重叠的像素(Tile overlap)",

From dd15526e6b1159e1c124c33dae9c28f70cb6f062 Mon Sep 17 00:00:00 2001
From: dtlnor <dtlnor@hotmail.com>
Date: Mon, 24 Oct 2022 10:08:12 +0800
Subject: [PATCH 61/73] Update localizations/zh-hans.json

Co-authored-by: liggest <43201720+liggest@users.noreply.github.com>
---
 localizations/zh-hans.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/localizations/zh-hans.json b/localizations/zh-hans.json
index 42faebe2..b78f464b 100644
--- a/localizations/zh-hans.json
+++ b/localizations/zh-hans.json
@@ -234,7 +234,7 @@
     "Primary model (A)": "主要模型 (A)",
     "Secondary model (B)": "第二模型 (B)",
     "Tertiary model (C)": "第三模型 (C)",
-    "Custom Name (Optional)": "自定义名字 (可选)",
+    "Custom Name (Optional)": "自定义名称 (可选)",
     "Multiplier (M) - set to 0 to get model A": "倍率 (M) - 设为 0 等价于模型 A",
     "Interpolation Method": "插值方法",
     "Weighted sum": "加权和",

From e53474d31c621b239efb6a30a1e49de6bb251e21 Mon Sep 17 00:00:00 2001
From: dtlnor <dtlnor@hotmail.com>
Date: Mon, 24 Oct 2022 10:08:32 +0800
Subject: [PATCH 62/73] Update localizations/zh-hans.json

Co-authored-by: liggest <43201720+liggest@users.noreply.github.com>
---
 localizations/zh-hans.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/localizations/zh-hans.json b/localizations/zh-hans.json
index b78f464b..eecb1b39 100644
--- a/localizations/zh-hans.json
+++ b/localizations/zh-hans.json
@@ -305,7 +305,7 @@
     "File format for grids": "概览图的文件格式",
     "Add extended info (seed, prompt) to filename when saving grid": "保存概览时将扩展信息(随机种子、提示词)添加到文件名",
     "Do not save grids consisting of one picture": "不要保存由一张图像组成的概览图",
-    "Prevent empty spots in grid (when set to autodetect)": "防止概览图中出现空白点(设置为自动检测时)",
+    "Prevent empty spots in grid (when set to autodetect)": "(在自动检测时)防止概览图中出现空位",
     "Grid row count; use -1 for autodetect and 0 for it to be same as batch size": "概览行数; 使用 -1 进行自动检测,使用 0 使其与批量大小相同",
     "Save text information about generation parameters as chunks to png files": "将有关生成参数的文本信息作为块保存到 png 文件中",
     "Create a text file next to every image with generation parameters.": "保存图像时在每个图像旁边创建一个文本文件储存生成参数",

From 0655797c53928ff7ee269f312b8a479f1177cd70 Mon Sep 17 00:00:00 2001
From: dtlnor <dtlnor@hotmail.com>
Date: Mon, 24 Oct 2022 10:09:01 +0800
Subject: [PATCH 63/73] Update localizations/zh-hans.json

Co-authored-by: liggest <43201720+liggest@users.noreply.github.com>
---
 localizations/zh-hans.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/localizations/zh-hans.json b/localizations/zh-hans.json
index eecb1b39..f468c024 100644
--- a/localizations/zh-hans.json
+++ b/localizations/zh-hans.json
@@ -316,7 +316,7 @@
     "When using 'Save' button, only save a single selected image": "使用“保存”按钮时,只保存一个选定的图像",
     "Do not add watermark to images": "不要给图像加水印",
     "Paths for saving": "保存路径",
-    "Output directory for images; if empty, defaults to three directories below": "图像的输出目录; 如果为空,则默认为下面三个目录",
+    "Output directory for images; if empty, defaults to three directories below": "图像的输出目录; 如果为空,则默认为以下三个目录",
     "Output directory for txt2img images": "文生图的输出目录",
     "Output directory for img2img images": "图生图的输出目录",
     "Output directory for images from extras tab": "后处理的输出目录",

From bf7b50e6bcb61048891834def8393398d40a0b50 Mon Sep 17 00:00:00 2001
From: dtlnor <dtlnor@hotmail.com>
Date: Mon, 24 Oct 2022 10:21:31 +0800
Subject: [PATCH 64/73] Update localizations/zh-hans.json

Co-authored-by: liggest <43201720+liggest@users.noreply.github.com>
---
 localizations/zh-hans.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/localizations/zh-hans.json b/localizations/zh-hans.json
index f468c024..363ff200 100644
--- a/localizations/zh-hans.json
+++ b/localizations/zh-hans.json
@@ -36,7 +36,7 @@
     "Click to Upload": "点击上传",
     "Image": "图像",
     "Check progress": "查看进度",
-    "Check progress (first)": "查看进度 (1st)",
+    "Check progress (first)": "(首次)查看进度",
     "Sampling Steps": "采样迭代步数",
     "Sampling method": "采样方法",
     "Euler a": "Euler a",

From 5394d0e696bbf91a7b0aff9ee40170a1166b7607 Mon Sep 17 00:00:00 2001
From: dtlnor <dtlnor@hotmail.com>
Date: Mon, 24 Oct 2022 16:45:30 +0900
Subject: [PATCH 65/73] Update zh-hans.json

---
 localizations/zh-hans.json | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/localizations/zh-hans.json b/localizations/zh-hans.json
index 363ff200..7dae0612 100644
--- a/localizations/zh-hans.json
+++ b/localizations/zh-hans.json
@@ -124,7 +124,7 @@
     "Inpaint": "内补绘制",
     "Batch img2img": "批量图生图",
     "Image for img2img": "图生图的图像",
-    "Image for inpainting with mask": "用在内补绘制蒙版内容的图像",
+    "Image for inpainting with mask": "用于内补绘制蒙版内容的图像",
     "Mask": "蒙版",
     "Mask blur": "蒙版模糊",
     "Mask mode": "蒙版模式",
@@ -264,7 +264,7 @@
     "Overwrite Old Hypernetwork": "覆写旧的 Hypernetwork",
     "Source directory": "源目录",
     "Destination directory": "目标目录",
-    "Existing Caption txt Action": "对已有说明文字的 txt 的行为",
+    "Existing Caption txt Action": "对已有的 txt 说明文字的行为",
     "ignore": "无视",
     "copy": "复制",
     "prepend": "放前面",
@@ -304,7 +304,7 @@
     "Always save all generated image grids": "始终保存所有生成的概览图",
     "File format for grids": "概览图的文件格式",
     "Add extended info (seed, prompt) to filename when saving grid": "保存概览时将扩展信息(随机种子、提示词)添加到文件名",
-    "Do not save grids consisting of one picture": "不要保存由一张图像组成的概览图",
+    "Do not save grids consisting of one picture": "只有一张图片时不要保存概览图",
     "Prevent empty spots in grid (when set to autodetect)": "(在自动检测时)防止概览图中出现空位",
     "Grid row count; use -1 for autodetect and 0 for it to be same as batch size": "概览行数; 使用 -1 进行自动检测,使用 0 使其与批量大小相同",
     "Save text information about generation parameters as chunks to png files": "将有关生成参数的文本信息作为块保存到 png 文件中",
@@ -394,8 +394,8 @@
     "Localization (requires restart)": "本地化(需要重新启动)",
     "Sampler parameters": "采样器参数",
     "Hide samplers in user interface (requires restart)": "在用户界面中隐藏采样器(需要重新启动)",
-    "eta (noise multiplier) for DDIM": "DDIM 的 eta (噪声倍增器) ",
-    "eta (noise multiplier) for ancestral samplers": "ancestral 采样器的 eta (噪声倍增器)",
+    "eta (noise multiplier) for DDIM": "DDIM 的 eta (噪声乘数) ",
+    "eta (noise multiplier) for ancestral samplers": "ancestral 采样器的 eta (噪声乘数)",
     "img2img DDIM discretize": "图生图 DDIM 离散化",
     "uniform": "均勻",
     "quad": "二阶",
@@ -435,7 +435,7 @@
     "Classifier Free Guidance Scale - how strongly the image should conform to prompt - lower values produce more creative results": "Classifier Free Guidance Scale - 图像应在多大程度上服从提示词 - 较低的值会产生更有创意的结果",
     "A value that determines the output of random number generator - if you create an image with same parameters and seed as another image, you'll get the same result": "一个固定随机数生成器输出的值 - 以相同参数和随机种子生成的图像会得到相同的结果",
     "Set seed to -1, which will cause a new random number to be used every time": "将随机种子设置为-1,则每次都会使用一个新的随机数",
-    "Reuse seed from last generation, mostly useful if it was randomed": "重用上一次使用的随机种子,如果它是随机出来的话就有用",
+    "Reuse seed from last generation, mostly useful if it was randomed": "重用上一次使用的随机种子,如果想要固定结果就会很有用",
     "Seed of a different picture to be mixed into the generation.": "将要参与生成的另一张图的随机种子",
     "How strong of a variation to produce. At 0, there will be no effect. At 1, you will get the complete picture with variation seed (except for ancestral samplers, where you will just get something).": "想要产生多强烈的变化。设为 0 时,将没有效果。设为 1 时,你将获得完全产自差异随机种子的图像(ancestral 采样器除外,你只是单纯地生成了一些东西)",
     "Make an attempt to produce a picture similar to what would have been produced with same seed at specified resolution": "尝试生成与在指定分辨率下使用相同随机种子生成的图像相似的图片",
@@ -454,7 +454,7 @@
     "Resize image to target resolution. Unless height and width match, you will get incorrect aspect ratio.": "将图像大小调整为目标分辨率。除非高度和宽度匹配,否则你将获得不正确的纵横比",
     "Resize the image so that entirety of target resolution is filled with the image. Crop parts that stick out.": "调整图像大小,使整个目标分辨率都被图像填充。裁剪多出来的部分",
     "Resize the image so that entirety of image is inside target resolution. Fill empty space with image's colors.": "调整图像大小,使整个图像在目标分辨率内。用图像的颜色填充空白区域",
-    "How many times to repeat processing an image and using it as input for the next iteration": "处理图片并作为下次迭代输入的重复次数",
+    "How many times to repeat processing an image and using it as input for the next iteration": "重复处理图像并用作下次迭代输入的次数",
     "In loopback mode, on each loop the denoising strength is multiplied by this value. <1 means decreasing variety so your sequence will converge on a fixed picture. >1 means increasing variety so your sequence will become more and more chaotic.": "在回送模式下,在每个循环中,降噪强度都会乘以该值。<1 表示减少多样性,因此你的这一组图将集中在固定的图像上。>1 意味着增加多样性,因此你的这一组图将变得越来越混乱",
     "For SD upscale, how much overlap in pixels should there be between tiles. Tiles overlap so that when they are merged back into one picture, there is no clearly visible seam.": "使用 SD 放大(SD upscale)时,图块(Tiles)之间应该有多少像素重叠。图块(Tiles)之间需要重叠才可以让它们在合并回一张图像时,没有清晰可见的接缝",
     "A directory on the same machine where the server is running.": "与服务器主机上的目录",

From 6cf030abfc8c91caab453d88c9a181c8f1ee9e23 Mon Sep 17 00:00:00 2001
From: dtlnor <dtlnor@hotmail.com>
Date: Mon, 24 Oct 2022 17:20:34 +0900
Subject: [PATCH 66/73] re-order some element. update to latest

---
 localizations/zh-hans.json | 62 +++++++++++++++++++++-----------------
 1 file changed, 34 insertions(+), 28 deletions(-)

diff --git a/localizations/zh-hans.json b/localizations/zh-hans.json
index 7dae0612..06f56852 100644
--- a/localizations/zh-hans.json
+++ b/localizations/zh-hans.json
@@ -14,11 +14,11 @@
     "img2img": "图生图",
     "Extras": "后处理",
     "PNG Info": "PNG 信息",
-    "Image Browser": "图库浏览器",
-    "History": "历史记录",
     "Checkpoint Merger": "模型(ckpt)合并工具",
     "Train": "训练",
     "Create aesthetic embedding": "生成美术风格 embedding",
+    "Image Browser": "图库浏览器",
+    "History": "历史记录",
     "Settings": "设置",
     "Prompt": "提示词",
     "Negative prompt": "反向提示词",
@@ -81,9 +81,12 @@
     "Slerp angle": "Slerp 角度",
     "Is negative text": "是反向提示词",
     "Script": "脚本",
+    "Embedding to Shareable PNG": "将 Embedding 转换为可分享的 PNG",
     "Prompt matrix": "提示词矩阵",
     "Prompts from file or textbox": "从文本框或文件载入提示词",
     "X/Y plot": "X/Y 图表",
+    "Source embedding to convert": "用于转换的源 Embedding",
+    "Embedding token": "Embedding 的 token (关键词)",
     "Put variable parts at start of prompt": "把变量部分放在提示词文本的开头",
     "Show Textbox": "显示文本框",
     "File with inputs": "含输入内容的文件",
@@ -203,31 +206,6 @@
     "CodeFormer weight (0 = maximum effect, 1 = minimum effect)": "CodeFormer 权重 (0 = 最大效果, 1 = 最小效果)",
     "Open output directory": "打开输出目录",
     "Send to txt2img": ">> 文生图",
-    "txt2img history": "文生图历史记录",
-    "img2img history": "图生图历史记录",
-    "extras history": "后处理历史记录",
-    "Renew Page": "刷新页面",
-    "extras": "后处理",
-    "favorites": "收藏夹",
-    "Load": "载入",
-    "Images directory": "图像目录",
-    "Prev batch": "上一批",
-    "Next batch": "下一批",
-    "First Page": "第一页",
-    "Prev Page": "上一页",
-    "Page Index": "页数",
-    "Next Page": "下一页",
-    "End Page": "尾页",
-    "number of images to delete consecutively next": "接下来要连续删除的图像数",
-    "Delete": "删除",
-    "Generate Info": "生成信息",
-    "File Name": "文件名",
-    "Collect": "收藏",
-    "Refresh page": "刷新页面",
-    "Date to": "日期至",
-    "Number": "数量",
-    "set_index": "设置索引",
-    "Checkbox": "勾选框",
     "A merger of the two checkpoints will be generated in your": "合并后的模型(ckpt)会生成在你的",
     "checkpoint": "模型(ckpt)",
     "directory.": "目录",
@@ -296,6 +274,32 @@
     "Train Embedding": "训练 Embedding",
     "Create an aesthetic embedding out of any number of images": "从任意数量的图像中创建美术风格 embedding",
     "Create images embedding": "生成图集 embedding",
+    "txt2img history": "文生图历史记录",
+    "img2img history": "图生图历史记录",
+    "extras history": "后处理历史记录",
+    "Renew Page": "刷新页面",
+    "extras": "后处理",
+    "favorites": "收藏夹",
+    "custom fold": "自定义文件夹",
+    "Load": "载入",
+    "Images directory": "图像目录",
+    "Prev batch": "上一批",
+    "Next batch": "下一批",
+    "First Page": "第一页",
+    "Prev Page": "上一页",
+    "Page Index": "页数",
+    "Next Page": "下一页",
+    "End Page": "尾页",
+    "number of images to delete consecutively next": "接下来要连续删除的图像数",
+    "Delete": "删除",
+    "Generate Info": "生成信息",
+    "File Name": "文件名",
+    "Collect": "收藏",
+    "Refresh page": "刷新页面",
+    "Date to": "日期至",
+    "Number": "数量",
+    "set_index": "设置索引",
+    "Checkbox": "勾选框",
     "Apply settings": "保存设置",
     "Saving images/grids": "保存图像/概览图",
     "Always save all generated images": "始终保存所有生成的图像",
@@ -405,6 +409,8 @@
     "Eta noise seed delta": "Eta 噪声种子偏移(noise seed delta)",
     "Images Browser": "图库浏览器",
     "Preload images at startup": "在启动时预载图像",
+    "Number of columns on the page": "每页列数",
+    "Number of rows on the page": "每页行数",
     "Number of pictures displayed on each page": "每页显示的图像数量",
     "Minimum number of pages per load": "每次加载的最小页数",
     "Number of grids in each row": "每行显示多少格",
@@ -459,13 +465,13 @@
     "For SD upscale, how much overlap in pixels should there be between tiles. Tiles overlap so that when they are merged back into one picture, there is no clearly visible seam.": "使用 SD 放大(SD upscale)时,图块(Tiles)之间应该有多少像素重叠。图块(Tiles)之间需要重叠才可以让它们在合并回一张图像时,没有清晰可见的接缝",
     "A directory on the same machine where the server is running.": "与服务器主机上的目录",
     "Leave blank to save images to the default path.": "留空以将图像保存到默认路径",
-    "Input images directory": "输入图像目录",
     "Result = A * (1 - M) + B * M": "结果 = A * (1 - M) + B * M",
     "Result = A + (B - C) * M": "结果 = A + (B - C) * M",
     "1st and last digit must be 1. ex:'1, 2, 1'": "第一个和最后一个数字必须是 1。例:'1, 2, 1'",
     "how fast should the training go. Low values will take longer to train, high values may fail to converge (not generate accurate results) and/or may break the embedding (This has happened if you see Loss: nan in the training info textbox. If this happens, you need to manually restore your embedding from an older not-broken backup).\n\nYou can set a single numeric value, or multiple learning rates using the syntax:\n\n   rate_1:max_steps_1, rate_2:max_steps_2, ...\n\nEG:   0.005:100, 1e-3:1000, 1e-5\n\nWill train with rate of 0.005 for first 100 steps, then 1e-3 until 1000 steps, then 1e-5 for all remaining steps.": "训练应该多快。低值将需要更长的时间来训练,高值可能无法收敛(无法产生准确的结果)以及/也许可能会破坏 embedding(如果你在训练信息文本框中看到 Loss: nan 就会发生这种情况。如果发生这种情况,你需要从较旧的未损坏的备份手动恢复 embedding)\n\n你可以使用以下语法设置单个数值或多个学习率:\n\n   率1:步限1, 率2:步限2, ...\n\n如:   0.005:100, 1e-3:1000, 1e-5\n\n即前 100 步将以 0.005 的速率训练,接着直到 1000 步为止以 1e-3 训练,然后剩余所有步以 1e-5 训练",
     "Path to directory with input images": "带有输入图像的路径",
     "Path to directory where to write outputs": "进行输出的路径",
+    "Input images directory": "输入图像目录",
     "Use following tags to define how filenames for images are chosen: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; leave empty for default.": "使用以下标签定义如何选择图像的文件名: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; 默认请留空",
     "If this option is enabled, watermark will not be added to created images. Warning: if you do not add watermark, you may be behaving in an unethical manner.": "如果启用此选项,水印将不会添加到生成出来的图像中。警告:如果你不添加水印,你的行为可能是不符合专业操守的",
     "Use following tags to define how subdirectories for images and grids are chosen: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; leave empty for default.": "使用以下标签定义如何选择图像和概览图的子目录: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; 默认请留空",

From 05335805340a6f77c700a663f461ff1481fda922 Mon Sep 17 00:00:00 2001
From: dtlnor <dtlnor@hotmail.com>
Date: Tue, 25 Oct 2022 00:23:33 +0900
Subject: [PATCH 67/73] Update zh-hans.json

---
 localizations/zh-hans.json | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/localizations/zh-hans.json b/localizations/zh-hans.json
index 06f56852..4f860286 100644
--- a/localizations/zh-hans.json
+++ b/localizations/zh-hans.json
@@ -137,12 +137,12 @@
     "Inpaint masked": "内补绘制蒙版内容",
     "Inpaint not masked": "内补绘制非蒙版内容",
     "Masked content": "蒙版蒙住的内容",
-    "fill": "填空",
+    "fill": "填充",
     "original": "原图",
     "latent noise": "潜空间噪声",
     "latent nothing": "潜空间数值零",
     "Inpaint at full resolution": "以完整分辨率进行内补绘制",
-    "Inpaint at full resolution padding, pixels": "以完整分辨率进行内补绘制 - 填空像素",
+    "Inpaint at full resolution padding, pixels": "以完整分辨率进行内补绘制 - 填补像素",
     "Process images in a directory on the same machine where the server is running.": "在服务器主机上的目录中处理图像",
     "Use an empty output directory to save pictures normally instead of writing to the output directory.": "指定一个空的文件夹为输出目录而非默认的 output 文件夹为输出目录",
     "Disabled when launched with --hide-ui-dir-config.": "启动 --hide-ui-dir-config 时禁用",
@@ -151,7 +151,7 @@
     "Resize mode": "缩放模式",
     "Just resize": "只缩放",
     "Crop and resize": "缩放并剪裁",
-    "Resize and fill": "缩放并填空",
+    "Resize and fill": "缩放并填充",
     "img2img alternative test": "图生图的另一种测试",
     "Loopback": "回送",
     "Outpainting mk2": "外补绘制第二版",
@@ -285,7 +285,7 @@
     "Images directory": "图像目录",
     "Prev batch": "上一批",
     "Next batch": "下一批",
-    "First Page": "第一页",
+    "First Page": "首页",
     "Prev Page": "上一页",
     "Page Index": "页数",
     "Next Page": "下一页",
@@ -366,7 +366,7 @@
     "Emphasis: use (text) to make model pay more attention to text and [text] to make it pay less attention": "强调符:使用 (文字) 使模型更关注该文本,使用 [文字] 使其减少关注",
     "Use old emphasis implementation. Can be useful to reproduce old seeds.": "使用旧的强调符实现。可用于复现旧随机种子",
     "Make K-diffusion samplers produce same images in a batch as when making a single image": "使 K-diffusion 采样器批量生成与生成单个图像时产出相同的图像",
-    "Increase coherency by padding from the last comma within n tokens when using more than 75 tokens": "当使用超过 75 个 token 时,通过从 n 个 token 中的最后一个逗号填空来提高一致性",
+    "Increase coherency by padding from the last comma within n tokens when using more than 75 tokens": "当使用超过 75 个 token 时,通过从 n 个 token 中的最后一个逗号填补来提高一致性",
     "Filter NSFW content": "过滤成人内容",
     "Stop At last layers of CLIP model": "在 CLIP 模型的最后哪一层停下",
     "Interrogate Options": "反推提示词选项",

From 2439f4c32c4bbb8d66cad44a461d1b0229fb5e8c Mon Sep 17 00:00:00 2001
From: dtlnor <dtlnor@hotmail.com>
Date: Tue, 25 Oct 2022 12:35:04 +0900
Subject: [PATCH 68/73] Update zh-hans.json

---
 localizations/zh-hans.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/localizations/zh-hans.json b/localizations/zh-hans.json
index 4f860286..c91289fd 100644
--- a/localizations/zh-hans.json
+++ b/localizations/zh-hans.json
@@ -59,7 +59,7 @@
     "Highres. fix": "高分辨率修复",
     "Firstpass width": "第一遍的宽度",
     "Firstpass height": "第一遍的高度",
-    "Denoising strength": "降噪(模糊)强度",
+    "Denoising strength": "去噪强度",
     "Batch count": "批次",
     "Batch size": "批量",
     "CFG Scale": "提示词相关性(CFG Scale)",

From 68bdeb5b84abd9c345bf411a43fc9ebb73745b66 Mon Sep 17 00:00:00 2001
From: dtlnor <dtlnor@hotmail.com>
Date: Tue, 25 Oct 2022 12:38:29 +0900
Subject: [PATCH 69/73] Update zh-hans.json

---
 localizations/zh-hans.json | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/localizations/zh-hans.json b/localizations/zh-hans.json
index c91289fd..4d04398a 100644
--- a/localizations/zh-hans.json
+++ b/localizations/zh-hans.json
@@ -108,7 +108,7 @@
     "Sigma noise": "Sigma noise",
     "Eta": "Eta",
     "Clip skip": "Clip 跳过",
-    "Denoising": "降噪",
+    "Denoising": "去噪",
     "X values": "X轴数值",
     "Y type": "Y轴类型",
     "Y values": "Y轴数值",
@@ -164,13 +164,13 @@
     "Original negative prompt": "初始反向提示词",
     "Override `Sampling Steps` to the same value as `Decode steps`?": "覆写 `采样迭代步数` 为 `解码迭代步数`?",
     "Decode steps": "解码迭代步数",
-    "Override `Denoising strength` to 1?": "覆写 `降噪强度` 为 1?",
+    "Override `Denoising strength` to 1?": "覆写 `去噪强度` 为 1?",
     "Decode CFG scale": "解码提示词相关性(CFG scale)",
     "Randomness": "随机度",
     "Sigma adjustment for finding noise for image": "为寻找图中噪点的 Sigma 调整",
     "Loops": "迭代次数",
-    "Denoising strength change factor": "降噪强度的调整系数",
-    "Recommended settings: Sampling Steps: 80-100, Sampler: Euler a, Denoising strength: 0.8": "推荐设置:采样迭代步数:80-100,采样器:Euler a,降噪强度:0.8",
+    "Denoising strength change factor": "去噪强度的调整系数",
+    "Recommended settings: Sampling Steps: 80-100, Sampler: Euler a, Denoising strength: 0.8": "推荐设置:采样迭代步数:80-100,采样器:Euler a,去噪强度:0.8",
     "Pixels to expand": "拓展的像素数",
     "Outpainting direction": "外补绘制的方向",
     "left": "左",
@@ -361,7 +361,7 @@
     "Hypernetwork strength": "Hypernetwork 强度",
     "Apply color correction to img2img results to match original colors.": "对图生图结果应用颜色校正以匹配原始颜色",
     "Save a copy of image before applying color correction to img2img results": "在对图生图结果应用颜色校正之前保存图像副本",
-    "With img2img, do exactly the amount of steps the slider specifies (normally you'd do less with less denoising).": "在进行图生图的时候,确切地执行滑块指定的迭代步数(通常更少的降噪会做更少的迭代步数)",
+    "With img2img, do exactly the amount of steps the slider specifies (normally you'd do less with less denoising).": "在进行图生图的时候,确切地执行滑块指定的迭代步数(正常情況下更弱的去噪需要更少的迭代步数)",
     "Enable quantization in K samplers for sharper and cleaner results. This may change existing seeds. Requires restart to apply.": "在 K 采样器中启用量化以获得更清晰、更清晰的结果。这可能会改变现有的随机种子。需要重新启动才能应用",
     "Emphasis: use (text) to make model pay more attention to text and [text] to make it pay less attention": "强调符:使用 (文字) 使模型更关注该文本,使用 [文字] 使其减少关注",
     "Use old emphasis implementation. Can be useful to reproduce old seeds.": "使用旧的强调符实现。可用于复现旧随机种子",
@@ -461,7 +461,7 @@
     "Resize the image so that entirety of target resolution is filled with the image. Crop parts that stick out.": "调整图像大小,使整个目标分辨率都被图像填充。裁剪多出来的部分",
     "Resize the image so that entirety of image is inside target resolution. Fill empty space with image's colors.": "调整图像大小,使整个图像在目标分辨率内。用图像的颜色填充空白区域",
     "How many times to repeat processing an image and using it as input for the next iteration": "重复处理图像并用作下次迭代输入的次数",
-    "In loopback mode, on each loop the denoising strength is multiplied by this value. <1 means decreasing variety so your sequence will converge on a fixed picture. >1 means increasing variety so your sequence will become more and more chaotic.": "在回送模式下,在每个循环中,降噪强度都会乘以该值。<1 表示减少多样性,因此你的这一组图将集中在固定的图像上。>1 意味着增加多样性,因此你的这一组图将变得越来越混乱",
+    "In loopback mode, on each loop the denoising strength is multiplied by this value. <1 means decreasing variety so your sequence will converge on a fixed picture. >1 means increasing variety so your sequence will become more and more chaotic.": "在回送模式下,在每个循环中,去噪强度都会乘以该值。<1 表示减少多样性,因此你的这一组图将集中在固定的图像上。>1 意味着增加多样性,因此你的这一组图将变得越来越混乱",
     "For SD upscale, how much overlap in pixels should there be between tiles. Tiles overlap so that when they are merged back into one picture, there is no clearly visible seam.": "使用 SD 放大(SD upscale)时,图块(Tiles)之间应该有多少像素重叠。图块(Tiles)之间需要重叠才可以让它们在合并回一张图像时,没有清晰可见的接缝",
     "A directory on the same machine where the server is running.": "与服务器主机上的目录",
     "Leave blank to save images to the default path.": "留空以将图像保存到默认路径",

From dde8c435987dcd071c63d16f247ae832bce0101f Mon Sep 17 00:00:00 2001
From: dtlnor <dtlnor@hotmail.com>
Date: Tue, 25 Oct 2022 12:40:15 +0900
Subject: [PATCH 70/73] Update zh-hans.json

---
 localizations/zh-hans.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/localizations/zh-hans.json b/localizations/zh-hans.json
index 4d04398a..e453f5e3 100644
--- a/localizations/zh-hans.json
+++ b/localizations/zh-hans.json
@@ -361,7 +361,7 @@
     "Hypernetwork strength": "Hypernetwork 强度",
     "Apply color correction to img2img results to match original colors.": "对图生图结果应用颜色校正以匹配原始颜色",
     "Save a copy of image before applying color correction to img2img results": "在对图生图结果应用颜色校正之前保存图像副本",
-    "With img2img, do exactly the amount of steps the slider specifies (normally you'd do less with less denoising).": "在进行图生图的时候,确切地执行滑块指定的迭代步数(正常情況下更弱的去噪需要更少的迭代步数)",
+    "With img2img, do exactly the amount of steps the slider specifies (normally you'd do less with less denoising).": "在进行图生图的时候,确切地执行滑块指定的迭代步数(正常情况下更弱的去噪需要更少的迭代步数)",
     "Enable quantization in K samplers for sharper and cleaner results. This may change existing seeds. Requires restart to apply.": "在 K 采样器中启用量化以获得更清晰、更清晰的结果。这可能会改变现有的随机种子。需要重新启动才能应用",
     "Emphasis: use (text) to make model pay more attention to text and [text] to make it pay less attention": "强调符:使用 (文字) 使模型更关注该文本,使用 [文字] 使其减少关注",
     "Use old emphasis implementation. Can be useful to reproduce old seeds.": "使用旧的强调符实现。可用于复现旧随机种子",

From af73cf50fdd79c84c3439842fa0c8f1a406760d1 Mon Sep 17 00:00:00 2001
From: dtlnor <dtlnor@hotmail.com>
Date: Wed, 26 Oct 2022 01:14:42 +0900
Subject: [PATCH 71/73] change file name

---
 localizations/{zh-hans.json => zh_CN.json} | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename localizations/{zh-hans.json => zh_CN.json} (100%)

diff --git a/localizations/zh-hans.json b/localizations/zh_CN.json
similarity index 100%
rename from localizations/zh-hans.json
rename to localizations/zh_CN.json

From 99d728b5b18829c8a6b7b2d69c9b9327dd257896 Mon Sep 17 00:00:00 2001
From: Tony Beeman <beeman@gmail.com>
Date: Sun, 23 Oct 2022 23:16:47 -0700
Subject: [PATCH 72/73] Add Iterate Button and Improve PFF UI

---
 scripts/prompts_from_file.py | 50 +++++++++++++++++++++---------------
 1 file changed, 30 insertions(+), 20 deletions(-)

diff --git a/scripts/prompts_from_file.py b/scripts/prompts_from_file.py
index 1266be6f..1be22960 100644
--- a/scripts/prompts_from_file.py
+++ b/scripts/prompts_from_file.py
@@ -1,6 +1,7 @@
 import copy
 import math
 import os
+import random
 import sys
 import traceback
 import shlex
@@ -81,32 +82,34 @@ def cmdargs(line):
     return res
 
 
+def load_prompt_file(file):
+    if (file is None):
+        lines = []
+    else:
+        lines = [x.strip() for x in file.decode('utf8', errors='ignore').split("\n")]
+
+    return None, "\n".join(lines), gr.update(lines=7)
+
 class Script(scripts.Script):
     def title(self):
         return "Prompts from file or textbox"
 
     def ui(self, is_img2img):
-        # This checkbox would look nicer as two tabs, but there are two problems:
-        # 1) There is a bug in Gradio 3.3 that prevents visibility from working on Tabs
-        # 2) Even with Gradio 3.3.1, returning a control (like Tabs) that can't be used as input
-        #    causes a AttributeError: 'Tabs' object has no attribute 'preprocess' assert,
-        #    due to the way Script assumes all controls returned can be used as inputs.
-        # Therefore, there's no good way to use grouping components right now,
-        # so we will use a checkbox! :)
-        checkbox_txt = gr.Checkbox(label="Show Textbox", value=False)
-        file = gr.File(label="File with inputs", type='bytes')
-        prompt_txt = gr.TextArea(label="Prompts")
-        checkbox_txt.change(fn=lambda x: [gr.File.update(visible = not x), gr.TextArea.update(visible = x)], inputs=[checkbox_txt], outputs=[file, prompt_txt])
-        return [checkbox_txt, file, prompt_txt]
+        checkbox_iterate = gr.Checkbox(label="Iterate seed every line", value=False)
 
-    def on_show(self, checkbox_txt, file, prompt_txt):
-        return [ gr.Checkbox.update(visible = True), gr.File.update(visible = not checkbox_txt), gr.TextArea.update(visible = checkbox_txt) ]
+        prompt_txt = gr.Textbox(label="List of prompt inputs", lines=1)
+        file = gr.File(label="Upload prompt inputs", type='bytes')
 
-    def run(self, p, checkbox_txt, data: bytes, prompt_txt: str):
-        if checkbox_txt:
-            lines = [x.strip() for x in prompt_txt.splitlines()]
-        else:
-            lines = [x.strip() for x in data.decode('utf8', errors='ignore').split("\n")]
+        file.change(fn=load_prompt_file, inputs=[file], outputs=[file, prompt_txt, prompt_txt])
+
+        # We start at one line. When the text changes, we jump to seven lines, or two lines if no \n.
+        # We don't shrink back to 1, because that causes the control to ignore [enter], and it may
+        # be unclear to the user that shift-enter is needed.
+        prompt_txt.change(lambda tb: gr.update(lines=7) if ("\n" in tb) else gr.update(lines=2), inputs=[prompt_txt], outputs=[prompt_txt])
+        return [checkbox_iterate, file, prompt_txt]
+
+    def run(self, p, checkbox_iterate, file, prompt_txt: str):
+        lines = [x.strip() for x in prompt_txt.splitlines()]
         lines = [x for x in lines if len(x) > 0]
 
         p.do_not_save_grid = True
@@ -134,6 +137,9 @@ class Script(scripts.Script):
             jobs.append(args)
 
         print(f"Will process {len(lines)} lines in {job_count} jobs.")
+        if (checkbox_iterate and p.seed == -1):
+            p.seed = int(random.randrange(4294967294))
+
         state.job_count = job_count
 
         images = []
@@ -146,5 +152,9 @@ class Script(scripts.Script):
 
             proc = process_images(copy_p)
             images += proc.images
+            
+            if (checkbox_iterate):
+                p.seed = p.seed + (p.batch_size * p.n_iter)
 
-        return Processed(p, images, p.seed, "")
+
+        return Processed(p, images, p.seed, "")
\ No newline at end of file

From 737eb28faca8be2bb996ee0930ec77d1f7ebd939 Mon Sep 17 00:00:00 2001
From: DepFA <35278260+dfaker@users.noreply.github.com>
Date: Wed, 26 Oct 2022 14:45:33 +0100
Subject: [PATCH 73/73] typo: cmd_opts.embedding_dir to cmd_opts.embeddings_dir

---
 modules/textual_inversion/textual_inversion.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/modules/textual_inversion/textual_inversion.py b/modules/textual_inversion/textual_inversion.py
index 4fcebe74..ff002d3e 100644
--- a/modules/textual_inversion/textual_inversion.py
+++ b/modules/textual_inversion/textual_inversion.py
@@ -380,7 +380,7 @@ Last saved image: {html.escape(last_saved_image)}<br/>
     embedding.cached_checksum = None
     # Before saving for the last time, change name back to base name (as opposed to the save_embedding_every step-suffixed naming convention).
     embedding.name = embedding_name
-    filename = os.path.join(shared.cmd_opts.embedding_dir, f'{embedding.name}.pt')
+    filename = os.path.join(shared.cmd_opts.embeddings_dir, f'{embedding.name}.pt')
     embedding.save(filename)
 
     return embedding, filename