Merge branch 'AUTOMATIC1111:master' into master

This commit is contained in:
random-thoughtss 2022-10-30 00:30:18 -07:00 committed by GitHub
commit 15468c9939
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
28 changed files with 2012 additions and 904 deletions

2
.gitignore vendored
View File

@ -29,3 +29,5 @@ notification.mp3
/textual_inversion /textual_inversion
.vscode .vscode
/extensions /extensions
/test/stdout.txt
/test/stderr.txt

View File

@ -1 +1,13 @@
* @AUTOMATIC1111 * @AUTOMATIC1111
/localizations/ar_AR.json @xmodar @blackneoo
/localizations/de_DE.json @LunixWasTaken
/localizations/es_ES.json @innovaciones
/localizations/fr_FR.json @tumbly
/localizations/it_IT.json @EugenioBuffo
/localizations/ja_JP.json @yuuki76
/localizations/ko_KR.json @36DB
/localizations/pt_BR.json @M-art-ucci
/localizations/ru_RU.json @kabachuha
/localizations/tr_TR.json @camenduru
/localizations/zh_CN.json @dtlnor @bgluminous
/localizations/zh_TW.json @benlisquare

View File

@ -128,10 +128,12 @@ def prepare_enviroment():
blip_commit_hash = os.environ.get('BLIP_COMMIT_HASH', "48211a1594f1321b00f14c9f7a5b4813144b2fb9") blip_commit_hash = os.environ.get('BLIP_COMMIT_HASH', "48211a1594f1321b00f14c9f7a5b4813144b2fb9")
sys.argv += shlex.split(commandline_args) sys.argv += shlex.split(commandline_args)
test_argv = [x for x in sys.argv if x != '--tests']
sys.argv, skip_torch_cuda_test = extract_arg(sys.argv, '--skip-torch-cuda-test') sys.argv, skip_torch_cuda_test = extract_arg(sys.argv, '--skip-torch-cuda-test')
sys.argv, reinstall_xformers = extract_arg(sys.argv, '--reinstall-xformers') sys.argv, reinstall_xformers = extract_arg(sys.argv, '--reinstall-xformers')
sys.argv, update_check = extract_arg(sys.argv, '--update-check') sys.argv, update_check = extract_arg(sys.argv, '--update-check')
sys.argv, run_tests = extract_arg(sys.argv, '--tests')
xformers = '--xformers' in sys.argv xformers = '--xformers' in sys.argv
deepdanbooru = '--deepdanbooru' in sys.argv deepdanbooru = '--deepdanbooru' in sys.argv
ngrok = '--ngrok' in sys.argv ngrok = '--ngrok' in sys.argv
@ -194,6 +196,26 @@ def prepare_enviroment():
print("Exiting because of --exit argument") print("Exiting because of --exit argument")
exit(0) exit(0)
if run_tests:
tests(test_argv)
exit(0)
def tests(argv):
if "--api" not in argv:
argv.append("--api")
print(f"Launching Web UI in another process for testing with arguments: {' '.join(argv[1:])}")
with open('test/stdout.txt', "w", encoding="utf8") as stdout, open('test/stderr.txt', "w", encoding="utf8") as stderr:
proc = subprocess.Popen([sys.executable, *argv], stdout=stdout, stderr=stderr)
import test.server_poll
test.server_poll.run_tests()
print(f"Stopping Web UI process with id {proc.pid}")
proc.kill()
def start_webui(): def start_webui():
print(f"Launching Web UI with arguments: {' '.join(sys.argv[1:])}") print(f"Launching Web UI with arguments: {' '.join(sys.argv[1:])}")

View File

@ -26,8 +26,21 @@
"Sampling Steps": "عدد الخطوات", "Sampling Steps": "عدد الخطوات",
"Sampling method": "أسلوب الخطو", "Sampling method": "أسلوب الخطو",
"Which algorithm to use to produce the image": "Sampler: اسم نظام تحديد طريقة تغيير المسافات بين الخطوات", "Which algorithm to use to produce the image": "Sampler: اسم نظام تحديد طريقة تغيير المسافات بين الخطوات",
"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 خطوة", "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": "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",
"Denoising Diffusion Implicit Models - best at inpainting": "Denoising Diffusion Implicit Models: الأفضل في الإنتاج الجزئي", "Denoising Diffusion Implicit Models - best at inpainting": "Denoising Diffusion Implicit Models: الأفضل في الإنتاج الجزئي",
"PLMS": "PLMS",
"Width": "العرض", "Width": "العرض",
"Height": "الإرتفاع", "Height": "الإرتفاع",
"Restore faces": "تحسين الوجوه", "Restore faces": "تحسين الوجوه",
@ -58,6 +71,7 @@
"Resize seed from height": "إرتفاع الممزوج", "Resize seed from height": "إرتفاع الممزوج",
"Make an attempt to produce a picture similar to what would have been produced with same seed at specified resolution": "Seed resize from: حدد دقة صورة الممزوج (0: نفس دقة الإنتاج)", "Make an attempt to produce a picture similar to what would have been produced with same seed at specified resolution": "Seed resize from: حدد دقة صورة الممزوج (0: نفس دقة الإنتاج)",
"Open for Clip Aesthetic!": "تضمين تجميلي", "Open for Clip Aesthetic!": "تضمين تجميلي",
"▼": "▼",
"Aesthetic weight": "أثر التضمين", "Aesthetic weight": "أثر التضمين",
"Aesthetic steps": "عدد الخطوات", "Aesthetic steps": "عدد الخطوات",
"Aesthetic learning rate": "معدل التعلم", "Aesthetic learning rate": "معدل التعلم",
@ -79,7 +93,6 @@
"-": "-", "-": "-",
"or": "أو", "or": "أو",
"Click to Upload": "انقر للرفع", "Click to Upload": "انقر للرفع",
"Prompts": "قائمة الطلبات",
"X/Y plot": "مصفوفة عوامل", "X/Y plot": "مصفوفة عوامل",
"X type": "العامل الأول", "X type": "العامل الأول",
"Nothing": "لا شيء", "Nothing": "لا شيء",
@ -92,6 +105,8 @@
"Checkpoint name": "ملف الأوزان", "Checkpoint name": "ملف الأوزان",
"Hypernetwork": "الشبكة الفائقة", "Hypernetwork": "الشبكة الفائقة",
"Hypernet str.": "قوة الشبكة الفائقة", "Hypernet str.": "قوة الشبكة الفائقة",
"Inpainting conditioning mask strength": "قوة قناع الإنتاج الجزئي",
"Only applies to inpainting models. Determines how strongly to mask off the original image for inpainting and img2img. 1.0 means fully masked, which is the default behaviour. 0.0 means a fully unmasked conditioning. Lower values will help preserve the overall composition of the image, but will struggle with large changes.": "حدد مدى صرامة قناع الإنتاج، يصبح القناع شفاف إذا قوته 0 (لا يعمل إلا مع ملفات أوزان الإنتاج الجزئي: inpainting)",
"Sigma Churn": "العشوائية (Schurn)", "Sigma Churn": "العشوائية (Schurn)",
"Sigma min": "أدنى تشويش (Stmin)", "Sigma min": "أدنى تشويش (Stmin)",
"Sigma max": "أقصى تشويش (Stmax)", "Sigma max": "أقصى تشويش (Stmax)",
@ -99,6 +114,7 @@
"Eta": "العامل Eta η", "Eta": "العامل Eta η",
"Clip skip": "تخطي آخر طبقات CLIP", "Clip skip": "تخطي آخر طبقات CLIP",
"Denoising": "المدى", "Denoising": "المدى",
"Cond. Image Mask Weight": "قوة قناع الإنتاج الجزئي",
"X values": "قيم العامل الأول", "X values": "قيم العامل الأول",
"Separate values for X axis using commas.": "افصل القيم بفواصل (,) من اليسار إلى اليمين", "Separate values for X axis using commas.": "افصل القيم بفواصل (,) من اليسار إلى اليمين",
"Y type": "العامل الثاني", "Y type": "العامل الثاني",
@ -168,6 +184,12 @@
"Tile overlap": "تداخل النافذة", "Tile overlap": "تداخل النافذة",
"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.": "المكبر ينظر إلى أجزاء الصورة من خلال نافذة لتكبير المحتوى ثم ينتقل إلى الجزء المجاور، يفضل أن يكون هناك تداخل بين كل رقعة لكي لا يكون هناك اختلاف واضح بينهم", "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.": "المكبر ينظر إلى أجزاء الصورة من خلال نافذة لتكبير المحتوى ثم ينتقل إلى الجزء المجاور، يفضل أن يكون هناك تداخل بين كل رقعة لكي لا يكون هناك اختلاف واضح بينهم",
"Upscaler": "طريقة التكبير", "Upscaler": "طريقة التكبير",
"Lanczos": "Lanczos",
"LDSR": "LDSR",
"ScuNET GAN": "ScuNET GAN",
"ScuNET PSNR": "ScuNET PSNR",
"ESRGAN_4x": "ESRGAN_4x",
"SwinIR 4x": "SwinIR 4x",
"Inpaint": "إنتاج جزئي", "Inpaint": "إنتاج جزئي",
"Draw mask": "ارسم القناع", "Draw mask": "ارسم القناع",
"Upload mask": "ارفع القناع", "Upload mask": "ارفع القناع",
@ -192,6 +214,7 @@
"GFPGAN visibility": "أثر GFPGAN (محسن وجوه)", "GFPGAN visibility": "أثر GFPGAN (محسن وجوه)",
"CodeFormer visibility": "أثر CodeFormer (محسن وجوه)", "CodeFormer visibility": "أثر CodeFormer (محسن وجوه)",
"CodeFormer weight (0 = maximum effect, 1 = minimum effect)": "وزن CodeFormer (يزيد التفاصيل على حساب الجودة)", "CodeFormer weight (0 = maximum effect, 1 = minimum effect)": "وزن CodeFormer (يزيد التفاصيل على حساب الجودة)",
"Upscale Before Restoring Faces": "كبر قبل تحسين الوجوه",
"Scale to": "دقة محددة", "Scale to": "دقة محددة",
"Crop to fit": "قص الأطراف الزائدة إذا لم تتناسب الأبعاد", "Crop to fit": "قص الأطراف الزائدة إذا لم تتناسب الأبعاد",
"Batch Process": "حزمة صور", "Batch Process": "حزمة صور",
@ -199,7 +222,6 @@
"A directory on the same machine where the server is running.": "مسار مجلد صور موجود في جهاز الخادم", "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.": "اتركه فارغا لاستخدام المسار الإفتراضي",
"Show result images": "اعرض الصور الناتجة", "Show result images": "اعرض الصور الناتجة",
"Open output directory": "افتح مجلد المخرجات",
"PNG Info": "عوامل الصورة", "PNG Info": "عوامل الصورة",
"Send to txt2img": "أرسل لنص إلى صورة", "Send to txt2img": "أرسل لنص إلى صورة",
"Checkpoint Merger": "مزج الأوزان", "Checkpoint Merger": "مزج الأوزان",
@ -232,7 +254,41 @@
"Enter hypernetwork layer structure": "ترتيب مضاعفات عرض الطبقات", "Enter hypernetwork layer structure": "ترتيب مضاعفات عرض الطبقات",
"1st and last digit must be 1. ex:'1, 2, 1'": "المضاعفين الأول والأخير يجب أن يكونا 1، مثال: 1, 2, 1", "1st and last digit must be 1. ex:'1, 2, 1'": "المضاعفين الأول والأخير يجب أن يكونا 1، مثال: 1, 2, 1",
"Select activation function of hypernetwork": "دالة التنشيط", "Select activation function of hypernetwork": "دالة التنشيط",
"linear": "linear",
"relu": "relu",
"leakyrelu": "leakyrelu",
"elu": "elu",
"swish": "swish",
"tanh": "tanh",
"sigmoid": "sigmoid",
"celu": "celu",
"gelu": "gelu",
"glu": "glu",
"hardshrink": "hardshrink",
"hardsigmoid": "hardsigmoid",
"hardtanh": "hardtanh",
"logsigmoid": "logsigmoid",
"logsoftmax": "logsoftmax",
"mish": "mish",
"prelu": "prelu",
"rrelu": "rrelu",
"relu6": "relu6",
"selu": "selu",
"silu": "silu",
"softmax": "softmax",
"softmax2d": "softmax2d",
"softmin": "softmin",
"softplus": "softplus",
"softshrink": "softshrink",
"softsign": "softsign",
"tanhshrink": "tanhshrink",
"threshold": "threshold",
"Select Layer weights initialization. relu-like - Kaiming, sigmoid-like - Xavier is recommended": "تهيئة الأوزان (استخدم Kaiming مع relu وأمثالها وXavier مع sigmoid وأمثالها)", "Select Layer weights initialization. relu-like - Kaiming, sigmoid-like - Xavier is recommended": "تهيئة الأوزان (استخدم Kaiming مع relu وأمثالها وXavier مع sigmoid وأمثالها)",
"Normal": "Normal",
"KaimingUniform": "KaimingUniform",
"KaimingNormal": "KaimingNormal",
"XavierUniform": "XavierUniform",
"XavierNormal": "XavierNormal",
"Add layer normalization": "أضف تسوية الطبقات (LayerNorm)", "Add layer normalization": "أضف تسوية الطبقات (LayerNorm)",
"Use dropout": "استخدم الإسقاط (Dropout)", "Use dropout": "استخدم الإسقاط (Dropout)",
"Overwrite Old Hypernetwork": "استبدل الشبكة الفائقة القديمة", "Overwrite Old Hypernetwork": "استبدل الشبكة الفائقة القديمة",
@ -393,6 +449,7 @@
"Add model hash to generation information": "أضف رمز تهشير (Hash) ملف الأوزان لعوامل الإنتاج", "Add model hash to generation information": "أضف رمز تهشير (Hash) ملف الأوزان لعوامل الإنتاج",
"Add model name 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.": "لا تغير الأوزان المختارة عند قراءة عوامل الإنتاج من صورة أو من ملف", "When reading generation parameters from text into UI (from PNG info or pasted text), do not change the selected model/checkpoint.": "لا تغير الأوزان المختارة عند قراءة عوامل الإنتاج من صورة أو من ملف",
"Send seed when sending prompt or image to other interface": "عند إرسال صورة أو طلب ألحق البذرة أيضا",
"Font for image grids that have text": "نوع الخط في جداول الصور التي تحتوي على نصوص", "Font for image grids that have text": "نوع الخط في جداول الصور التي تحتوي على نصوص",
"Enable full page image viewer": "اسمح بعرض الصور في وضع ملئ الشاشة", "Enable full page image viewer": "اسمح بعرض الصور في وضع ملئ الشاشة",
"Show images zoomed in by default in full page image viewer": "اعرض الصور مقربة عند استخدام وضع ملئ الشاشة", "Show images zoomed in by default in full page image viewer": "اعرض الصور مقربة عند استخدام وضع ملئ الشاشة",
@ -400,6 +457,18 @@
"Quicksettings list": "قائمة الإعدادات السريعة", "Quicksettings list": "قائمة الإعدادات السريعة",
"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 لمعرفة الأسماء، يتطلب إعادة تشغيل", "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 لمعرفة الأسماء، يتطلب إعادة تشغيل",
"Localization (requires restart)": "اللغة (تتطلب إعادة تشغيل)", "Localization (requires restart)": "اللغة (تتطلب إعادة تشغيل)",
"pt_BR": "البرتغالية",
"zh_CN": "الصينية",
"ko_KR": "الكورية",
"fr_FR": "الفرنسية",
"ru_RU": "الروسية",
"ar_AR": "العربية",
"tr_TR": "التركية",
"it_IT": "الإيطالية",
"ja_JP": "اليابانية",
"de_DE": "الألمانية",
"zh_TW": "الصينية (تايوان)",
"es_ES": "الإسبانية",
"Sampler parameters": "عوامل أساليب الخطو", "Sampler parameters": "عوامل أساليب الخطو",
"Hide samplers in user interface (requires restart)": "اخف أساليب الخطو التالية (يتطلب إعادة تشغيل)", "Hide samplers in user interface (requires restart)": "اخف أساليب الخطو التالية (يتطلب إعادة تشغيل)",
"eta (noise multiplier) for DDIM": "العامل Eta η لأسلوب الخطو DDIM", "eta (noise multiplier) for DDIM": "العامل Eta η لأسلوب الخطو DDIM",
@ -420,5 +489,30 @@
"Request browser notifications": "اطلب تنبيهات المتصفح", "Request browser notifications": "اطلب تنبيهات المتصفح",
"Download localization template": "حمل ملف اللغة", "Download localization template": "حمل ملف اللغة",
"Reload custom script bodies (No ui updates, No restart)": "أعد تحميل الأدوات الخاصة (بدون واجهة المستخدم ولا يحتاج إعادة تشغيل)", "Reload custom script bodies (No ui updates, No restart)": "أعد تحميل الأدوات الخاصة (بدون واجهة المستخدم ولا يحتاج إعادة تشغيل)",
"Restart Gradio and Refresh components (Custom Scripts, ui.py, js and css only)": "أعد تشغيل gradio وتحميل الأدوات الخاصة وواجهة المستخدم" "Restart Gradio and Refresh components (Custom Scripts, ui.py, js and css only)": "أعد تشغيل gradio وتحميل الأدوات الخاصة وواجهة المستخدم",
} "⤡": "⤡",
"⊞": "⊞",
"×": "×",
"": "",
"": "",
"•": "•",
"Label": "Label",
"File": "File",
"Image": "Image",
"Check progress": "Check progress",
"Check progress (first)": "Check progress (first)",
"Textbox": "Textbox",
"Image for img2img": "Image for img2img",
"Image for inpainting with mask": "Image for inpainting with mask",
"Mask": "Mask",
"Mask mode": "Mask mode",
"Masking mode": "Masking mode",
"Resize mode": "Resize mode",
"Prev batch": "Prev batch",
"Next batch": "Next batch",
"Refresh page": "Refresh page",
"Date to": "Date to",
"Number": "Number",
"set_index": "set_index",
"Checkbox": "Checkbox"
}

View File

