Upload 5 files
Browse files- app.py +7 -7
- model_dict.json +0 -0
- modutils.py +0 -43
- tagger.py +64 -7
app.py
CHANGED
|
@@ -410,6 +410,7 @@ from tagger import (
|
|
| 410 |
convert_danbooru_to_e621_prompt,
|
| 411 |
remove_specific_prompt,
|
| 412 |
insert_recom_prompt,
|
|
|
|
| 413 |
compose_prompt_to_copy,
|
| 414 |
translate_prompt,
|
| 415 |
select_random_character,
|
|
@@ -437,7 +438,6 @@ from modutils import (
|
|
| 437 |
preset_quality,
|
| 438 |
preset_sampler_setting,
|
| 439 |
set_quick_presets,
|
| 440 |
-
insert_model_recom_prompt,
|
| 441 |
)
|
| 442 |
def description_ui():
|
| 443 |
gr.Markdown(
|
|
@@ -911,14 +911,14 @@ with gr.Blocks(theme="NoCrypt/miku@>=1.2.2", elem_id="main", css=CSS) as app:
|
|
| 911 |
with gr.Accordion("Negative prompt, etc.", open=False) as menu_negative:
|
| 912 |
neg_prompt_gui = gr.Textbox(lines=3, placeholder="lowres, (bad), ...", label="Negative prompt", show_copy_button=True)
|
| 913 |
translate_prompt_button = gr.Button(value="Translate prompt to English", size="sm", variant="secondary")
|
| 914 |
-
insert_prompt_gui = gr.Radio(label="Insert reccomended positive / negative prompt", choices=["None", "Animagine", "Pony"], value="
|
| 915 |
with gr.Accordion(label="Advanced options", open=False):
|
| 916 |
prompt_type_gui = gr.Radio(label="Convert tags to", choices=["danbooru", "e621"], value="e621", visible=False)
|
| 917 |
prompt_type_button = gr.Button(value="Convert prompt to Pony e621 style", size="sm", variant="secondary")
|
| 918 |
with gr.Row():
|
| 919 |
character_dbt = gr.Textbox(lines=1, placeholder="kafuu chino, ...", label="Character names")
|
| 920 |
series_dbt = gr.Textbox(lines=1, placeholder="Is the order a rabbit?, ...", label="Series names")
|
| 921 |
-
random_character_gui = gr.Button(value="Pick a random character 🎲", size="sm")
|
| 922 |
model_name_dbt = gr.Dropdown(label="Model", choices=list(V2_ALL_MODELS.keys()), value=list(V2_ALL_MODELS.keys())[0], visible=False)
|
| 923 |
aspect_ratio_dbt = gr.Radio(label="Aspect ratio", choices=list(V2_ASPECT_RATIO_OPTIONS), value="square", visible=False)
|
| 924 |
length_dbt = gr.Radio(label="Length", choices=list(V2_LENGTH_OPTIONS), value="very_long", visible=False)
|
|
@@ -926,12 +926,12 @@ with gr.Blocks(theme="NoCrypt/miku@>=1.2.2", elem_id="main", css=CSS) as app:
|
|
| 926 |
ban_tags_dbt = gr.Textbox(label="Ban tags", placeholder="alternate costumen, ...", value="futanari, censored, furry, furrification", visible=False)
|
| 927 |
elapsed_time_dbt = gr.Markdown(label="Elapsed time", value="", visible=False)
|
| 928 |
copy_button_dbt = gr.Button(value="Copy to clipboard", visible=False)
|
| 929 |
-
generate_db_random_button = gr.Button(value="Generate random prompt 🎲",
|
| 930 |
rating_dbt = gr.Radio(label="Rating", choices=list(V2_RATING_OPTIONS), value="sfw")
|
| 931 |
with gr.Row():
|
| 932 |
-
set_params_gui = gr.Button(value="↙️")
|
| 933 |
-
clear_prompt_gui = gr.Button(value="🗑️")
|
| 934 |
-
set_random_seed = gr.Button(value="🎲")
|
| 935 |
|
| 936 |
generate_button = gr.Button(value="GENERATE IMAGE", size="lg", variant="primary")
|
| 937 |
|
|
|
|
| 410 |
convert_danbooru_to_e621_prompt,
|
| 411 |
remove_specific_prompt,
|
| 412 |
insert_recom_prompt,
|
| 413 |
+
insert_model_recom_prompt,
|
| 414 |
compose_prompt_to_copy,
|
| 415 |
translate_prompt,
|
| 416 |
select_random_character,
|
|
|
|
| 438 |
preset_quality,
|
| 439 |
preset_sampler_setting,
|
| 440 |
set_quick_presets,
|
|
|
|
| 441 |
)
|
| 442 |
def description_ui():
|
| 443 |
gr.Markdown(
|
|
|
|
| 911 |
with gr.Accordion("Negative prompt, etc.", open=False) as menu_negative:
|
| 912 |
neg_prompt_gui = gr.Textbox(lines=3, placeholder="lowres, (bad), ...", label="Negative prompt", show_copy_button=True)
|
| 913 |
translate_prompt_button = gr.Button(value="Translate prompt to English", size="sm", variant="secondary")
|
| 914 |
+
insert_prompt_gui = gr.Radio(label="Insert reccomended positive / negative prompt", choices=["None", "Auto", "Animagine", "Pony"], value="Auto", interactive=True)
|
| 915 |
with gr.Accordion(label="Advanced options", open=False):
|
| 916 |
prompt_type_gui = gr.Radio(label="Convert tags to", choices=["danbooru", "e621"], value="e621", visible=False)
|
| 917 |
prompt_type_button = gr.Button(value="Convert prompt to Pony e621 style", size="sm", variant="secondary")
|
| 918 |
with gr.Row():
|
| 919 |
character_dbt = gr.Textbox(lines=1, placeholder="kafuu chino, ...", label="Character names")
|
| 920 |
series_dbt = gr.Textbox(lines=1, placeholder="Is the order a rabbit?, ...", label="Series names")
|
| 921 |
+
random_character_gui = gr.Button(value="Pick a random character 🎲", size="sm", variant="secondary")
|
| 922 |
model_name_dbt = gr.Dropdown(label="Model", choices=list(V2_ALL_MODELS.keys()), value=list(V2_ALL_MODELS.keys())[0], visible=False)
|
| 923 |
aspect_ratio_dbt = gr.Radio(label="Aspect ratio", choices=list(V2_ASPECT_RATIO_OPTIONS), value="square", visible=False)
|
| 924 |
length_dbt = gr.Radio(label="Length", choices=list(V2_LENGTH_OPTIONS), value="very_long", visible=False)
|
|
|
|
| 926 |
ban_tags_dbt = gr.Textbox(label="Ban tags", placeholder="alternate costumen, ...", value="futanari, censored, furry, furrification", visible=False)
|
| 927 |
elapsed_time_dbt = gr.Markdown(label="Elapsed time", value="", visible=False)
|
| 928 |
copy_button_dbt = gr.Button(value="Copy to clipboard", visible=False)
|
| 929 |
+
generate_db_random_button = gr.Button(value="Generate random prompt 🎲", variant="secondary")
|
| 930 |
rating_dbt = gr.Radio(label="Rating", choices=list(V2_RATING_OPTIONS), value="sfw")
|
| 931 |
with gr.Row():
|
| 932 |
+
set_params_gui = gr.Button(value="↙️", size="sm")
|
| 933 |
+
clear_prompt_gui = gr.Button(value="🗑️", size="sm")
|
| 934 |
+
set_random_seed = gr.Button(value="🎲", size="sm")
|
| 935 |
|
| 936 |
generate_button = gr.Button(value="GENERATE IMAGE", size="lg", variant="primary")
|
| 937 |
|
model_dict.json
CHANGED
|
The diff for this file is too large to render.
See raw diff
|
|
|
modutils.py
CHANGED
|
@@ -872,46 +872,3 @@ def get_model_pipeline(repo_id: str):
|
|
| 872 |
else:
|
| 873 |
return default
|
| 874 |
|
| 875 |
-
|
| 876 |
-
def load_model_prompt_dict():
|
| 877 |
-
import json
|
| 878 |
-
dict = {}
|
| 879 |
-
with open('model_dict.json', encoding='utf-8') as f:
|
| 880 |
-
dict = json.load(f)
|
| 881 |
-
return dict
|
| 882 |
-
|
| 883 |
-
|
| 884 |
-
model_prompt_dict = load_model_prompt_dict()
|
| 885 |
-
|
| 886 |
-
|
| 887 |
-
def insert_model_recom_prompt(prompt: str = "", neg_prompt: str = "", model_name: str = "None"):
|
| 888 |
-
def to_list(s):
|
| 889 |
-
return [x.strip() for x in s.split(",") if not s == ""]
|
| 890 |
-
|
| 891 |
-
def list_sub(a, b):
|
| 892 |
-
return [e for e in a if e not in b]
|
| 893 |
-
|
| 894 |
-
def list_uniq(l):
|
| 895 |
-
return sorted(set(l), key=l.index)
|
| 896 |
-
|
| 897 |
-
if not model_name or not model_name in model_prompt_dict.keys(): return prompt, neg_prompt
|
| 898 |
-
animagine_ps = to_list("anime artwork, anime style, key visual, vibrant, studio anime, highly detailed, masterpiece, best quality, very aesthetic, absurdres")
|
| 899 |
-
animagine_nps = to_list("lowres, (bad), text, error, fewer, extra, missing, worst quality, jpeg artifacts, low quality, watermark, unfinished, displeasing, oldest, early, chromatic aberration, signature, extra digits, artistic error, username, scan, [abstract]")
|
| 900 |
-
pony_ps = to_list("source_anime, score_9, score_8_up, score_7_up, masterpiece, best quality, very aesthetic, absurdres")
|
| 901 |
-
pony_nps = to_list("source_pony, source_furry, source_cartoon, score_6, score_5, score_4, busty, ugly face, mutated hands, low res, blurry face, black and white, the simpsons, overwatch, apex legends")
|
| 902 |
-
other_ps = to_list("anime artwork, anime style, key visual, vibrant, studio anime, highly detailed, cinematic photo, 35mm photograph, film, bokeh, professional, 4k, highly detailed")
|
| 903 |
-
other_nps = to_list("photo, deformed, black and white, realism, disfigured, low contrast, drawing, painting, crayon, sketch, graphite, impressionist, noisy, blurry, soft, deformed, ugly")
|
| 904 |
-
prompts = to_list(prompt)
|
| 905 |
-
neg_prompts = to_list(neg_prompt)
|
| 906 |
-
prompts = list_sub(prompts, animagine_ps + pony_ps + other_ps)
|
| 907 |
-
neg_prompts = list_sub(neg_prompts, animagine_nps + pony_nps + other_nps)
|
| 908 |
-
last_empty_p = [""] if not prompts and type != "None" else []
|
| 909 |
-
last_empty_np = [""] if not neg_prompts and type != "None" else []
|
| 910 |
-
ps = to_list(model_prompt_dict[model_name]["prompt"])
|
| 911 |
-
nps = to_list(model_prompt_dict[model_name]["negative_prompt"])
|
| 912 |
-
prompts = prompts + ps
|
| 913 |
-
neg_prompts = neg_prompts + nps
|
| 914 |
-
prompt = ", ".join(list_uniq(prompts) + last_empty_p)
|
| 915 |
-
neg_prompt = ", ".join(list_uniq(neg_prompts) + last_empty_np)
|
| 916 |
-
return prompt, neg_prompt
|
| 917 |
-
|
|
|
|
| 872 |
else:
|
| 873 |
return default
|
| 874 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tagger.py
CHANGED
|
@@ -227,6 +227,9 @@ def convert_tags_to_ja(input_prompt: str = ""):
|
|
| 227 |
return ", ".join(out_tags)
|
| 228 |
|
| 229 |
|
|
|
|
|
|
|
|
|
|
| 230 |
def insert_recom_prompt(prompt: str = "", neg_prompt: str = "", type: str = "None"):
|
| 231 |
def to_list(s):
|
| 232 |
return [x.strip() for x in s.split(",") if not s == ""]
|
|
@@ -236,7 +239,8 @@ def insert_recom_prompt(prompt: str = "", neg_prompt: str = "", type: str = "Non
|
|
| 236 |
|
| 237 |
def list_uniq(l):
|
| 238 |
return sorted(set(l), key=l.index)
|
| 239 |
-
|
|
|
|
| 240 |
animagine_ps = to_list("anime artwork, anime style, key visual, vibrant, studio anime, highly detailed, masterpiece, best quality, very aesthetic, absurdres")
|
| 241 |
animagine_nps = to_list("lowres, (bad), text, error, fewer, extra, missing, worst quality, jpeg artifacts, low quality, watermark, unfinished, displeasing, oldest, early, chromatic aberration, signature, extra digits, artistic error, username, scan, [abstract]")
|
| 242 |
pony_ps = to_list("source_anime, score_9, score_8_up, score_7_up, masterpiece, best quality, very aesthetic, absurdres")
|
|
@@ -250,12 +254,16 @@ def insert_recom_prompt(prompt: str = "", neg_prompt: str = "", type: str = "Non
|
|
| 250 |
last_empty_p = [""] if not prompts and type != "None" else []
|
| 251 |
last_empty_np = [""] if not neg_prompts and type != "None" else []
|
| 252 |
|
| 253 |
-
if type == "
|
| 254 |
-
|
| 255 |
-
|
| 256 |
-
|
| 257 |
-
|
| 258 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 259 |
|
| 260 |
prompt = ", ".join(list_uniq(prompts) + last_empty_p)
|
| 261 |
neg_prompt = ", ".join(list_uniq(neg_prompts) + last_empty_np)
|
|
@@ -263,6 +271,55 @@ def insert_recom_prompt(prompt: str = "", neg_prompt: str = "", type: str = "Non
|
|
| 263 |
return prompt, neg_prompt
|
| 264 |
|
| 265 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 266 |
tag_group_dict = load_dict_from_csv('tag_group.csv')
|
| 267 |
|
| 268 |
|
|
|
|
| 227 |
return ", ".join(out_tags)
|
| 228 |
|
| 229 |
|
| 230 |
+
enable_auto_recom_prompt = True
|
| 231 |
+
|
| 232 |
+
|
| 233 |
def insert_recom_prompt(prompt: str = "", neg_prompt: str = "", type: str = "None"):
|
| 234 |
def to_list(s):
|
| 235 |
return [x.strip() for x in s.split(",") if not s == ""]
|
|
|
|
| 239 |
|
| 240 |
def list_uniq(l):
|
| 241 |
return sorted(set(l), key=l.index)
|
| 242 |
+
|
| 243 |
+
global enable_auto_recom_prompt
|
| 244 |
animagine_ps = to_list("anime artwork, anime style, key visual, vibrant, studio anime, highly detailed, masterpiece, best quality, very aesthetic, absurdres")
|
| 245 |
animagine_nps = to_list("lowres, (bad), text, error, fewer, extra, missing, worst quality, jpeg artifacts, low quality, watermark, unfinished, displeasing, oldest, early, chromatic aberration, signature, extra digits, artistic error, username, scan, [abstract]")
|
| 246 |
pony_ps = to_list("source_anime, score_9, score_8_up, score_7_up, masterpiece, best quality, very aesthetic, absurdres")
|
|
|
|
| 254 |
last_empty_p = [""] if not prompts and type != "None" else []
|
| 255 |
last_empty_np = [""] if not neg_prompts and type != "None" else []
|
| 256 |
|
| 257 |
+
if type == "Auto":
|
| 258 |
+
enable_auto_recom_prompt = True
|
| 259 |
+
else:
|
| 260 |
+
enable_auto_recom_prompt = False
|
| 261 |
+
if type == "Animagine":
|
| 262 |
+
prompts = prompts + animagine_ps
|
| 263 |
+
neg_prompts = neg_prompts + animagine_nps
|
| 264 |
+
elif type == "Pony":
|
| 265 |
+
prompts = prompts + pony_ps
|
| 266 |
+
neg_prompts = neg_prompts + pony_nps
|
| 267 |
|
| 268 |
prompt = ", ".join(list_uniq(prompts) + last_empty_p)
|
| 269 |
neg_prompt = ", ".join(list_uniq(neg_prompts) + last_empty_np)
|
|
|
|
| 271 |
return prompt, neg_prompt
|
| 272 |
|
| 273 |
|
| 274 |
+
def load_model_prompt_dict():
|
| 275 |
+
import json
|
| 276 |
+
dict = {}
|
| 277 |
+
with open('model_dict.json', encoding='utf-8') as f:
|
| 278 |
+
dict = json.load(f)
|
| 279 |
+
return dict
|
| 280 |
+
|
| 281 |
+
|
| 282 |
+
model_prompt_dict = load_model_prompt_dict()
|
| 283 |
+
|
| 284 |
+
|
| 285 |
+
def insert_model_recom_prompt(prompt: str = "", neg_prompt: str = "", model_name: str = "None"):
|
| 286 |
+
def to_list(s):
|
| 287 |
+
return [x.strip() for x in s.split(",") if not s == ""]
|
| 288 |
+
|
| 289 |
+
def list_sub(a, b):
|
| 290 |
+
return [e for e in a if e not in b]
|
| 291 |
+
|
| 292 |
+
def list_uniq(l):
|
| 293 |
+
return sorted(set(l), key=l.index)
|
| 294 |
+
|
| 295 |
+
if not model_name or not enable_auto_recom_prompt: return prompt, neg_prompt
|
| 296 |
+
animagine_ps = to_list("anime artwork, anime style, key visual, vibrant, studio anime, highly detailed, masterpiece, best quality, very aesthetic, absurdres")
|
| 297 |
+
animagine_nps = to_list("lowres, (bad), text, error, fewer, extra, missing, worst quality, jpeg artifacts, low quality, watermark, unfinished, displeasing, oldest, early, chromatic aberration, signature, extra digits, artistic error, username, scan, [abstract]")
|
| 298 |
+
pony_ps = to_list("source_anime, score_9, score_8_up, score_7_up, masterpiece, best quality, very aesthetic, absurdres")
|
| 299 |
+
pony_nps = to_list("source_pony, source_furry, source_cartoon, score_6, score_5, score_4, busty, ugly face, mutated hands, low res, blurry face, black and white, the simpsons, overwatch, apex legends")
|
| 300 |
+
other_ps = to_list("anime artwork, anime style, key visual, vibrant, studio anime, highly detailed, cinematic photo, 35mm photograph, film, bokeh, professional, 4k, highly detailed")
|
| 301 |
+
other_nps = to_list("photo, deformed, black and white, realism, disfigured, low contrast, drawing, painting, crayon, sketch, graphite, impressionist, noisy, blurry, soft, deformed, ugly")
|
| 302 |
+
prompts = to_list(prompt)
|
| 303 |
+
neg_prompts = to_list(neg_prompt)
|
| 304 |
+
prompts = list_sub(prompts, animagine_ps + pony_ps + other_ps)
|
| 305 |
+
neg_prompts = list_sub(neg_prompts, animagine_nps + pony_nps + other_nps)
|
| 306 |
+
last_empty_p = [""] if not prompts and type != "None" else []
|
| 307 |
+
last_empty_np = [""] if not neg_prompts and type != "None" else []
|
| 308 |
+
ps = []
|
| 309 |
+
nps = []
|
| 310 |
+
if model_name in model_prompt_dict.keys():
|
| 311 |
+
ps = to_list(model_prompt_dict[model_name]["prompt"])
|
| 312 |
+
nps = to_list(model_prompt_dict[model_name]["negative_prompt"])
|
| 313 |
+
else:
|
| 314 |
+
ps = to_list("score_9, score_8_up, score_7_up, highly detailed, masterpiece, best quality, very aesthetic, absurdres")
|
| 315 |
+
nps = to_list("score_6, score_5, score_4, lowres, (bad), text, error, fewer, extra, missing, worst quality, jpeg artifacts, low quality, watermark, unfinished, displeasing, oldest, early, chromatic aberration, signature, extra digits, artistic error, username, scan, [abstract]")
|
| 316 |
+
prompts = prompts + ps
|
| 317 |
+
neg_prompts = neg_prompts + nps
|
| 318 |
+
prompt = ", ".join(list_uniq(prompts) + last_empty_p)
|
| 319 |
+
neg_prompt = ", ".join(list_uniq(neg_prompts) + last_empty_np)
|
| 320 |
+
return prompt, neg_prompt
|
| 321 |
+
|
| 322 |
+
|
| 323 |
tag_group_dict = load_dict_from_csv('tag_group.csv')
|
| 324 |
|
| 325 |
|