From 65af7d3764697eca2ed23acee4b2f969ac13c845 Mon Sep 17 00:00:00 2001 From: Manuel Schmid Date: Sat, 25 Nov 2023 23:13:54 +0100 Subject: [PATCH 1/4] add prompt translation functionality --- requirements_versions.txt | 1 + webui.py | 30 ++++++++++++++++++++++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/requirements_versions.txt b/requirements_versions.txt index 5d5af5d6..59deb3e9 100644 --- a/requirements_versions.txt +++ b/requirements_versions.txt @@ -15,3 +15,4 @@ gradio==3.41.2 pygit2==1.12.2 opencv-contrib-python==4.8.0.74 httpx==0.24.1 +translators=5.6.0 \ No newline at end of file diff --git a/webui.py b/webui.py index 479ac4aa..f6884278 100644 --- a/webui.py +++ b/webui.py @@ -14,12 +14,26 @@ import modules.advanced_parameters as advanced_parameters import modules.style_sorter as style_sorter import args_manager import copy +import translators from modules.sdxl_styles import legal_style_names from modules.private_logger import get_current_html_path from modules.ui_gradio_extensions import reload_javascript from modules.auth import auth_enabled, check_auth +from functools import lru_cache +@lru_cache(maxsize=32, typed=False) +def translate2en(text, element): + if not text: + return text + + try: + result = translators.translate_text(text,to_language='en') + print(f'Translated {element}: {result}') + return result + except Exception as e: + print(f'Error during translation of {element}: {e}') + return text def generate_clicked(*args): import fcbh.model_management as model_management @@ -30,7 +44,16 @@ def generate_clicked(*args): # outputs=[progress_html, progress_window, progress_gallery, gallery] execution_start_time = time.perf_counter() - task = worker.AsyncTask(args=list(args)) + + args = list(args) + + if args[2]: + args[0] = translate2en(args[0], 'prompt') + args[1] = translate2en(args[1], 'negative prompt') + # remove translate_prompts from args + args.pop(2) + + task = worker.AsyncTask(args=args) finished = False yield gr.update(visible=True, value=modules.html.make_progress_html(1, 'Waiting for task to start ...')), \ @@ -218,6 +241,9 @@ with shared.gradio_root: info='Describing what you do not want to see.', lines=2, elem_id='negative_prompt', value=modules.config.default_prompt_negative) + translate_prompts = gr.Checkbox(label='Translate Prompts', + info='Uses the internet to translate prompts to English', + value=False) seed_random = gr.Checkbox(label='Random', value=True) image_seed = gr.Textbox(label='Seed', value=0, max_lines=1, visible=False) # workaround for https://github.com/gradio-app/gradio/issues/5354 @@ -489,7 +515,7 @@ with shared.gradio_root: ], show_progress=False, queue=False) ctrls = [ - prompt, negative_prompt, style_selections, + prompt, negative_prompt, translate_prompts, style_selections, performance_selection, aspect_ratios_selection, image_number, image_seed, sharpness, guidance_scale ] From eeb10136381a392d307f26865d098b37b55c0c9d Mon Sep 17 00:00:00 2001 From: Manuel Schmid Date: Sat, 25 Nov 2023 23:21:09 +0100 Subject: [PATCH 2/4] use separate module for translator --- modules/translator.py | 15 +++++++++++++++ webui.py | 17 ++--------------- 2 files changed, 17 insertions(+), 15 deletions(-) create mode 100644 modules/translator.py diff --git a/modules/translator.py b/modules/translator.py new file mode 100644 index 00000000..2680131c --- /dev/null +++ b/modules/translator.py @@ -0,0 +1,15 @@ +import translators +from functools import lru_cache + +@lru_cache(maxsize=32, typed=False) +def translate2en(text, element): + if not text: + return text + + try: + result = translators.translate_text(text,to_language='en') + print(f'Translated {element}: {result}') + return result + except Exception as e: + print(f'Error during translation of {element}: {e}') + return text \ No newline at end of file diff --git a/webui.py b/webui.py index f6884278..4873b6e5 100644 --- a/webui.py +++ b/webui.py @@ -14,26 +14,12 @@ import modules.advanced_parameters as advanced_parameters import modules.style_sorter as style_sorter import args_manager import copy -import translators from modules.sdxl_styles import legal_style_names from modules.private_logger import get_current_html_path from modules.ui_gradio_extensions import reload_javascript from modules.auth import auth_enabled, check_auth -from functools import lru_cache - -@lru_cache(maxsize=32, typed=False) -def translate2en(text, element): - if not text: - return text - - try: - result = translators.translate_text(text,to_language='en') - print(f'Translated {element}: {result}') - return result - except Exception as e: - print(f'Error during translation of {element}: {e}') - return text +from modules.translator import translate2en def generate_clicked(*args): import fcbh.model_management as model_management @@ -47,6 +33,7 @@ def generate_clicked(*args): args = list(args) + # translate prompts if args[2]: args[0] = translate2en(args[0], 'prompt') args[1] = translate2en(args[1], 'negative prompt') From 25c3184ddc803e42c64c568c681dc22ca4ce3892 Mon Sep 17 00:00:00 2001 From: Manuel Schmid Date: Sat, 25 Nov 2023 23:26:29 +0100 Subject: [PATCH 3/4] move prompt translation to async_worker --- modules/async_worker.py | 6 ++++++ modules/translator.py | 4 ++-- webui.py | 13 +------------ 3 files changed, 9 insertions(+), 14 deletions(-) diff --git a/modules/async_worker.py b/modules/async_worker.py index 70f00705..ce58584b 100644 --- a/modules/async_worker.py +++ b/modules/async_worker.py @@ -41,6 +41,7 @@ def worker(): from modules.util import remove_empty_str, HWC3, resize_image, \ get_image_shape_ceil, set_image_shape_ceil, get_shape_ceil, resample_image from modules.upscaler import perform_upscale + from modules.translator import translate2en try: async_gradio_app = shared.gradio_root @@ -120,6 +121,7 @@ def worker(): prompt = args.pop() negative_prompt = args.pop() + translate_prompts = args.pop() style_selections = args.pop() performance_selection = args.pop() aspect_ratios_selection = args.pop() @@ -195,6 +197,10 @@ def worker(): modules.patch.adm_scaler_end = advanced_parameters.adm_scaler_end = 0.0 steps = 8 + if translate_prompts: + prompt = translate2en(prompt, 'prompt') + negative_prompt = translate2en(negative_prompt, 'negative prompt') + modules.patch.adaptive_cfg = advanced_parameters.adaptive_cfg print(f'[Parameters] Adaptive CFG = {modules.patch.adaptive_cfg}') diff --git a/modules/translator.py b/modules/translator.py index 2680131c..e8f0ca0c 100644 --- a/modules/translator.py +++ b/modules/translator.py @@ -8,8 +8,8 @@ def translate2en(text, element): try: result = translators.translate_text(text,to_language='en') - print(f'Translated {element}: {result}') + print(f'[Parameters] Translated {element}: {result}') return result except Exception as e: - print(f'Error during translation of {element}: {e}') + print(f'[Parameters] Error during translation of {element}: {e}') return text \ No newline at end of file diff --git a/webui.py b/webui.py index 4873b6e5..2f23dfb0 100644 --- a/webui.py +++ b/webui.py @@ -19,7 +19,6 @@ from modules.sdxl_styles import legal_style_names from modules.private_logger import get_current_html_path from modules.ui_gradio_extensions import reload_javascript from modules.auth import auth_enabled, check_auth -from modules.translator import translate2en def generate_clicked(*args): import fcbh.model_management as model_management @@ -30,17 +29,7 @@ def generate_clicked(*args): # outputs=[progress_html, progress_window, progress_gallery, gallery] execution_start_time = time.perf_counter() - - args = list(args) - - # translate prompts - if args[2]: - args[0] = translate2en(args[0], 'prompt') - args[1] = translate2en(args[1], 'negative prompt') - # remove translate_prompts from args - args.pop(2) - - task = worker.AsyncTask(args=args) + task = worker.AsyncTask(args=list(args)) finished = False yield gr.update(visible=True, value=modules.html.make_progress_html(1, 'Waiting for task to start ...')), \ From 29d1c3ee34ad77d7849cbc3255ee237452a0dc03 Mon Sep 17 00:00:00 2001 From: Manuel Schmid Date: Sat, 25 Nov 2023 23:39:30 +0100 Subject: [PATCH 4/4] update tqdm to 4.65.0 to be able to use translators==5.8.9 this commit is optional and can be reverted --- requirements_versions.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements_versions.txt b/requirements_versions.txt index 59deb3e9..5769d1a9 100644 --- a/requirements_versions.txt +++ b/requirements_versions.txt @@ -6,7 +6,7 @@ accelerate==0.21.0 pyyaml==6.0 Pillow==9.2.0 scipy==1.9.3 -tqdm==4.64.1 +tqdm==4.65.0 psutil==5.9.5 numpy==1.23.5 pytorch_lightning==1.9.4 @@ -15,4 +15,4 @@ gradio==3.41.2 pygit2==1.12.2 opencv-contrib-python==4.8.0.74 httpx==0.24.1 -translators=5.6.0 \ No newline at end of file +translators==5.8.9 \ No newline at end of file