@ -1,42 +1,41 @@
{ {
"⤡": "⤡", "⤡": "⤡",
"⊞": "⊞", "⊞": "⊞",
"×": "×", "×": "×",
"": "", "": "",
"": "", "": "",
"view": "API ",
"api": "anzeigen",
"•": " • ",
"built with gradio": "Mit Gradio erstellt",
"Loading...": "Lädt...", "Loading...": "Lädt...",
"view": "zeigen", "Stable Diffusion checkpoint": "Stable Diffusion Checkpoint",
"api": "api",
"•": "•",
"built with gradio": "Erstellt mit Gradio",
"Stable Diffusion checkpoint": "Stable Diffusion checkpoint",
"txt2img": "txt2img", "txt2img": "txt2img",
"img2img": "img2img", "img2img": "img2img",
"Extras": "Extras", "Extras": "Extras",
"PNG Info": "PNG Info", "PNG Info": "PNG Info",
"Checkpoint Merger": "Checkpoint Merger", "Checkpoint Merger": "Checkpoint Fusion",
"Train": "Trainieren", "Train": "Trainieren",
"Settings": "Einstellungen", "Settings": "Einstellungen",
"Prompt": "Prompt", "Prompt": "Prompt",
"Negative prompt": "Negativer Prompt", "Negative prompt": "Negative Prompt",
"Run": "Ausführen", "Run": "Ausführen",
"Skip": "Überspringen", "Skip": "Überspringen",
"Interrupt": "Abbrechen", "Interrupt": "Abbrechen",
"Generate": "Generieren", "Generate": "Generieren",
"Style 1": "Style 1", "Style 1": "Stil 1",
"Style 2": "Style 2", "Style 2": "Stil 2",
"Label": "Bezeichnung", "Label": "Bezeichnung",
"File": "Datei", "File": "Datei",
"Drop File Here": "Datei hier ablegen", "Drop File Here": "Datei hier ablegen",
"-": "-", "-": "-",
"o": "o", "o": "oder",
"Click to Upload": "Klicken zum Hochladen", "Click to Upload": "Hochladen",
"Image": "Bild", "Image": "Bild",
"Check progress": "Fortschitt prüfen", "Check progress": "Fortschitt prüfen",
"Check progress (first)": "Fortschritt prüfen (Initial)", "Check progress (first)": "Fortschritt prüfen (Initial)",
"Sampling Steps": "Sampling Steps", "Sampling Steps": "Samplingschritte",
"Sampling method": "Sampling method", "Sampling method": "Samplingmethode",
"Euler a": "Euler a", "Euler a": "Euler a",
"Euler": "Euler", "Euler": "Euler",
"LMS": "LMS", "LMS": "LMS",
@ -54,37 +53,37 @@
"Height": "Höhe", "Height": "Höhe",
"Restore faces": "Gesichter wiederherstellen", "Restore faces": "Gesichter wiederherstellen",
"Tiling": "Kacheln", "Tiling": "Kacheln",
"Highres. fix": "Highres. fix", "Highres. fix": "Highres. Fix",
"Firstpass width": "Breite erstdurchlauf", "Firstpass width": "Breite Erstdurchlauf",
"Firstpass height": "Höhe erstdurchlauf", "Firstpass height": "Höhe Erstdurchlauf",
"Denoising strength": "Denoising stärke", "Denoising strength": "Denoisingstärke",
"Batch count": "Batch anzahl", "Batch count": "Batchanzahl",
"Batch size": "Batch größe", "Batch size": "Batchgröße",
"CFG Scale": "CFG Scale", "CFG Scale": "CFG-Skala",
"Seed": "Seed", "Seed": "Seed",
"Extra": "Extra", "Extra": "Extra",
"Variation seed": "Variation seed", "Variation seed": "Variationsseed",
"Variation strength": "Variation strength", "Variation strength": "Variationsstärke",
"Resize seed from width": "Seed von der Breite her ändern", "Resize seed from width": "Seed von Breite ändern",
"Resize seed from height": " Seed von der Breite her ändern", "Resize seed from height": "Seed von Höhe ändern",
"Script": "Script", "Script": "Skript",
"None": "Nichts", "None": "Nichts",
"Prompt matrix": "Prompt matrix", "Prompt matrix": "Promptmatrix",
"Prompts from file or textbox": "Prompts von Datei oder Textbox", "Prompts from file or textbox": "Prompts aus Datei oder Textfeld",
"X/Y plot": "X/Y graph", "X/Y plot": "X/Y Graf",
"Put variable parts at start of prompt": "Variable teile am start des Prompt setzen", "Put variable parts at start of prompt": "Variable teile am start des Prompt setzen",
"Show Textbox": "Textbox Anzeigen", "Iterate seed every line": "Iterate seed every line",
"File with inputs": "Datei mit Inputwerten", "List of prompt inputs": "List of prompt inputs",
"Prompts": "Prompts", "Upload prompt inputs": "Upload prompt inputs",
"X type": "X typ", "X type": "X-Typ",
"Nothing": "Nichts", "Nothing": "Nichts",
"Var. seed": "Var. seed", "Var. seed": "Var. seed",
"Var. strength": "Var. strength", "Var. strength": "Var. strength",
"Steps": "Steps", "Steps": "Schritte",
"Prompt S/R": "Prompt S/R", "Prompt S/R": "Prompt Suchen/Ersetzen",
"Prompt order": "Prompt order", "Prompt order": "Promptreihenfolge",
"Sampler": "Sampler", "Sampler": "Sampler",
"Checkpoint name": "Checkpoint name", "Checkpoint name": "Checkpointname",
"Hypernetwork": "Hypernetwork", "Hypernetwork": "Hypernetwork",
"Hypernet str.": "Hypernet str.", "Hypernet str.": "Hypernet str.",
"Sigma Churn": "Sigma Churn", "Sigma Churn": "Sigma Churn",
@ -94,76 +93,78 @@
"Eta": "Eta", "Eta": "Eta",
"Clip skip": "Clip skip", "Clip skip": "Clip skip",
"Denoising": "Denoising", "Denoising": "Denoising",
"X values": "X values", "Cond. Image Mask Weight": "Cond. Image Mask Weight",
"Y type": "Y type", "X values": "X-Werte",
"Y values": "Y values", "Y type": "Y-Typ",
"Y values": "Y-Werte",
"Draw legend": "Legende zeichnen", "Draw legend": "Legende zeichnen",
"Include Separate Images": "Seperate Bilder hinzufügen", "Include Separate Images": "Seperate Bilder hinzufügen",
"Keep -1 for seeds": "-1 als Seed behalten", "Keep -1 for seeds": "-1 als Seed behalten",
"Drop Image Here": "Bild hier ablegen",
"Save": "Speichern", "Save": "Speichern",
"Send to img2img": "Senden an img2img", "Send to img2img": "An img2img senden",
"Send to inpaint": "Senden an inpaint", "Send to inpaint": "An Inpaint senden",
"Send to extras": "Senden an extras", "Send to extras": "An Extras senden",
"Make Zip when Save?": "Zip beim speichern erstellen?", "Make Zip when Save?": "Zip beim Speichern erstellen?",
"Textbox": "Textbox", "Textbox": "Textfeld",
"Interrogate\nCLIP": "CLIP\nAbfragen", "Interrogate\nCLIP": "Interrogate\nCLIP",
"Interrogate\nDeepBooru": "Interrogate\nDeepBooru",
"Inpaint": "Inpaint", "Inpaint": "Inpaint",
"Batch img2img": "Batch img2img", "Batch img2img": "Batch img2img",
"Image for img2img": "Bild für img2img", "Image for img2img": "Bild für img2img",
"Image for inpainting with mask": "Bild für inpainting mit maske", "Drop Image Here": "Bild hier ablegen",
"Image for inpainting with mask": "Bild für inpainting mit Maske",
"Mask": "Maske", "Mask": "Maske",
"Mask blur": "Masken Unschärfe", "Mask blur": "Maskenunschärfe",
"Mask mode": "Masken modus", "Mask mode": "Maskenmodus",
"Draw mask": "Maske zeichnen", "Draw mask": "Maske zeichnen",
"Upload mask": "Maske Hochladen", "Upload mask": "Maske hochladen",
"Masking mode": "Modus zum Maskieren", "Masking mode": "Maskierungsmodus",
"Inpaint masked": "Inpaint maskiertes", "Inpaint masked": "Maskiertes inpainten",
"Inpaint not masked": "Inpaint nicht maskiertes", "Inpaint not masked": "Nicht maskiertes inpainten",
"Masked content": "Maskierter Inhalt", "Masked content": "Maskierter Inhalt",
"fill": "ausfüllen", "fill": "ausfüllen",
"original": "original", "original": "original",
"latent noise": "latent noise", "latent noise": "latent noise",
"latent nothing": "latent nothing", "latent nothing": "latent nothing",
"Inpaint at full resolution": "Inpaint mit voller Auflösung", "Inpaint at full resolution": "Inpaint mit voller Auflösung",
"Inpaint at full resolution padding, pixels": "Inpaint mit voller Auflösung Abstand, Pixels", "Inpaint at full resolution padding, pixels": "Inpaint bei voller Auflösung Abstand, Pixel",
"Process images in a directory on the same machine where the server is running.": "Bilder in einem Verzeichnis auf demselben Rechner verarbeiten, auf dem der Server läuft.", "Process images in a directory on the same machine where the server is running.": "Bilder in einem Verzeichnis auf demselben Rechner verarbeiten, auf dem der Server läuft.",
"Use an empty output directory to save pictures normally instead of writing to the output directory.": "Ein leeres Ausgabeverzeichnis verwenden, um Bilder normal zu speichern, anstatt in das Ausgabeverzeichnis zu schreiben.", "Use an empty output directory to save pictures normally instead of writing to the output directory.": "Ein leeres Ausgabeverzeichnis verwenden, um Bilder normal zu speichern, anstatt in das Ausgabeverzeichnis zu schreiben.",
"Input directory": "Input Verzeichnis", "Input directory": "Eingabeverzeichnis",
"Output directory": "Output verzeichnis", "Output directory": "Ausgabeverzeichnis",
"Resize mode": "Größe anpassen - Modus", "Resize mode": "Größenänderungsmodus",
"Just resize": "Nur größe anpassen", "Just resize": "Nur Größe anpassen",
"Crop and resize": "Zuschneiden und größe anpassen", "Crop and resize": "Zuschneiden und Größe anpassen",
"Resize and fill": "Größe anpassen und ausfüllen", "Resize and fill": "Größe anpassen und ausfüllen",
"img2img alternative test": "img2img alternative test", "img2img alternative test": "img2img alternativer Test",
"Loopback": "Loopback", "Loopback": "Loopback",
"Outpainting mk2": "Outpainting mk2", "Outpainting mk2": "Outpainting mk2",
"Poor man's outpainting": "Poor man's outpainting", "Poor man's outpainting": "Poor man's outpainting",
"SD upscale": "SD upscale", "SD upscale": "SD-Upscale",
"should be 2 or lower.": "sollte 2 oder niedriger sein.", "should be 2 or lower.": "Sollte 2 oder niedriger sein.",
"Override `Sampling method` to Euler?(this method is built for it)": "`Sampling method` a Euler überschreiben? (diese methode is dafür ausgelegt)", "Override `Sampling method` to Euler?(this method is built for it)": "`Samplingmethode` auf Euler setzen? (Diese Methode is dafür ausgelegt)",
"Override `prompt` to the same value as `original prompt`?(and `negative prompt`)": "`prompt` zum gleichen wert wie `Originaler prompt` überschreiben? (und `Negativer prompt`)", "Override `prompt` to the same value as `original prompt`?(and `negative prompt`)": "`Prompt` auf denselben Wert wie `Originale Prompt` (und `Negative Prompt`) setzen?",
"Original prompt": "Originaler Prompt", "Original prompt": "Originale Prompt",
"Original negative prompt": "Originaler negativer prompt", "Original negative prompt": "Originale negative Prompt",
"Override `Sampling Steps` to the same value as `Decode steps`?": "`Sampling Steps` zum gleichen wert wie `Decode steps` überschreiben?", "Override `Sampling Steps` to the same value as `Decode steps`?": "`Samplingschritte` auf denselben Wert wie `Dekodierschritte` setzen?",
"Decode steps": "Decode steps", "Decode steps": "Dekodierschritte",
"Override `Denoising strength` to 1?": "`Denoising strength` zu 1 überschreiben?", "Override `Denoising strength` to 1?": "`Denoisingstärke auf 1 setzen?",
"Decode CFG scale": "Decode CFG scale", "Decode CFG scale": "CFG-Skala dekodieren",
"Randomness": "Zufälligkeit", "Randomness": "Zufälligkeit",
"Sigma adjustment for finding noise for image": "Sigma anpassungen um noise für Bilder zu finden.", "Sigma adjustment for finding noise for image": "Sigma-Anpassung für die Suche nach Noise des Bildes",
"Loops": "Loops", "Loops": "Schleifen",
"Denoising strength change factor": "Denoising strength change factor", "Denoising strength change factor": "Denoising strength change factor",
"Recommended settings: Sampling Steps: 80-100, Sampler: Euler a, Denoising strength: 0.8": "Empfohlene Einstellungen: Sampling Schritte: 80-100, Sampler Methode: Euler a, Denoising stärke: 0.8", "Recommended settings: Sampling Steps: 80-100, Sampler: Euler a, Denoising strength: 0.8": "Empfohlene Einstellungen: Samplingschritte: 80-100, Samplermethode: Euler a, Denoisingstärke: 0.8",
"Pixels to expand": "Anz. Pixel zum erweitern", "Pixels to expand": "Pixel zum Erweitern",
"Outpainting direction": "Outpainting Richtung", "Outpainting direction": "Outpainting Richtung",
"left": "Links", "left": "Links",
"right": "Rechts", "right": "Rechts",
"up": "Hoch", "up": "Hoch",
"down": "Runter", "down": "Runter",
"Fall-off exponent (lower=higher detail)": "Fall-off exponent (weniger=mehr details)", "Fall-off exponent (lower=higher detail)": "Abfallexponent (niedriger=mehr Details)",
"Color variation": "Farb variationen", "Color variation": "Farbabweichung",
"Will upscale the image to twice the dimensions; use width and height sliders to set tile size": "Skaliert das Bild auf die doppelte Größe; Benutz die Schieberegler für Breite und Höhe, um die Kachelgröße einzustellen", "Will upscale the image to twice the dimensions; use width and height sliders to set tile size": "Skaliert das Bild auf die doppelte Größe; Benutze die Schieberegler für Breite und Höhe, um die Kachelgröße einzustellen",
"Tile overlap": "Kacheln überlappungen", "Tile overlap": "Kachelüberlappung",
"Upscaler": "Upscaler", "Upscaler": "Upscaler",
"Lanczos": "Lanczos", "Lanczos": "Lanczos",
"LDSR": "LDSR", "LDSR": "LDSR",
@ -171,249 +172,287 @@
"ScuNET GAN": "ScuNET GAN", "ScuNET GAN": "ScuNET GAN",
"ScuNET PSNR": "ScuNET PSNR", "ScuNET PSNR": "ScuNET PSNR",
"ESRGAN_4x": "ESRGAN_4x", "ESRGAN_4x": "ESRGAN_4x",
"Single Image": "Ein Bild", "Single Image": "Einzelnes Bild",
"Batch Process": "Massenverarbeitung", "Batch Process": "Batchverarbeitung",
"Batch from Directory": "Massenverarbeitung vom Verzeichnis", "Batch from Directory": "Batchverarbeitung aus Verzeichnis",
"Source": "Quelle", "Source": "Quelle",
"Show result images": "Bildergebnisse zeigen", "Show result images": "Bildergebnisse zeigen",
"Scale by": "Skalieren von", "Scale by": "Skalieren um",
"Scale to": "Skalieren zu", "Scale to": "Skalieren zu",
"Resize": "Größe anpassen", "Resize": "Größe anpassen",
"Crop to fit": "Zuschneiden damit es passt", "Crop to fit": "Zuschneiden damit es passt",
"Upscaler 2 visibility": "Upscaler 2 sichtbarkeit", "Upscaler 2 visibility": "Upscaler 2 Sichtbarkeit",
"GFPGAN visibility": "GFPGAN sichtbarkeit", "GFPGAN visibility": "GFPGAN Sichtbarkeit",
"CodeFormer visibility": "CodeFormer sichtbarkeit", "CodeFormer visibility": "CodeFormer Sichtbarkeit",
"CodeFormer weight (0 = maximum effect, 1 = minimum effect)": "CodeFormer gewicht (0 = maximaler effekt, 1 = minimalster effekt)", "CodeFormer weight (0 = maximum effect, 1 = minimum effect)": "CodeFormer Gewichtung (0 = maximale Wirkung, 1 = minimale Wirkung)",
"Open output directory": "Zielverzeichnis öffnen", "Upscale Before Restoring Faces": "Upscale Before Restoring Faces",
"Send to txt2img": "Senden an txt2img", "Send to txt2img": "An txt2img senden",
"A merger of the two checkpoints will be generated in your": "Die zusammgeführten Checkpoints werden gespeichert unter", "A merger of the two checkpoints will be generated in your": "Die zusammgeführten Checkpoints werden gespeichert unter",
"checkpoint": "checkpoint", "checkpoint": "Checkpoint",
"directory.": "Verzeichnis.", "directory.": "Verzeichnis.",
"Primary model (A)": "Primäres Modell (A)", "Primary model (A)": "Primäres Modell (A)",
"Secondary model (B)": "Sekundäres Modell (B)", "Secondary model (B)": "Sekundäres Modell (B)",
"Tertiary model (C)": "Tertiäres Modell (C)", "Tertiary model (C)": "Tertiäres Modell (C)",
"Custom Name (Optional)": "Eigener Name (Optional)", "Custom Name (Optional)": "Eigener Name (Optional)",
"Multiplier (M) - set to 0 to get model A": "Multiplier (M) - auf 0 setzen um Modell A zu bekommen", "Multiplier (M) - set to 0 to get model A": "Multiplikator (M) - auf 0 setzen, um Modell A zu erhalten",
"Interpolation Method": "Interpolationsmethode", "Interpolation Method": "Interpolationsmethode",
"Weighted sum": "Weighted sum", "Weighted sum": "Weighted sum",
"Add difference": "Add difference", "Add difference": "Add difference",
"Save as float16": "Speichern als float16", "Save as float16": "Speichern als float16",
"See": "Siehe ", "See": "Siehe ",
"wiki": "wiki ", "wiki": "Wiki ",
"for detailed explanation.": "für eine detailierte erklärung.", "for detailed explanation.": "für eine ausführliche Erklärung.",
"Create embedding": "Embedding erstellen", "Create embedding": "Embedding erstellen",
"Create hypernetwork": "Hypernetwork erstellen", "Create hypernetwork": "Hypernetwork erstellen",
"Preprocess images": "Bilder vorbereiten", "Preprocess images": "Bilder vorbereiten",
"Name": "Name", "Name": "Name",
"Initialization text": "Initialisierungstext", "Initialization text": "Initialisierungstext",
"Number of vectors per token": "Anzahl der vektoren pro token", "Number of vectors per token": "Anzahl der Vektoren pro Token",
"Overwrite Old Embedding": "Alte Embeddings überschreiben", "Overwrite Old Embedding": "Alte Embeddings überschreiben",
"Modules": "Module", "Modules": "Module",
"Enter hypernetwork layer structure": "Hypernetwork-Schichtstruktur angeben", "Enter hypernetwork layer structure": "Hypernetwork-Ebenenstruktur angeben",
"Select activation function of hypernetwork": "Aktivierungsfunktion des Hypernetwork auswählen", "Select activation function of hypernetwork": "Aktivierungsfunktion des Hypernetwork auswählen",
"linear": "linear", "linear": "linear",
"relu": "relu", "relu": "relu",
"leakyrelu": "leakyrelu", "leakyrelu": "leakyrelu",
"elu": "elu", "elu": "elu",
"swish": "swish", "swish": "swish",
"Add layer normalization": "Schicht normalisierung hinzufügen", "tanh": "tanh",
"sigmoid": "sigmoid",
"celu": "celu",
"gelu": "gelu",
"glu": "glu",
"hardshrink": "hardshrink",
"hardsigmoid": "hardsigmoid",
"hardtanh": "hardtanh",
"logsigmoid": "logsigmoid",
"logsoftmax": "logsoftmax",
"mish": "mish",
"prelu": "prelu",
"rrelu": "rrelu",
"relu6": "relu6",
"selu": "selu",
"silu": "silu",
"softmax": "softmax",
"softmax2d": "softmax2d",
"softmin": "softmin",
"softplus": "softplus",
"softshrink": "softshrink",
"softsign": "softsign",
"tanhshrink": "tanhshrink",
"threshold": "threshold",
"Select Layer weights initialization. relu-like - Kaiming, sigmoid-like - Xavier is recommended": "Auswahl der Initialisierung der Ebenengewichte. Empfohlen wird relu-like - Kaiming, sigmoid-like - Xavier",
"Normal": "Normal",
"KaimingUniform": "KaimingUniform",
"KaimingNormal": "KaimingNormal",
"XavierUniform": "XavierUniform",
"XavierNormal": "XavierNormal",
"Add layer normalization": "Ebenennormalisierung hinzufügen",
"Use dropout": "Dropout benutzen", "Use dropout": "Dropout benutzen",
"Overwrite Old Hypernetwork": "Altes Hypernetwork überschreiben", "Overwrite Old Hypernetwork": "Altes Hypernetwork überschreiben",
"Source directory": "Quellenverzeichnis", "Source directory": "Quellenverzeichnis",
"Destination directory": "Zielverzeichnis", "Destination directory": "Zielverzeichnis",
"Existing Caption txt Action": "Vorhandene Beschriftung der txt Aktion", "Existing Caption txt Action": "Vorhandene Beschriftung der txt",
"ignore": "ignorieren", "ignore": "ignorieren",
"copy": "kopieren", "copy": "kopieren",
"prepend": "vorangestellt", "prepend": "voranstellen",
"append": "anhängen", "append": "anhängen",
"Create flipped copies": "Gespiegelte Bilder erstellen", "Create flipped copies": "Gespiegelte Bilder erstellen",
"Split oversized images": "Übergroße Bilder aufteilen", "Split oversized images": "Übergroße Bilder aufteilen",
"Use BLIP for caption": "BLIP für Überschrift nutzen", "Auto focal point crop": "Automatisch auf Fokuspunkt zuschneiden",
"Use deepbooru for caption": "Deepbooru für Überschrift nutzen", "Use BLIP for caption": "BLIP für Beschriftung nutzen",
"Split image threshold": "Bilder aufteilen Grenzwert", "Use deepbooru for caption": "Deepbooru für Beschriftung nutzen",
"Split image overlap ratio": "Überschneidungsverhältnis beim Bilder aufteilen", "Split image threshold": "Schwellenwert für die Aufteilung von Bildern",
"Split image overlap ratio": "Überschneidungsverhältnis der Teilbilder",
"Focal point face weight": "Fokuspunkt Gesicht Gewicht",
"Focal point entropy weight": "Fokuspunkt Entropie Gewicht",
"Focal point edges weight": "Fokuspunkt Kanten Gewicht",
"Create debug image": "Testbild erstellen",
"Preprocess": "Vorbereiten", "Preprocess": "Vorbereiten",
"Train an embedding or Hypernetwork; you must specify a directory with a set of 1:1 ratio images": "Trainieren eines Embeddings oder ein Hypernetwork; Sie müssen ein Verzeichnis mit einem Satz von Bildern im Verhältnis 1:1 angeben", "Train an embedding or Hypernetwork; you must specify a directory with a set of 1:1 ratio images": "Trainieren eines Embeddings oder eines Hypernetworks; Sie müssen ein Verzeichnis mit einem Satz von Bildern im Verhältnis 1:1 angeben",
"[wiki]": "[wiki]", "[wiki]": "[Wiki]",
"Embedding": "Embedding", "Embedding": "Embedding",
"Embedding Learning rate": "Embedding Learning rate", "Embedding Learning rate": "Embedding Lernrate",
"Hypernetwork Learning rate": "Hypernetwork Learning rate", "Hypernetwork Learning rate": "Hypernetwork Lernrate",
"Dataset directory": "Dataset verzeichnis", "Dataset directory": "Datensatzverzeichnis",
"Log directory": "Log verzeichnis", "Log directory": "Protokollverzeichnis",
"Prompt template file": "Vorlage Datei für Prompt", "Prompt template file": "Prompt-Vorlagendatei",
"Max steps": "Max steps", "Max steps": "Max Schritte",
"Save an image to log directory every N steps, 0 to disable": "Alle N steps, ein Bild im Log Verzeichnis speichern, 0 zum deaktivieren", "Save an image to log directory every N steps, 0 to disable": "Speichere alle N Schritte ein Bild im Protokollverzeichnis, 0 zum Deaktivieren",
"Save a copy of embedding to log directory every N steps, 0 to disable": "Alle N steps, eine Kopie des Embedding im Log Verzeichnis speichern, 0 zum deaktivieren", "Save a copy of embedding to log directory every N steps, 0 to disable": "Speichere alle N Schritte eine Embeddingkopie im Protokollverzeichnis, 0 zum Deaktivieren",
"Save images with embedding in PNG chunks": "Das Bild mit embedding in PNG Fragmente speichern", "Save images with embedding in PNG chunks": "Speichere Bilder mit Embeddings in PNG Chunks",
"Read parameters (prompt, etc...) from txt2img tab when making previews": "Bei vorschau die Parameter (prompt, etc...) vom txt2img tab lesen", "Read parameters (prompt, etc...) from txt2img tab when making previews": "Lese Parameter (Prompt, etc...) aus dem txt2img-Tab beim Erstellen von Vorschaubildern.",
"Train Hypernetwork": "Hypernetwork Trainieren", "Train Hypernetwork": "Hypernetwork Trainieren",
"Train Embedding": "Embedding Trainieren", "Train Embedding": "Embedding Trainieren",
"Apply settings": "Einstellungen anwenden", "Apply settings": "Eintellungen anwenden",
"Saving images/grids": "Bilder/Raster speichern", "Saving images/grids": "Bilder/Raster speichern",
"Always save all generated images": "Grundsätzlich alle generieren Bilder speichern", "Always save all generated images": "Immer alle generierten Bilder speichern",
"File format for images": "Dateiformat für Bilder", "File format for images": "Dateiformat für Bilder",
"Images filename pattern": "Dateinamen vorlage für Bilder", "Images filename pattern": "Dateinamensmuster für Bilder",
"Add number to filename when saving": "Beim speichern, dem Dateinamen die Nummer anhängen", "Add number to filename when saving": "Beim speichern, dem Dateinamen Nummer anhängen",
"Always save all generated image grids": "Grundsätzlich alle generieren Raster speichern", "Always save all generated image grids": "Immer alle generierten Bildraster speichern",
"File format for grids": "Dateiformat für Raster", "File format for grids": "Dateiformat für Raster",
"Add extended info (seed, prompt) to filename when saving grid": "Speichern von Raster, erweiterte infos (seed, prompt) dem Dateinamen anhängen", "Add extended info (seed, prompt) to filename when saving grid": "Beim Speichern von Rastern zusätzliche Information (Seed, Prompt) hinzufügen",
"Do not save grids consisting of one picture": "Raster, die nur aus einem Bild bestehen, nicht speichern", "Do not save grids consisting of one picture": "Keine Raster speichern, die nur aus einem Bild bestehen",
"Prevent empty spots in grid (when set to autodetect)": "Lücken im Raster verhindern (falls aus autodetect gesetzt)", "Prevent empty spots in grid (when set to autodetect)": "Lücken im Raster verhindern (falls auf Auto-Erkennung gesetzt)",
"Grid row count; use -1 for autodetect and 0 for it to be same as batch size": "Raster reihen anzahl; -1 für Autodetect und 0 für die anzahl wie batch size", "Grid row count; use -1 for autodetect and 0 for it to be same as batch size": "Rasterreihenanzahl; -1 für Auto-Erkennung und 0 für die gleiche wie die Batchanzahl",
"Save text information about generation parameters as chunks to png files": "Information zu Generierungsparameter als Fragmente in PNG dateien speichern", "Save text information about generation parameters as chunks to png files": "Generationsparameter als Chunks in PNG-Dateien speichern",
"Create a text file next to every image with generation parameters.": "Textdatei mit Generierungsparameter seperat zu Bilddatei speichern", "Create a text file next to every image with generation parameters.": "Erstelle zu jedem Bild eine Textdatei, die die Generationsparameter enthält",
"Save a copy of image before doing face restoration.": "Kope des Bildes vor und nach Gesichtswiederhestellung speichern", "Save a copy of image before doing face restoration.": "Vor der Gesichtswiederhestellung eine Kopie des Bildes speichern",
"Quality for saved jpeg images": "Qualität der als JPEG gespeicherten Bilder", "Quality for saved jpeg images": "Qualität der JPEG-Bilder",
"If PNG image is larger than 4MB or any dimension is larger than 4000, downscale and save copy as JPG": "Wenn PNG Bild größer als 4MB oder Dimensionen Größer als 4000, herunterskalieren und als JPG speichern.", "If PNG image is larger than 4MB or any dimension is larger than 4000, downscale and save copy as JPG": "Wenn ein PNG-Bild größer als 4MB oder die Dimensionen größer als 4000 ist, herunterskalieren und als JPG speichern.",
"Use original name for output filename during batch process in extras tab": "Originaler name als Output Dateinamen benutzen während Massenverarbeitung in Extras tab.", "Use original name for output filename during batch process in extras tab": "Orginale Dateinamen als Ausgabenamen bei der Batchverarbeitung im Extras-Tab verwenden",
"When using 'Save' button, only save a single selected image": "Beim benutzen von 'Speichern', nur das gewählte Bild speichern.", "When using 'Save' button, only save a single selected image": "Bei der Benutzung des 'Speichern'-Knopfes, nur das ausgewählte Bild speichern",
"Do not add watermark to images": "Den Bildern kein Wasserzeichen hinzufügen", "Do not add watermark to images": "Den Bildern kein Wasserzeichen hinzufügen",
"Paths for saving": "Pfade zum speichern", "Paths for saving": "Pfade zum Speichern",
"Output directory for images; if empty, defaults to three directories below": "Ausgabeverzeichnis für Bilder: wenn leer fällt zurück auf drei Verzeichnisse unterhalb", "Output directory for images; if empty, defaults to three directories below": "Ausgabeverzeichnis für Bilder; Falls leer, werden die Pfade unterhalb verwendet",
"Output directory for txt2img images": "Ausgabeverzeichnis für txt2img", "Output directory for txt2img images": "Ausgabeverzeichnis für txt2img Bilder",
"Output directory for img2img images": "Ausgabeverzeichnis für img2img", "Output directory for img2img images": "Ausgabeverzeichnis für img2img Bilder",
"Output directory for images from extras tab": "Ausgabeverzeichnis für extras", "Output directory for images from extras tab": "Ausgabeverzeichnis für Extras-Tab Bilder",
"Output directory for grids; if empty, defaults to two directories below": "Ausgabeverzeichnis für Raster; wenn leer fällt zurück auf zwei Verzeichnisse unterhalb.", "Output directory for grids; if empty, defaults to two directories below": "Ausgabeverzeichnis für Raster; Falls leer, werden die Pfade unterhalb verwendet",
"Output directory for txt2img grids": "Ausgabeverzeichnis für txt2img Raster", "Output directory for txt2img grids": "Ausgabeverzeichnis für txt2img Raster",
"Output directory for img2img grids": "Ausgabeverzeichnis für img2img Raster", "Output directory for img2img grids": "Ausgabeverzeichnis für img2img Raster",
"Directory for saving images using the Save button": "Ausgabeverzeichnis Bilder für 'Speichern' Button", "Directory for saving images using the Save button": "Ausgabeverzeichnis für Bilder, die mit dem 'Speichern'-Knopf gespeichert wurden",
"Saving to a directory": "Speichern in ein Verzeichnis", "Saving to a directory": "Speichern in ein Verzeichnis",
"Save images to a subdirectory": "Bilder in ein Unterverzeichnis speichern", "Save images to a subdirectory": "Bilder in ein Unterverzeichnis speichern",
"Save grids to a subdirectory": "Raster in ein Unterverzeichnis speichern", "Save grids to a subdirectory": "Raster in ein Unterverzeichnis speichern",
"When using \"Save\" button, save images to a subdirectory": "Beim benutzen von 'Save' Button, Bilder in Unterverzeichnis speichern", "When using \"Save\" button, save images to a subdirectory": "Bilder bei der Benutzung des 'Speichern'-Knopfes in ein Unterverzeichnis speichern",
"Directory name pattern": "Verzeichnisname pattern", "Directory name pattern": "Muster für Verzeichnisnamen",
"Max prompt words for [prompt_words] pattern": "Maximale anzahl der Wörter für [prompt_words] pattern", "Max prompt words for [prompt_words] pattern": "Maximale Wortanzahl für [prompt_words] Muster",
"Upscaling": "Hochskalieren", "Upscaling": "Upscaling",
"Tile size for ESRGAN upscalers. 0 = no tiling.": "Kachelgröße für ESRGAN upscalers. 0 = keine Kacheln.", "Tile size for ESRGAN upscalers. 0 = no tiling.": "Kachelgröße für ESRGAN-Upscaler. 0 = keine Kacheln.",
"Tile overlap, in pixels for ESRGAN upscalers. Low values = visible seam.": "Kacheln überlappungen, größe in pixel für ESRGAN upscalers. Niedrige Zahl = Sichtbare übergänge.", "Tile overlap, in pixels for ESRGAN upscalers. Low values = visible seam.": "Kachelüberlappung in Pixeln für ESRGAN-Upscaler. Niedrige Werte = sichtbare Naht.",
"Tile size for all SwinIR.": "Kachelgröße für alle SwinIR.", "Tile size for all SwinIR.": "Kachelgröße für alle SwinIR.",
"Tile overlap, in pixels for SwinIR. Low values = visible seam.": "Kacheln überlappungen, größe in pixel für SwinIR. Niedrige Zahl = Sichtbare übergänge.", "Tile overlap, in pixels for SwinIR. Low values = visible seam.": "Kachelüberlappung in Pixeln für SwinIR. Niedrige Werte = sichtbare Naht.",
"LDSR processing steps. Lower = faster": "LDSR verarbeitungsschritte. niedriger = schneller", "LDSR processing steps. Lower = faster": "LDSR-Verarbeitungsschritte. Niedriger = schneller",
"Upscaler for img2img": "Upscaler für img2img", "Upscaler for img2img": "Upscaler für img2img",
"Upscale latent space image when doing hires. fix": "Upscale latent space beim ausführen von hires. fix", "Upscale latent space image when doing hires. fix": "Bild des Latent Space upscalen, wenn Highres. Fix benutzt wird",
"Face restoration": "Gesichtswiederhestellung", "Face restoration": "Gesichtswiederhestellung",
"CodeFormer weight parameter; 0 = maximum effect; 1 = minimum effect": "CodeFormer gewicht parameter; 0 = maximaler effekt; 1 = minimalster effekt", "CodeFormer weight parameter; 0 = maximum effect; 1 = minimum effect": "CodeFormer Gewichtung (0 = maximale Wirkung, 1 = minimale Wirkung)",
"Move face restoration model from VRAM into RAM after processing": "Gesichtswiederhestellungs-Modell nach Verarbeitung vom VRAM ins RAM verschieben", "Move face restoration model from VRAM into RAM after processing": "Verschiebe Gesichtswiederhestellung-Modell nach der Verarbeitung vom VRAM in den RAM",
"System": "System", "System": "System",
"VRAM usage polls per second during generation. Set to 0 to disable.": "Abfragen pro Sekunde zur VRAM auslastung. 0 = deaktiviert", "VRAM usage polls per second during generation. Set to 0 to disable.": "VRAM-Nutzungsabfragen pro Sekunde während der Generierung. Zum Deaktivieren auf 0 setzen.",
"Always print all generation info to standard output": "Grundsätzlich alle Generierungsparameter im standard output ausgeben", "Always print all generation info to standard output": "Immer alle Generationsinformationen in der Standardausgabe ausgeben",
"Add a second progress bar to the console that shows progress for an entire job.": "Zweite Fortschrittsleiste in der Konsole hinzufügen, die den Fortschitt für den ganzen Job anzeigt.", "Add a second progress bar to the console that shows progress for an entire job.": "Der Konsole einen zweiten Fortschrittsbalken hinzufügen, der den Fortschritt eines gesamten Auftrags anzeigt.",
"Training": "Training", "Training": "Training",
"Move VAE and CLIP to RAM when training hypernetwork. Saves VRAM.": "VAE und CLIP während Hypernetwork-Training in RAM verschieben. Spart VRAM.", "Move VAE and CLIP to RAM when training hypernetwork. Saves VRAM.": "VAE und CLIP während des Hypernetwork-Trainings in den RAM verschieben. Spart VRAM.",
"Filename word regex": "Filename word regex", "Filename word regex": "Filename word regex",
"Filename join string": "Filename join string", "Filename join string": "Filename join string",
"Number of repeats for a single input image per epoch; used only for displaying epoch number": "Anzahl der wiederholungen für ein einziges Input-Bild pro epoche; nur dazu genutzt um epochen nummer anzuzeigen", "Number of repeats for a single input image per epoch; used only for displaying epoch number": "Anzahl der Wiederholungen für ein einzelnes Eingabebild pro Epoche; wird nur für die Anzeige der Epochennummer verwendet",
"Save an csv containing the loss to log directory every N steps, 0 to disable": "CSV die den 'loss' alle N steps beinhaltet. 0 = deaktiviert", "Save an csv containing the loss to log directory every N steps, 0 to disable": "Speichere eine csv-Datei, die den Verlust enthält, im Protokollverzeichnis alle N Schritte, 0 zum Deaktivieren",
"Stable Diffusion": "Stable Diffusion", "Stable Diffusion": "Stable Diffusion",
"Checkpoints to cache in RAM": "Anz. Checkpoints im RAM zu Cachen", "Checkpoints to cache in RAM": "Checkpoints zum Zwischenspeichern im RAM",
"Hypernetwork strength": "Hypernetwork stärke", "Hypernetwork strength": "Hypernetworkstärke",
"Apply color correction to img2img results to match original colors.": "Farbkorrigierungen auf img2img anwenden um den Original zu gleichen.", "Inpainting conditioning mask strength": "Inpainting Stärke der Konditionierungsmaske",
"Save a copy of image before applying color correction to img2img results": "Eine Kopie vom Bild vor der anwendung der img2img Farbkorrigierungen speichern.", "Apply color correction to img2img results to match original colors.": "Farbkorrektur auf die img2img-Ergebnisse anwenden, damit sie den Originalfarben entsprechen.",
"With img2img, do exactly the amount of steps the slider specifies (normally you'd do less with less denoising).": "Mit img2img, führe die exakte anzahl an steps aus, die im Slider angegeben sind. (Im Normalfall würdest du mit Denoising weniger nehmen)", "Save a copy of image before applying color correction to img2img results": "Vor dem Anwenden der Farbkorrektur eine Kopie des Bildes speichern",
"Enable quantization in K samplers for sharper and cleaner results. This may change existing seeds. Requires restart to apply.": "ermöglicht die Quantisierung in K-Samplern für schärfere und sauberere Ergebnisse. Dadurch können sich existierende Seeds verändern. Für die Anwendung ist ein Neustart erforderlich.", "With img2img, do exactly the amount of steps the slider specifies (normally you'd do less with less denoising).": "Mit img2img, die exakte Anzahl der Schritte ausführen, die vom Schieberegler angegeben sind (normalerweise weniger bei weniger Denoising).",
"Emphasis: use (text) to make model pay more attention to text and [text] to make it pay less attention": "Hervorhebung: Ermöglicht (text) damit das Modell dem Text (mehr) oder [weniger] gewichtung gibt.", "Enable quantization in K samplers for sharper and cleaner results. This may change existing seeds. Requires restart to apply.": "Aktivieren der Quantisierung in K-Samplern für schärfere und sauberere Ergebnisse. Dies kann bestehende Seeds verändern. Erfordert Neustart.",
"Use old emphasis implementation. Can be useful to reproduce old seeds.": "Verwendet die alte Implementierung von Hervorhebungen. Kann für das benutzen von älteren Seeds nützlich sein.", "Emphasis: use (text) to make model pay more attention to text and [text] to make it pay less attention": "Hervorhebung: Verwenden Sie (Text), damit das Modell dem Text mehr Aufmerksamkeit schenkt, und [Text], damit es ihm weniger Aufmerksamkeit schenkt",
"Make K-diffusion samplers produce same images in a batch as when making a single image": "Sorgt dafür, dass K-Diffusions-Sampler in einem Batch die gleichen Bilder erzeugen wie bei der Erstellung eines einzelnen Bildes.", "Use old emphasis implementation. Can be useful to reproduce old seeds.": "Verwenden der alten Implementierung von Hervorhebungen. Kann nützlich sein, um alte Seeds zu reproduzieren.",
"Increase coherency by padding from the last comma within n tokens when using more than 75 tokens": "Erhöhung der Kohärenz durch Auffüllen ab dem letzten Komma innerhalb von N Token, wenn mehr als 75 Token verwendet werden", "Make K-diffusion samplers produce same images in a batch as when making a single image": "K-Diffusions-Sampler erzeugen in einem Batch die gleichen Bilder, wie bei der Erstellung eines einzelnen Bildes",
"Filter NSFW content": "Filter NSFW inhalte", "Increase coherency by padding from the last comma within n tokens when using more than 75 tokens": "Erhöhung der Kohärenz durch Auffüllen ab dem letzten Komma innerhalb von n Token, wenn mehr als 75 Token verwendet werden",
"Stop At last layers of CLIP model": "Stop bei den letzten Schichten des CLIP-Modells", "Filter NSFW content": "NSFW-Inhalte filtern",
"Interrogate Options": "Optionen abfragen", "Stop At last layers of CLIP model": "Stoppe bei den letzten Schichten des CLIP-Modells",
"Interrogate: keep models in VRAM": "Abfragen: Modelle im VRAM behalten", "Interrogate Options": "Interrogate Optionen",
"Interrogate: use artists from artists.csv": "Abfragen: Künstler aus artists.csv verwenden", "Interrogate: keep models in VRAM": "Interrogate: Modelle im VRAM behalten",
"Interrogate: include ranks of model tags matches in results (Has no effect on caption-based interrogators).": "Abfragen: Rangfolge der Modell-Tags in den Ergebnissen berücksichtigen (hat keine Auswirkung auf beschriftungsbasierte Abfragesysteme).", "Interrogate: use artists from artists.csv": "Interrogate: Künstler aus 'artists.csv' nutzen",
"Interrogate: num_beams for BLIP": "Abfragen: num_beams für BLIP", "Interrogate: include ranks of model tags matches in results (Has no effect on caption-based interrogators).": "Interrogate: Die Rangfolge von Modell-Tags in den Ergebnissen einschließen (hat keine Auswirkung auf beschriftungsbasierte Interrogator).",
"Interrogate: minimum description length (excluding artists, etc..)": "Abfrage: Mindestlänge der Beschreibung (ohne Künstler usw.)", "Interrogate: num_beams for BLIP": "Interrogate: num_beams für BLIP",
"Interrogate: maximum description length": "Abfragen: maximale Länge der Beschreibung", "Interrogate: minimum description length (excluding artists, etc..)": "Interrogate: minimale Beschreibungslänge (Künstler, etc.. ausgenommen)",
"CLIP: maximum number of lines in text file (0 = No limit)": "CLIP: maximale Anzahl von Zeilen in der Textdatei (0 = keine Begrenzung)", "Interrogate: maximum description length": "Interrogate: maximale Beschreibungslänge",
"Interrogate: deepbooru score threshold": "Abfrage: deepbooru schwelle", "CLIP: maximum number of lines in text file (0 = No limit)": "CLIP: maximale Anzahl an Zeilen in Textdatei (0 = Kein Limit)",
"Interrogate: deepbooru sort alphabetically": "Abfrage: deepbooru alphabetisch sortieren", "Interrogate: deepbooru score threshold": "Interrogate: Deepbooru minimale Punkteanzahl",
"use spaces for tags in deepbooru": "Leerzeichen für Tags in deepbooru verwenden", "Interrogate: deepbooru sort alphabetically": "Interrogate: Sortiere Deepbooru alphabetisch",
"escape (\\) brackets in deepbooru (so they are used as literal brackets and not for emphasis)": "Escape-Klammern (\\) in deepbooru (damit sie als wörtliche Klammern und nicht zur Hervorhebung verwendet werden)", "use spaces for tags in deepbooru": "Benutze Leerzeichen für Deepbooru-Tags",
"User interface": "Benutzerinterface", "escape (\\) brackets in deepbooru (so they are used as literal brackets and not for emphasis)": "Escape-Klammern (\\) in Deepbooru (damit sie als normale Klammern und nicht zur Hervorhebung verwendet werden)",
"Show progressbar": "Fortschrittsleiste Anzeigen", "User interface": "Benutzeroberfläche",
"Show image creation progress every N sampling steps. Set 0 to disable.": "Zeigt den Fortschritt der Bilderstellung alle N Schritte an. 0 setzen, um zu deaktivieren.", "Show progressbar": "Fortschrittsleiste anzeigen",
"Show previews of all images generated in a batch as a grid": "Vorschaubilder aller in einem Batch erzeugten Bilder als Raster anzeigen", "Show image creation progress every N sampling steps. Set 0 to disable.": "Zeige eine Bildvorschau alle N Samplingschritte. Zum Deaktivieren auf 0 setzen.",
"Show grid in results for web": "Raster in den Ergebnissen für Web anzeigen", "Show previews of all images generated in a batch as a grid": "Zeige eine Vorschau aller erzeugten Bilder in einem Batch als Raster",
"Do not show any images in results for web": "Keine Bilder in den Ergebnissen für das Web anzeigen", "Show grid in results for web": "Zeige Raster in der Web-UI Vorschau",
"Add model hash to generation information": "Modell-Hash zu Generierungsinformationen hinzufügen", "Do not show any images in results for web": "Keine Bilder in der Web-UI Vorschau zeigen",
"Add model name to generation information": "Modell-Name zu Generierungsinformationen hinzufügen", "Add model hash to generation information": "Hash des Modells zu den Generationsinformationen hinzufügen",
"When reading generation parameters from text into UI (from PNG info or pasted text), do not change the selected model/checkpoint.": "Beim Einlesen von Generierungsparametern aus Text in die Benutzeroberfläche (aus PNG-Informationen oder eingefügtem Text) wird das ausgewählte Modell/der ausgewählte Checkpoint nicht geändert.", "Add model name to generation information": "Name des Modells zu den Generationsinformationen hinzufügen",
"Font for image grids that have text": "Schriftart für Bildraster, die Text enthalten", "When reading generation parameters from text into UI (from PNG info or pasted text), do not change the selected model/checkpoint.": "Beim Einlesen von Generierungsparametern aus Text in die Benutzeroberfläche (aus PNG-Info oder eingefügtem Text) wird das ausgewählte Modell/Checkpoint nicht geändert.",
"Enable full page image viewer": "Ganzseitenbildbetrachter einschalten", "Send seed when sending prompt or image to other interface": "Den Seed, beim Senden des Bildes/Prompt zu einem anderen Tab, mitsenden",
"Show images zoomed in by default in full page image viewer": "Bilder standardmäßig vergrößert im Ganzseitenbildbetrachter anzeigen", "Font for image grids that have text": "Schriftart für Bildraster mit Text",
"Show generation progress in window title.": "Generierungsfortschritt im Fenstertitel anzeigen.", "Enable full page image viewer": "Ganzseitenbildbetrachter aktivieren",
"Quicksettings list": "Quicksettings-Liste", "Show images zoomed in by default in full page image viewer": "Standardmäßig Bilder im Ganzseitenbildbetrachter vergrößert anzeigen",
"Localization (requires restart)": "Lokalisierung (erfordert Neustart)", "Show generation progress in window title.": "Generationsfortschritt im Fenstertitel anzeigen.",
"Sampler parameters": "Sampler parameter", "Quicksettings list": "Schnellzugriffsleiste",
"Hide samplers in user interface (requires restart)": "Ausblenden von Samplern in der Benutzeroberfläche (erfordert einen Neustart)", "Localization (requires restart)": "Lokalisierung (Erfordert Neustart)",
"eta (noise multiplier) for DDIM": "eta (noise multiplier) für DDIM", "Sampler parameters": "Samplerparameter",
"eta (noise multiplier) for ancestral samplers": "eta (noise multiplier) für ancestral samplers", "Hide samplers in user interface (requires restart)": "Sampler in der Benutzeroberfläche verstecken (Erfordert Neustart)",
"img2img DDIM discretize": "img2img DDIM discretize", "eta (noise multiplier) for DDIM": "Eta (noise Multiplikator) für DDIM",
"eta (noise multiplier) for ancestral samplers": "Eta (noise Multiplikator) für Ancestral Sampler",
"img2img DDIM discretize": "img2img DDIM diskretisieren",
"uniform": "uniform", "uniform": "uniform",
"quad": "quad", "quad": "quad",
"sigma churn": "sigma churn", "sigma churn": "sigma churn",
"sigma tmin": "sigma tmin", "sigma tmin": "sigma tmin",
"sigma noise": "sigma noise", "sigma noise": "sigma noise",
"Eta noise seed delta": "Eta noise seed delta", "Eta noise seed delta": "Eta noise seed delta",
"Request browser notifications": "Browser-Benachrichtigungen anfordern", "Request browser notifications": "Browserbenachrichtigungen anfordern",
"Download localization template": "Vorlage für Lokalisierung herunterladen", "Download localization template": "Vorlage für Lokalisierung herunterladen",
"Reload custom script bodies (No ui updates, No restart)": "Neu laden von benutzerdefinierten Skripten (keine Aktualisierung der Benutzeroberfläche, kein Neustart)", "Reload custom script bodies (No ui updates, No restart)": "Benutzerdefinierte Skripte neu laden (keine Aktualisierung der Benutzeroberfläche, kein Neustart)",
"Restart Gradio and Refresh components (Custom Scripts, ui.py, js and css only)": "Gradio neu starten und Komponenten aktualisieren (nur Custom Scripts, ui.py, js und css)", "Restart Gradio and Refresh components (Custom Scripts, ui.py, js and css only)": "Gradio neu starten und Komponenten aktualisieren (nur Custom Scripts, ui.py, js und css)",
"Prompt (press Ctrl+Enter or Alt+Enter to generate)": "Prompt (zum Erzeugen Strg+Eingabe oder Alt+Eingabe drücken)", "Prompt (press Ctrl+Enter or Alt+Enter to generate)": "Prompt (zum Erzeugen Strg+Eingabe oder Alt+Eingabe drücken)",
"Negative prompt (press Ctrl+Enter or Alt+Enter to generate)": "Prompt negativo (presiona Ctrl+Enter o Alt+Enter para generar)", "Negative prompt (press Ctrl+Enter or Alt+Enter to generate)": "Negative Prompt (zum Erzeugen Strg+Eingabe oder Alt+Eingabe drücken)",
"Add a random artist to the prompt.": "Zufälligen Künstler den Prompt hinzufügen.", "Add a random artist to the prompt.": "Zufälligen Künstler der Prompt hinzufügen.",
"Read generation parameters from prompt or last generation if prompt is empty into user interface.": "Import von Generierungsparameter aus dem Prompt oder aus der letzten Generierung, wenn das Prompt in der Benutzeroberfläche leer ist.", "Read generation parameters from prompt or last generation if prompt is empty into user interface.": "Lesen der Generationsparameter aus der Prompt oder der letzten Generation (wenn Prompt leer ist) in die Benutzeroberfläche.",
"Save style": "Style speichern", "Save style": "Stil speichern",
"Apply selected styles to current prompt": "Momentan ausgewählte styles auf den Prompt anwenden", "Apply selected styles to current prompt": "Momentan ausgewählte Stile auf die Prompt anwenden",
"Stop processing current image and continue processing.": "Verarbeitung des momentanen Bildes abbrechen und zum nächsten fortsetzen.", "Stop processing current image and continue processing.": "Verarbeitung des momentanen Bildes abbrechen und Verarbeitung fortsetzen.",
"Stop processing images and return any results accumulated so far.": "Verarbeitung abbrechen und alle bisherigen Bilder ausgeben.", "Stop processing images and return any results accumulated so far.": "Verarbeitung abbrechen und alle bisherigen Ergebnisse ausgeben.",
"Style to apply; styles have components for both positive and negative prompts and apply to both": "Style, der angwendet werden soll. Styles haben sowohl negative als auch positive prompt anteile, die auf beide angewendet werden.", "Style to apply; styles have components for both positive and negative prompts and apply to both": "Stil, der angwendet werden soll. Stile haben sowohl positive als auch negative Promptanteile und werden auf beide angewandt.",
"Do not do anything special": "Nichts besonderes machen", "Do not do anything special": "Nichts besonderes machen",
"Which algorithm to use to produce the image": "Der zu benutzende algorithmus für die Bildgeneration", "Which algorithm to use to produce the image": "Der zu benutzende Algorithmus für die Bildgeneration",
"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 - sehr kreativ, jeder kann unterschiedliche Bilder, abhängig von der Step/Schritt anzahl bekommen. Werte höher als 30-40 helfen nicht.", "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 - sehr kreativ, kann sehr unterschiedliche Bilder in Abhängigkeit von der Schrittanzahl bekommen. Werte höher als 30-40 helfen nicht.",
"Denoising Diffusion Implicit Models - best at inpainting": "Denoising Diffusion Implicit Models - am besten für img2img inpainting", "Denoising Diffusion Implicit Models - best at inpainting": "Denoising Diffusion Implicit Modelle - am besten für inpainting",
"Produce an image that can be tiled.": "Bild erzeugen, dass gekachelt werden kann.", "Produce an image that can be tiled.": "Bild erzeugen, dass gekachelt werden kann.",
"Use a two step process to partially create an image at smaller resolution, upscale, and then improve details in it without changing composition": "Verwendung eines zweistufigen Prozess, um ein Bild teilweise mit geringerer Auflösung zu erstellen, hochzuskalieren und dann die Details zu verbessern, ohne die zusammensetzung zu verändern.", "Use a two step process to partially create an image at smaller resolution, upscale, and then improve details in it without changing composition": "Verwendung eines zweistufigen Prozesses, um ein Bild mit geringerer Auflösung zu erstellen, hochzuskalieren und dann die Details zu verbessern, ohne die Komposition zu verändern.",
"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.": "Bestimmt, wie wenig Bezug der Algorithmus zu dem Inhalt des Bildes haben soll. Bei 0 ändert sich nichts, und bei 1 erhalten Sie ein Bild ohne Bezug. Bei Werten unter 1,0 erfolgt die Verarbeitung in weniger Schritten, als der Schieberegler Sampling-Schritte angibt.", "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.": "Bestimmt, wie wenig Bezug der Algorithmus zu dem Inhalt des Bildes haben soll. Bei 0 ändert sich nichts, und bei 1 besitzt das Bild keinen Bezug. Bei Werten unter 1,0 erfolgt die Verarbeitung in weniger Schritten, als der Schieberegler angibt.",
"How many batches of images to create": "Wie viele Stapel von Bildern erstellt werden sollen", "How many batches of images to create": "Wie viele Sätze von Bildern erstellt werden sollen",
"How many image to create in a single batch": "Wie viele Bilder in einem einzigen Stapel erstellt werden sollen", "How many image to create in a single batch": "Wie viele Bilder in einem Batch erstellt werden sollen",
"Classifier Free Guidance Scale - how strongly the image should conform to prompt - lower values produce more creative results": "Classifier Free Guidance Scale - wie stark das Bild der Aufforderung entsprechen soll - niedrigere Werte führen zu kreativeren Ergebnissen", "Classifier Free Guidance Scale - how strongly the image should conform to prompt - lower values produce more creative results": "Classifier Free Guidance Scale - wie stark das Bild der Prompt entsprechen soll - niedrigere Werte führen zu kreativeren Ergebnissen",
"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": "Ein Wert, der die Ausgabe des Zufallszahlengenerators bestimmt: Wenn Sie ein Bild mit denselben Parametern und demselben Seed wie ein anderes Bild erstellen, erhalten Sie dasselbe Ergebnis.", "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": "Ein Wert, der die Ausgabe des Zufallszahlengenerators bestimmt: Wenn ein Bild mit denselben Parametern und demselben Seed wie ein anderes Bild erstellt wird, erhält man dasselbe Ergebnis.",
"Set seed to -1, which will cause a new random number to be used every time": "Seed auf -1 setzen, so dass jedes Mal eine neue Zufallszahl verwendet wird", "Set seed to -1, which will cause a new random number to be used every time": "Seed auf -1 setzen, so dass jedes Mal eine neue Zufallszahl verwendet wird",
"Reuse seed from last generation, mostly useful if it was randomed": "Wiederverwendung des Seed der letzten Generation, meist nützlich, wenn es zufällig gewählt wurde", "Reuse seed from last generation, mostly useful if it was randomed": "Wiederverwendung des Seeds der letzten Generation, meist nützlich, wenn er zufällig gewählt wurde",
"Seed of a different picture to be mixed into the generation.": "Seed eines anderen Bildes, das bei der Erzeugung reingemischt wird.", "Seed of a different picture to be mixed into the generation.": "Seed eines anderen Bildes, der bei der Erzeugung reingemischt wird.",
"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).": "Wie stark die Veränderung sein soll. Bei 0 gibt es keinen Effekt. Bei 1 erhalten Sie das vollständige Bild mit variations Seed (außer bei ancestral samplers,wie Euler A, wo Sie nur etwas erhalten).", "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).": "Wie stark die Veränderung sein soll. Bei 0 gibt es keinen Effekt. Bei 1 erhält man das vollständige Bild mit dem Variationsseed (außer bei Ancestral Samplern, wie Euler A, wo man nur etwas erhält).",
"Make an attempt to produce a picture similar to what would have been produced with same seed at specified resolution": "Versuchen ein Bild zu erzeugen, das dem ähnelt, das mit demselben Seed bei der angegebenen Auflösung erzeugt worden wäre.", "Make an attempt to produce a picture similar to what would have been produced with same seed at specified resolution": "Versuche ein Bild zu erzeugen, das dem ähnelt, das mit dem Seed bei der angegebenen Auflösung erzeugt worden wäre.",
"Separate values for X axis using commas.": "Trennen Sie die Werte für die X-Achse durch Kommas.", "Separate values for X axis using commas.": "Trenne die Werte für die X-Achse durch Kommas.",
"Separate values for Y axis using commas.": "Trennen Sie die Werte für die Y-Achse durch Kommas.", "Separate values for Y axis using commas.": "Trenne die Werte für die Y-Achse durch Kommas.",
"Write image to a directory (default - log/images) and generation parameters into csv file.": "Bild in ein Verzeichnis schreiben (Standard - log/images) und Generierungsparameter in eine csv-Datei.", "Write image to a directory (default - log/images) and generation parameters into csv file.": "Bild in ein Verzeichnis (Standard - log/images) und Generationsparameter in eine csv-Datei schreiben.",
"Open images output directory": "Bildverzeichnis öffnen", "Open images output directory": "Ausgabeverzeichnis öffnen",
"How much to blur the mask before processing, in pixels.": "Wie stark die Maske vor der Verarbeitung verwischt werden soll, in Pixeln.", "How much to blur the mask before processing, in pixels.": "Wie stark die Maske vor der Verarbeitung weichgezeichnet werden soll, in Pixeln.",
"What to put inside the masked area before processing it with Stable Diffusion.": "Was soll in den maskierten Bereich vor der Verarbeitung mit Stable Diffusion.", "What to put inside the masked area before processing it with Stable Diffusion.": "Was in den maskierten Bereich vor der Verarbeitung mit Stable Diffusion soll.",
"fill it with colors of the image": "Füllen mit den Farben des Bildes", "fill it with colors of the image": "Füllen mit den Farben des Bildes",
"keep whatever was there originally": "Originalen Inhalt behalten", "keep whatever was there originally": "Originalen Inhalt behalten",
"fill it with latent space noise": "Füllen mit latent space noise", "fill it with latent space noise": "Füllen mit latent space noise",
"fill it with latent space zeroes": "Füllen mit latent space zeroes", "fill it with latent space zeroes": "Füllen mit latent space Nullen",
"Upscale masked region to target resolution, do inpainting, downscale back and paste into original image": "Hochskalieren des maskierten Bereichs auf die Zielauflösung, Inpainting, Zurückskalieren und Einfügen in das Originalbild.", "Upscale masked region to target resolution, do inpainting, downscale back and paste into original image": "Hochskalieren des maskierten Bereichs auf die Zielauflösung, Inpainting, Zurückskalieren und Einfügen in das Originalbild.",
"Resize image to target resolution. Unless height and width match, you will get incorrect aspect ratio.": "Die Größe des Bildes auf die gewünschte Auflösung ändern. Wenn Höhe und Breite nicht übereinstimmen, erhalten Sie ein falsches Seitenverhältnis.", "Resize image to target resolution. Unless height and width match, you will get incorrect aspect ratio.": "Die Größe des Bildes auf die gewünschte Auflösung ändern. Wenn Höhe und Breite nicht übereinstimmen, erhält man ein falsches Seitenverhältnis.",
"Resize the image so that entirety of target resolution is filled with the image. Crop parts that stick out.": "Die Größe des Bildes so ändern, dass die gesamte Zielauflösung mit dem Bild ausgefüllt wird. Herausragende Teile zuschneiden.", "Resize the image so that entirety of target resolution is filled with the image. Crop parts that stick out.": "Die Größe des Bildes so ändern, dass die gesamte Zielauflösung mit dem Bild ausgefüllt wird. Herausragende Teile werden abgeschnitten.",
"Resize the image so that entirety of image is inside target resolution. Fill empty space with image's colors.": "Die Größe des Bildes so ändern, dass die gesamte Zielauflösung mit dem Bild ausgefüllt wird. Herausragende Teile mit Farben des Bildes ausfüllen.", "Resize the image so that entirety of image is inside target resolution. Fill empty space with image's colors.": "Die Größe des Bildes so ändern, dass das gesamte Bild enthalten ist. Lücken werden mit Farben des Bildes ausgefüllt.",
"How many times to repeat processing an image and using it as input for the next iteration": "Wie oft soll die Verarbeitung eines Bildes wiederholt werden, um es als Eingabe für die nächste Iteration zu verwenden", "How many times to repeat processing an image and using it as input for the next iteration": "Wie oft die Verarbeitung eines Bildes wiederholt und als Eingabe für die nächste Iteration verwendet werden soll",
"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.": "Im Loopback-Modus wird die Stärke der Rauschunterdrückung in jeder Schleife mit diesem Wert multipliziert. <1 bedeutet abnehmende Vielfalt, so dass Ihre Sequenz zu einem festen Bild konvergiert. >1 bedeutet zunehmende Vielfalt, so dass die Sequenz immer chaotischer wird..", "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.": "Im Loopback-Modus wird die Denoisingstärke in jeder Schleife mit diesem Wert multipliziert. <1 bedeutet abnehmende Vielfalt, so dass die Sequenz zu einem festen Bild konvergiert. >1 bedeutet zunehmende Vielfalt, so dass die Sequenz immer chaotischer wird.",
"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.": "Wie viel Pixel sollten sich beim SD-Upscale zwischen den Kacheln überlappen? Die Kacheln überlappen sich so, dass beim Zusammenfügen zu einem Bild keine deutlich sichtbare Naht entsteht..", "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.": "Wie viel Pixel sich beim SD-Upscale zwischen den Kacheln überlappen. Die Kacheln überlappen sich so, dass beim Zusammenfügen zu einem Bild keine deutlich sichtbare Naht entsteht.",
"A directory on the same machine where the server is running.": "Ein Verzeichnis auf demselben Rechner, auf dem der Server läuft.", "A directory on the same machine where the server is running.": "Ein Verzeichnis auf demselben Rechner, auf dem der Server läuft.",
"Leave blank to save images to the default path.": "Leer lassen, um Bilder im Standardpfad zu speichern.", "Leave blank to save images to the default path.": "Leer lassen, um Bilder im Standardpfad zu speichern.",
"Result = A * (1 - M) + B * M": "Ergebnis = A * (1 - M) + B * M", "Result = A * (1 - M) + B * M": "Ergebnis = A * (1 - M) + B * M",
"Result = A + (B - C) * M": "Ergebnis = A + (B - C) * M", "Result = A + (B - C) * M": "Ergebnis = A + (B - C) * M",
"1st and last digit must be 1. ex:'1, 2, 1'": "Erste und letzte Ziffer muss 1 sein. Bspw:'1, 2, 1'", "1st and last digit must be 1. ex:'1, 2, 1'": "Erste und letzte Ziffer müssen 1 sein. Bspl:'1, 2, 1'",
"Path to directory with input images": "Pfad zum Verzeichnis mit den Eingabebildern", "Path to directory with input images": "Pfad zum Verzeichnis mit den Eingabebildern",
"Path to directory where to write outputs": "Pfad zum Verzeichnis, in das die Ausgaben geschrieben werden sollen", "Path to directory where to write outputs": "Pfad zum Verzeichnis, wo die Ausgaben gespeichert werden",
"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.": "Verwenden Sie die folgenden Tags, um festzulegen, wie die Dateinamen für Bilder ausgewählt werden: [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]; leer lassen, um Standardwerte zu verwenden.", "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.": "Verwende die folgenden Tags, um festzulegen, wie die Dateinamen für Bilder ausgewählt werden: [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]; leer lassen, um Standardwerte zu verwenden.",
"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.": "Wenn diese Option aktiviert ist, wird den erstellten Bildern kein unsichtbares Wasserzeichen hinzugefügt. Achtung: Wenn Sie kein Wasserzeichen hinzufügen, verhalten Sie sich möglicherweise unethisch gegenüber sensiblen Personen.", "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.": "Wenn diese Option aktiviert ist, wird den erstellten Bildern kein Wasserzeichen hinzugefügt. Achtung: Wenn Sie kein Wasserzeichen hinzufügen, verhalten Sie sich möglicherweise unethisch.",
"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.": "Verwenden Sie die folgenden Tags, um festzulegen, wie Unterverzeichnisse für Bilder und Raster ausgewählt werden: [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]; leer lassen, um Standardwerte zu verwenden.", "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.": "Verwenden Sie die folgenden Tags, um festzulegen, wie Unterverzeichnisse für Bilder und Raster ausgewählt werden: [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]; leer lassen, um Standardwerte zu verwenden.",
"Restore low quality faces using GFPGAN neural network": "Wiederherstellung von Gesichtern schlechter Qualität mit GFPGAN neural network", "Restore low quality faces using GFPGAN neural network": "Wiederherstellung von Gesichtern schlechter Qualität mit dem neuralen Netzwerk 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.": "Dieser reguläre Ausdruck wird verwendet, um Wörter aus dem Dateinamen zu extrahieren, die dann mit der unten stehenden Option zu einem Beschriftungstext für das Training zusammengefügt werden. Leer lassen, um den Text des Dateinamens so zu belassen, wie er ist.", "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.": "Dieser reguläre Ausdruck wird verwendet, um Wörter aus dem Dateinamen zu extrahieren, die dann mit der unten stehenden Option zu einem Beschriftungstext für das Training zusammengefügt werden. Leer lassen, um den Text des Dateinamens so zu belassen, wie er ist.",
"This string will be used to join split words into a single line if the option above is enabled.": "Diese Zeichenfolge wird verwendet, um getrennte Wörter in einer einzigen Zeile zu verbinden, wenn die obige Option aktiviert ist.", "This string will be used to join split words into a single line if the option above is enabled.": "Diese Zeichenfolge wird verwendet, um getrennte Wörter in einer einzigen Zeile zu verbinden, wenn die obige Option aktiviert ist.",
"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 von Einstellungsnamen, getrennt durch Kommata, für Einstellungen, die in der Schnellzugriffsleiste oben erscheinen sollen, anstatt auf dem üblichen Einstellungs-Tab. Siehe modules/shared.py für Einstellungsnamen. Erfordert einen Neustart zur Anwendung.", "Only applies to inpainting models. Determines how strongly to mask off the original image for inpainting and img2img. 1.0 means fully masked, which is the default behaviour. 0.0 means a fully unmasked conditioning. Lower values will help preserve the overall composition of the image, but will struggle with large changes.": "Gilt nur für Inpainting-Modelle. Legt fest, wie stark das Originalbild für Inpainting und img2img maskiert werden soll. 1.0 bedeutet vollständig maskiert, was das Standardverhalten ist. 0.0 bedeutet eine vollständig unmaskierte Konditionierung. Niedrigere Werte tragen dazu bei, die Gesamtkomposition des Bildes zu erhalten, sind aber bei großen Änderungen problematisch.",
"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.": "Wenn dieser Wert ungleich Null ist, wird er zum Seed addiert und zur Initialisierung des RNG für Rauschen bei der Verwendung von Samplern mit Eta verwendet. Sie können dies verwenden, um noch mehr Variationen von Bildern zu erzeugen, oder Sie können dies verwenden, um Bilder von anderer Software abzugleichen, wenn Sie wissen, was Sie tun." "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 von Einstellungsnamen, getrennt durch Kommas, für Einstellungen, die in der Schnellzugriffsleiste oben erscheinen sollen, anstatt in dem üblichen Einstellungs-Tab. Siehe modules/shared.py für Einstellungsnamen. Erfordert einen Neustart zur Anwendung.",
} "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.": "Wenn dieser Wert ungleich Null ist, wird er zum Seed addiert und zur Initialisierung des RNG für Noise bei der Verwendung von Samplern mit Eta verwendet. Dies kann verwendet werden, um noch mehr Variationen von Bildern zu erzeugen, oder um Bilder von anderer Software zu erzeugen, wenn Sie wissen, was Sie tun."
}

