Merge branch 'AUTOMATIC1111:master' into adjust-ddim-uniform-steps
This commit is contained in:
commit
6c9e427c0e
28 changed files with 2012 additions and 909 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -29,3 +29,5 @@ notification.mp3
|
|||
/textual_inversion
|
||||
.vscode
|
||||
/extensions
|
||||
/test/stdout.txt
|
||||
/test/stderr.txt
|
||||
|
|
12
CODEOWNERS
12
CODEOWNERS
|
@ -1 +1,13 @@
|
|||
* @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
|
||||
|
|
22
launch.py
22
launch.py
|
@ -128,10 +128,12 @@ def prepare_enviroment():
|
|||
blip_commit_hash = os.environ.get('BLIP_COMMIT_HASH', "48211a1594f1321b00f14c9f7a5b4813144b2fb9")
|
||||
|
||||
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, reinstall_xformers = extract_arg(sys.argv, '--reinstall-xformers')
|
||||
sys.argv, update_check = extract_arg(sys.argv, '--update-check')
|
||||
sys.argv, run_tests = extract_arg(sys.argv, '--tests')
|
||||
xformers = '--xformers' in sys.argv
|
||||
deepdanbooru = '--deepdanbooru' in sys.argv
|
||||
ngrok = '--ngrok' in sys.argv
|
||||
|
@ -194,6 +196,26 @@ def prepare_enviroment():
|
|||
print("Exiting because of --exit argument")
|
||||
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():
|
||||
print(f"Launching Web UI with arguments: {' '.join(sys.argv[1:])}")
|
||||
|
|
|
@ -26,8 +26,21 @@
|
|||
"Sampling Steps": "عدد الخطوات",
|
||||
"Sampling method": "أسلوب الخطو",
|
||||
"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": "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: الأفضل في الإنتاج الجزئي",
|
||||
"PLMS": "PLMS",
|
||||
"Width": "العرض",
|
||||
"Height": "الإرتفاع",
|
||||
"Restore faces": "تحسين الوجوه",
|
||||
|
@ -58,6 +71,7 @@
|
|||
"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: نفس دقة الإنتاج)",
|
||||
"Open for Clip Aesthetic!": "تضمين تجميلي",
|
||||
"▼": "▼",
|
||||
"Aesthetic weight": "أثر التضمين",
|
||||
"Aesthetic steps": "عدد الخطوات",
|
||||
"Aesthetic learning rate": "معدل التعلم",
|
||||
|
@ -79,7 +93,6 @@
|
|||
"-": "-",
|
||||
"or": "أو",
|
||||
"Click to Upload": "انقر للرفع",
|
||||
"Prompts": "قائمة الطلبات",
|
||||
"X/Y plot": "مصفوفة عوامل",
|
||||
"X type": "العامل الأول",
|
||||
"Nothing": "لا شيء",
|
||||
|
@ -92,6 +105,8 @@
|
|||
"Checkpoint name": "ملف الأوزان",
|
||||
"Hypernetwork": "الشبكة الفائقة",
|
||||
"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 min": "أدنى تشويش (Stmin)",
|
||||
"Sigma max": "أقصى تشويش (Stmax)",
|
||||
|
@ -99,6 +114,7 @@
|
|||
"Eta": "العامل Eta η",
|
||||
"Clip skip": "تخطي آخر طبقات CLIP",
|
||||
"Denoising": "المدى",
|
||||
"Cond. Image Mask Weight": "قوة قناع الإنتاج الجزئي",
|
||||
"X values": "قيم العامل الأول",
|
||||
"Separate values for X axis using commas.": "افصل القيم بفواصل (,) من اليسار إلى اليمين",
|
||||
"Y type": "العامل الثاني",
|
||||
|
@ -168,6 +184,12 @@
|
|||
"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.": "المكبر ينظر إلى أجزاء الصورة من خلال نافذة لتكبير المحتوى ثم ينتقل إلى الجزء المجاور، يفضل أن يكون هناك تداخل بين كل رقعة لكي لا يكون هناك اختلاف واضح بينهم",
|
||||
"Upscaler": "طريقة التكبير",
|
||||
"Lanczos": "Lanczos",
|
||||
"LDSR": "LDSR",
|
||||
"ScuNET GAN": "ScuNET GAN",
|
||||
"ScuNET PSNR": "ScuNET PSNR",
|
||||
"ESRGAN_4x": "ESRGAN_4x",
|
||||
"SwinIR 4x": "SwinIR 4x",
|
||||
"Inpaint": "إنتاج جزئي",
|
||||
"Draw mask": "ارسم القناع",
|
||||
"Upload mask": "ارفع القناع",
|
||||
|
@ -192,6 +214,7 @@
|
|||
"GFPGAN visibility": "أثر GFPGAN (محسن وجوه)",
|
||||
"CodeFormer visibility": "أثر CodeFormer (محسن وجوه)",
|
||||
"CodeFormer weight (0 = maximum effect, 1 = minimum effect)": "وزن CodeFormer (يزيد التفاصيل على حساب الجودة)",
|
||||
"Upscale Before Restoring Faces": "كبر قبل تحسين الوجوه",
|
||||
"Scale to": "دقة محددة",
|
||||
"Crop to fit": "قص الأطراف الزائدة إذا لم تتناسب الأبعاد",
|
||||
"Batch Process": "حزمة صور",
|
||||
|
@ -199,7 +222,6 @@
|
|||
"A directory on the same machine where the server is running.": "مسار مجلد صور موجود في جهاز الخادم",
|
||||
"Leave blank to save images to the default path.": "اتركه فارغا لاستخدام المسار الإفتراضي",
|
||||
"Show result images": "اعرض الصور الناتجة",
|
||||
"Open output directory": "افتح مجلد المخرجات",
|
||||
"PNG Info": "عوامل الصورة",
|
||||
"Send to txt2img": "أرسل لنص إلى صورة",
|
||||
"Checkpoint Merger": "مزج الأوزان",
|
||||
|
@ -232,7 +254,41 @@
|
|||
"Enter hypernetwork layer structure": "ترتيب مضاعفات عرض الطبقات",
|
||||
"1st and last digit must be 1. ex:'1, 2, 1'": "المضاعفين الأول والأخير يجب أن يكونا 1، مثال: 1, 2, 1",
|
||||
"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 وأمثالها)",
|
||||
"Normal": "Normal",
|
||||
"KaimingUniform": "KaimingUniform",
|
||||
"KaimingNormal": "KaimingNormal",
|
||||
"XavierUniform": "XavierUniform",
|
||||
"XavierNormal": "XavierNormal",
|
||||
"Add layer normalization": "أضف تسوية الطبقات (LayerNorm)",
|
||||
"Use dropout": "استخدم الإسقاط (Dropout)",
|
||||
"Overwrite Old Hypernetwork": "استبدل الشبكة الفائقة القديمة",
|
||||
|
@ -393,6 +449,7 @@
|
|||
"Add model hash to generation information": "أضف رمز تهشير (Hash) ملف الأوزان لعوامل الإنتاج",
|
||||
"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.": "لا تغير الأوزان المختارة عند قراءة عوامل الإنتاج من صورة أو من ملف",
|
||||
"Send seed when sending prompt or image to other interface": "عند إرسال صورة أو طلب ألحق البذرة أيضا",
|
||||
"Font for image grids that have text": "نوع الخط في جداول الصور التي تحتوي على نصوص",
|
||||
"Enable full page image viewer": "اسمح بعرض الصور في وضع ملئ الشاشة",
|
||||
"Show images zoomed in by default in full page image viewer": "اعرض الصور مقربة عند استخدام وضع ملئ الشاشة",
|
||||
|
@ -400,6 +457,18 @@
|
|||
"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 لمعرفة الأسماء، يتطلب إعادة تشغيل",
|
||||
"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": "عوامل أساليب الخطو",
|
||||
"Hide samplers in user interface (requires restart)": "اخف أساليب الخطو التالية (يتطلب إعادة تشغيل)",
|
||||
"eta (noise multiplier) for DDIM": "العامل Eta η لأسلوب الخطو DDIM",
|
||||
|
@ -420,5 +489,30 @@
|
|||
"Request browser notifications": "اطلب تنبيهات المتصفح",
|
||||
"Download localization template": "حمل ملف اللغة",
|
||||
"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"
|
||||
}
|
||||
|
|
|
@ -1,42 +1,41 @@
|
|||
|
||||
{
|
||||
"⤡": "⤡",
|
||||
"⊞": "⊞",
|
||||
"×": "×",
|
||||
"❮": "❮",
|
||||
"❯": "❯",
|
||||
"view": "API ",
|
||||
"api": "anzeigen",
|
||||
"•": " • ",
|
||||
"built with gradio": "Mit Gradio erstellt",
|
||||
"Loading...": "Lädt...",
|
||||
"view": "zeigen",
|
||||
"api": "api",
|
||||
"•": "•",
|
||||
"built with gradio": "Erstellt mit Gradio",
|
||||
"Stable Diffusion checkpoint": "Stable Diffusion checkpoint",
|
||||
"Stable Diffusion checkpoint": "Stable Diffusion Checkpoint",
|
||||
"txt2img": "txt2img",
|
||||
"img2img": "img2img",
|
||||
"Extras": "Extras",
|
||||
"PNG Info": "PNG Info",
|
||||
"Checkpoint Merger": "Checkpoint Merger",
|
||||
"Checkpoint Merger": "Checkpoint Fusion",
|
||||
"Train": "Trainieren",
|
||||
"Settings": "Einstellungen",
|
||||
"Prompt": "Prompt",
|
||||
"Negative prompt": "Negativer Prompt",
|
||||
"Negative prompt": "Negative Prompt",
|
||||
"Run": "Ausführen",
|
||||
"Skip": "Überspringen",
|
||||
"Interrupt": "Abbrechen",
|
||||
"Generate": "Generieren",
|
||||
"Style 1": "Style 1",
|
||||
"Style 2": "Style 2",
|
||||
"Style 1": "Stil 1",
|
||||
"Style 2": "Stil 2",
|
||||
"Label": "Bezeichnung",
|
||||
"File": "Datei",
|
||||
"Drop File Here": "Datei hier ablegen",
|
||||
"-": "-",
|
||||
"o": "o",
|
||||
"Click to Upload": "Klicken zum Hochladen",
|
||||
"o": "oder",
|
||||
"Click to Upload": "Hochladen",
|
||||
"Image": "Bild",
|
||||
"Check progress": "Fortschitt prüfen",
|
||||
"Check progress (first)": "Fortschritt prüfen (Initial)",
|
||||
"Sampling Steps": "Sampling Steps",
|
||||
"Sampling method": "Sampling method",
|
||||
"Sampling Steps": "Samplingschritte",
|
||||
"Sampling method": "Samplingmethode",
|
||||
"Euler a": "Euler a",
|
||||
"Euler": "Euler",
|
||||
"LMS": "LMS",
|
||||
|
@ -54,37 +53,37 @@
|
|||
"Height": "Höhe",
|
||||
"Restore faces": "Gesichter wiederherstellen",
|
||||
"Tiling": "Kacheln",
|
||||
"Highres. fix": "Highres. fix",
|
||||
"Firstpass width": "Breite erstdurchlauf",
|
||||
"Firstpass height": "Höhe erstdurchlauf",
|
||||
"Denoising strength": "Denoising stärke",
|
||||
"Batch count": "Batch anzahl",
|
||||
"Batch size": "Batch größe",
|
||||
"CFG Scale": "CFG Scale",
|
||||
"Highres. fix": "Highres. Fix",
|
||||
"Firstpass width": "Breite Erstdurchlauf",
|
||||
"Firstpass height": "Höhe Erstdurchlauf",
|
||||
"Denoising strength": "Denoisingstärke",
|
||||
"Batch count": "Batchanzahl",
|
||||
"Batch size": "Batchgröße",
|
||||
"CFG Scale": "CFG-Skala",
|
||||
"Seed": "Seed",
|
||||
"Extra": "Extra",
|
||||
"Variation seed": "Variation seed",
|
||||
"Variation strength": "Variation strength",
|
||||
"Resize seed from width": "Seed von der Breite her ändern",
|
||||
"Resize seed from height": " Seed von der Breite her ändern",
|
||||
"Script": "Script",
|
||||
"Variation seed": "Variationsseed",
|
||||
"Variation strength": "Variationsstärke",
|
||||
"Resize seed from width": "Seed von Breite ändern",
|
||||
"Resize seed from height": "Seed von Höhe ändern",
|
||||
"Script": "Skript",
|
||||
"None": "Nichts",
|
||||
"Prompt matrix": "Prompt matrix",
|
||||
"Prompts from file or textbox": "Prompts von Datei oder Textbox",
|
||||
"X/Y plot": "X/Y graph",
|
||||
"Prompt matrix": "Promptmatrix",
|
||||
"Prompts from file or textbox": "Prompts aus Datei oder Textfeld",
|
||||
"X/Y plot": "X/Y Graf",
|
||||
"Put variable parts at start of prompt": "Variable teile am start des Prompt setzen",
|
||||
"Show Textbox": "Textbox Anzeigen",
|
||||
"File with inputs": "Datei mit Inputwerten",
|
||||
"Prompts": "Prompts",
|
||||
"X type": "X typ",
|
||||
"Iterate seed every line": "Iterate seed every line",
|
||||
"List of prompt inputs": "List of prompt inputs",
|
||||
"Upload prompt inputs": "Upload prompt inputs",
|
||||
"X type": "X-Typ",
|
||||
"Nothing": "Nichts",
|
||||
"Var. seed": "Var. seed",
|
||||
"Var. strength": "Var. strength",
|
||||
"Steps": "Steps",
|
||||
"Prompt S/R": "Prompt S/R",
|
||||
"Prompt order": "Prompt order",
|
||||
"Steps": "Schritte",
|
||||
"Prompt S/R": "Prompt Suchen/Ersetzen",
|
||||
"Prompt order": "Promptreihenfolge",
|
||||
"Sampler": "Sampler",
|
||||
"Checkpoint name": "Checkpoint name",
|
||||
"Checkpoint name": "Checkpointname",
|
||||
"Hypernetwork": "Hypernetwork",
|
||||
"Hypernet str.": "Hypernet str.",
|
||||
"Sigma Churn": "Sigma Churn",
|
||||
|
@ -94,76 +93,78 @@
|
|||
"Eta": "Eta",
|
||||
"Clip skip": "Clip skip",
|
||||
"Denoising": "Denoising",
|
||||
"X values": "X values",
|
||||
"Y type": "Y type",
|
||||
"Y values": "Y values",
|
||||
"Cond. Image Mask Weight": "Cond. Image Mask Weight",
|
||||
"X values": "X-Werte",
|
||||
"Y type": "Y-Typ",
|
||||
"Y values": "Y-Werte",
|
||||
"Draw legend": "Legende zeichnen",
|
||||
"Include Separate Images": "Seperate Bilder hinzufügen",
|
||||
"Keep -1 for seeds": "-1 als Seed behalten",
|
||||
"Drop Image Here": "Bild hier ablegen",
|
||||
"Save": "Speichern",
|
||||
"Send to img2img": "Senden an img2img",
|
||||
"Send to inpaint": "Senden an inpaint",
|
||||
"Send to extras": "Senden an extras",
|
||||
"Make Zip when Save?": "Zip beim speichern erstellen?",
|
||||
"Textbox": "Textbox",
|
||||
"Interrogate\nCLIP": "CLIP\nAbfragen",
|
||||
"Send to img2img": "An img2img senden",
|
||||
"Send to inpaint": "An Inpaint senden",
|
||||
"Send to extras": "An Extras senden",
|
||||
"Make Zip when Save?": "Zip beim Speichern erstellen?",
|
||||
"Textbox": "Textfeld",
|
||||
"Interrogate\nCLIP": "Interrogate\nCLIP",
|
||||
"Interrogate\nDeepBooru": "Interrogate\nDeepBooru",
|
||||
"Inpaint": "Inpaint",
|
||||
"Batch img2img": "Batch 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 blur": "Masken Unschärfe",
|
||||
"Mask mode": "Masken modus",
|
||||
"Mask blur": "Maskenunschärfe",
|
||||
"Mask mode": "Maskenmodus",
|
||||
"Draw mask": "Maske zeichnen",
|
||||
"Upload mask": "Maske Hochladen",
|
||||
"Masking mode": "Modus zum Maskieren",
|
||||
"Inpaint masked": "Inpaint maskiertes",
|
||||
"Inpaint not masked": "Inpaint nicht maskiertes",
|
||||
"Upload mask": "Maske hochladen",
|
||||
"Masking mode": "Maskierungsmodus",
|
||||
"Inpaint masked": "Maskiertes inpainten",
|
||||
"Inpaint not masked": "Nicht maskiertes inpainten",
|
||||
"Masked content": "Maskierter Inhalt",
|
||||
"fill": "ausfüllen",
|
||||
"original": "original",
|
||||
"latent noise": "latent noise",
|
||||
"latent nothing": "latent nothing",
|
||||
"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.",
|
||||
"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",
|
||||
"Output directory": "Output verzeichnis",
|
||||
"Resize mode": "Größe anpassen - Modus",
|
||||
"Just resize": "Nur größe anpassen",
|
||||
"Crop and resize": "Zuschneiden und größe anpassen",
|
||||
"Input directory": "Eingabeverzeichnis",
|
||||
"Output directory": "Ausgabeverzeichnis",
|
||||
"Resize mode": "Größenänderungsmodus",
|
||||
"Just resize": "Nur Größe anpassen",
|
||||
"Crop and resize": "Zuschneiden und Größe anpassen",
|
||||
"Resize and fill": "Größe anpassen und ausfüllen",
|
||||
"img2img alternative test": "img2img alternative test",
|
||||
"img2img alternative test": "img2img alternativer Test",
|
||||
"Loopback": "Loopback",
|
||||
"Outpainting mk2": "Outpainting mk2",
|
||||
"Poor man's outpainting": "Poor man's outpainting",
|
||||
"SD upscale": "SD upscale",
|
||||
"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 `prompt` to the same value as `original prompt`?(and `negative prompt`)": "`prompt` zum gleichen wert wie `Originaler prompt` überschreiben? (und `Negativer prompt`)",
|
||||
"Original prompt": "Originaler Prompt",
|
||||
"Original negative prompt": "Originaler negativer prompt",
|
||||
"Override `Sampling Steps` to the same value as `Decode steps`?": "`Sampling Steps` zum gleichen wert wie `Decode steps` überschreiben?",
|
||||
"Decode steps": "Decode steps",
|
||||
"Override `Denoising strength` to 1?": "`Denoising strength` zu 1 überschreiben?",
|
||||
"Decode CFG scale": "Decode CFG scale",
|
||||
"SD upscale": "SD-Upscale",
|
||||
"should be 2 or lower.": "Sollte 2 oder niedriger sein.",
|
||||
"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` auf denselben Wert wie `Originale Prompt` (und `Negative Prompt`) setzen?",
|
||||
"Original prompt": "Originale Prompt",
|
||||
"Original negative prompt": "Originale negative Prompt",
|
||||
"Override `Sampling Steps` to the same value as `Decode steps`?": "`Samplingschritte` auf denselben Wert wie `Dekodierschritte` setzen?",
|
||||
"Decode steps": "Dekodierschritte",
|
||||
"Override `Denoising strength` to 1?": "`Denoisingstärke auf 1 setzen?",
|
||||
"Decode CFG scale": "CFG-Skala dekodieren",
|
||||
"Randomness": "Zufälligkeit",
|
||||
"Sigma adjustment for finding noise for image": "Sigma anpassungen um noise für Bilder zu finden.",
|
||||
"Loops": "Loops",
|
||||
"Sigma adjustment for finding noise for image": "Sigma-Anpassung für die Suche nach Noise des Bildes",
|
||||
"Loops": "Schleifen",
|
||||
"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",
|
||||
"Pixels to expand": "Anz. Pixel zum erweitern",
|
||||
"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": "Pixel zum Erweitern",
|
||||
"Outpainting direction": "Outpainting Richtung",
|
||||
"left": "Links",
|
||||
"right": "Rechts",
|
||||
"up": "Hoch",
|
||||
"down": "Runter",
|
||||
"Fall-off exponent (lower=higher detail)": "Fall-off exponent (weniger=mehr details)",
|
||||
"Color variation": "Farb variationen",
|
||||
"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",
|
||||
"Tile overlap": "Kacheln überlappungen",
|
||||
"Fall-off exponent (lower=higher detail)": "Abfallexponent (niedriger=mehr Details)",
|
||||
"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; Benutze die Schieberegler für Breite und Höhe, um die Kachelgröße einzustellen",
|
||||
"Tile overlap": "Kachelüberlappung",
|
||||
"Upscaler": "Upscaler",
|
||||
"Lanczos": "Lanczos",
|
||||
"LDSR": "LDSR",
|
||||
|
@ -171,249 +172,287 @@
|
|||
"ScuNET GAN": "ScuNET GAN",
|
||||
"ScuNET PSNR": "ScuNET PSNR",
|
||||
"ESRGAN_4x": "ESRGAN_4x",
|
||||
"Single Image": "Ein Bild",
|
||||
"Batch Process": "Massenverarbeitung",
|
||||
"Batch from Directory": "Massenverarbeitung vom Verzeichnis",
|
||||
"Single Image": "Einzelnes Bild",
|
||||
"Batch Process": "Batchverarbeitung",
|
||||
"Batch from Directory": "Batchverarbeitung aus Verzeichnis",
|
||||
"Source": "Quelle",
|
||||
"Show result images": "Bildergebnisse zeigen",
|
||||
"Scale by": "Skalieren von",
|
||||
"Scale by": "Skalieren um",
|
||||
"Scale to": "Skalieren zu",
|
||||
"Resize": "Größe anpassen",
|
||||
"Crop to fit": "Zuschneiden damit es passt",
|
||||
"Upscaler 2 visibility": "Upscaler 2 sichtbarkeit",
|
||||
"GFPGAN visibility": "GFPGAN sichtbarkeit",
|
||||
"CodeFormer visibility": "CodeFormer sichtbarkeit",
|
||||
"CodeFormer weight (0 = maximum effect, 1 = minimum effect)": "CodeFormer gewicht (0 = maximaler effekt, 1 = minimalster effekt)",
|
||||
"Open output directory": "Zielverzeichnis öffnen",
|
||||
"Send to txt2img": "Senden an txt2img",
|
||||
"Upscaler 2 visibility": "Upscaler 2 Sichtbarkeit",
|
||||
"GFPGAN visibility": "GFPGAN Sichtbarkeit",
|
||||
"CodeFormer visibility": "CodeFormer Sichtbarkeit",
|
||||
"CodeFormer weight (0 = maximum effect, 1 = minimum effect)": "CodeFormer Gewichtung (0 = maximale Wirkung, 1 = minimale Wirkung)",
|
||||
"Upscale Before Restoring Faces": "Upscale Before Restoring Faces",
|
||||
"Send to txt2img": "An txt2img senden",
|
||||
"A merger of the two checkpoints will be generated in your": "Die zusammgeführten Checkpoints werden gespeichert unter",
|
||||
"checkpoint": "checkpoint",
|
||||
"checkpoint": "Checkpoint",
|
||||
"directory.": "Verzeichnis.",
|
||||
"Primary model (A)": "Primäres Modell (A)",
|
||||
"Secondary model (B)": "Sekundäres Modell (B)",
|
||||
"Tertiary model (C)": "Tertiäres Modell (C)",
|
||||
"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",
|
||||
"Weighted sum": "Weighted sum",
|
||||
"Add difference": "Add difference",
|
||||
"Save as float16": "Speichern als float16",
|
||||
"See": "Siehe ",
|
||||
"wiki": "wiki ",
|
||||
"for detailed explanation.": "für eine detailierte erklärung.",
|
||||
"wiki": "Wiki ",
|
||||
"for detailed explanation.": "für eine ausführliche Erklärung.",
|
||||
"Create embedding": "Embedding erstellen",
|
||||
"Create hypernetwork": "Hypernetwork erstellen",
|
||||
"Preprocess images": "Bilder vorbereiten",
|
||||
"Name": "Name",
|
||||
"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",
|
||||
"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",
|
||||
"linear": "linear",
|
||||
"relu": "relu",
|
||||
"leakyrelu": "leakyrelu",
|
||||
"elu": "elu",
|
||||
"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",
|
||||
"Overwrite Old Hypernetwork": "Altes Hypernetwork überschreiben",
|
||||
"Source directory": "Quellenverzeichnis",
|
||||
"Destination directory": "Zielverzeichnis",
|
||||
"Existing Caption txt Action": "Vorhandene Beschriftung der txt Aktion",
|
||||
"Existing Caption txt Action": "Vorhandene Beschriftung der txt",
|
||||
"ignore": "ignorieren",
|
||||
"copy": "kopieren",
|
||||
"prepend": "vorangestellt",
|
||||
"prepend": "voranstellen",
|
||||
"append": "anhängen",
|
||||
"Create flipped copies": "Gespiegelte Bilder erstellen",
|
||||
"Split oversized images": "Übergroße Bilder aufteilen",
|
||||
"Use BLIP for caption": "BLIP für Überschrift nutzen",
|
||||
"Use deepbooru for caption": "Deepbooru für Überschrift nutzen",
|
||||
"Split image threshold": "Bilder aufteilen Grenzwert",
|
||||
"Split image overlap ratio": "Überschneidungsverhältnis beim Bilder aufteilen",
|
||||
"Auto focal point crop": "Automatisch auf Fokuspunkt zuschneiden",
|
||||
"Use BLIP for caption": "BLIP für Beschriftung nutzen",
|
||||
"Use deepbooru for caption": "Deepbooru für Beschriftung nutzen",
|
||||
"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",
|
||||
"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",
|
||||
"[wiki]": "[wiki]",
|
||||
"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]",
|
||||
"Embedding": "Embedding",
|
||||
"Embedding Learning rate": "Embedding Learning rate",
|
||||
"Hypernetwork Learning rate": "Hypernetwork Learning rate",
|
||||
"Dataset directory": "Dataset verzeichnis",
|
||||
"Log directory": "Log verzeichnis",
|
||||
"Prompt template file": "Vorlage Datei für Prompt",
|
||||
"Max steps": "Max steps",
|
||||
"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 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 images with embedding in PNG chunks": "Das Bild mit embedding in PNG Fragmente speichern",
|
||||
"Read parameters (prompt, etc...) from txt2img tab when making previews": "Bei vorschau die Parameter (prompt, etc...) vom txt2img tab lesen",
|
||||
"Embedding Learning rate": "Embedding Lernrate",
|
||||
"Hypernetwork Learning rate": "Hypernetwork Lernrate",
|
||||
"Dataset directory": "Datensatzverzeichnis",
|
||||
"Log directory": "Protokollverzeichnis",
|
||||
"Prompt template file": "Prompt-Vorlagendatei",
|
||||
"Max steps": "Max Schritte",
|
||||
"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": "Speichere alle N Schritte eine Embeddingkopie im Protokollverzeichnis, 0 zum Deaktivieren",
|
||||
"Save images with embedding in PNG chunks": "Speichere Bilder mit Embeddings in PNG Chunks",
|
||||
"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 Embedding": "Embedding Trainieren",
|
||||
"Apply settings": "Einstellungen anwenden",
|
||||
"Apply settings": "Eintellungen anwenden",
|
||||
"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",
|
||||
"Images filename pattern": "Dateinamen vorlage für Bilder",
|
||||
"Add number to filename when saving": "Beim speichern, dem Dateinamen die Nummer anhängen",
|
||||
"Always save all generated image grids": "Grundsätzlich alle generieren Raster speichern",
|
||||
"Images filename pattern": "Dateinamensmuster für Bilder",
|
||||
"Add number to filename when saving": "Beim speichern, dem Dateinamen Nummer anhängen",
|
||||
"Always save all generated image grids": "Immer alle generierten Bildraster speichern",
|
||||
"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",
|
||||
"Do not save grids consisting of one picture": "Raster, die nur aus einem Bild bestehen, nicht speichern",
|
||||
"Prevent empty spots in grid (when set to autodetect)": "Lücken im Raster verhindern (falls aus autodetect 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",
|
||||
"Save text information about generation parameters as chunks to png files": "Information zu Generierungsparameter als Fragmente in PNG dateien speichern",
|
||||
"Create a text file next to every image with generation parameters.": "Textdatei mit Generierungsparameter seperat zu Bilddatei speichern",
|
||||
"Save a copy of image before doing face restoration.": "Kope des Bildes vor und nach Gesichtswiederhestellung speichern",
|
||||
"Quality for saved jpeg images": "Qualität der als JPEG gespeicherten 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.",
|
||||
"Use original name for output filename during batch process in extras tab": "Originaler name als Output Dateinamen benutzen während Massenverarbeitung in Extras tab.",
|
||||
"When using 'Save' button, only save a single selected image": "Beim benutzen von 'Speichern', nur das gewählte Bild speichern.",
|
||||
"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": "Keine Raster speichern, die nur aus einem Bild bestehen",
|
||||
"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": "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": "Generationsparameter als Chunks in PNG-Dateien 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.": "Vor der Gesichtswiederhestellung eine Kopie des Bildes speichern",
|
||||
"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 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": "Orginale Dateinamen als Ausgabenamen bei der Batchverarbeitung im Extras-Tab verwenden",
|
||||
"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",
|
||||
"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 txt2img images": "Ausgabeverzeichnis für txt2img",
|
||||
"Output directory for img2img images": "Ausgabeverzeichnis für img2img",
|
||||
"Output directory for images from extras tab": "Ausgabeverzeichnis für extras",
|
||||
"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 txt2img grids": "Ausgabeverzeichnis für txt2img Raster",
|
||||
"Paths for saving": "Pfade zum Speichern",
|
||||
"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 Bilder",
|
||||
"Output directory for img2img images": "Ausgabeverzeichnis für img2img Bilder",
|
||||
"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; Falls leer, werden die Pfade unterhalb verwendet",
|
||||
"Output directory for txt2img grids": "Ausgabeverzeichnis für txt2img 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",
|
||||
"Save images to a subdirectory": "Bilder 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",
|
||||
"Directory name pattern": "Verzeichnisname pattern",
|
||||
"Max prompt words for [prompt_words] pattern": "Maximale anzahl der Wörter für [prompt_words] pattern",
|
||||
"Upscaling": "Hochskalieren",
|
||||
"Tile size for ESRGAN upscalers. 0 = no tiling.": "Kachelgröße für ESRGAN upscalers. 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.",
|
||||
"When using \"Save\" button, save images to a subdirectory": "Bilder bei der Benutzung des 'Speichern'-Knopfes in ein Unterverzeichnis speichern",
|
||||
"Directory name pattern": "Muster für Verzeichnisnamen",
|
||||
"Max prompt words for [prompt_words] pattern": "Maximale Wortanzahl für [prompt_words] Muster",
|
||||
"Upscaling": "Upscaling",
|
||||
"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.": "Kachelüberlappung in Pixeln für ESRGAN-Upscaler. Niedrige Werte = sichtbare Naht.",
|
||||
"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.",
|
||||
"LDSR processing steps. Lower = faster": "LDSR verarbeitungsschritte. niedriger = schneller",
|
||||
"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",
|
||||
"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",
|
||||
"CodeFormer weight parameter; 0 = maximum effect; 1 = minimum effect": "CodeFormer gewicht parameter; 0 = maximaler effekt; 1 = minimalster effekt",
|
||||
"Move face restoration model from VRAM into RAM after processing": "Gesichtswiederhestellungs-Modell nach Verarbeitung vom VRAM ins RAM verschieben",
|
||||
"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": "Verschiebe Gesichtswiederhestellung-Modell nach der Verarbeitung vom VRAM in den RAM",
|
||||
"System": "System",
|
||||
"VRAM usage polls per second during generation. Set to 0 to disable.": "Abfragen pro Sekunde zur VRAM auslastung. 0 = deaktiviert",
|
||||
"Always print all generation info to standard output": "Grundsätzlich alle Generierungsparameter im standard output 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.",
|
||||
"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": "Immer alle Generationsinformationen in der Standardausgabe ausgeben",
|
||||
"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",
|
||||
"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 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",
|
||||
"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",
|
||||
"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": "Speichere eine csv-Datei, die den Verlust enthält, im Protokollverzeichnis alle N Schritte, 0 zum Deaktivieren",
|
||||
"Stable Diffusion": "Stable Diffusion",
|
||||
"Checkpoints to cache in RAM": "Anz. Checkpoints im RAM zu Cachen",
|
||||
"Hypernetwork strength": "Hypernetwork stärke",
|
||||
"Apply color correction to img2img results to match original colors.": "Farbkorrigierungen auf img2img anwenden um den Original zu gleichen.",
|
||||
"Save a copy of image before applying color correction to img2img results": "Eine Kopie vom Bild vor der anwendung der img2img Farbkorrigierungen speichern.",
|
||||
"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)",
|
||||
"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.",
|
||||
"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.",
|
||||
"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.",
|
||||
"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.",
|
||||
"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",
|
||||
"Filter NSFW content": "Filter NSFW inhalte",
|
||||
"Stop At last layers of CLIP model": "Stop bei den letzten Schichten des CLIP-Modells",
|
||||
"Interrogate Options": "Optionen abfragen",
|
||||
"Interrogate: keep models in VRAM": "Abfragen: Modelle im VRAM behalten",
|
||||
"Interrogate: use artists from artists.csv": "Abfragen: Künstler aus artists.csv verwenden",
|
||||
"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: num_beams for BLIP": "Abfragen: num_beams für BLIP",
|
||||
"Interrogate: minimum description length (excluding artists, etc..)": "Abfrage: Mindestlänge der Beschreibung (ohne Künstler usw.)",
|
||||
"Interrogate: maximum description length": "Abfragen: maximale Länge der Beschreibung",
|
||||
"CLIP: maximum number of lines in text file (0 = No limit)": "CLIP: maximale Anzahl von Zeilen in der Textdatei (0 = keine Begrenzung)",
|
||||
"Interrogate: deepbooru score threshold": "Abfrage: deepbooru schwelle",
|
||||
"Interrogate: deepbooru sort alphabetically": "Abfrage: deepbooru alphabetisch sortieren",
|
||||
"use spaces for tags in deepbooru": "Leerzeichen für Tags in deepbooru verwenden",
|
||||
"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)",
|
||||
"User interface": "Benutzerinterface",
|
||||
"Show progressbar": "Fortschrittsleiste Anzeigen",
|
||||
"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 previews of all images generated in a batch as a grid": "Vorschaubilder aller in einem Batch erzeugten Bilder als Raster anzeigen",
|
||||
"Show grid in results for web": "Raster in den Ergebnissen für Web anzeigen",
|
||||
"Do not show any images in results for web": "Keine Bilder in den Ergebnissen für das Web anzeigen",
|
||||
"Add model hash to generation information": "Modell-Hash zu Generierungsinformationen hinzufügen",
|
||||
"Add model name to generation information": "Modell-Name zu Generierungsinformationen 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.",
|
||||
"Font for image grids that have text": "Schriftart für Bildraster, die Text enthalten",
|
||||
"Enable full page image viewer": "Ganzseitenbildbetrachter einschalten",
|
||||
"Show images zoomed in by default in full page image viewer": "Bilder standardmäßig vergrößert im Ganzseitenbildbetrachter anzeigen",
|
||||
"Show generation progress in window title.": "Generierungsfortschritt im Fenstertitel anzeigen.",
|
||||
"Quicksettings list": "Quicksettings-Liste",
|
||||
"Localization (requires restart)": "Lokalisierung (erfordert Neustart)",
|
||||
"Sampler parameters": "Sampler parameter",
|
||||
"Hide samplers in user interface (requires restart)": "Ausblenden von Samplern in der Benutzeroberfläche (erfordert einen Neustart)",
|
||||
"eta (noise multiplier) for DDIM": "eta (noise multiplier) für DDIM",
|
||||
"eta (noise multiplier) for ancestral samplers": "eta (noise multiplier) für ancestral samplers",
|
||||
"img2img DDIM discretize": "img2img DDIM discretize",
|
||||
"Checkpoints to cache in RAM": "Checkpoints zum Zwischenspeichern im RAM",
|
||||
"Hypernetwork strength": "Hypernetworkstärke",
|
||||
"Inpainting conditioning mask strength": "Inpainting Stärke der Konditionierungsmaske",
|
||||
"Apply color correction to img2img results to match original colors.": "Farbkorrektur auf die img2img-Ergebnisse anwenden, damit sie den Originalfarben entsprechen.",
|
||||
"Save a copy of image before applying color correction to img2img results": "Vor dem Anwenden der Farbkorrektur eine Kopie des Bildes speichern",
|
||||
"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).",
|
||||
"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.",
|
||||
"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",
|
||||
"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.",
|
||||
"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",
|
||||
"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",
|
||||
"Filter NSFW content": "NSFW-Inhalte filtern",
|
||||
"Stop At last layers of CLIP model": "Stoppe bei den letzten Schichten des CLIP-Modells",
|
||||
"Interrogate Options": "Interrogate Optionen",
|
||||
"Interrogate: keep models in VRAM": "Interrogate: Modelle im VRAM behalten",
|
||||
"Interrogate: use artists from artists.csv": "Interrogate: Künstler aus 'artists.csv' nutzen",
|
||||
"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: num_beams for BLIP": "Interrogate: num_beams für BLIP",
|
||||
"Interrogate: minimum description length (excluding artists, etc..)": "Interrogate: minimale Beschreibungslänge (Künstler, etc.. ausgenommen)",
|
||||
"Interrogate: maximum description length": "Interrogate: maximale Beschreibungslänge",
|
||||
"CLIP: maximum number of lines in text file (0 = No limit)": "CLIP: maximale Anzahl an Zeilen in Textdatei (0 = Kein Limit)",
|
||||
"Interrogate: deepbooru score threshold": "Interrogate: Deepbooru minimale Punkteanzahl",
|
||||
"Interrogate: deepbooru sort alphabetically": "Interrogate: Sortiere Deepbooru alphabetisch",
|
||||
"use spaces for tags in deepbooru": "Benutze Leerzeichen für Deepbooru-Tags",
|
||||
"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)",
|
||||
"User interface": "Benutzeroberfläche",
|
||||
"Show progressbar": "Fortschrittsleiste 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 previews of all images generated in a batch as a grid": "Zeige eine Vorschau aller erzeugten Bilder in einem Batch als Raster",
|
||||
"Show grid in results for web": "Zeige Raster in der Web-UI Vorschau",
|
||||
"Do not show any images in results for web": "Keine Bilder in der Web-UI Vorschau zeigen",
|
||||
"Add model hash to generation information": "Hash des Modells zu den Generationsinformationen hinzufügen",
|
||||
"Add model name to generation information": "Name 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-Info oder eingefügtem Text) wird das ausgewählte Modell/Checkpoint nicht geändert.",
|
||||
"Send seed when sending prompt or image to other interface": "Den Seed, beim Senden des Bildes/Prompt zu einem anderen Tab, mitsenden",
|
||||
"Font for image grids that have text": "Schriftart für Bildraster mit Text",
|
||||
"Enable full page image viewer": "Ganzseitenbildbetrachter aktivieren",
|
||||
"Show images zoomed in by default in full page image viewer": "Standardmäßig Bilder im Ganzseitenbildbetrachter vergrößert anzeigen",
|
||||
"Show generation progress in window title.": "Generationsfortschritt im Fenstertitel anzeigen.",
|
||||
"Quicksettings list": "Schnellzugriffsleiste",
|
||||
"Localization (requires restart)": "Lokalisierung (Erfordert Neustart)",
|
||||
"Sampler parameters": "Samplerparameter",
|
||||
"Hide samplers in user interface (requires restart)": "Sampler in der Benutzeroberfläche verstecken (Erfordert Neustart)",
|
||||
"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",
|
||||
"quad": "quad",
|
||||
"sigma churn": "sigma churn",
|
||||
"sigma tmin": "sigma tmin",
|
||||
"sigma noise": "sigma noise",
|
||||
"Eta noise seed delta": "Eta noise seed delta",
|
||||
"Request browser notifications": "Browser-Benachrichtigungen anfordern",
|
||||
"Request browser notifications": "Browserbenachrichtigungen anfordern",
|
||||
"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)",
|
||||
"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)",
|
||||
"Add a random artist to the prompt.": "Zufälligen Künstler den 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.",
|
||||
"Save style": "Style speichern",
|
||||
"Apply selected styles to current prompt": "Momentan ausgewählte styles auf den Prompt anwenden",
|
||||
"Stop processing current image and continue processing.": "Verarbeitung des momentanen Bildes abbrechen und zum nächsten fortsetzen.",
|
||||
"Stop processing images and return any results accumulated so far.": "Verarbeitung abbrechen und alle bisherigen Bilder 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.",
|
||||
"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 der Prompt hinzufügen.",
|
||||
"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": "Stil speichern",
|
||||
"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 Verarbeitung fortsetzen.",
|
||||
"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": "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",
|
||||
"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.",
|
||||
"Denoising Diffusion Implicit Models - best at inpainting": "Denoising Diffusion Implicit Models - am besten für img2img inpainting",
|
||||
"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, 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 Modelle - am besten für inpainting",
|
||||
"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.",
|
||||
"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.",
|
||||
"How many batches of images to create": "Wie viele Stapel von Bildern erstellt werden sollen",
|
||||
"How many image to create in a single batch": "Wie viele Bilder in einem einzigen Stapel 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",
|
||||
"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.",
|
||||
"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 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 Sätze von Bildern 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 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 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",
|
||||
"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",
|
||||
"Seed of a different picture to be mixed into the generation.": "Seed eines anderen Bildes, das 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).",
|
||||
"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.",
|
||||
"Separate values for X axis using commas.": "Trennen Sie 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.",
|
||||
"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.",
|
||||
"Open images output directory": "Bildverzeichnis öffnen",
|
||||
"How much to blur the mask before processing, in pixels.": "Wie stark die Maske vor der Verarbeitung verwischt 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.",
|
||||
"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, 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 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": "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.": "Trenne die Werte für die X-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 (Standard - log/images) und Generationsparameter in eine csv-Datei schreiben.",
|
||||
"Open images output directory": "Ausgabeverzeichnis öffnen",
|
||||
"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 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",
|
||||
"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 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.",
|
||||
"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 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 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.",
|
||||
"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",
|
||||
"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..",
|
||||
"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..",
|
||||
"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 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 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 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 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 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.",
|
||||
"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 + (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 where to write outputs": "Pfad zum Verzeichnis, in das die Ausgaben geschrieben werden sollen",
|
||||
"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.",
|
||||
"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.",
|
||||
"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.": "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 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.",
|
||||
"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 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.",
|
||||
"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."
|
||||
}
|
||||
"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.",
|
||||
"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
|
@ -202,6 +202,7 @@
|
|||
"Inpaint at full resolution padding, pixels": "전체 해상도로 인페인트시 패딩값(픽셀 단위)",
|
||||
"Inpaint masked": "마스크만 처리",
|
||||
"Inpaint not masked": "마스크 이외만 처리",
|
||||
"Inpainting conditioning mask strength": "인페인팅 조절 마스크 강도",
|
||||
"Input directory": "인풋 이미지 경로",
|
||||
"Input images directory": "이미지 경로 입력",
|
||||
"Interpolation Method": "보간 방법",
|
||||
|
@ -218,6 +219,7 @@
|
|||
"Interrogate: use artists from artists.csv": "분석 : artists.csv의 작가들 사용하기",
|
||||
"Interrupt": "중단",
|
||||
"Is negative text": "네거티브 텍스트일시 체크",
|
||||
"Iterate seed every line": "줄마다 시드 반복하기",
|
||||
"Just resize": "리사이징",
|
||||
"Keep -1 for seeds": "시드값 -1로 유지",
|
||||
"keep whatever was there originally": "이미지 원본 유지",
|
||||
|
@ -234,6 +236,7 @@
|
|||
"Leave blank to save images to the default path.": "기존 저장 경로에 이미지들을 저장하려면 비워두세요.",
|
||||
"left": "왼쪽",
|
||||
"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에서 찾을 수 있습니다. 재시작이 필요합니다.",
|
||||
"LMS": "LMS",
|
||||
"LMS Karras": "LMS Karras",
|
||||
|
@ -261,7 +264,7 @@
|
|||
"Multiplier (M) - set to 0 to get model A": "배율 (M) - 0으로 적용하면 모델 A를 얻게 됩니다",
|
||||
"Name": "이름",
|
||||
"Negative prompt": "네거티브 프롬프트",
|
||||
"Negative prompt (press Ctrl+Enter or Alt+Enter to generate)": "네거티브 프롬프트 입력(Ctrl+Enter나 Alt+Enter로 생성 시작)",
|
||||
"Negative prompt (press Ctrl+Enter or Alt+Enter to generate)": "네거티브 프롬프트(Prompt) 입력(Ctrl+Enter나 Alt+Enter로 생성 시작)",
|
||||
"Next batch": "다음 묶음",
|
||||
"Next Page": "다음 페이지",
|
||||
"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 rows on the page": "각 페이지마다 표시할 세로줄 수",
|
||||
"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 images output directory": "이미지 저장 경로 열기",
|
||||
"Open output directory": "저장 경로 열기",
|
||||
|
@ -319,7 +323,7 @@
|
|||
"Process images in a directory on the same machine where the server is running.": "WebUI 서버가 돌아가고 있는 디바이스에 존재하는 디렉토리의 이미지들을 처리합니다.",
|
||||
"Produce an image that can be tiled.": "타일링 가능한 이미지를 생성합니다.",
|
||||
"Prompt": "프롬프트",
|
||||
"Prompt (press Ctrl+Enter or Alt+Enter to generate)": "프롬프트 입력(Ctrl+Enter나 Alt+Enter로 생성 시작)",
|
||||
"Prompt (press Ctrl+Enter or Alt+Enter to generate)": "프롬프트(Prompt) 입력(Ctrl+Enter나 Alt+Enter로 생성 시작)",
|
||||
"Prompt matrix": "프롬프트 매트릭스",
|
||||
"Prompt order": "프롬프트 순서",
|
||||
"Prompt S/R": "프롬프트 스타일 변경",
|
||||
|
@ -388,6 +392,7 @@
|
|||
"Select activation function of hypernetwork": "하이퍼네트워크 활성화 함수 선택",
|
||||
"Select Layer weights initialization. relu-like - Kaiming, sigmoid-like - Xavier is recommended": "레이어 가중치 초기화 방식 선택 - relu류 : Kaiming 추천, sigmoid류 : Xavier 추천",
|
||||
"Select which Real-ESRGAN models to show in the web UI. (Requires restart)": "WebUI에 표시할 Real-ESRGAN 모델을 선택하십시오. (재시작 필요)",
|
||||
"Send seed when sending prompt or image to other interface": "다른 화면으로 프롬프트나 이미지를 보낼 때 시드도 함께 보내기",
|
||||
"Send to extras": "부가기능으로 전송",
|
||||
"Send to img2img": "이미지→이미지로 전송",
|
||||
"Send to inpaint": "인페인트로 전송",
|
||||
|
@ -464,6 +469,8 @@
|
|||
"uniform": "uniform",
|
||||
"up": "위쪽",
|
||||
"Upload mask": "마스크 업로드하기",
|
||||
"Upload prompt inputs": "입력할 프롬프트를 업로드하십시오",
|
||||
"Upscale Before Restoring Faces": "얼굴 보정을 진행하기 전에 업스케일링 먼저 진행하기",
|
||||
"Upscale latent space image when doing hires. fix": "고해상도 보정 사용시 잠재 공간 이미지 업스케일하기",
|
||||
"Upscale masked region to target resolution, do inpainting, downscale back and paste into original image": "마스크된 부분을 설정된 해상도로 업스케일하고, 인페인팅을 진행한 뒤, 다시 다운스케일 후 원본 이미지에 붙여넣습니다.",
|
||||
"Upscaler": "업스케일러",
|
||||
|
|
|
@ -5,10 +5,10 @@
|
|||
"❮": "❮",
|
||||
"❯": "❯",
|
||||
"Loading...": "Carregando...",
|
||||
"view": "ver ",
|
||||
"view": "ver",
|
||||
"api": "api",
|
||||
"•": "•",
|
||||
"built with gradio": "Criado com gradio",
|
||||
"built with gradio": "criado com gradio",
|
||||
"Stable Diffusion checkpoint": "Stable Diffusion checkpoint",
|
||||
"txt2img": "txt2img",
|
||||
"img2img": "img2img",
|
||||
|
@ -27,14 +27,14 @@
|
|||
"Style 2": "Estilo 2",
|
||||
"Label": "Rótulo",
|
||||
"File": "Arquivo",
|
||||
"Drop File Here": "Coloque aqui o arquivo",
|
||||
"Drop File Here": "Solte Aqui o Arquivo",
|
||||
"-": "-",
|
||||
"or": "ou",
|
||||
"Click to Upload": "Clique para carregar um arquivo",
|
||||
"Click to Upload": "Clique para Carregar um Arquivo",
|
||||
"Image": "Imagem",
|
||||
"Check progress": "Checar progresso",
|
||||
"Check progress (first)": "Checar progresso (primeiro)",
|
||||
"Sampling Steps": "Passos de amostragem",
|
||||
"Sampling Steps": "Passos de Amostragem",
|
||||
"Sampling method": "Método de amostragem",
|
||||
"Euler a": "Euler a",
|
||||
"Euler": "Euler",
|
||||
|
@ -68,13 +68,13 @@
|
|||
"Resize seed from height": "Redimensionar a seed a partir da altura",
|
||||
"Script": "Script",
|
||||
"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",
|
||||
"X/Y plot": "X/Y plot",
|
||||
"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",
|
||||
"List of prompt inputs": "Lista de entradas de texto para prompt",
|
||||
"Upload prompt inputs": "Carregar entradas de textos para prompts",
|
||||
"List of prompt inputs": "Lista de entrada de texto para prompt",
|
||||
"Upload prompt inputs": "Carregar entrada de texto para prompt",
|
||||
"X type": "Tipo do X",
|
||||
"Nothing": "Nenhum",
|
||||
"Var. seed": "Var. seed",
|
||||
|
@ -99,7 +99,7 @@
|
|||
"Draw legend": "Desenhar a legenda",
|
||||
"Include Separate Images": "Incluir Imagens Separadas",
|
||||
"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",
|
||||
"Send to img2img": "Mandar para img2img",
|
||||
"Send to inpaint": "Mandar para inpaint",
|
||||
|
@ -137,29 +137,29 @@
|
|||
"img2img alternative test": "Teste alternativo de img2img",
|
||||
"Loopback": "Loopback",
|
||||
"Outpainting mk2": "Outpainting mk2",
|
||||
"Poor man's outpainting": "Poor man's outpainting",
|
||||
"Poor man's outpainting": "Poor man`s outpainting",
|
||||
"SD upscale": "Ampliamento SD",
|
||||
"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 `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 `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`)",
|
||||
"Original prompt": "Prompt 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",
|
||||
"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",
|
||||
"Randomness": "Aleatoriedade",
|
||||
"Sigma adjustment for finding noise for image": "Ajuste Sigma para encontrar ruído para imagem",
|
||||
"Loops": "Loops",
|
||||
"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",
|
||||
"Outpainting direction": "Direção do Outpainting",
|
||||
"Outpainting direction": "Direção do outpainting",
|
||||
"left": "esquerda",
|
||||
"right": "direita",
|
||||
"up": "cima",
|
||||
"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",
|
||||
"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",
|
||||
|
@ -191,9 +191,9 @@
|
|||
"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",
|
||||
"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",
|
||||
"directory.": " diretório.",
|
||||
"directory.": "diretório.",
|
||||
"Primary model (A)": "Modelo primário (A)",
|
||||
"Secondary model (B)": "Modelo secundário (B)",
|
||||
"Tertiary model (C)": "Modelo terciário (C)",
|
||||
|
@ -257,7 +257,7 @@
|
|||
"Overwrite Old Hypernetwork": "Sobrescrever Hypernetwork Anterior",
|
||||
"Source directory": "Diretório de origem",
|
||||
"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",
|
||||
"copy": "copiar",
|
||||
"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.",
|
||||
"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",
|
||||
"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",
|
||||
"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",
|
||||
"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",
|
||||
|
@ -327,7 +327,7 @@
|
|||
"Upscaling": "Ampliando",
|
||||
"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 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.",
|
||||
"LDSR processing steps. Lower = faster": "Steps de processamento LDSR. Menos = rápido",
|
||||
"Upscaler for img2img": "Ampliação para img2img",
|
||||
|
@ -348,11 +348,11 @@
|
|||
"Stable Diffusion": "Stable Diffusion",
|
||||
"Checkpoints to cache in RAM": "Checkpoints para manter no cache da RAM",
|
||||
"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",
|
||||
"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.",
|
||||
"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.",
|
||||
"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",
|
||||
|
@ -361,7 +361,7 @@
|
|||
"Interrogate Options": "Opções de Interrogatório",
|
||||
"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: 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: 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",
|
||||
|
@ -370,7 +370,7 @@
|
|||
"Interrogate: deepbooru sort alphabetically": "Interrogar: organizar deepbooru por ordem alfabética",
|
||||
"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)",
|
||||
"User interface": "Interface de Usuário",
|
||||
"User interface": "Interface de usuário",
|
||||
"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 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 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.",
|
||||
"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",
|
||||
"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.",
|
||||
|
@ -443,25 +443,25 @@
|
|||
"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 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",
|
||||
"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.",
|
||||
"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 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 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.",
|
||||
"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.",
|
||||
"A directory on the same machine where the server is running.": "Um diretório na mesma máquina onde o server está rodando.",
|
||||
"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 servidor está rodando.",
|
||||
"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 + (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 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.",
|
||||
"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 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",
|
||||
"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",
|
||||
"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.",
|
||||
"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."
|
||||
|
|
|
@ -1,11 +1,14 @@
|
|||
import time
|
||||
import uvicorn
|
||||
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
|
||||
from modules import devices
|
||||
from modules.api.models import *
|
||||
from modules.processing import StableDiffusionProcessingTxt2Img, StableDiffusionProcessingImg2Img, process_images
|
||||
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):
|
||||
try:
|
||||
|
@ -13,8 +16,10 @@ def upscaler_to_index(name: str):
|
|||
except:
|
||||
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)
|
||||
|
||||
|
||||
def setUpscalers(req: dict):
|
||||
reqDict = vars(req)
|
||||
reqDict['extras_upscaler_1'] = upscaler_to_index(req.upscaler_1)
|
||||
|
@ -23,6 +28,7 @@ def setUpscalers(req: dict):
|
|||
reqDict.pop('upscaler_2')
|
||||
return reqDict
|
||||
|
||||
|
||||
class Api:
|
||||
def __init__(self, app, queue_lock):
|
||||
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/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/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):
|
||||
sampler_index = sampler_to_index(txt2imgreq.sampler_index)
|
||||
|
||||
|
||||
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
|
||||
"sd_model": shared.sd_model,
|
||||
"sd_model": shared.sd_model,
|
||||
"sampler_index": sampler_index[0],
|
||||
"do_not_save_samples": True,
|
||||
"do_not_save_grid": True
|
||||
|
@ -48,34 +56,39 @@ class Api:
|
|||
)
|
||||
p = StableDiffusionProcessingTxt2Img(**vars(populate))
|
||||
# Override object param
|
||||
|
||||
shared.state.begin()
|
||||
|
||||
with self.queue_lock:
|
||||
processed = process_images(p)
|
||||
|
||||
|
||||
shared.state.end()
|
||||
|
||||
b64images = list(map(encode_pil_to_base64, processed.images))
|
||||
|
||||
|
||||
return TextToImageResponse(images=b64images, parameters=vars(txt2imgreq), info=processed.js())
|
||||
|
||||
def img2imgapi(self, img2imgreq: StableDiffusionImg2ImgProcessingAPI):
|
||||
sampler_index = sampler_to_index(img2imgreq.sampler_index)
|
||||
|
||||
|
||||
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
|
||||
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
|
||||
if mask:
|
||||
mask = decode_base64_to_image(mask)
|
||||
|
||||
|
||||
|
||||
populate = img2imgreq.copy(update={ # Override __init__ params
|
||||
"sd_model": shared.sd_model,
|
||||
"sd_model": shared.sd_model,
|
||||
"sampler_index": sampler_index[0],
|
||||
"do_not_save_samples": True,
|
||||
"do_not_save_grid": True,
|
||||
"do_not_save_grid": True,
|
||||
"mask": mask
|
||||
}
|
||||
)
|
||||
|
@ -87,16 +100,20 @@ class Api:
|
|||
imgs = [img] * p.batch_size
|
||||
|
||||
p.init_images = imgs
|
||||
# Override object param
|
||||
|
||||
shared.state.begin()
|
||||
|
||||
with self.queue_lock:
|
||||
processed = process_images(p)
|
||||
|
||||
|
||||
shared.state.end()
|
||||
|
||||
b64images = list(map(encode_pil_to_base64, processed.images))
|
||||
|
||||
if (not img2imgreq.include_init_images):
|
||||
img2imgreq.init_images = None
|
||||
img2imgreq.mask = None
|
||||
|
||||
|
||||
return ImageToImageResponse(images=b64images, parameters=vars(img2imgreq), info=processed.js())
|
||||
|
||||
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)
|
||||
|
||||
return ExtrasBatchImagesResponse(images=list(map(encode_pil_to_base64, result[0])), html_info=result[1])
|
||||
|
||||
def pnginfoapi(self):
|
||||
raise NotImplementedError
|
||||
|
||||
def pnginfoapi(self, req: PNGInfoRequest):
|
||||
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):
|
||||
self.app.include_router(self.router)
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import inspect
|
||||
from click import prompt
|
||||
from pydantic import BaseModel, Field, create_model
|
||||
from typing import Any, Optional
|
||||
from typing_extensions import Literal
|
||||
|
@ -51,17 +52,17 @@ class PydanticModelGenerator:
|
|||
# field_type = str if not overrides.get(k) else overrides[k]["type"]
|
||||
# print(k, v.annotation, v.default)
|
||||
field_type = v.annotation
|
||||
|
||||
|
||||
return Optional[field_type]
|
||||
|
||||
|
||||
def merge_class_params(class_):
|
||||
all_classes = list(filter(lambda x: x is not object, inspect.getmro(class_)))
|
||||
parameters = {}
|
||||
for classes in all_classes:
|
||||
parameters = {**parameters, **inspect.signature(classes.__init__).parameters}
|
||||
return parameters
|
||||
|
||||
|
||||
|
||||
|
||||
self._model_name = model_name
|
||||
self._class_data = merge_class_params(class_instance)
|
||||
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 fields in additional_fields:
|
||||
self._model_def.append(ModelDef(
|
||||
field=underscore(fields["key"]),
|
||||
field_alias=fields["key"],
|
||||
field=underscore(fields["key"]),
|
||||
field_alias=fields["key"],
|
||||
field_type=fields["type"],
|
||||
field_value=fields["default"],
|
||||
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_mutation = True
|
||||
return DynamicModel
|
||||
|
||||
|
||||
StableDiffusionTxt2ImgProcessingAPI = PydanticModelGenerator(
|
||||
"StableDiffusionProcessingTxt2Img",
|
||||
"StableDiffusionProcessingTxt2Img",
|
||||
StableDiffusionProcessingTxt2Img,
|
||||
[{"key": "sampler_index", "type": str, "default": "Euler"}]
|
||||
).generate_model()
|
||||
|
||||
StableDiffusionImg2ImgProcessingAPI = PydanticModelGenerator(
|
||||
"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}]
|
||||
).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")
|
||||
|
||||
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.")
|
||||
|
|
|
@ -66,6 +66,7 @@ def integrate_settings_paste_fields(component_dict):
|
|||
|
||||
settings_map = {
|
||||
'sd_hypernetwork': 'Hypernet',
|
||||
'sd_hypernetwork_strength': 'Hypernet strength',
|
||||
'CLIP_stop_at_last_layers': 'Clip skip',
|
||||
'sd_model_checkpoint': 'Model hash',
|
||||
}
|
||||
|
|
|
@ -209,13 +209,16 @@ def list_hypernetworks(path):
|
|||
res = {}
|
||||
for filename in glob.iglob(os.path.join(path, '**/*.pt'), recursive=True):
|
||||
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
|
||||
|
||||
|
||||
def load_hypernetwork(filename):
|
||||
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}")
|
||||
try:
|
||||
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.
|
||||
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)
|
||||
shared.loaded_hypernetwork = Hypernetwork()
|
||||
|
@ -358,39 +363,44 @@ def train_hypernetwork(hypernetwork_name, learn_rate, batch_size, data_root, log
|
|||
else:
|
||||
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)}..."
|
||||
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)
|
||||
|
||||
if unload:
|
||||
shared.sd_model.cond_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)
|
||||
loss_dict = defaultdict(lambda : deque(maxlen = 1024))
|
||||
losses = torch.zeros((size,))
|
||||
previous_mean_losses = [0]
|
||||
previous_mean_loss = 0
|
||||
print("Mean loss of {} elements".format(size))
|
||||
|
||||
last_saved_file = "<none>"
|
||||
last_saved_image = "<none>"
|
||||
forced_filename = "<none>"
|
||||
|
||||
ititial_step = hypernetwork.step or 0
|
||||
if ititial_step > steps:
|
||||
return hypernetwork, filename
|
||||
|
||||
scheduler = LearnRateScheduler(learn_rate, steps, ititial_step)
|
||||
|
||||
weights = hypernetwork.weights()
|
||||
for weight in weights:
|
||||
weight.requires_grad = True
|
||||
# if optimizer == "AdamW": or else Adam / AdamW / SGD, etc...
|
||||
optimizer = torch.optim.AdamW(weights, lr=scheduler.learn_rate)
|
||||
|
||||
steps_without_grad = 0
|
||||
|
||||
last_saved_file = "<none>"
|
||||
last_saved_image = "<none>"
|
||||
forced_filename = "<none>"
|
||||
|
||||
pbar = tqdm.tqdm(enumerate(ds), total=steps - ititial_step)
|
||||
for i, entries in pbar:
|
||||
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:
|
||||
# Before saving, change name to match current checkpoint.
|
||||
hypernetwork.name = f'{hypernetwork_name}-{steps_done}'
|
||||
last_saved_file = os.path.join(hypernetwork_dir, f'{hypernetwork.name}.pt')
|
||||
hypernetwork.save(last_saved_file)
|
||||
hypernetwork_name_every = f'{hypernetwork_name}-{steps_done}'
|
||||
last_saved_file = os.path.join(hypernetwork_dir, f'{hypernetwork_name_every}.pt')
|
||||
save_hypernetwork(hypernetwork, checkpoint, hypernetwork_name, last_saved_file)
|
||||
|
||||
textual_inversion.write_loss(log_directory, "hypernetwork_loss.csv", hypernetwork.step, len(ds), {
|
||||
"loss": f"{previous_mean_loss:.7f}",
|
||||
|
@ -506,13 +516,23 @@ Last saved image: {html.escape(last_saved_image)}<br/>
|
|||
"""
|
||||
|
||||
report_statistics(loss_dict)
|
||||
checkpoint = sd_models.select_checkpoint()
|
||||
|
||||
hypernetwork.sd_checkpoint = checkpoint.hash
|
||||
hypernetwork.sd_checkpoint_name = checkpoint.model_name
|
||||
# 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)
|
||||
filename = os.path.join(shared.cmd_opts.hypernetwork_dir, f'{hypernetwork_name}.pt')
|
||||
save_hypernetwork(hypernetwork, checkpoint, hypernetwork_name, 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
|
||||
|
|
|
@ -396,6 +396,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": (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 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 pos": (None if p.batch_size < 2 else position_in_batch),
|
||||
"Variation seed": (None if p.subseed_strength == 0 else all_subseeds[index]),
|
||||
|
@ -478,7 +479,7 @@ def process_images_inner(p: StableDiffusionProcessing) -> Processed:
|
|||
model_hijack.embedding_db.load_textual_inversion_embeddings()
|
||||
|
||||
if p.scripts is not None:
|
||||
p.scripts.run_alwayson_scripts(p)
|
||||
p.scripts.process(p)
|
||||
|
||||
infotexts = []
|
||||
output_images = []
|
||||
|
@ -501,7 +502,7 @@ def process_images_inner(p: StableDiffusionProcessing) -> Processed:
|
|||
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]
|
||||
|
||||
if (len(prompts) == 0):
|
||||
if len(prompts) == 0:
|
||||
break
|
||||
|
||||
with devices.autocast():
|
||||
|
@ -590,7 +591,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)
|
||||
|
||||
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):
|
||||
|
@ -680,15 +687,12 @@ 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)
|
||||
|
||||
image_conditioning = self.txt2img_image_conditioning(x)
|
||||
|
||||
# GC now before running the next img2img to prevent running out of memory
|
||||
x = None
|
||||
devices.torch_gc()
|
||||
|
||||
image_conditioning = self.img2img_image_conditioning(
|
||||
decoded_samples,
|
||||
samples,
|
||||
decoded_samples.new_ones(decoded_samples.shape[0], 1, decoded_samples.shape[2], decoded_samples.shape[3])
|
||||
)
|
||||
samples = self.sampler.sample_img2img(self, samples, noise, conditioning, unconditional_conditioning, steps=self.steps, image_conditioning=image_conditioning)
|
||||
|
||||
return samples
|
||||
|
|
|
@ -64,7 +64,16 @@ class Script:
|
|||
def process(self, p, *args):
|
||||
"""
|
||||
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
|
||||
|
@ -289,13 +298,22 @@ class ScriptRunner:
|
|||
|
||||
return processed
|
||||
|
||||
def run_alwayson_scripts(self, p):
|
||||
def process(self, p):
|
||||
for script in self.alwayson_scripts:
|
||||
try:
|
||||
script_args = p.script_args[script.args_from:script.args_to]
|
||||
script.process(p, *script_args)
|
||||
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)
|
||||
|
||||
def reload_sources(self, cache):
|
||||
|
|
|
@ -144,9 +144,38 @@ class State:
|
|||
self.sampling_step = 0
|
||||
self.current_image_sampling_step = 0
|
||||
|
||||
def get_job_timestamp(self):
|
||||
return datetime.datetime.now().strftime("%Y%m%d%H%M%S") # shouldn't this return job_timestamp?
|
||||
def dict(self):
|
||||
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()
|
||||
|
||||
|
|
|
@ -42,6 +42,8 @@ class PersonalizedBase(Dataset):
|
|||
self.lines = lines
|
||||
|
||||
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
|
||||
|
||||
|
|
|
@ -4,30 +4,37 @@ import tqdm
|
|||
class LearnScheduleIterator:
|
||||
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(',')
|
||||
self.rates = []
|
||||
self.it = 0
|
||||
self.maxit = 0
|
||||
for i, pair in enumerate(pairs):
|
||||
tmp = pair.split(':')
|
||||
if len(tmp) == 2:
|
||||
step = int(tmp[1])
|
||||
if step > cur_step:
|
||||
self.rates.append((float(tmp[0]), min(step, max_steps)))
|
||||
self.maxit += 1
|
||||
if step > max_steps:
|
||||
try:
|
||||
for i, pair in enumerate(pairs):
|
||||
if not pair.strip():
|
||||
continue
|
||||
tmp = pair.split(':')
|
||||
if len(tmp) == 2:
|
||||
step = int(tmp[1])
|
||||
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
|
||||
elif step == -1:
|
||||
else:
|
||||
self.rates.append((float(tmp[0]), max_steps))
|
||||
self.maxit += 1
|
||||
return
|
||||
else:
|
||||
self.rates.append((float(tmp[0]), max_steps))
|
||||
self.maxit += 1
|
||||
return
|
||||
assert self.rates
|
||||
except (ValueError, AssertionError):
|
||||
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.')
|
||||
|
||||
|
||||
def __iter__(self):
|
||||
return self
|
||||
|
|
|
@ -119,7 +119,7 @@ class EmbeddingDatabase:
|
|||
vec = emb.detach().to(devices.device, dtype=torch.float32)
|
||||
embedding = Embedding(vec, name)
|
||||
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)
|
||||
self.register_embedding(embedding, shared.sd_model)
|
||||
|
||||
|
@ -204,9 +204,30 @@ def write_loss(log_directory, filename, step, epoch_len, 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):
|
||||
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.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)
|
||||
else:
|
||||
images_embeds_dir = None
|
||||
|
||||
cond_model = shared.sd_model.cond_stage_model
|
||||
|
||||
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)
|
||||
cond_model = shared.sd_model.cond_stage_model
|
||||
|
||||
hijack = sd_hijack.model_hijack
|
||||
|
||||
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
|
||||
optimizer = torch.optim.AdamW([embedding.vec], lr=scheduler.learn_rate)
|
||||
|
||||
losses = torch.zeros((32,))
|
||||
|
||||
|
@ -251,13 +283,6 @@ def train_embedding(embedding_name, learn_rate, batch_size, data_root, log_direc
|
|||
forced_filename = "<none>"
|
||||
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)
|
||||
for i, entries in pbar:
|
||||
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:
|
||||
# Before saving, change name to match current checkpoint.
|
||||
embedding.name = f'{embedding_name}-{steps_done}'
|
||||
last_saved_file = os.path.join(embedding_dir, f'{embedding.name}.pt')
|
||||
embedding.save(last_saved_file)
|
||||
embedding_name_every = f'{embedding_name}-{steps_done}'
|
||||
last_saved_file = os.path.join(embedding_dir, f'{embedding_name_every}.pt')
|
||||
save_embedding(embedding, checkpoint, embedding_name_every, last_saved_file, remove_cached_checksum=True)
|
||||
embedding_yet_to_be_embedded = True
|
||||
|
||||
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>
|
||||
"""
|
||||
|
||||
checkpoint = sd_models.select_checkpoint()
|
||||
|
||||
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)
|
||||
filename = os.path.join(shared.cmd_opts.embeddings_dir, f'{embedding_name}.pt')
|
||||
save_embedding(embedding, checkpoint, embedding_name, filename, remove_cached_checksum=True)
|
||||
|
||||
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
0
test/__init__.py
Normal file
29
test/extras_test.py
Normal file
29
test/extras_test.py
Normal 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
59
test/img2img_test.py
Normal 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
19
test/server_poll.py
Normal 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")
|
BIN
test/test_files/img2img_basic.png
Normal file
BIN
test/test_files/img2img_basic.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.7 KiB |
BIN
test/test_files/mask_basic.png
Normal file
BIN
test/test_files/mask_basic.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 362 B |
74
test/txt2img_test.py
Normal file
74
test/txt2img_test.py
Normal 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()
|
17
webui.py
17
webui.py
|
@ -46,26 +46,13 @@ def wrap_queued_call(func):
|
|||
|
||||
def wrap_gradio_gpu_call(func, extra_outputs=None):
|
||||
def f(*args, **kwargs):
|
||||
devices.torch_gc()
|
||||
|
||||
shared.state.sampling_step = 0
|
||||
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
|
||||
shared.state.begin()
|
||||
|
||||
with queue_lock:
|
||||
res = func(*args, **kwargs)
|
||||
|
||||
shared.state.job = ""
|
||||
shared.state.job_count = 0
|
||||
|
||||
devices.torch_gc()
|
||||
shared.state.end()
|
||||
|
||||
return res
|
||||
|
||||
|
|
7
webui.sh
7
webui.sh
|
@ -102,15 +102,14 @@ then
|
|||
exit 1
|
||||
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; }
|
||||
if [[ -d "${clone_dir}" ]]
|
||||
then
|
||||
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
|
||||
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}"
|
||||
cd "${clone_dir}"/ || { printf "\e[1m\e[31mERROR: Can't cd to %s/%s/, aborting...\e[0m" "${install_dir}" "${clone_dir}"; exit 1; }
|
||||
fi
|
||||
|
|
Loading…
Reference in a new issue