File diff suppressed because it is too large Load Diff

View File

@ -202,6 +202,7 @@
"Inpaint at full resolution padding, pixels": "전체 해상도로 인페인트시 패딩값(픽셀 단위)", "Inpaint at full resolution padding, pixels": "전체 해상도로 인페인트시 패딩값(픽셀 단위)",
"Inpaint masked": "마스크만 처리", "Inpaint masked": "마스크만 처리",
"Inpaint not masked": "마스크 이외만 처리", "Inpaint not masked": "마스크 이외만 처리",
"Inpainting conditioning mask strength": "인페인팅 조절 마스크 강도",
"Input directory": "인풋 이미지 경로", "Input directory": "인풋 이미지 경로",
"Input images directory": "이미지 경로 입력", "Input images directory": "이미지 경로 입력",
"Interpolation Method": "보간 방법", "Interpolation Method": "보간 방법",
@ -218,6 +219,7 @@
"Interrogate: use artists from artists.csv": "분석 : artists.csv의 작가들 사용하기", "Interrogate: use artists from artists.csv": "분석 : artists.csv의 작가들 사용하기",
"Interrupt": "중단", "Interrupt": "중단",
"Is negative text": "네거티브 텍스트일시 체크", "Is negative text": "네거티브 텍스트일시 체크",
"Iterate seed every line": "줄마다 시드 반복하기",
"Just resize": "리사이징", "Just resize": "리사이징",
"Keep -1 for seeds": "시드값 -1로 유지", "Keep -1 for seeds": "시드값 -1로 유지",
"keep whatever was there originally": "이미지 원본 유지", "keep whatever was there originally": "이미지 원본 유지",
@ -234,6 +236,7 @@
"Leave blank to save images to the default path.": "기존 저장 경로에 이미지들을 저장하려면 비워두세요.", "Leave blank to save images to the default path.": "기존 저장 경로에 이미지들을 저장하려면 비워두세요.",
"left": "왼쪽", "left": "왼쪽",
"linear": "linear", "linear": "linear",
"List of prompt inputs": "프롬프트 입력 리스트",
"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에서 찾을 수 있습니다. 재시작이 필요합니다.", "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": "LMS",
"LMS Karras": "LMS Karras", "LMS Karras": "LMS Karras",
@ -261,7 +264,7 @@
"Multiplier (M) - set to 0 to get model A": "배율 (M) - 0으로 적용하면 모델 A를 얻게 됩니다", "Multiplier (M) - set to 0 to get model A": "배율 (M) - 0으로 적용하면 모델 A를 얻게 됩니다",
"Name": "이름", "Name": "이름",
"Negative prompt": "네거티브 프롬프트", "Negative prompt": "네거티브 프롬프트",
"Negative prompt (press Ctrl+Enter or Alt+Enter to generate)": "네거티브 프롬프트 입력(Ctrl+Enter나 Alt+Enter로 생성 시작)", "Negative prompt (press Ctrl+Enter or Alt+Enter to generate)": "네거티브 프롬프트(Prompt) 입력(Ctrl+Enter나 Alt+Enter로 생성 시작)",
"Next batch": "다음 묶음", "Next batch": "다음 묶음",
"Next Page": "다음 페이지", "Next Page": "다음 페이지",
"None": "없음", "None": "없음",
@ -274,6 +277,7 @@
"Number of repeats for a single input image per epoch; used only for displaying epoch number": "세대(Epoch)당 단일 인풋 이미지의 반복 횟수 - 세대(Epoch) 숫자를 표시하는 데에만 사용됩니다. ", "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 rows on the page": "각 페이지마다 표시할 세로줄 수",
"Number of vectors per token": "토큰별 벡터 수", "Number of vectors per token": "토큰별 벡터 수",
"Only applies to inpainting models. Determines how strongly to mask off the original image for inpainting and img2img. 1.0 means fully masked, which is the default behaviour. 0.0 means a fully unmasked conditioning. Lower values will help preserve the overall composition of the image, but will struggle with large changes.": "인페인팅 모델에만 적용됩니다. 인페인팅과 이미지→이미지에서 원본 이미지를 얼마나 마스킹 처리할지 결정하는 값입니다. 1.0은 완전히 마스킹함(기본 설정)을 의미하고, 0.0은 완전히 언마스킹된 이미지를 의미합니다. 낮은 값일수록 이미지의 전체적인 구성을 유지하는 데에 도움되겠지만, 변화량이 많을수록 불안정해집니다.",
"Open for Clip Aesthetic!": "클립 스타일 기능을 활성화하려면 클릭!", "Open for Clip Aesthetic!": "클립 스타일 기능을 활성화하려면 클릭!",
"Open images output directory": "이미지 저장 경로 열기", "Open images output directory": "이미지 저장 경로 열기",
"Open output directory": "저장 경로 열기", "Open output directory": "저장 경로 열기",
@ -319,7 +323,7 @@
"Process images in a directory on the same machine where the server is running.": "WebUI 서버가 돌아가고 있는 디바이스에 존재하는 디렉토리의 이미지들을 처리합니다.", "Process images in a directory on the same machine where the server is running.": "WebUI 서버가 돌아가고 있는 디바이스에 존재하는 디렉토리의 이미지들을 처리합니다.",
"Produce an image that can be tiled.": "타일링 가능한 이미지를 생성합니다.", "Produce an image that can be tiled.": "타일링 가능한 이미지를 생성합니다.",
"Prompt": "프롬프트", "Prompt": "프롬프트",
"Prompt (press Ctrl+Enter or Alt+Enter to generate)": "프롬프트 입력(Ctrl+Enter나 Alt+Enter로 생성 시작)", "Prompt (press Ctrl+Enter or Alt+Enter to generate)": "프롬프트(Prompt) 입력(Ctrl+Enter나 Alt+Enter로 생성 시작)",
"Prompt matrix": "프롬프트 매트릭스", "Prompt matrix": "프롬프트 매트릭스",
"Prompt order": "프롬프트 순서", "Prompt order": "프롬프트 순서",
"Prompt S/R": "프롬프트 스타일 변경", "Prompt S/R": "프롬프트 스타일 변경",
@ -388,6 +392,7 @@
"Select activation function of hypernetwork": "하이퍼네트워크 활성화 함수 선택", "Select activation function of hypernetwork": "하이퍼네트워크 활성화 함수 선택",
"Select Layer weights initialization. relu-like - Kaiming, sigmoid-like - Xavier is recommended": "레이어 가중치 초기화 방식 선택 - relu류 : Kaiming 추천, sigmoid류 : Xavier 추천", "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 모델을 선택하십시오. (재시작 필요)", "Select which Real-ESRGAN models to show in the web UI. (Requires restart)": "WebUI에 표시할 Real-ESRGAN 모델을 선택하십시오. (재시작 필요)",
"Send seed when sending prompt or image to other interface": "다른 화면으로 프롬프트나 이미지를 보낼 때 시드도 함께 보내기",
"Send to extras": "부가기능으로 전송", "Send to extras": "부가기능으로 전송",
"Send to img2img": "이미지→이미지로 전송", "Send to img2img": "이미지→이미지로 전송",
"Send to inpaint": "인페인트로 전송", "Send to inpaint": "인페인트로 전송",
@ -464,6 +469,8 @@
"uniform": "uniform", "uniform": "uniform",
"up": "위쪽", "up": "위쪽",
"Upload mask": "마스크 업로드하기", "Upload mask": "마스크 업로드하기",
"Upload prompt inputs": "입력할 프롬프트를 업로드하십시오",
"Upscale Before Restoring Faces": "얼굴 보정을 진행하기 전에 업스케일링 먼저 진행하기",
"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": "마스크된 부분을 설정된 해상도로 업스케일하고, 인페인팅을 진행한 뒤, 다시 다운스케일 후 원본 이미지에 붙여넣습니다.", "Upscale masked region to target resolution, do inpainting, downscale back and paste into original image": "마스크된 부분을 설정된 해상도로 업스케일하고, 인페인팅을 진행한 뒤, 다시 다운스케일 후 원본 이미지에 붙여넣습니다.",
"Upscaler": "업스케일러", "Upscaler": "업스케일러",

View File

@ -5,10 +5,10 @@
"": "", "": "",
"": "", "": "",
"Loading...": "Carregando...", "Loading...": "Carregando...",
"view": "ver ", "view": "ver",
"api": "api", "api": "api",
"•": "•", "•": "•",
"built with gradio": "Criado com gradio", "built with gradio": "criado com gradio",
"Stable Diffusion checkpoint": "Stable Diffusion checkpoint", "Stable Diffusion checkpoint": "Stable Diffusion checkpoint",
"txt2img": "txt2img", "txt2img": "txt2img",
"img2img": "img2img", "img2img": "img2img",
@ -27,14 +27,14 @@
"Style 2": "Estilo 2", "Style 2": "Estilo 2",
"Label": "Rótulo", "Label": "Rótulo",
"File": "Arquivo", "File": "Arquivo",
"Drop File Here": "Coloque aqui o arquivo", "Drop File Here": "Solte Aqui o Arquivo",
"-": "-", "-": "-",
"or": "ou", "or": "ou",
"Click to Upload": "Clique para carregar um arquivo", "Click to Upload": "Clique para Carregar um Arquivo",
"Image": "Imagem", "Image": "Imagem",
"Check progress": "Checar progresso", "Check progress": "Checar progresso",
"Check progress (first)": "Checar progresso (primeiro)", "Check progress (first)": "Checar progresso (primeiro)",
"Sampling Steps": "Passos de amostragem", "Sampling Steps": "Passos de Amostragem",
"Sampling method": "Método de amostragem", "Sampling method": "Método de amostragem",
"Euler a": "Euler a", "Euler a": "Euler a",
"Euler": "Euler", "Euler": "Euler",
@ -68,13 +68,13 @@
"Resize seed from height": "Redimensionar a seed a partir da altura", "Resize seed from height": "Redimensionar a seed a partir da altura",
"Script": "Script", "Script": "Script",
"None": "Nenhum", "None": "Nenhum",
"Prompt matrix": "Matriz de Prompt", "Prompt matrix": "Matriz de prompt",
"Prompts from file or textbox": "Prompts a partir de arquivo ou caixa de texto", "Prompts from file or textbox": "Prompts a partir de arquivo ou caixa de texto",
"X/Y plot": "X/Y plot", "X/Y plot": "X/Y plot",
"Put variable parts at start of prompt": "Coloca partes variáveis no começo do prompt", "Put variable parts at start of prompt": "Coloca partes variáveis no começo do prompt",
"Iterate seed every line": "Iterar seed a cada linha", "Iterate seed every line": "Iterar seed a cada linha",
"List of prompt inputs": "Lista de entradas de texto para prompt", "List of prompt inputs": "Lista de entrada de texto para prompt",
"Upload prompt inputs": "Carregar entradas de textos para prompts", "Upload prompt inputs": "Carregar entrada de texto para prompt",
"X type": "Tipo do X", "X type": "Tipo do X",
"Nothing": "Nenhum", "Nothing": "Nenhum",
"Var. seed": "Var. seed", "Var. seed": "Var. seed",
@ -99,7 +99,7 @@
"Draw legend": "Desenhar a legenda", "Draw legend": "Desenhar a legenda",
"Include Separate Images": "Incluir Imagens Separadas", "Include Separate Images": "Incluir Imagens Separadas",
"Keep -1 for seeds": "Manter em -1 para seeds", "Keep -1 for seeds": "Manter em -1 para seeds",
"Drop Image Here": "Coloque a imagem aqui", "Drop Image Here": "Solte a imagem aqui",
"Save": "Salvar", "Save": "Salvar",
"Send to img2img": "Mandar para img2img", "Send to img2img": "Mandar para img2img",
"Send to inpaint": "Mandar para inpaint", "Send to inpaint": "Mandar para inpaint",
@ -137,29 +137,29 @@
"img2img alternative test": "Teste alternativo de img2img", "img2img alternative test": "Teste alternativo de img2img",
"Loopback": "Loopback", "Loopback": "Loopback",
"Outpainting mk2": "Outpainting mk2", "Outpainting mk2": "Outpainting mk2",
"Poor man's outpainting": "Poor man's outpainting", "Poor man's outpainting": "Poor man`s outpainting",
"SD upscale": "Ampliamento SD", "SD upscale": "Ampliamento SD",
"should be 2 or lower.": "deve ser 2 ou menos.", "should be 2 or lower.": "deve ser 2 ou menos.",
"Override `Sampling method` to Euler?(this method is built for it)": "Substituir 'Método de amostragem' para Euler? (este método foi feito para isso)", "Override `Sampling method` to Euler?(this method is built for it)": "Substituir `Método de amostragem` por Euler? (este método foi feito para isso)",
"Override `prompt` to the same value as `original prompt`?(and `negative prompt`)": "Substituir 'prompt' para o mesmo valor que o 'prompt original'? (também para o 'prompt negativo')", "Override `prompt` to the same value as `original prompt`?(and `negative prompt`)": "Substituir `prompt` para o mesmo valor que o `prompt original`? (também para o `prompt negativo`)",
"Original prompt": "Prompt original", "Original prompt": "Prompt original",
"Original negative prompt": "Prompt negativo original", "Original negative prompt": "Prompt negativo original",
"Override `Sampling Steps` to the same value as `Decode steps`?": "Substituir 'Passos de Amostragem' para o mesmo valor que 'Decodificar Passos'?", "Override `Sampling Steps` to the same value as `Decode steps`?": "Substituir `Passos de Amostragem` para o mesmo valor que `Decodificar Passos`?",
"Decode steps": "Decode steps", "Decode steps": "Decode steps",
"Override `Denoising strength` to 1?": "Substituir 'Quantidade do Denoise' para 1?", "Override `Denoising strength` to 1?": "Substituir `Quantidade do Denoise` para 1?",
"Decode CFG scale": "Decodificar escala CFG", "Decode CFG scale": "Decodificar escala CFG",
"Randomness": "Aleatoriedade", "Randomness": "Aleatoriedade",
"Sigma adjustment for finding noise for image": "Ajuste Sigma para encontrar ruído para imagem", "Sigma adjustment for finding noise for image": "Ajuste Sigma para encontrar ruído para imagem",
"Loops": "Loops", "Loops": "Loops",
"Denoising strength change factor": "Fator de mudança na quantidade do Denoise", "Denoising strength change factor": "Fator de mudança na quantidade do Denoise",
"Recommended settings: Sampling Steps: 80-100, Sampler: Euler a, Denoising strength: 0.8": "Configurações recomendadas", "Recommended settings: Sampling Steps: 80-100, Sampler: Euler a, Denoising strength: 0.8": "Configurações recomendadas: Passos de amostragem: 80-100: Euler a, força do Denoise: 0.8",
"Pixels to expand": "Pixels para expandir", "Pixels to expand": "Pixels para expandir",
"Outpainting direction": "Direção do Outpainting", "Outpainting direction": "Direção do outpainting",
"left": "esquerda", "left": "esquerda",
"right": "direita", "right": "direita",
"up": "cima", "up": "cima",
"down": "baixo", "down": "baixo",
"Fall-off exponent (lower=higher detail)": "Exponente de queda (menor=mais detalhes)", "Fall-off exponent (lower=higher detail)": "Expoente de queda (menor=mais detalhes)",
"Color variation": "Variação de cor", "Color variation": "Variação de cor",
"Will upscale the image to twice the dimensions; use width and height sliders to set tile size": "Amplia a imagem em dobro; ajusta a largura e altura para definir o tamanho do ladrilho", "Will upscale the image to twice the dimensions; use width and height sliders to set tile size": "Amplia a imagem em dobro; ajusta a largura e altura para definir o tamanho do ladrilho",
"Tile overlap": "Sobreposição de ladrilho", "Tile overlap": "Sobreposição de ladrilho",
@ -191,9 +191,9 @@
"CodeFormer weight (0 = maximum effect, 1 = minimum effect)": "Peso do CodeFormer (0 = efeito máximo, 1 = efeito mínimo)", "CodeFormer weight (0 = maximum effect, 1 = minimum effect)": "Peso do CodeFormer (0 = efeito máximo, 1 = efeito mínimo)",
"Open output directory": "Abrir diretório de saída", "Open output directory": "Abrir diretório de saída",
"Send to txt2img": "Mandar para txt2img", "Send to txt2img": "Mandar para txt2img",
"A merger of the two checkpoints will be generated in your": "Uma fusão dos dois checkpoints será gerada em seu ", "A merger of the two checkpoints will be generated in your": "Uma fusão dos dois checkpoints será gerada em seu",
"checkpoint": "checkpoint", "checkpoint": "checkpoint",
"directory.": " diretório.", "directory.": "diretório.",
"Primary model (A)": "Modelo primário (A)", "Primary model (A)": "Modelo primário (A)",
"Secondary model (B)": "Modelo secundário (B)", "Secondary model (B)": "Modelo secundário (B)",
"Tertiary model (C)": "Modelo terciário (C)", "Tertiary model (C)": "Modelo terciário (C)",
@ -257,7 +257,7 @@
"Overwrite Old Hypernetwork": "Sobrescrever Hypernetwork Anterior", "Overwrite Old Hypernetwork": "Sobrescrever Hypernetwork Anterior",
"Source directory": "Diretório de origem", "Source directory": "Diretório de origem",
"Destination directory": "Diretório de destino", "Destination directory": "Diretório de destino",
"Existing Caption txt Action": "Ação de legenda txt já existente", "Existing Caption txt Action": "Ação de Título txt Já Existente",
"ignore": "ignorar", "ignore": "ignorar",
"copy": "copiar", "copy": "copiar",
"prepend": "adicionar ao início", "prepend": "adicionar ao início",
@ -305,9 +305,9 @@
"Create a text file next to every image with generation parameters.": "Criar um arquivo de texto com informações de geração junto a cada imagem gerada.", "Create a text file next to every image with generation parameters.": "Criar um arquivo de texto com informações de geração junto a cada imagem gerada.",
"Save a copy of image before doing face restoration.": "Salva uma cópia de cada imagem antes do refinamento facial.", "Save a copy of image before doing face restoration.": "Salva uma cópia de cada imagem antes do refinamento facial.",
"Quality for saved jpeg images": "Qualidade das imagens jpeg", "Quality for saved jpeg images": "Qualidade das imagens jpeg",
"If PNG image is larger than 4MB or any dimension is larger than 4000, downscale and save copy as JPG": "Se a imagem PNG for maior que 4MB ou qualquer dimensão mair que 4000, diminuir e salvar uma cópia em JPG", "If PNG image is larger than 4MB or any dimension is larger than 4000, downscale and save copy as JPG": "Se a imagem PNG for maior que 4MB ou qualquer dimensão maior que 4000, diminuir e salvar uma cópia em JPG",
"Use original name for output filename during batch process in extras tab": "Usar o nome original para os arquivos de output durante o processo de levas da aba Extras", "Use original name for output filename during batch process in extras tab": "Usar o nome original para os arquivos de output durante o processo de levas da aba Extras",
"When using 'Save' button, only save a single selected image": "Quando usar o botão 'Salvar', somente salvar as imagens selecionadas.", "When using 'Save' button, only save a single selected image": "Quando usar o botão `Salvar`, somente salvar as imagens selecionadas.",
"Do not add watermark to images": "Não adicionar marca dágua nas imagens", "Do not add watermark to images": "Não adicionar marca dágua nas imagens",
"Paths for saving": "Caminhos para salvar", "Paths for saving": "Caminhos para salvar",
"Output directory for images; if empty, defaults to three directories below": "Diretório de saída para imagens; se deixado em branco, as imagens vao para os seguintes diretórios", "Output directory for images; if empty, defaults to three directories below": "Diretório de saída para imagens; se deixado em branco, as imagens vao para os seguintes diretórios",
@ -327,7 +327,7 @@
"Upscaling": "Ampliando", "Upscaling": "Ampliando",
"Tile size for ESRGAN upscalers. 0 = no tiling.": "Tamanho do ladrilho para ampliação ESRGAN. 0 = sem ladrilho.", "Tile size for ESRGAN upscalers. 0 = no tiling.": "Tamanho do ladrilho para ampliação ESRGAN. 0 = sem ladrilho.",
"Tile overlap, in pixels for ESRGAN upscalers. Low values = visible seam.": "Sobreposição de azulejo, em pixels, para amplicação ESRGAN. Valores baixos = linhas de fusão mais aparente.", "Tile overlap, in pixels for ESRGAN upscalers. Low values = visible seam.": "Sobreposição de azulejo, em pixels, para amplicação ESRGAN. Valores baixos = linhas de fusão mais aparente.",
"Tile size for all SwinIR.": "Tamanho do azulejo para todo SwinIR.", "Tile size for all SwinIR.": "Tamanho do ladrilho para todo SwinIR.",
"Tile overlap, in pixels for SwinIR. Low values = visible seam.": "Sobreposição de azulejo, em pixels, para SwinIR. Valores baixos = junção mais aparente.", "Tile overlap, in pixels for SwinIR. Low values = visible seam.": "Sobreposição de azulejo, em pixels, para SwinIR. Valores baixos = junção mais aparente.",
"LDSR processing steps. Lower = faster": "Steps de processamento LDSR. Menos = rápido", "LDSR processing steps. Lower = faster": "Steps de processamento LDSR. Menos = rápido",
"Upscaler for img2img": "Ampliação para img2img", "Upscaler for img2img": "Ampliação para img2img",
@ -348,11 +348,11 @@
"Stable Diffusion": "Stable Diffusion", "Stable Diffusion": "Stable Diffusion",
"Checkpoints to cache in RAM": "Checkpoints para manter no cache da RAM", "Checkpoints to cache in RAM": "Checkpoints para manter no cache da RAM",
"Hypernetwork strength": "Força da Hypernetwork", "Hypernetwork strength": "Força da Hypernetwork",
"Apply color correction to img2img results to match original colors.": "Aplicar correção de cor nas imagens geradas em img2img, usando a imagem original como base. Recomendação: se marcar essa opção, marcar também a de baixo", "Apply color correction to img2img results to match original colors.": "Aplicar correção de cor nas imagens geradas em img2img, usando a imagem original como base.",
"Save a copy of image before applying color correction to img2img results": "Salvar uma cópia das imagens geradas em img2img antes de aplicar a correção de cor", "Save a copy of image before applying color correction to img2img results": "Salvar uma cópia das imagens geradas em img2img antes de aplicar a correção de cor",
"With img2img, do exactly the amount of steps the slider specifies (normally you'd do less with less denoising).": "Durante gerações img2img, fazer examente o número de steps definidos na barra (normalmente você faz menos steps com denoising menor).", "With img2img, do exactly the amount of steps the slider specifies (normally you'd do less with less denoising).": "Durante gerações img2img, fazer examente o número de steps definidos na barra (normalmente você faz menos steps com denoising menor).",
"Enable quantization in K samplers for sharper and cleaner results. This may change existing seeds. Requires restart to apply.": "Ativar quantização em K samples para resultados mais nítidos e visíveis. Pode alterar seeds ja existentes. Precisa reiniciar para funcionar.", "Enable quantization in K samplers for sharper and cleaner results. This may change existing seeds. Requires restart to apply.": "Ativar quantização em K samples para resultados mais nítidos e visíveis. Pode alterar seeds ja existentes. Precisa reiniciar para funcionar.",
"Emphasis: use (text) to make model pay more attention to text and [text] to make it pay less attention": "Ênfase: usar parênteses ao redor de palavras (texto de exemplo) para fazer o modelo dar mais atenção par aquela palavra ou frase, e chaves [texto de exemplo] para tirar atenção", "Emphasis: use (text) to make model pay more attention to text and [text] to make it pay less attention": "Ênfase: usar parênteses ao redor de palavras (texto de exemplo) para fazer o modelo dar mais atenção para aquela palavra ou frase, e chaves [texto de exemplo] para tirar atenção",
"Use old emphasis implementation. Can be useful to reproduce old seeds.": "Usar método anterior de implementação de ênfase. Útil para reproduzir seeds antigas.", "Use old emphasis implementation. Can be useful to reproduce old seeds.": "Usar método anterior de implementação de ênfase. Útil para reproduzir seeds antigas.",
"Make K-diffusion samplers produce same images in a batch as when making a single image": "Faz as amostragens K-diffusion produzirem imagens iguais em lotes quando criando uma única imagem", "Make K-diffusion samplers produce same images in a batch as when making a single image": "Faz as amostragens K-diffusion produzirem imagens iguais em lotes quando criando uma única imagem",
"Increase coherency by padding from the last comma within n tokens when using more than 75 tokens": "Aumenta a coerência por preenchimento apartir da ultima vírgula dentro de n tokens quando usando mais de 75 tokens", "Increase coherency by padding from the last comma within n tokens when using more than 75 tokens": "Aumenta a coerência por preenchimento apartir da ultima vírgula dentro de n tokens quando usando mais de 75 tokens",
@ -361,7 +361,7 @@
"Interrogate Options": "Opções de Interrogatório", "Interrogate Options": "Opções de Interrogatório",
"Interrogate: keep models in VRAM": "Interrogar: manter modelos na VRAM", "Interrogate: keep models in VRAM": "Interrogar: manter modelos na VRAM",
"Interrogate: use artists from artists.csv": "Interrogar: usa artistas e estilos do documento artists.csv", "Interrogate: use artists from artists.csv": "Interrogar: usa artistas e estilos do documento artists.csv",
"Interrogate: include ranks of model tags matches in results (Has no effect on caption-based interrogators).": "Interrogar: incluir classificação de tags de modelo combinando nos resultados(Não tem efeito na interrogação feita por legenda).", "Interrogate: include ranks of model tags matches in results (Has no effect on caption-based interrogators).": "Interrogar: incluir classificação de tags de modelo combinando nos resultados (Não tem efeito na interrogação feita por legenda).",
"Interrogate: num_beams for BLIP": "Interrogar: num_beams para BLIP", "Interrogate: num_beams for BLIP": "Interrogar: num_beams para BLIP",
"Interrogate: minimum description length (excluding artists, etc..)": "Interrogar: tamanho mínimo da descrição (tirando artistas, etc..)", "Interrogate: minimum description length (excluding artists, etc..)": "Interrogar: tamanho mínimo da descrição (tirando artistas, etc..)",
"Interrogate: maximum description length": "Interrogar: tamanho máximo da descrição", "Interrogate: maximum description length": "Interrogar: tamanho máximo da descrição",
@ -370,7 +370,7 @@
"Interrogate: deepbooru sort alphabetically": "Interrogar: organizar deepbooru por ordem alfabética", "Interrogate: deepbooru sort alphabetically": "Interrogar: organizar deepbooru por ordem alfabética",
"use spaces for tags in deepbooru": "usar espaços para tags em deepbooru", "use spaces for tags in deepbooru": "usar espaços para tags em deepbooru",
"escape (\\) brackets in deepbooru (so they are used as literal brackets and not for emphasis)": "espaço (\\) colchetes em deepbooru (são usados como colchetes ao invés de dar ênfase)", "escape (\\) brackets in deepbooru (so they are used as literal brackets and not for emphasis)": "espaço (\\) colchetes em deepbooru (são usados como colchetes ao invés de dar ênfase)",
"User interface": "Interface de Usuário", "User interface": "Interface de usuário",
"Show progressbar": "Mostrar barra de progresso", "Show progressbar": "Mostrar barra de progresso",
"Show image creation progress every N sampling steps. Set 0 to disable.": "Mostrar a criação de imagens a cada N sampling steps. Em 1 já dá para ver o processo de geração. Marcar como 0 para desativar.", "Show image creation progress every N sampling steps. Set 0 to disable.": "Mostrar a criação de imagens a cada N sampling steps. Em 1 já dá para ver o processo de geração. Marcar como 0 para desativar.",
"Show previews of all images generated in a batch as a grid": "Mostrar previsualização de todas as imagens geradas em leva numa grade", "Show previews of all images generated in a batch as a grid": "Mostrar previsualização de todas as imagens geradas em leva numa grade",
@ -379,7 +379,7 @@
"Add model hash to generation information": "Adicionar hash do modelo para informação de geração", "Add model hash to generation information": "Adicionar hash do modelo para informação de geração",
"Add model name to generation information": "Adicionar nome do modelo para informação de geração", "Add model name to generation information": "Adicionar nome do modelo para informação de geração",
"When reading generation parameters from text into UI (from PNG info or pasted text), do not change the selected model/checkpoint.": "Quando ler parâmetros de texto para a interface (de informações de PNG ou texto copiado), não alterar o modelo/intervalo selecionado.", "When reading generation parameters from text into UI (from PNG info or pasted text), do not change the selected model/checkpoint.": "Quando ler parâmetros de texto para a interface (de informações de PNG ou texto copiado), não alterar o modelo/intervalo selecionado.",
"Font for image grids that have text": "Fonte para grade de imagenss que tem texto", "Font for image grids that have text": "Fonte para grade de imagens que têm texto",
"Enable full page image viewer": "Ativar visualizador de página inteira", "Enable full page image viewer": "Ativar visualizador de página inteira",
"Show images zoomed in by default in full page image viewer": "Mostrar imagens com zoom por definição no visualizador de página inteira", "Show images zoomed in by default in full page image viewer": "Mostrar imagens com zoom por definição no visualizador de página inteira",
"Show generation progress in window title.": "Mostrar barra de progresso no nome da janela.", "Show generation progress in window title.": "Mostrar barra de progresso no nome da janela.",
@ -443,25 +443,25 @@
"keep whatever was there originally": "manter usando o que estava lá originalmente", "keep whatever was there originally": "manter usando o que estava lá originalmente",
"fill it with latent space noise": "Preenche com ruídos do espaço latente.", "fill it with latent space noise": "Preenche com ruídos do espaço latente.",
"fill it with latent space zeroes": "Preenche com zeros do espaço latente.", "fill it with latent space zeroes": "Preenche com zeros do espaço latente.",
"Upscale masked region to target resolution, do inpainting, downscale back and paste into original image": "Faz ampliação na região com máscara para atingir a resolução desejada, faz inpainting, faz downscale para voltar na resolução original e cola na imagem original", "Upscale masked region to target resolution, do inpainting, downscale back and paste into original image": "Faz ampliação na região com máscara para atingir a resolução desejada, faz inpainting, faz downscale para voltar à resolução original e cola na imagem original",
"Resize image to target resolution. Unless height and width match, you will get incorrect aspect ratio.": "Redimensiona a imagem para a resolução desejada. A menos que a altura e a largura correspondam, você obterá uma proporção incorreta.", "Resize image to target resolution. Unless height and width match, you will get incorrect aspect ratio.": "Redimensiona a imagem para a resolução desejada. A menos que a altura e a largura sejam iguais, você obterá uma proporção incorreta.",
"Resize the image so that entirety of target resolution is filled with the image. Crop parts that stick out.": "Redimensiona a imagem para que toda a resolução desejada seja preenchida com a imagem. Corta as partes que ficaram pra fora.", "Resize the image so that entirety of target resolution is filled with the image. Crop parts that stick out.": "Redimensiona a imagem para que toda a resolução desejada seja preenchida com a imagem. Corta as partes que ficaram pra fora.",
"Resize the image so that entirety of image is inside target resolution. Fill empty space with image's colors.": "Redimensiona a imagem para que toda a imagem esteja dentro da resolução desejada. Preenche o espaço vazio com as cores da imagem.", "Resize the image so that entirety of image is inside target resolution. Fill empty space with image's colors.": "Redimensiona a imagem para que toda a imagem esteja dentro da resolução desejada. Preenche o espaço vazio com as cores da imagem.",
"How many times to repeat processing an image and using it as input for the next iteration": "Quantas vezes vai repetir o processamento de uma imagem e usá-la como entrada para a próxima iteração", "How many times to repeat processing an image and using it as input for the next iteration": "Número de vezes que vai repetir o processamento da imagem e usar como entrada para a próxima iteração",
"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.": "No modo de loopback, em cada loop a força do denoise é multiplicado por este valor. <1 significa diminuir a variedade para que sua sequência converta em uma imagem fixa. >1 significa aumentar a variedade para que sua sequência se torne cada vez mais caótica.", "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.": "No modo de loopback, em cada loop a força do denoise é multiplicado por este valor. <1 significa diminuir a variedade para que sua sequência converta em uma imagem fixa. >1 significa aumentar a variedade para que sua sequência se torne cada vez mais caótica.",
"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.": "Para ampliação SD, quanta sobreposição em pixels deve haver entre os ladrilhos. Os ladrilhos se sobrepõem para que, quando forem mesclados de volta em uma imagem, não haja linhas de junção claramente visível.", "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.": "Para ampliação SD, quantidade de sobreposição em pixels que deve haver entre os ladrilhos. Os ladrilhos se sobrepõem para que, quando forem mesclados de volta em uma imagem, não haja linhas de junção claramente visíveis.",
"A directory on the same machine where the server is running.": "Um diretório na mesma máquina onde o server está rodando.", "A directory on the same machine where the server is running.": "Um diretório na mesma máquina onde o servidor está rodando.",
"Leave blank to save images to the default path.": "Deixar em branco para salvar imagens no caminho padrão.", "Leave blank to save images to the default path.": "Deixar em branco para salvar imagens no caminho padrão.",
"Result = A * (1 - M) + B * M": "Resultado = A * (1 - M) + B * M", "Result = A * (1 - M) + B * M": "Resultado = A * (1 - M) + B * M",
"Result = A + (B - C) * M": "Resultado = A + (B - C) * M", "Result = A + (B - C) * M": "Resultado = A + (B - C) * M",
"1st and last digit must be 1. ex:'1, 2, 1'": "Primeiro e último dígito precisam ser 1. ex:'1, 2, 1'", "1st and last digit must be 1. ex:'1, 2, 1'": "Primeiro e último dígito precisam ser 1. ex:`1, 2, 1`",
"Path to directory with input images": "Caminho para o diretório com imagens de entrada", "Path to directory with input images": "Caminho para o diretório com imagens de entrada",
"Path to directory where to write outputs": "Caminho para o diretório para gravar as saídas", "Path to directory where to write outputs": "Caminho para o diretório para gravar as saídas",
"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.": "Usa essas tags para definir como os nomes dos arquivos sao escolhidos: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; deixe em branco para manter o padrao.", "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.": "Usa essas tags para definir como os nomes dos arquivos sao escolhidos: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; deixe em branco para manter o padrão.",
"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.": "Se esta opção estiver marcada, as imagens não vão ter marca d'água. Aviso: se você não quer a marca d'água, você pode estar se envolvendo em comportamentos antiéticos", "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.": "Se esta opção estiver marcada, as imagens não vão ter marca d`água. Aviso: se você não quer a marca d`água, você pode estar se envolvendo em comportamentos antiéticos",
"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.": "Usa essas tags para definir como os nomes dos subdiretorios e ghrades sao escolhidos: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; deixe em branco para manter o padrao.", "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.": "Usa essas tags para definir como os nomes dos subdiretorios e grades são escolhidos: [steps], [cfg], [prompt], [prompt_no_styles], [prompt_spaces], [width], [height], [styles], [sampler], [seed], [model_hash], [prompt_words], [date], [datetime], [job_timestamp]; deixe em branco para manter o padrão.",
"Restore low quality faces using GFPGAN neural network": "Restaurar rostos de baixa qualidade usando a rede neural GFPGAN", "Restore low quality faces using GFPGAN neural network": "Restaurar rostos de baixa qualidade usando a rede neural 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.": "Esta expressão regular vai retirar palavras do nome do arquivo e vai se juntar usando a opção abaixo em etiquetas usadas em treinamento. Não mexer para manter os nomes como estão.", "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.": "Esta expressão regular vai retirar palavras do nome do arquivo e serão juntadas via regex usando a opção abaixo em etiquetas usadas em treinamento. Não mexer para manter os nomes como estão.",
"This string will be used to join split words into a single line if the option above is enabled.": "Esta string será usada para unir palavras divididas em uma única linha se a opção acima estiver habilitada.", "This string will be used to join split words into a single line if the option above is enabled.": "Esta string será usada para unir palavras divididas em uma única linha se a opção acima estiver habilitada.",
"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.": "Lista de nomes de configurações, separados por vírgulas, para configurações que devem ir para a barra de acesso rápido na parte superior, em vez da guia de configuração usual. Veja modules/shared.py para nomes de configuração. Necessita reinicialização para aplicar.", "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.": "Lista de nomes de configurações, separados por vírgulas, para configurações que devem ir para a barra de acesso rápido na parte superior, em vez da guia de configuração usual. Veja modules/shared.py para nomes de configuração. Necessita reinicialização para aplicar.",
"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.": "Se este valor for diferente de zero, ele será adicionado à seed e usado para inicializar o RNG para ruídos ao usar amostragens com Tempo Estimado. Você pode usar isso para produzir ainda mais variações de imagens ou pode usar isso para combinar imagens de outro software se souber o que está fazendo." "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.": "Se este valor for diferente de zero, ele será adicionado à seed e usado para inicializar o RNG para ruídos ao usar amostragens com Tempo Estimado. Você pode usar isso para produzir ainda mais variações de imagens ou pode usar isso para combinar imagens de outro software se souber o que está fazendo."

View File

@ -1,11 +1,14 @@
import time
import uvicorn import uvicorn
from gradio.processing_utils import encode_pil_to_base64, decode_base64_to_file, decode_base64_to_image from gradio.processing_utils import encode_pil_to_base64, decode_base64_to_file, decode_base64_to_image
from fastapi import APIRouter, HTTPException from fastapi import APIRouter, Depends, HTTPException
import modules.shared as shared import modules.shared as shared
from modules import devices
from modules.api.models import * from modules.api.models import *
from modules.processing import StableDiffusionProcessingTxt2Img, StableDiffusionProcessingImg2Img, process_images from modules.processing import StableDiffusionProcessingTxt2Img, StableDiffusionProcessingImg2Img, process_images
from modules.sd_samplers import all_samplers from modules.sd_samplers import all_samplers
from modules.extras import run_extras from modules.extras import run_extras, run_pnginfo
def upscaler_to_index(name: str): def upscaler_to_index(name: str):
try: try:
@ -13,8 +16,10 @@ def upscaler_to_index(name: str):
except: except:
raise HTTPException(status_code=400, detail=f"Invalid upscaler, needs to be on of these: {' , '.join([x.name for x in sd_upscalers])}") raise HTTPException(status_code=400, detail=f"Invalid upscaler, needs to be on of these: {' , '.join([x.name for x in sd_upscalers])}")
sampler_to_index = lambda name: next(filter(lambda row: name.lower() == row[1].name.lower(), enumerate(all_samplers)), None) sampler_to_index = lambda name: next(filter(lambda row: name.lower() == row[1].name.lower(), enumerate(all_samplers)), None)
def setUpscalers(req: dict): def setUpscalers(req: dict):
reqDict = vars(req) reqDict = vars(req)
reqDict['extras_upscaler_1'] = upscaler_to_index(req.upscaler_1) reqDict['extras_upscaler_1'] = upscaler_to_index(req.upscaler_1)
@ -23,6 +28,7 @@ def setUpscalers(req: dict):
reqDict.pop('upscaler_2') reqDict.pop('upscaler_2')
return reqDict return reqDict
class Api: class Api:
def __init__(self, app, queue_lock): def __init__(self, app, queue_lock):
self.router = APIRouter() self.router = APIRouter()
@ -32,15 +38,17 @@ class Api:
self.app.add_api_route("/sdapi/v1/img2img", self.img2imgapi, methods=["POST"], response_model=ImageToImageResponse) self.app.add_api_route("/sdapi/v1/img2img", self.img2imgapi, methods=["POST"], response_model=ImageToImageResponse)
self.app.add_api_route("/sdapi/v1/extra-single-image", self.extras_single_image_api, methods=["POST"], response_model=ExtrasSingleImageResponse) self.app.add_api_route("/sdapi/v1/extra-single-image", self.extras_single_image_api, methods=["POST"], response_model=ExtrasSingleImageResponse)
self.app.add_api_route("/sdapi/v1/extra-batch-images", self.extras_batch_images_api, methods=["POST"], response_model=ExtrasBatchImagesResponse) self.app.add_api_route("/sdapi/v1/extra-batch-images", self.extras_batch_images_api, methods=["POST"], response_model=ExtrasBatchImagesResponse)
self.app.add_api_route("/sdapi/v1/png-info", self.pnginfoapi, methods=["POST"], response_model=PNGInfoResponse)
self.app.add_api_route("/sdapi/v1/progress", self.progressapi, methods=["GET"], response_model=ProgressResponse)
def text2imgapi(self, txt2imgreq: StableDiffusionTxt2ImgProcessingAPI): def text2imgapi(self, txt2imgreq: StableDiffusionTxt2ImgProcessingAPI):
sampler_index = sampler_to_index(txt2imgreq.sampler_index) sampler_index = sampler_to_index(txt2imgreq.sampler_index)
if sampler_index is None: if sampler_index is None:
raise HTTPException(status_code=404, detail="Sampler not found") raise HTTPException(status_code=404, detail="Sampler not found")
populate = txt2imgreq.copy(update={ # Override __init__ params populate = txt2imgreq.copy(update={ # Override __init__ params
"sd_model": shared.sd_model, "sd_model": shared.sd_model,
"sampler_index": sampler_index[0], "sampler_index": sampler_index[0],
"do_not_save_samples": True, "do_not_save_samples": True,
"do_not_save_grid": True "do_not_save_grid": True
@ -48,34 +56,39 @@ class Api:
) )
p = StableDiffusionProcessingTxt2Img(**vars(populate)) p = StableDiffusionProcessingTxt2Img(**vars(populate))
# Override object param # Override object param
shared.state.begin()
with self.queue_lock: with self.queue_lock:
processed = process_images(p) processed = process_images(p)
shared.state.end()
b64images = list(map(encode_pil_to_base64, processed.images)) b64images = list(map(encode_pil_to_base64, processed.images))
return TextToImageResponse(images=b64images, parameters=vars(txt2imgreq), info=processed.js()) return TextToImageResponse(images=b64images, parameters=vars(txt2imgreq), info=processed.js())
def img2imgapi(self, img2imgreq: StableDiffusionImg2ImgProcessingAPI): def img2imgapi(self, img2imgreq: StableDiffusionImg2ImgProcessingAPI):
sampler_index = sampler_to_index(img2imgreq.sampler_index) sampler_index = sampler_to_index(img2imgreq.sampler_index)
if sampler_index is None: if sampler_index is None:
raise HTTPException(status_code=404, detail="Sampler not found") raise HTTPException(status_code=404, detail="Sampler not found")
init_images = img2imgreq.init_images init_images = img2imgreq.init_images
if init_images is None: if init_images is None:
raise HTTPException(status_code=404, detail="Init image not found") raise HTTPException(status_code=404, detail="Init image not found")
mask = img2imgreq.mask mask = img2imgreq.mask
if mask: if mask:
mask = decode_base64_to_image(mask) mask = decode_base64_to_image(mask)
populate = img2imgreq.copy(update={ # Override __init__ params populate = img2imgreq.copy(update={ # Override __init__ params
"sd_model": shared.sd_model, "sd_model": shared.sd_model,
"sampler_index": sampler_index[0], "sampler_index": sampler_index[0],
"do_not_save_samples": True, "do_not_save_samples": True,
"do_not_save_grid": True, "do_not_save_grid": True,
"mask": mask "mask": mask
} }
) )
@ -87,16 +100,20 @@ class Api:
imgs = [img] * p.batch_size imgs = [img] * p.batch_size
p.init_images = imgs p.init_images = imgs
# Override object param
shared.state.begin()
with self.queue_lock: with self.queue_lock:
processed = process_images(p) processed = process_images(p)
shared.state.end()
b64images = list(map(encode_pil_to_base64, processed.images)) b64images = list(map(encode_pil_to_base64, processed.images))
if (not img2imgreq.include_init_images): if (not img2imgreq.include_init_images):
img2imgreq.init_images = None img2imgreq.init_images = None
img2imgreq.mask = None img2imgreq.mask = None
return ImageToImageResponse(images=b64images, parameters=vars(img2imgreq), info=processed.js()) return ImageToImageResponse(images=b64images, parameters=vars(img2imgreq), info=processed.js())
def extras_single_image_api(self, req: ExtrasSingleImageRequest): def extras_single_image_api(self, req: ExtrasSingleImageRequest):
@ -124,9 +141,40 @@ class Api:
result = run_extras(extras_mode=1, image="", input_dir="", output_dir="", **reqDict) result = run_extras(extras_mode=1, image="", input_dir="", output_dir="", **reqDict)
return ExtrasBatchImagesResponse(images=list(map(encode_pil_to_base64, result[0])), html_info=result[1]) return ExtrasBatchImagesResponse(images=list(map(encode_pil_to_base64, result[0])), html_info=result[1])
def pnginfoapi(self): def pnginfoapi(self, req: PNGInfoRequest):
raise NotImplementedError if(not req.image.strip()):
return PNGInfoResponse(info="")
result = run_pnginfo(decode_base64_to_image(req.image.strip()))
return PNGInfoResponse(info=result[1])
def progressapi(self, req: ProgressRequest = Depends()):
# copy from check_progress_call of ui.py
if shared.state.job_count == 0:
return ProgressResponse(progress=0, eta_relative=0, state=shared.state.dict())
# avoid dividing zero
progress = 0.01
if shared.state.job_count > 0:
progress += shared.state.job_no / shared.state.job_count
if shared.state.sampling_steps > 0:
progress += 1 / shared.state.job_count * shared.state.sampling_step / shared.state.sampling_steps
time_since_start = time.time() - shared.state.time_start
eta = (time_since_start/progress)
eta_relative = eta-time_since_start
progress = min(progress, 1)
current_image = None
if shared.state.current_image and not req.skip_current_image:
current_image = encode_pil_to_base64(shared.state.current_image)
return ProgressResponse(progress=progress, eta_relative=eta_relative, state=shared.state.dict(), current_image=current_image)
def launch(self, server_name, port): def launch(self, server_name, port):
self.app.include_router(self.router) self.app.include_router(self.router)

View File

@ -1,4 +1,5 @@
import inspect import inspect
from click import prompt
from pydantic import BaseModel, Field, create_model from pydantic import BaseModel, Field, create_model
from typing import Any, Optional from typing import Any, Optional
from typing_extensions import Literal from typing_extensions import Literal
@ -51,17 +52,17 @@ class PydanticModelGenerator:
# field_type = str if not overrides.get(k) else overrides[k]["type"] # field_type = str if not overrides.get(k) else overrides[k]["type"]
# print(k, v.annotation, v.default) # print(k, v.annotation, v.default)
field_type = v.annotation field_type = v.annotation
return Optional[field_type] return Optional[field_type]
def merge_class_params(class_): def merge_class_params(class_):
all_classes = list(filter(lambda x: x is not object, inspect.getmro(class_))) all_classes = list(filter(lambda x: x is not object, inspect.getmro(class_)))
parameters = {} parameters = {}
for classes in all_classes: for classes in all_classes:
parameters = {**parameters, **inspect.signature(classes.__init__).parameters} parameters = {**parameters, **inspect.signature(classes.__init__).parameters}
return parameters return parameters
self._model_name = model_name self._model_name = model_name
self._class_data = merge_class_params(class_instance) self._class_data = merge_class_params(class_instance)
self._model_def = [ self._model_def = [
@ -73,11 +74,11 @@ class PydanticModelGenerator:
) )
for (k,v) in self._class_data.items() if k not in API_NOT_ALLOWED for (k,v) in self._class_data.items() if k not in API_NOT_ALLOWED
] ]
for fields in additional_fields: for fields in additional_fields:
self._model_def.append(ModelDef( self._model_def.append(ModelDef(
field=underscore(fields["key"]), field=underscore(fields["key"]),
field_alias=fields["key"], field_alias=fields["key"],
field_type=fields["type"], field_type=fields["type"],
field_value=fields["default"], field_value=fields["default"],
field_exclude=fields["exclude"] if "exclude" in fields else False)) field_exclude=fields["exclude"] if "exclude" in fields else False))
@ -94,15 +95,15 @@ class PydanticModelGenerator:
DynamicModel.__config__.allow_population_by_field_name = True DynamicModel.__config__.allow_population_by_field_name = True
DynamicModel.__config__.allow_mutation = True DynamicModel.__config__.allow_mutation = True
return DynamicModel return DynamicModel
StableDiffusionTxt2ImgProcessingAPI = PydanticModelGenerator( StableDiffusionTxt2ImgProcessingAPI = PydanticModelGenerator(
"StableDiffusionProcessingTxt2Img", "StableDiffusionProcessingTxt2Img",
StableDiffusionProcessingTxt2Img, StableDiffusionProcessingTxt2Img,
[{"key": "sampler_index", "type": str, "default": "Euler"}] [{"key": "sampler_index", "type": str, "default": "Euler"}]
).generate_model() ).generate_model()
StableDiffusionImg2ImgProcessingAPI = PydanticModelGenerator( StableDiffusionImg2ImgProcessingAPI = PydanticModelGenerator(
"StableDiffusionProcessingImg2Img", "StableDiffusionProcessingImg2Img",
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": "include_init_images", "type": bool, "default": False, "exclude" : True}] [{"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() ).generate_model()
@ -148,4 +149,19 @@ class ExtrasBatchImagesRequest(ExtrasBaseRequest):
imageList: list[FileData] = Field(title="Images", description="List of images to work on. Must be Base64 strings") imageList: list[FileData] = Field(title="Images", description="List of images to work on. Must be Base64 strings")
class ExtrasBatchImagesResponse(ExtraBaseResponse): class ExtrasBatchImagesResponse(ExtraBaseResponse):
images: list[str] = Field(title="Images", description="The generated images in base64 format.") images: list[str] = Field(title="Images", description="The generated images in base64 format.")
class PNGInfoRequest(BaseModel):
image: str = Field(title="Image", description="The base64 encoded PNG image")
class PNGInfoResponse(BaseModel):
info: str = Field(title="Image info", description="A string with all the info the image had")
class ProgressRequest(BaseModel):
skip_current_image: bool = Field(default=False, title="Skip current image", description="Skip current image serialization")
class ProgressResponse(BaseModel):
progress: float = Field(title="Progress", description="The progress with a range of 0 to 1")
eta_relative: float = Field(title="ETA in secs")
state: dict = Field(title="State", description="The current state snapshot")
current_image: str = Field(default=None, title="Current image", description="The current image in base64 format. opts.show_progress_every_n_steps is required for this to work.")

View File

@ -66,6 +66,7 @@ def integrate_settings_paste_fields(component_dict):
settings_map = { settings_map = {
'sd_hypernetwork': 'Hypernet', 'sd_hypernetwork': 'Hypernet',
'sd_hypernetwork_strength': 'Hypernet strength',
'CLIP_stop_at_last_layers': 'Clip skip', 'CLIP_stop_at_last_layers': 'Clip skip',
'sd_model_checkpoint': 'Model hash', 'sd_model_checkpoint': 'Model hash',
} }

View File

@ -209,13 +209,16 @@ def list_hypernetworks(path):
res = {} res = {}
for filename in glob.iglob(os.path.join(path, '**/*.pt'), recursive=True): for filename in glob.iglob(os.path.join(path, '**/*.pt'), recursive=True):
name = os.path.splitext(os.path.basename(filename))[0] name = os.path.splitext(os.path.basename(filename))[0]
res[name] = filename # Prevent a hypothetical "None.pt" from being listed.
if name != "None":
res[name] = filename
return res return res
def load_hypernetwork(filename): def load_hypernetwork(filename):
path = shared.hypernetworks.get(filename, None) path = shared.hypernetworks.get(filename, None)
if path is not None: # Prevent any file named "None.pt" from being loaded.
if path is not None and filename != "None":
print(f"Loading hypernetwork {filename}") print(f"Loading hypernetwork {filename}")
try: try:
shared.loaded_hypernetwork = Hypernetwork() shared.loaded_hypernetwork = Hypernetwork()
@ -332,7 +335,9 @@ def train_hypernetwork(hypernetwork_name, learn_rate, batch_size, data_root, log
# images allows training previews to have infotext. Importing it at the top causes a circular import problem. # images allows training previews to have infotext. Importing it at the top causes a circular import problem.
from modules import images from modules import images
assert hypernetwork_name, 'hypernetwork not selected' save_hypernetwork_every = save_hypernetwork_every or 0
create_image_every = create_image_every or 0
textual_inversion.validate_train_inputs(hypernetwork_name, learn_rate, batch_size, data_root, template_file, steps, save_hypernetwork_every, create_image_every, log_directory, name="hypernetwork")
path = shared.hypernetworks.get(hypernetwork_name, None) path = shared.hypernetworks.get(hypernetwork_name, None)
shared.loaded_hypernetwork = Hypernetwork() shared.loaded_hypernetwork = Hypernetwork()
@ -358,39 +363,44 @@ def train_hypernetwork(hypernetwork_name, learn_rate, batch_size, data_root, log
else: else:
images_dir = None images_dir = None
hypernetwork = shared.loaded_hypernetwork
checkpoint = sd_models.select_checkpoint()
ititial_step = hypernetwork.step or 0
if ititial_step >= steps:
shared.state.textinfo = f"Model has already been trained beyond specified max steps"
return hypernetwork, filename
scheduler = LearnRateScheduler(learn_rate, steps, ititial_step)
# dataset loading may take a while, so input validations and early returns should be done before this
shared.state.textinfo = f"Preparing dataset from {html.escape(data_root)}..." shared.state.textinfo = f"Preparing dataset from {html.escape(data_root)}..."
with torch.autocast("cuda"): with torch.autocast("cuda"):
ds = modules.textual_inversion.dataset.PersonalizedBase(data_root=data_root, width=training_width, height=training_height, repeats=shared.opts.training_image_repeats_per_epoch, placeholder_token=hypernetwork_name, model=shared.sd_model, device=devices.device, template_file=template_file, include_cond=True, batch_size=batch_size) ds = modules.textual_inversion.dataset.PersonalizedBase(data_root=data_root, width=training_width, height=training_height, repeats=shared.opts.training_image_repeats_per_epoch, placeholder_token=hypernetwork_name, model=shared.sd_model, device=devices.device, template_file=template_file, include_cond=True, batch_size=batch_size)
if unload: if unload:
shared.sd_model.cond_stage_model.to(devices.cpu) shared.sd_model.cond_stage_model.to(devices.cpu)
shared.sd_model.first_stage_model.to(devices.cpu) shared.sd_model.first_stage_model.to(devices.cpu)
hypernetwork = shared.loaded_hypernetwork
weights = hypernetwork.weights()
for weight in weights:
weight.requires_grad = True
size = len(ds.indexes) size = len(ds.indexes)
loss_dict = defaultdict(lambda : deque(maxlen = 1024)) loss_dict = defaultdict(lambda : deque(maxlen = 1024))
losses = torch.zeros((size,)) losses = torch.zeros((size,))
previous_mean_losses = [0] previous_mean_losses = [0]
previous_mean_loss = 0 previous_mean_loss = 0
print("Mean loss of {} elements".format(size)) print("Mean loss of {} elements".format(size))
last_saved_file = "<none>" weights = hypernetwork.weights()
last_saved_image = "<none>" for weight in weights:
forced_filename = "<none>" weight.requires_grad = True
ititial_step = hypernetwork.step or 0
if ititial_step > steps:
return hypernetwork, filename
scheduler = LearnRateScheduler(learn_rate, steps, ititial_step)
# if optimizer == "AdamW": or else Adam / AdamW / SGD, etc... # if optimizer == "AdamW": or else Adam / AdamW / SGD, etc...
optimizer = torch.optim.AdamW(weights, lr=scheduler.learn_rate) optimizer = torch.optim.AdamW(weights, lr=scheduler.learn_rate)
steps_without_grad = 0 steps_without_grad = 0
last_saved_file = "<none>"
last_saved_image = "<none>"
forced_filename = "<none>"
pbar = tqdm.tqdm(enumerate(ds), total=steps - ititial_step) pbar = tqdm.tqdm(enumerate(ds), total=steps - ititial_step)
for i, entries in pbar: for i, entries in pbar:
hypernetwork.step = i + ititial_step hypernetwork.step = i + ititial_step
@ -443,9 +453,9 @@ def train_hypernetwork(hypernetwork_name, learn_rate, batch_size, data_root, log
if hypernetwork_dir is not None and steps_done % save_hypernetwork_every == 0: if hypernetwork_dir is not None and steps_done % save_hypernetwork_every == 0:
# Before saving, change name to match current checkpoint. # Before saving, change name to match current checkpoint.
hypernetwork.name = f'{hypernetwork_name}-{steps_done}' hypernetwork_name_every = f'{hypernetwork_name}-{steps_done}'
last_saved_file = os.path.join(hypernetwork_dir, f'{hypernetwork.name}.pt') last_saved_file = os.path.join(hypernetwork_dir, f'{hypernetwork_name_every}.pt')
hypernetwork.save(last_saved_file) save_hypernetwork(hypernetwork, checkpoint, hypernetwork_name, last_saved_file)
textual_inversion.write_loss(log_directory, "hypernetwork_loss.csv", hypernetwork.step, len(ds), { textual_inversion.write_loss(log_directory, "hypernetwork_loss.csv", hypernetwork.step, len(ds), {
"loss": f"{previous_mean_loss:.7f}", "loss": f"{previous_mean_loss:.7f}",
@ -506,13 +516,23 @@ Last saved image: {html.escape(last_saved_image)}<br/>
""" """
report_statistics(loss_dict) report_statistics(loss_dict)
checkpoint = sd_models.select_checkpoint()
hypernetwork.sd_checkpoint = checkpoint.hash filename = os.path.join(shared.cmd_opts.hypernetwork_dir, f'{hypernetwork_name}.pt')
hypernetwork.sd_checkpoint_name = checkpoint.model_name save_hypernetwork(hypernetwork, checkpoint, hypernetwork_name, filename)
# Before saving for the last time, change name back to the base name (as opposed to the save_hypernetwork_every step-suffixed naming convention).
hypernetwork.name = hypernetwork_name
filename = os.path.join(shared.cmd_opts.hypernetwork_dir, f'{hypernetwork.name}.pt')
hypernetwork.save(filename)
return hypernetwork, filename return hypernetwork, filename
def save_hypernetwork(hypernetwork, checkpoint, hypernetwork_name, filename):
old_hypernetwork_name = hypernetwork.name
old_sd_checkpoint = hypernetwork.sd_checkpoint if hasattr(hypernetwork, "sd_checkpoint") else None
old_sd_checkpoint_name = hypernetwork.sd_checkpoint_name if hasattr(hypernetwork, "sd_checkpoint_name") else None
try:
hypernetwork.sd_checkpoint = checkpoint.hash
hypernetwork.sd_checkpoint_name = checkpoint.model_name
hypernetwork.name = hypernetwork_name
hypernetwork.save(filename)
except:
hypernetwork.sd_checkpoint = old_sd_checkpoint
hypernetwork.sd_checkpoint_name = old_sd_checkpoint_name
hypernetwork.name = old_hypernetwork_name
raise

View File

@ -388,6 +388,7 @@ def create_infotext(p, all_prompts, all_seeds, all_subseeds, comments, iteration
"Model hash": getattr(p, 'sd_model_hash', None if not opts.add_model_hash_to_info or not shared.sd_model.sd_model_hash else shared.sd_model.sd_model_hash), "Model hash": getattr(p, 'sd_model_hash', None if not opts.add_model_hash_to_info or not shared.sd_model.sd_model_hash else shared.sd_model.sd_model_hash),
"Model": (None if not opts.add_model_name_to_info or not shared.sd_model.sd_checkpoint_info.model_name else shared.sd_model.sd_checkpoint_info.model_name.replace(',', '').replace(':', '')), "Model": (None if not opts.add_model_name_to_info or not shared.sd_model.sd_checkpoint_info.model_name else shared.sd_model.sd_checkpoint_info.model_name.replace(',', '').replace(':', '')),
"Hypernet": (None if shared.loaded_hypernetwork is None else shared.loaded_hypernetwork.name), "Hypernet": (None if shared.loaded_hypernetwork is None else shared.loaded_hypernetwork.name),
"Hypernet strength": (None if shared.loaded_hypernetwork is None or shared.opts.sd_hypernetwork_strength >= 1 else shared.opts.sd_hypernetwork_strength),
"Batch size": (None if p.batch_size < 2 else p.batch_size), "Batch size": (None if p.batch_size < 2 else p.batch_size),
"Batch pos": (None if p.batch_size < 2 else position_in_batch), "Batch pos": (None if p.batch_size < 2 else position_in_batch),
"Variation seed": (None if p.subseed_strength == 0 else all_subseeds[index]), "Variation seed": (None if p.subseed_strength == 0 else all_subseeds[index]),
@ -470,7 +471,7 @@ def process_images_inner(p: StableDiffusionProcessing) -> Processed:
model_hijack.embedding_db.load_textual_inversion_embeddings() model_hijack.embedding_db.load_textual_inversion_embeddings()
if p.scripts is not None: if p.scripts is not None:
p.scripts.run_alwayson_scripts(p) p.scripts.process(p)
infotexts = [] infotexts = []
output_images = [] output_images = []
@ -493,7 +494,7 @@ def process_images_inner(p: StableDiffusionProcessing) -> Processed:
seeds = p.all_seeds[n * p.batch_size:(n + 1) * p.batch_size] seeds = p.all_seeds[n * p.batch_size:(n + 1) * p.batch_size]
subseeds = p.all_subseeds[n * p.batch_size:(n + 1) * p.batch_size] subseeds = p.all_subseeds[n * p.batch_size:(n + 1) * p.batch_size]
if (len(prompts) == 0): if len(prompts) == 0:
break break
with devices.autocast(): with devices.autocast():
@ -582,7 +583,13 @@ def process_images_inner(p: StableDiffusionProcessing) -> Processed:
images.save_image(grid, p.outpath_grids, "grid", p.all_seeds[0], p.all_prompts[0], opts.grid_format, info=infotext(), short_filename=not opts.grid_extended_filename, p=p, grid=True) images.save_image(grid, p.outpath_grids, "grid", p.all_seeds[0], p.all_prompts[0], opts.grid_format, info=infotext(), short_filename=not opts.grid_extended_filename, p=p, grid=True)
devices.torch_gc() devices.torch_gc()
return Processed(p, output_images, p.all_seeds[0], infotext() + "".join(["\n\n" + x for x in comments]), subseed=p.all_subseeds[0], all_prompts=p.all_prompts, all_seeds=p.all_seeds, all_subseeds=p.all_subseeds, index_of_first_image=index_of_first_image, infotexts=infotexts)
res = Processed(p, output_images, p.all_seeds[0], infotext() + "".join(["\n\n" + x for x in comments]), subseed=p.all_subseeds[0], all_prompts=p.all_prompts, all_seeds=p.all_seeds, all_subseeds=p.all_subseeds, index_of_first_image=index_of_first_image, infotexts=infotexts)
if p.scripts is not None:
p.scripts.postprocess(p, res)
return res
class StableDiffusionProcessingTxt2Img(StableDiffusionProcessing): class StableDiffusionProcessingTxt2Img(StableDiffusionProcessing):
@ -681,6 +688,8 @@ class StableDiffusionProcessingTxt2Img(StableDiffusionProcessing):
noise = create_random_tensors(samples.shape[1:], seeds=seeds, subseeds=subseeds, subseed_strength=subseed_strength, seed_resize_from_h=self.seed_resize_from_h, seed_resize_from_w=self.seed_resize_from_w, p=self) noise = create_random_tensors(samples.shape[1:], seeds=seeds, subseeds=subseeds, subseed_strength=subseed_strength, seed_resize_from_h=self.seed_resize_from_h, seed_resize_from_w=self.seed_resize_from_w, p=self)
image_conditioning = self.txt2img_image_conditioning(x)
# GC now before running the next img2img to prevent running out of memory # GC now before running the next img2img to prevent running out of memory
x = None x = None
devices.torch_gc() devices.torch_gc()

View File

@ -64,7 +64,16 @@ class Script:
def process(self, p, *args): def process(self, p, *args):
""" """
This function is called before processing begins for AlwaysVisible scripts. This function is called before processing begins for AlwaysVisible scripts.
scripts. You can modify the processing object (p) here, inject hooks, etc. You can modify the processing object (p) here, inject hooks, etc.
args contains all values returned by components from ui()
"""
pass
def postprocess(self, p, processed, *args):
"""
This function is called after processing ends for AlwaysVisible scripts.
args contains all values returned by components from ui()
""" """
pass pass
@ -289,13 +298,22 @@ class ScriptRunner:
return processed return processed
def run_alwayson_scripts(self, p): def process(self, p):
for script in self.alwayson_scripts: for script in self.alwayson_scripts:
try: try:
script_args = p.script_args[script.args_from:script.args_to] script_args = p.script_args[script.args_from:script.args_to]
script.process(p, *script_args) script.process(p, *script_args)
except Exception: except Exception:
print(f"Error running alwayson script: {script.filename}", file=sys.stderr) print(f"Error running process: {script.filename}", file=sys.stderr)
print(traceback.format_exc(), file=sys.stderr)
def postprocess(self, p, processed):
for script in self.alwayson_scripts:
try:
script_args = p.script_args[script.args_from:script.args_to]
script.postprocess(p, processed, *script_args)
except Exception:
print(f"Error running postprocess: {script.filename}", file=sys.stderr)
print(traceback.format_exc(), file=sys.stderr) print(traceback.format_exc(), file=sys.stderr)
def reload_sources(self, cache): def reload_sources(self, cache):

View File

@ -144,9 +144,38 @@ class State:
self.sampling_step = 0 self.sampling_step = 0
self.current_image_sampling_step = 0 self.current_image_sampling_step = 0
def get_job_timestamp(self): def dict(self):
return datetime.datetime.now().strftime("%Y%m%d%H%M%S") # shouldn't this return job_timestamp? obj = {
"skipped": self.skipped,
"interrupted": self.skipped,
"job": self.job,
"job_count": self.job_count,
"job_no": self.job_no,
"sampling_step": self.sampling_step,
"sampling_steps": self.sampling_steps,
}
return obj
def begin(self):
self.sampling_step = 0
self.job_count = -1
self.job_no = 0
self.job_timestamp = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
self.current_latent = None
self.current_image = None
self.current_image_sampling_step = 0
self.skipped = False
self.interrupted = False
self.textinfo = None
devices.torch_gc()
def end(self):
self.job = ""
self.job_count = 0
devices.torch_gc()
state = State() state = State()

View File

@ -42,6 +42,8 @@ class PersonalizedBase(Dataset):
self.lines = lines self.lines = lines
assert data_root, 'dataset directory not specified' assert data_root, 'dataset directory not specified'
assert os.path.isdir(data_root), "Dataset directory doesn't exist"
assert os.listdir(data_root), "Dataset directory is empty"
cond_model = shared.sd_model.cond_stage_model cond_model = shared.sd_model.cond_stage_model

View File

@ -4,30 +4,37 @@ import tqdm
class LearnScheduleIterator: class LearnScheduleIterator:
def __init__(self, learn_rate, max_steps, cur_step=0): def __init__(self, learn_rate, max_steps, cur_step=0):
""" """
specify learn_rate as "0.001:100, 0.00001:1000, 1e-5:10000" to have lr of 0.001 until step 100, 0.00001 until 1000, 1e-5:10000 until 10000 specify learn_rate as "0.001:100, 0.00001:1000, 1e-5:10000" to have lr of 0.001 until step 100, 0.00001 until 1000, and 1e-5 until 10000
""" """
pairs = learn_rate.split(',') pairs = learn_rate.split(',')
self.rates = [] self.rates = []
self.it = 0 self.it = 0
self.maxit = 0 self.maxit = 0
for i, pair in enumerate(pairs): try:
tmp = pair.split(':') for i, pair in enumerate(pairs):
if len(tmp) == 2: if not pair.strip():
step = int(tmp[1]) continue
if step > cur_step: tmp = pair.split(':')
self.rates.append((float(tmp[0]), min(step, max_steps))) if len(tmp) == 2:
self.maxit += 1 step = int(tmp[1])
if step > max_steps: if step > cur_step:
self.rates.append((float(tmp[0]), min(step, max_steps)))
self.maxit += 1
if step > max_steps:
return
elif step == -1:
self.rates.append((float(tmp[0]), max_steps))
self.maxit += 1
return return
elif step == -1: else:
self.rates.append((float(tmp[0]), max_steps)) self.rates.append((float(tmp[0]), max_steps))
self.maxit += 1 self.maxit += 1
return return
else: assert self.rates
self.rates.append((float(tmp[0]), max_steps)) except (ValueError, AssertionError):
self.maxit += 1 raise Exception('Invalid learning rate schedule. It should be a number or, for example, like "0.001:100, 0.00001:1000, 1e-5:10000" to have lr of 0.001 until step 100, 0.00001 until 1000, and 1e-5 until 10000.')
return
def __iter__(self): def __iter__(self):
return self return self

View File

@ -119,7 +119,7 @@ class EmbeddingDatabase:
vec = emb.detach().to(devices.device, dtype=torch.float32) vec = emb.detach().to(devices.device, dtype=torch.float32)
embedding = Embedding(vec, name) embedding = Embedding(vec, name)
embedding.step = data.get('step', None) embedding.step = data.get('step', None)
embedding.sd_checkpoint = data.get('hash', None) embedding.sd_checkpoint = data.get('sd_checkpoint', None)
embedding.sd_checkpoint_name = data.get('sd_checkpoint_name', None) embedding.sd_checkpoint_name = data.get('sd_checkpoint_name', None)
self.register_embedding(embedding, shared.sd_model) self.register_embedding(embedding, shared.sd_model)
@ -204,9 +204,30 @@ def write_loss(log_directory, filename, step, epoch_len, values):
**values, **values,
}) })
def validate_train_inputs(model_name, learn_rate, batch_size, data_root, template_file, steps, save_model_every, create_image_every, log_directory, name="embedding"):
assert model_name, f"{name} not selected"
assert learn_rate, "Learning rate is empty or 0"
assert isinstance(batch_size, int), "Batch size must be integer"
assert batch_size > 0, "Batch size must be positive"
assert data_root, "Dataset directory is empty"
assert os.path.isdir(data_root), "Dataset directory doesn't exist"
assert os.listdir(data_root), "Dataset directory is empty"
assert template_file, "Prompt template file is empty"
assert os.path.isfile(template_file), "Prompt template file doesn't exist"
assert steps, "Max steps is empty or 0"
assert isinstance(steps, int), "Max steps must be integer"
assert steps > 0 , "Max steps must be positive"
assert isinstance(save_model_every, int), "Save {name} must be integer"
assert save_model_every >= 0 , "Save {name} must be positive or 0"
assert isinstance(create_image_every, int), "Create image must be integer"
assert create_image_every >= 0 , "Create image must be positive or 0"
if save_model_every or create_image_every:
assert log_directory, "Log directory is empty"
def train_embedding(embedding_name, learn_rate, batch_size, data_root, log_directory, training_width, training_height, steps, create_image_every, save_embedding_every, template_file, save_image_with_stored_embedding, preview_from_txt2img, preview_prompt, preview_negative_prompt, preview_steps, preview_sampler_index, preview_cfg_scale, preview_seed, preview_width, preview_height): def train_embedding(embedding_name, learn_rate, batch_size, data_root, log_directory, training_width, training_height, steps, create_image_every, save_embedding_every, template_file, save_image_with_stored_embedding, preview_from_txt2img, preview_prompt, preview_negative_prompt, preview_steps, preview_sampler_index, preview_cfg_scale, preview_seed, preview_width, preview_height):
assert embedding_name, 'embedding not selected' save_embedding_every = save_embedding_every or 0
create_image_every = create_image_every or 0
validate_train_inputs(embedding_name, learn_rate, batch_size, data_root, template_file, steps, save_embedding_every, create_image_every, log_directory, name="embedding")
shared.state.textinfo = "Initializing textual inversion training..." shared.state.textinfo = "Initializing textual inversion training..."
shared.state.job_count = steps shared.state.job_count = steps
@ -232,17 +253,28 @@ def train_embedding(embedding_name, learn_rate, batch_size, data_root, log_direc
os.makedirs(images_embeds_dir, exist_ok=True) os.makedirs(images_embeds_dir, exist_ok=True)
else: else:
images_embeds_dir = None images_embeds_dir = None
cond_model = shared.sd_model.cond_stage_model
shared.state.textinfo = f"Preparing dataset from {html.escape(data_root)}..." cond_model = shared.sd_model.cond_stage_model
with torch.autocast("cuda"):
ds = modules.textual_inversion.dataset.PersonalizedBase(data_root=data_root, width=training_width, height=training_height, repeats=shared.opts.training_image_repeats_per_epoch, placeholder_token=embedding_name, model=shared.sd_model, device=devices.device, template_file=template_file, batch_size=batch_size)
hijack = sd_hijack.model_hijack hijack = sd_hijack.model_hijack
embedding = hijack.embedding_db.word_embeddings[embedding_name] embedding = hijack.embedding_db.word_embeddings[embedding_name]
checkpoint = sd_models.select_checkpoint()
ititial_step = embedding.step or 0
if ititial_step >= steps:
shared.state.textinfo = f"Model has already been trained beyond specified max steps"
return embedding, filename
scheduler = LearnRateScheduler(learn_rate, steps, ititial_step)
# dataset loading may take a while, so input validations and early returns should be done before this
shared.state.textinfo = f"Preparing dataset from {html.escape(data_root)}..."
with torch.autocast("cuda"):
ds = modules.textual_inversion.dataset.PersonalizedBase(data_root=data_root, width=training_width, height=training_height, repeats=shared.opts.training_image_repeats_per_epoch, placeholder_token=embedding_name, model=shared.sd_model, device=devices.device, template_file=template_file, batch_size=batch_size)
embedding.vec.requires_grad = True embedding.vec.requires_grad = True
optimizer = torch.optim.AdamW([embedding.vec], lr=scheduler.learn_rate)
losses = torch.zeros((32,)) losses = torch.zeros((32,))
@ -251,13 +283,6 @@ def train_embedding(embedding_name, learn_rate, batch_size, data_root, log_direc
forced_filename = "<none>" forced_filename = "<none>"
embedding_yet_to_be_embedded = False embedding_yet_to_be_embedded = False
ititial_step = embedding.step or 0
if ititial_step > steps:
return embedding, filename
scheduler = LearnRateScheduler(learn_rate, steps, ititial_step)
optimizer = torch.optim.AdamW([embedding.vec], lr=scheduler.learn_rate)
pbar = tqdm.tqdm(enumerate(ds), total=steps-ititial_step) pbar = tqdm.tqdm(enumerate(ds), total=steps-ititial_step)
for i, entries in pbar: for i, entries in pbar:
embedding.step = i + ititial_step embedding.step = i + ititial_step
@ -290,9 +315,9 @@ def train_embedding(embedding_name, learn_rate, batch_size, data_root, log_direc
if embedding_dir is not None and steps_done % save_embedding_every == 0: if embedding_dir is not None and steps_done % save_embedding_every == 0:
# Before saving, change name to match current checkpoint. # Before saving, change name to match current checkpoint.
embedding.name = f'{embedding_name}-{steps_done}' embedding_name_every = f'{embedding_name}-{steps_done}'
last_saved_file = os.path.join(embedding_dir, f'{embedding.name}.pt') last_saved_file = os.path.join(embedding_dir, f'{embedding_name_every}.pt')
embedding.save(last_saved_file) save_embedding(embedding, checkpoint, embedding_name_every, last_saved_file, remove_cached_checksum=True)
embedding_yet_to_be_embedded = True embedding_yet_to_be_embedded = True
write_loss(log_directory, "textual_inversion_loss.csv", embedding.step, len(ds), { write_loss(log_directory, "textual_inversion_loss.csv", embedding.step, len(ds), {
@ -373,14 +398,26 @@ Last saved image: {html.escape(last_saved_image)}<br/>
</p> </p>
""" """
checkpoint = sd_models.select_checkpoint() filename = os.path.join(shared.cmd_opts.embeddings_dir, f'{embedding_name}.pt')
save_embedding(embedding, checkpoint, embedding_name, filename, remove_cached_checksum=True)
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.embeddings_dir, f'{embedding.name}.pt')
embedding.save(filename)
return embedding, filename return embedding, filename
def save_embedding(embedding, checkpoint, embedding_name, filename, remove_cached_checksum=True):
old_embedding_name = embedding.name
old_sd_checkpoint = embedding.sd_checkpoint if hasattr(embedding, "sd_checkpoint") else None
old_sd_checkpoint_name = embedding.sd_checkpoint_name if hasattr(embedding, "sd_checkpoint_name") else None
old_cached_checksum = embedding.cached_checksum if hasattr(embedding, "cached_checksum") else None
try:
embedding.sd_checkpoint = checkpoint.hash
embedding.sd_checkpoint_name = checkpoint.model_name
if remove_cached_checksum:
embedding.cached_checksum = None
embedding.name = embedding_name
embedding.save(filename)
except:
embedding.sd_checkpoint = old_sd_checkpoint
embedding.sd_checkpoint_name = old_sd_checkpoint_name
embedding.name = old_embedding_name
embedding.cached_checksum = old_cached_checksum
raise

0
test/__init__.py Normal file
View File

29
test/extras_test.py Normal file
View File

@ -0,0 +1,29 @@
import unittest
class TestExtrasWorking(unittest.TestCase):
def setUp(self):
self.url_img2img = "http://localhost:7860/sdapi/v1/extra-single-image"
self.simple_extras = {
"resize_mode": 0,
"show_extras_results": True,
"gfpgan_visibility": 0,
"codeformer_visibility": 0,
"codeformer_weight": 0,
"upscaling_resize": 2,
"upscaling_resize_w": 512,
"upscaling_resize_h": 512,
"upscaling_crop": True,
"upscaler_1": "None",
"upscaler_2": "None",
"extras_upscaler_2_visibility": 0,
"image": ""
}
class TestExtrasCorrectness(unittest.TestCase):
pass
if __name__ == "__main__":
unittest.main()

59
test/img2img_test.py Normal file
View File

@ -0,0 +1,59 @@
import unittest
import requests
from gradio.processing_utils import encode_pil_to_base64
from PIL import Image
class TestImg2ImgWorking(unittest.TestCase):
def setUp(self):
self.url_img2img = "http://localhost:7860/sdapi/v1/img2img"
self.simple_img2img = {
"init_images": [encode_pil_to_base64(Image.open(r"test/test_files/img2img_basic.png"))],
"resize_mode": 0,
"denoising_strength": 0.75,
"mask": None,
"mask_blur": 4,
"inpainting_fill": 0,
"inpaint_full_res": False,
"inpaint_full_res_padding": 0,
"inpainting_mask_invert": 0,
"prompt": "example prompt",
"styles": [],
"seed": -1,
"subseed": -1,
"subseed_strength": 0,
"seed_resize_from_h": -1,
"seed_resize_from_w": -1,
"batch_size": 1,
"n_iter": 1,
"steps": 3,
"cfg_scale": 7,
"width": 64,
"height": 64,
"restore_faces": False,
"tiling": False,
"negative_prompt": "",
"eta": 0,
"s_churn": 0,
"s_tmax": 0,
"s_tmin": 0,
"s_noise": 1,
"override_settings": {},
"sampler_index": "Euler a",
"include_init_images": False
}
def test_img2img_simple_performed(self):
self.assertEqual(requests.post(self.url_img2img, json=self.simple_img2img).status_code, 200)
def test_inpainting_masked_performed(self):
self.simple_img2img["mask"] = encode_pil_to_base64(Image.open(r"test/test_files/mask_basic.png"))
self.assertEqual(requests.post(self.url_img2img, json=self.simple_img2img).status_code, 200)
class TestImg2ImgCorrectness(unittest.TestCase):
pass
if __name__ == "__main__":
unittest.main()

19
test/server_poll.py Normal file
View File

@ -0,0 +1,19 @@
import unittest
import requests
import time
def run_tests():
timeout_threshold = 240
start_time = time.time()
while time.time()-start_time < timeout_threshold:
try:
requests.head("http://localhost:7860/")
break
except requests.exceptions.ConnectionError:
pass
if time.time()-start_time < timeout_threshold:
suite = unittest.TestLoader().discover('', pattern='*_test.py')
result = unittest.TextTestRunner(verbosity=2).run(suite)
else:
print("Launch unsuccessful")

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 B

74
test/txt2img_test.py Normal file
View File

@ -0,0 +1,74 @@
import unittest
import requests
class TestTxt2ImgWorking(unittest.TestCase):
def setUp(self):
self.url_txt2img = "http://localhost:7860/sdapi/v1/txt2img"
self.simple_txt2img = {
"enable_hr": False,
"denoising_strength": 0,
"firstphase_width": 0,
"firstphase_height": 0,
"prompt": "example prompt",
"styles": [],
"seed": -1,
"subseed": -1,
"subseed_strength": 0,
"seed_resize_from_h": -1,
"seed_resize_from_w": -1,
"batch_size": 1,
"n_iter": 1,
"steps": 3,
"cfg_scale": 7,
"width": 64,
"height": 64,
"restore_faces": False,
"tiling": False,
"negative_prompt": "",
"eta": 0,
"s_churn": 0,
"s_tmax": 0,
"s_tmin": 0,
"s_noise": 1,
"sampler_index": "Euler a"
}
def test_txt2img_simple_performed(self):
self.assertEqual(requests.post(self.url_txt2img, json=self.simple_txt2img).status_code, 200)
def test_txt2img_with_negative_prompt_performed(self):
self.simple_txt2img["negative_prompt"] = "example negative prompt"
self.assertEqual(requests.post(self.url_txt2img, json=self.simple_txt2img).status_code, 200)
def test_txt2img_not_square_image_performed(self):
self.simple_txt2img["height"] = 128
self.assertEqual(requests.post(self.url_txt2img, json=self.simple_txt2img).status_code, 200)
def test_txt2img_with_hrfix_performed(self):
self.simple_txt2img["enable_hr"] = True
self.assertEqual(requests.post(self.url_txt2img, json=self.simple_txt2img).status_code, 200)
def test_txt2img_with_restore_faces_performed(self):
self.simple_txt2img["restore_faces"] = True
self.assertEqual(requests.post(self.url_txt2img, json=self.simple_txt2img).status_code, 200)
def test_txt2img_with_tiling_faces_performed(self):
self.simple_txt2img["tiling"] = True
self.assertEqual(requests.post(self.url_txt2img, json=self.simple_txt2img).status_code, 200)
def test_txt2img_with_vanilla_sampler_performed(self):
self.simple_txt2img["sampler_index"] = "PLMS"
self.assertEqual(requests.post(self.url_txt2img, json=self.simple_txt2img).status_code, 200)
def test_txt2img_multiple_batches_performed(self):
self.simple_txt2img["n_iter"] = 2
self.assertEqual(requests.post(self.url_txt2img, json=self.simple_txt2img).status_code, 200)
class TestTxt2ImgCorrectness(unittest.TestCase):
pass
if __name__ == "__main__":
unittest.main()

View File

@ -46,26 +46,13 @@ def wrap_queued_call(func):
def wrap_gradio_gpu_call(func, extra_outputs=None): def wrap_gradio_gpu_call(func, extra_outputs=None):
def f(*args, **kwargs): def f(*args, **kwargs):
devices.torch_gc()
shared.state.sampling_step = 0 shared.state.begin()
shared.state.job_count = -1
shared.state.job_no = 0
shared.state.job_timestamp = shared.state.get_job_timestamp()
shared.state.current_latent = None
shared.state.current_image = None
shared.state.current_image_sampling_step = 0
shared.state.skipped = False
shared.state.interrupted = False
shared.state.textinfo = None
with queue_lock: with queue_lock:
res = func(*args, **kwargs) res = func(*args, **kwargs)
shared.state.job = "" shared.state.end()
shared.state.job_count = 0
devices.torch_gc()
return res return res

View File

@ -102,15 +102,14 @@ then
exit 1 exit 1
fi fi
printf "\n%s\n" "${delimiter}"
printf "Clone or update stable-diffusion-webui"
printf "\n%s\n" "${delimiter}"
cd "${install_dir}"/ || { printf "\e[1m\e[31mERROR: Can't cd to %s/, aborting...\e[0m" "${install_dir}"; exit 1; } cd "${install_dir}"/ || { printf "\e[1m\e[31mERROR: Can't cd to %s/, aborting...\e[0m" "${install_dir}"; exit 1; }
if [[ -d "${clone_dir}" ]] if [[ -d "${clone_dir}" ]]
then then
cd "${clone_dir}"/ || { printf "\e[1m\e[31mERROR: Can't cd to %s/%s/, aborting...\e[0m" "${install_dir}" "${clone_dir}"; exit 1; } cd "${clone_dir}"/ || { printf "\e[1m\e[31mERROR: Can't cd to %s/%s/, aborting...\e[0m" "${install_dir}" "${clone_dir}"; exit 1; }
"${GIT}" pull
else else
printf "\n%s\n" "${delimiter}"
printf "Clone stable-diffusion-webui"
printf "\n%s\n" "${delimiter}"
"${GIT}" clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git "${clone_dir}" "${GIT}" clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git "${clone_dir}"
cd "${clone_dir}"/ || { printf "\e[1m\e[31mERROR: Can't cd to %s/%s/, aborting...\e[0m" "${install_dir}" "${clone_dir}"; exit 1; } cd "${clone_dir}"/ || { printf "\e[1m\e[31mERROR: Can't cd to %s/%s/, aborting...\e[0m" "${install_dir}" "${clone_dir}"; exit 1; }
fi fi