Upload 3 files
Browse files
Danbooru Prompt Selector/TEST2024/prompt_selector_auto_1212_testv8.exe
CHANGED
@@ -1,3 +1,3 @@
|
|
1 |
version https://git-lfs.github.com/spec/v1
|
2 |
-
oid sha256:
|
3 |
-
size
|
|
|
1 |
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:b8ab112de60fa7d57f42c61a5ecea0dcd94df21dcd30e27c016bdfe98e389a01
|
3 |
+
size 150997702
|
Danbooru Prompt Selector/TEST2024/prompt_selector_auto_1212_testv8.py
CHANGED
@@ -27,15 +27,18 @@ from IPython.display import display
|
|
27 |
import win32clipboard
|
28 |
from io import BytesIO
|
29 |
from datetime import datetime
|
30 |
-
import arti_list, tagbag, wlist, copyright_list_reformatted, remove_result_e
|
31 |
import character_dictionary as cd
|
32 |
import pandas as pd
|
33 |
import webbrowser
|
|
|
34 |
|
35 |
BASE_URL="https://api.novelai.net"
|
36 |
copyright_keys = copyright_list_reformatted.copyright_list
|
37 |
character_keys = list(cd.character_dictionary.keys())
|
38 |
nsfw_word = list(remove_result_e.keyword_counts.keys())
|
|
|
|
|
39 |
|
40 |
def argon_hash(email: str, password: str, size: int, domain: str) -> str:
|
41 |
pre_salt = f"{password[:6]}{email}{domain}"
|
@@ -80,6 +83,37 @@ def generate_image(access_token, prompt, model, action, parameters):
|
|
80 |
# catch any errors
|
81 |
return response.content
|
82 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
83 |
def generate(width, height, positive, negative, button):
|
84 |
global temp_clipboard_image
|
85 |
global current_sampler
|
@@ -180,6 +214,7 @@ def generate(width, height, positive, negative, button):
|
|
180 |
image_label.original_image = i.copy()
|
181 |
image_label.image = tk_image # ์ฐธ์กฐ ์ ์ง
|
182 |
output_file_path = "output_image.jpg"
|
|
|
183 |
i.save(output_file_path)
|
184 |
error_count = 0
|
185 |
except Exception as e:
|
@@ -294,9 +329,32 @@ def reset():
|
|
294 |
entry_deep_search.delete(0, tk.END)
|
295 |
text_output.delete('1.0', tk.END)
|
296 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
297 |
def random_function():
|
298 |
global last_deep_search_keywords, cached_rows, last_selected_row_keywords, top_100_keywords, previous_artist, top_100_counts
|
299 |
global current_wildcard_character, current_wildcard_artist
|
|
|
300 |
current_deep_search_keywords = entry_deep_search.get().strip()
|
301 |
auto_hide_keywords = entry_auto_hide.get().split(',')
|
302 |
auto_hide_keywords = [keyword.strip() for keyword in auto_hide_keywords if keyword.strip()]
|
@@ -436,10 +494,24 @@ def random_function():
|
|
436 |
#if random_row_keywords[0]=='': random_row_keywords = last_selected_row_keywords
|
437 |
text_output.delete('1.0', tk.END)
|
438 |
else:
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
443 |
|
444 |
if(entry_fixed_prompt.get()):
|
445 |
entry_text_keywords = entry_fixed_prompt.get()
|
@@ -472,7 +544,6 @@ def random_function():
|
|
472 |
if kw in random_row_keywords:
|
473 |
random_row_keywords.remove(kw)
|
474 |
|
475 |
-
global previous_wildcard_artist, previous_wildcard_character, character_keys, copyright_keys
|
476 |
# temp_first_keywords์ boy์ girl ํค์๋๋ฅผ ์ ์ ํ ์์น์ ์ถ๊ฐ
|
477 |
if(girl_keywords and 'girl' in temp_first_keywords[0]): temp_first_keywords.pop(0)
|
478 |
#print(wildcard_var.get())
|
@@ -537,10 +608,10 @@ def random_function():
|
|
537 |
if NSFW_assert_var.get():
|
538 |
for keyword in random_row_keywords:
|
539 |
if not rm_characteristic_var.get():
|
540 |
-
if keyword not in
|
541 |
nsfw_temp.append(keyword)
|
542 |
else:
|
543 |
-
if keyword not in
|
544 |
nsfw_temp.append(keyword)
|
545 |
if nsfw_temp is not None:
|
546 |
if not remove_artist_var.get():
|
@@ -569,6 +640,12 @@ def random_function():
|
|
569 |
temp_first_keywords.append(keyword)
|
570 |
random_row_keywords.remove(keyword)
|
571 |
|
|
|
|
|
|
|
|
|
|
|
|
|
572 |
#last_selected_row_keywords =boy_keywords + girl_keywords[:0] + random_row_keywords
|
573 |
#print("3 :", temp_first_keywords)
|
574 |
if random_artist_var.get():
|
@@ -583,11 +660,14 @@ def random_function():
|
|
583 |
#elif toggle_prompt_var.get(): random_row_keywords = temp_first_keywords + random_row_keywords
|
584 |
else: random_row_keywords = temp_first_keywords + random_row_keywords
|
585 |
|
586 |
-
patterns =
|
|
|
587 |
|
588 |
for pattern in patterns:
|
589 |
-
|
590 |
-
|
|
|
|
|
591 |
|
592 |
if entry_fixed_prompt_after.get():
|
593 |
entry_after_text = entry_fixed_prompt_after.get().strip().split(',')
|
@@ -595,9 +675,6 @@ def random_function():
|
|
595 |
if at_kw not in random_row_keywords and ' '+at_kw not in random_row_keywords:
|
596 |
random_row_keywords.append(at_kw)
|
597 |
|
598 |
-
random_row_keywords = [keyword.strip(', ') for keyword in random_row_keywords]
|
599 |
-
random_row_keywords = [keyword for keyword in random_row_keywords if keyword]
|
600 |
-
|
601 |
rm_copyright = []
|
602 |
if(rm_copyright_var.get()):
|
603 |
for keyword in random_row_keywords:
|
@@ -643,6 +720,7 @@ def random_function():
|
|
643 |
random_row_keywords.remove(keyword)
|
644 |
random_row_keywords.insert(found_index,"artist:"+keyword)
|
645 |
|
|
|
646 |
#print(random_row_keywords)
|
647 |
text_output.insert(tk.END, f"{', '.join(random_row_keywords)}")
|
648 |
if auto_copy_var.get():
|
@@ -652,6 +730,8 @@ def random_function():
|
|
652 |
|
653 |
cached_rows_count_label.config(text=f"์ฌ์ธต๊ฒ์ ํ๋กฌํํธ ํ: {len(cached_rows)}")
|
654 |
|
|
|
|
|
655 |
def add_low_frequency_keywords():
|
656 |
global keyword_counts, most_common_count
|
657 |
keyword_counts = analyze_cached_rows(cached_rows)
|
@@ -1465,6 +1545,7 @@ def generate_turbo(_seed, turbo_count, tb_access_token,width, height, positive,
|
|
1465 |
image_label.config(image=tk_image)
|
1466 |
image_label.original_image = i.copy()
|
1467 |
image_label.image = tk_image # ์ฐธ์กฐ ์ ์ง
|
|
|
1468 |
if all(img is not None for img in image_queue):
|
1469 |
time.sleep(5)
|
1470 |
merged_image = merge_images(image_queue)
|
@@ -2225,6 +2306,7 @@ multi_token_enable = False
|
|
2225 |
whitelist = wlist.whitelist
|
2226 |
bag_of_tags = tagbag.bag_of_tags
|
2227 |
afilter_30000 = arti_list.afilter_30000
|
|
|
2228 |
|
2229 |
current_wildcard_artist = []
|
2230 |
current_wildcard_character = []
|
@@ -2318,9 +2400,14 @@ button_random = tk.Button(button_frame, text="๋๋ค", command=random_function)
|
|
2318 |
button_random.grid(row=0, column=0, sticky='ew')
|
2319 |
|
2320 |
# "ํ๋กฌํํธ ๊ณ ์ " ํ ๊ธ ๋ฒํผ
|
|
|
|
|
2321 |
toggle_prompt_var = tk.IntVar()
|
2322 |
-
button_toggle_prompt = tk.Checkbutton(
|
2323 |
-
button_toggle_prompt.grid(row=0, column=
|
|
|
|
|
|
|
2324 |
|
2325 |
# "์๋ ๋ณต์ฌ" ์ฒดํฌ๋ฐ์ค
|
2326 |
auto_copy_var = tk.IntVar()
|
@@ -2577,6 +2664,9 @@ btn_add_low_freq.grid(row=0, column=3, padx=5, pady=5, sticky='ew')
|
|
2577 |
show_fullscreen_btn = tk.Button(right_frame_area16, text="์ ์ฒดํ๋ฉด ๋ณด๊ธฐ (ESC๋ก ๋ซ๊ธฐ)", command=show_fullscreen_image)
|
2578 |
show_fullscreen_btn.grid(row=0, column=4, padx=5, pady=5, sticky='ew')
|
2579 |
|
|
|
|
|
|
|
2580 |
# ํ์์ ์ด๋ฏธ์ง ์์ฑ
|
2581 |
white_image = Image.new('RGB', (_size, _size), 'white')
|
2582 |
white_photo = ImageTk.PhotoImage(white_image)
|
|
|
27 |
import win32clipboard
|
28 |
from io import BytesIO
|
29 |
from datetime import datetime
|
30 |
+
import arti_list, tagbag, wlist, copyright_list_reformatted, remove_result_e, remove_result_qe
|
31 |
import character_dictionary as cd
|
32 |
import pandas as pd
|
33 |
import webbrowser
|
34 |
+
from collections import OrderedDict
|
35 |
|
36 |
BASE_URL="https://api.novelai.net"
|
37 |
copyright_keys = copyright_list_reformatted.copyright_list
|
38 |
character_keys = list(cd.character_dictionary.keys())
|
39 |
nsfw_word = list(remove_result_e.keyword_counts.keys())
|
40 |
+
questionable_word = list(remove_result_qe.keyword_counts.keys())
|
41 |
+
qe_word = nsfw_word + questionable_word
|
42 |
|
43 |
def argon_hash(email: str, password: str, size: int, domain: str) -> str:
|
44 |
pre_salt = f"{password[:6]}{email}{domain}"
|
|
|
83 |
# catch any errors
|
84 |
return response.content
|
85 |
|
86 |
+
def history_queue(image, prompt, seed):
|
87 |
+
global history
|
88 |
+
history.append([image, prompt, seed])
|
89 |
+
if len(history) > 5:
|
90 |
+
history.pop(0)
|
91 |
+
|
92 |
+
def show_history():
|
93 |
+
global history
|
94 |
+
|
95 |
+
# ์๋ก์ด toplevel ์ฐฝ ์์ฑ
|
96 |
+
history_window = tk.Toplevel(window)
|
97 |
+
history_window.title("History")
|
98 |
+
|
99 |
+
# history_window์์ ์ธ๋ค์ผ๊ณผ ํ
์คํธ๋ฅผ ํ์ํ grid ์ค์
|
100 |
+
for index, (image, prompt, seed) in enumerate(history):
|
101 |
+
# ์ด๋ฏธ์ง๋ฅผ ์ธ๋ค์ผ๋ก ๋ณํ
|
102 |
+
image.thumbnail((192, 192)) # ๊ฐ๋ก ์ธ๋ก 100ํฝ์
๋ก ์กฐ์
|
103 |
+
photo = ImageTk.PhotoImage(image)
|
104 |
+
|
105 |
+
# ์ธ๋ค์ผ ์ด๋ฏธ์ง ๋ผ๋ฒจ ์์ฑ
|
106 |
+
image_label = tk.Label(history_window, image=photo)
|
107 |
+
image_label.image = photo # ์ฐธ์กฐ๋ฅผ ์ ์ง
|
108 |
+
image_label.grid(row=index, column=0)
|
109 |
+
|
110 |
+
# prompt์ seed๋ฅผ ๊ฒฐํฉํ ํ
์คํธ ์์ฑ
|
111 |
+
text_prompt = prompt + ' Seed: ' + str(seed)
|
112 |
+
text_widget = tk.Text(history_window, height=10, width=75) # UI ์ฌ์ด์ฆ์ ๋ง๊ฒ width์ height ์กฐ์
|
113 |
+
text_widget.insert('1.0', text_prompt)
|
114 |
+
text_widget.grid(row=index, column=1)
|
115 |
+
text_widget.config(state='disabled') # ํ
์คํธ ์์ ฏ์ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ์ค์
|
116 |
+
|
117 |
def generate(width, height, positive, negative, button):
|
118 |
global temp_clipboard_image
|
119 |
global current_sampler
|
|
|
214 |
image_label.original_image = i.copy()
|
215 |
image_label.image = tk_image # ์ฐธ์กฐ ์ ์ง
|
216 |
output_file_path = "output_image.jpg"
|
217 |
+
history_queue(i_resized.copy(), positive, params['seed'])
|
218 |
i.save(output_file_path)
|
219 |
error_count = 0
|
220 |
except Exception as e:
|
|
|
329 |
entry_deep_search.delete(0, tk.END)
|
330 |
text_output.delete('1.0', tk.END)
|
331 |
|
332 |
+
def rearrange_keywords_boys_girls(keywords):
|
333 |
+
boy_keyword = None
|
334 |
+
girl_keyword = None
|
335 |
+
|
336 |
+
# ์ฒ์ 10๊ฐ ํค์๋๋ฅผ ํ์ธ
|
337 |
+
for keyword in keywords[:10]:
|
338 |
+
if 'boy' in keyword and len(keyword) <= 5:
|
339 |
+
boy_keyword = keyword
|
340 |
+
if 'girl' in keyword and len(keyword) <= 5:
|
341 |
+
girl_keyword = keyword
|
342 |
+
|
343 |
+
# 'boy'์ 'girl' ํค์๋๊ฐ ์กด์ฌํ๊ณ , ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฒฝ์ฐ
|
344 |
+
if boy_keyword and girl_keyword:
|
345 |
+
boy_index = keywords.index(boy_keyword)
|
346 |
+
if boy_index != 0:
|
347 |
+
keywords.insert(0, keywords.pop(boy_index))
|
348 |
+
girl_index = keywords.index(girl_keyword)
|
349 |
+
if girl_index > boy_index:
|
350 |
+
keywords.insert(boy_index + 1, keywords.pop(girl_index))
|
351 |
+
|
352 |
+
return keywords
|
353 |
+
|
354 |
def random_function():
|
355 |
global last_deep_search_keywords, cached_rows, last_selected_row_keywords, top_100_keywords, previous_artist, top_100_counts
|
356 |
global current_wildcard_character, current_wildcard_artist
|
357 |
+
global previous_wildcard_artist, previous_wildcard_character, character_keys, copyright_keys
|
358 |
current_deep_search_keywords = entry_deep_search.get().strip()
|
359 |
auto_hide_keywords = entry_auto_hide.get().split(',')
|
360 |
auto_hide_keywords = [keyword.strip() for keyword in auto_hide_keywords if keyword.strip()]
|
|
|
494 |
#if random_row_keywords[0]=='': random_row_keywords = last_selected_row_keywords
|
495 |
text_output.delete('1.0', tk.END)
|
496 |
else:
|
497 |
+
if (safe_search_var.get()):
|
498 |
+
for i in range(100):
|
499 |
+
random_index = random.randint(0, len(cached_rows) - 1)
|
500 |
+
random_row = cached_rows.pop(random_index)
|
501 |
+
random_row_keywords = [keyword.strip() for keyword in random_row[0].split(',')]
|
502 |
+
# random_row_keywords์ qe_word ํด๋นํ๋ ํค์๋๊ฐ ์๋์ง ํ์ธ
|
503 |
+
if not any(keyword in nsfw_word for keyword in random_row_keywords):
|
504 |
+
break # nsfw_word์ ํด๋นํ๋ ํค์๋๊ฐ ์์ผ๋ฏ๋ก ๋ฐ๋ณต๋ฌธ ํ์ถ
|
505 |
+
if len(cached_rows) == 0:
|
506 |
+
random_row_keywords = [keyword.strip() for keyword in "1girl, blank eyes, cell phone, chibi, crying, crying with eyes open, gloom (expression), holding, holding phone, open mouth, phone, smartphone, solo, surprised, tears, turn pale, white background, simple background, Search fail (text)".split(',')]
|
507 |
+
break
|
508 |
+
if i == 99: random_row_keywords = random_row_keywords = [keyword.strip() for keyword in "1girl, blank eyes, cell phone, chibi, crying, crying with eyes open, gloom (expression), holding, holding phone, open mouth, phone, smartphone, solo, surprised, tears, turn pale, white background, simple background, Search fail (text)".split(',')]
|
509 |
+
last_selected_row_keywords = random_row_keywords.copy()
|
510 |
+
else:
|
511 |
+
random_index = random.randint(0, len(cached_rows) - 1)
|
512 |
+
random_row = cached_rows.pop(random_index)
|
513 |
+
random_row_keywords = [keyword.strip() for keyword in random_row[0].split(',')]
|
514 |
+
last_selected_row_keywords = random_row_keywords.copy()
|
515 |
|
516 |
if(entry_fixed_prompt.get()):
|
517 |
entry_text_keywords = entry_fixed_prompt.get()
|
|
|
544 |
if kw in random_row_keywords:
|
545 |
random_row_keywords.remove(kw)
|
546 |
|
|
|
547 |
# temp_first_keywords์ boy์ girl ํค์๋๋ฅผ ์ ์ ํ ์์น์ ์ถ๊ฐ
|
548 |
if(girl_keywords and 'girl' in temp_first_keywords[0]): temp_first_keywords.pop(0)
|
549 |
#print(wildcard_var.get())
|
|
|
608 |
if NSFW_assert_var.get():
|
609 |
for keyword in random_row_keywords:
|
610 |
if not rm_characteristic_var.get():
|
611 |
+
if keyword not in qe_word and (keyword not in bag_of_tags and keyword not in character_keys and "(" not in keyword and "horns" not in keyword):
|
612 |
nsfw_temp.append(keyword)
|
613 |
else:
|
614 |
+
if keyword not in qe_word:
|
615 |
nsfw_temp.append(keyword)
|
616 |
if nsfw_temp is not None:
|
617 |
if not remove_artist_var.get():
|
|
|
640 |
temp_first_keywords.append(keyword)
|
641 |
random_row_keywords.remove(keyword)
|
642 |
|
643 |
+
t_temp = []
|
644 |
+
for keyword in temp_first_keywords:
|
645 |
+
t_temp.append(keyword.strip())
|
646 |
+
t_temp = list(OrderedDict.fromkeys(t_temp))
|
647 |
+
temp_first_keywords = list(t_temp)
|
648 |
+
|
649 |
#last_selected_row_keywords =boy_keywords + girl_keywords[:0] + random_row_keywords
|
650 |
#print("3 :", temp_first_keywords)
|
651 |
if random_artist_var.get():
|
|
|
660 |
#elif toggle_prompt_var.get(): random_row_keywords = temp_first_keywords + random_row_keywords
|
661 |
else: random_row_keywords = temp_first_keywords + random_row_keywords
|
662 |
|
663 |
+
patterns = auto_hide_keywords
|
664 |
+
rm_reserved = []
|
665 |
|
666 |
for pattern in patterns:
|
667 |
+
if pattern in random_row_keywords:
|
668 |
+
rm_reserved.append(pattern)
|
669 |
+
for pattern in rm_reserved:
|
670 |
+
random_row_keywords.remove(pattern)
|
671 |
|
672 |
if entry_fixed_prompt_after.get():
|
673 |
entry_after_text = entry_fixed_prompt_after.get().strip().split(',')
|
|
|
675 |
if at_kw not in random_row_keywords and ' '+at_kw not in random_row_keywords:
|
676 |
random_row_keywords.append(at_kw)
|
677 |
|
|
|
|
|
|
|
678 |
rm_copyright = []
|
679 |
if(rm_copyright_var.get()):
|
680 |
for keyword in random_row_keywords:
|
|
|
720 |
random_row_keywords.remove(keyword)
|
721 |
random_row_keywords.insert(found_index,"artist:"+keyword)
|
722 |
|
723 |
+
random_row_keywords = rearrange_keywords_boys_girls(random_row_keywords)
|
724 |
#print(random_row_keywords)
|
725 |
text_output.insert(tk.END, f"{', '.join(random_row_keywords)}")
|
726 |
if auto_copy_var.get():
|
|
|
730 |
|
731 |
cached_rows_count_label.config(text=f"์ฌ์ธต๊ฒ์ ํ๋กฌํํธ ํ: {len(cached_rows)}")
|
732 |
|
733 |
+
|
734 |
+
|
735 |
def add_low_frequency_keywords():
|
736 |
global keyword_counts, most_common_count
|
737 |
keyword_counts = analyze_cached_rows(cached_rows)
|
|
|
1545 |
image_label.config(image=tk_image)
|
1546 |
image_label.original_image = i.copy()
|
1547 |
image_label.image = tk_image # ์ฐธ์กฐ ์ ์ง
|
1548 |
+
history_queue(i_resized.copy(), positive, params['seed'])
|
1549 |
if all(img is not None for img in image_queue):
|
1550 |
time.sleep(5)
|
1551 |
merged_image = merge_images(image_queue)
|
|
|
2306 |
whitelist = wlist.whitelist
|
2307 |
bag_of_tags = tagbag.bag_of_tags
|
2308 |
afilter_30000 = arti_list.afilter_30000
|
2309 |
+
history = []
|
2310 |
|
2311 |
current_wildcard_artist = []
|
2312 |
current_wildcard_character = []
|
|
|
2400 |
button_random.grid(row=0, column=0, sticky='ew')
|
2401 |
|
2402 |
# "ํ๋กฌํํธ ๊ณ ์ " ํ ๊ธ ๋ฒํผ
|
2403 |
+
button_frame_frame = tk.Frame(button_frame)
|
2404 |
+
button_frame_frame.grid(row=0, column=1, sticky='ew')
|
2405 |
toggle_prompt_var = tk.IntVar()
|
2406 |
+
button_toggle_prompt = tk.Checkbutton(button_frame_frame, text="ํ๋กฌํํธ ๊ณ ์ ", variable=toggle_prompt_var)
|
2407 |
+
button_toggle_prompt.grid(row=0, column=0, sticky='ew')
|
2408 |
+
safe_search_var = tk.IntVar()
|
2409 |
+
button_toggle_safe_search = tk.Checkbutton(button_frame_frame, text="์ธ์ดํ์์น", variable=safe_search_var)
|
2410 |
+
button_toggle_safe_search.grid(row=1, column=0, sticky='ew')
|
2411 |
|
2412 |
# "์๋ ๋ณต์ฌ" ์ฒดํฌ๋ฐ์ค
|
2413 |
auto_copy_var = tk.IntVar()
|
|
|
2664 |
show_fullscreen_btn = tk.Button(right_frame_area16, text="์ ์ฒดํ๋ฉด ๋ณด๊ธฐ (ESC๋ก ๋ซ๊ธฐ)", command=show_fullscreen_image)
|
2665 |
show_fullscreen_btn.grid(row=0, column=4, padx=5, pady=5, sticky='ew')
|
2666 |
|
2667 |
+
show_history_btn = tk.Button(right_frame_area16, text="history", command=show_history)
|
2668 |
+
show_history_btn.grid(row=0, column=5, padx=5, pady=5, sticky='ew')
|
2669 |
+
|
2670 |
# ํ์์ ์ด๋ฏธ์ง ์์ฑ
|
2671 |
white_image = Image.new('RGB', (_size, _size), 'white')
|
2672 |
white_photo = ImageTk.PhotoImage(white_image)
|
Danbooru Prompt Selector/TEST2024/remove_result_qe.py
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
keyword_counts = {'adjusting swimsuit': 525, 'hair over one breast': 433, 'heart-shaped boob challenge': 426, 'mtu virus': 361, 'male swimwear challenge': 335, 'wardrobe error': 319, 'food on breasts': 318, 'exploding clothes': 309, 'upshirt': 300, 'underbutt': 299, 'backwards virgin killer sweater': 256, 'covering ass': 239, 'adjusting panties': 232, 'bursting ass': 222, 'washing hair': 214, 'oppai challenge': 209, 'open-chest sweater': 208, 'plaid bikini': 204, 'one finger selfie challenge (meme)': 202, 'accidental pervert': 198, 'yamakasa': 198, 'c-string': 198, 'black pasties': 196, 'panties under shorts': 189, "i've never seen a guy recreate this successfully tbh (meme)": 182, 'iced latte with breast milk (meme)': 181, 'bikini tug': 178, 'x-ray vision': 177, 'pants lift': 176, 'ofuda on nipples': 175, 'popped button': 172, 'loose bikini': 171, 'back-print panties': 169, 'low neckline': 163, 'pov across bed': 162, 'floating breasts': 161, 'covering chest': 157, 'bulge lift': 157, 'removing bra': 155, 'wet skirt': 152, 'tight dress': 152, 'pantyhose under swimsuit': 151, 'bubble bath': 147, 'holding sponge': 143, 'clothes theft': 142, 'food between breasts': 139, 'whale tail (clothing)': 139, 'adjusting legwear': 137, 'strapless one-piece swimsuit': 137, 'strap break': 135, 'breast awe': 134, 'extended downblouse': 133, 'carried breast rest': 133, 'leotard peek': 133, 'two-tone panties': 131, 'breasts on tray': 130, 'bust measuring': 129, 'black slingshot swimsuit': 129, 'lifted by tail': 127, 'taut swimsuit': 127, 'x-ray glasses': 127, 'breasts day': 126, 'daijoubu? oppai momu? (meme)': 125, 'cleavage reach': 124, 'multiple hat bows': 123, 'naked suspenders': 122, 'lowleg pants': 122, 'adjusting leotard': 122, 'bunny day': 122, 'front-print panties': 121, 'flying button': 121, 'skinny dipping': 116, 'armpit focus': 116, 'ribbon between breasts': 112, 'head on ass': 111, 'shell bikini': 110, 'object on breast': 110, 'slipper bathtub': 109, 'bikini in mouth': 109, 'blood on breasts': 108, 'swim cap': 108, 'simulated footjob': 107, 'navel focus': 107, 'towel on legs': 106, 'multiple straps': 105, 'hair over crotch': 104, 'white male swimwear': 104, 'modeling': 103, 'breast contest': 103, 'multi-strapped bikini top': 102, 'ribbon bra': 102, 'print swimsuit': 101, 'urine meter': 101, 'ribbon-trimmed panties': 100, 'applying sunscreen': 100, 'fur-trimmed bikini': 98, 'simulated paizuri': 98, 'blue slingshot swimsuit': 98, 'yellow one-piece swimsuit': 98, 'side-tie peek': 98, 'breast curtain lift': 98, 'skirt caught on object': 97, 'vertical-striped bikini': 97, 'alternate body size': 97, 'washing another': 97, 'pink babydoll': 96, 'satin bra': 96, 'multicolored leotard': 96, 'shampoo': 94, 'backless swimsuit': 94, 'red male swimwear': 94, 'bamboo fence': 92, 'bed invitation': 91, 'string pull': 91, 'lowleg shorts': 91, 'ribbon-trimmed bra': 91, 'nude modeling': 90, 'silver bikini': 90, 'see-through camisole': 90, 'striped one-piece swimsuit': 89, 'mixed-sex combat': 88, 'fur bikini': 88, 'sofmap background': 88, 'yuzu (fruit)': 87, 'adjusting bra': 87, 'undone neckerchief': 87, 'inconvenient breasts': 87, 'eyewear view': 87, 'shower curtain': 86, 'washing back': 86, 'boyshort panties': 86, 'side-tie swimsuit': 86, 'shirt cut meme': 86, 'self-harm': 85, 'evo grim': 85, 'yuzu bath': 83, 'strip game': 83, 'heattech leotard': 83, 'wet legwear': 82, 'loose thighhigh': 82, 'implied tail plug': 82, 'cat panties': 82, 'multicolored panties': 82, 'clothes between thighs': 81, 'winged heart': 81, 'oppai mochi': 80, 'over the nose gag': 80, 'spread cleavage': 80, 'latex panties': 80, 'aroused nosebleed': 80, 'convenient head': 79, 'naked cardigan': 79, 'holding skirt': 78, 'see-through sports bra': 78, 'side-tie bottom': 78, 'chocolate on pussy': 77, 'naked raincoat': 76, 'adjusting buruma': 76, 'snake earrings': 76, 'rabbit panties': 75, 'undersized breast cup': 75, 'changing clothes': 74, 'clothed bath': 74, 'wing censor': 74, 'volleyball net': 74, 'brown male underwear': 74, 'lace legwear': 73, 'panties day': 73, 'removing pasties': 73, 'catfight': 73, 'licking navel': 72, 'head under skirt': 72, 'panties under bike shorts': 72, 'cunnilingus gesture': 72, 'torn kimono': 72, 'crotch focus': 72, 'virgin destroyer sweater': 72, 'underwear writing': 71, 'single sandal': 71, 'ass worship': 71, 'leaf bikini': 70, 'holding beachball': 70, 'licking stomach': 69, 'twister': 69, 'head arms': 69, 'bearhug': 68, 'spider tattoo': 68, 'self wedgie': 68, "covering another's breasts": 68, 'bikini day': 68, 'looking at bulge': 68, 'argyle cutout': 67, 'cutout above navel': 67, 'fanning crotch': 67, 'spilled milk': 67, 'shirt slip': 67, 'bound toes': 67, 'mummification (bound)': 67, 'yoga mat': 67, 'undone bikini': 67, 'impossible sweater': 66, 'yoga': 66, 'breast pillow': 66, 'finger to tongue': 66, 'arrancar': 66, 'lane line': 66, 'frilled babydoll': 66, 'striker unit': 65, 'diagonal-striped neckwear': 65, 'ke-ta (style)': 64, 'belt skirt': 64, 'sweater tug': 64, 'asymmetrical breasts': 64, 'sideless kimono': 64, 'silver footwear': 64, 'halter leotard': 64, 'meka (overwatch)': 63, 'alraune': 63, 'water censor': 63, 'torso': 63, 'areola measuring': 63, 'chloroform': 63, 'ryuko redraw (meme)': 63, 'banana boat': 62, 'towel on one shoulder': 62, 'removing legwear': 62, 'purple slingshot swimsuit': 62, 'lifting covers': 62, 'satin underwear': 62, 'cutesexyrobutts (style)': 62, 'moe2021': 62, 'wrist straps': 61, 'stomach punch': 61, 'open towel': 61, 'necktie in mouth': 61, 'aoshidan school uniform': 61, 'gimp mask': 60, 'red slingshot swimsuit': 60, 'bralines': 60, 'veiny thighs': 60, 'submission hold': 59, 'fur-trimmed leotard': 59, 'christmas tree hair ornament': 59, 'edging underwear': 59, 'gris swimsuit': 59, 'print leotard': 58, 'breast strap': 58, 'see-through bikini': 58, 'scattered hair': 57, 'naked belt': 57, 'face in crotch': 57, 'extended upskirt': 57, 'over the mouth gag': 57, 'zipper panties': 57, 'colored stripes': 56, 'body jewelry': 56, 'swimsuit tug': 56, 'swimsuit theft': 55, 'green buruma': 55, 'latex dress': 55, 'red fundoshi': 55, 'black fundoshi': 55, 'presenting breasts': 55, 'log pose': 54, 'fortified suit': 54, 'jacket over swimsuit': 54, 'boxing ring': 54, 'white slingshot swimsuit': 54, 'petal censor': 54, 'keyhole panties': 54, 'penis out of frame': 54, 'wash cloth': 53, 'gantz suit': 53, 'striped pillow': 53, "covering another's crotch": 53, 'side-tie dress': 53, 'blue babydoll': 53, 'chocolate on legs': 53, 'gimp suit': 52, 'purple sports bra': 52, 'apron pull': 52, 'bar soap': 52, 'bikini shorts': 52, 'unworn armor': 52, 'striped camisole': 52, 'kaleidostick': 52, 'smelling armpit': 52, 'shuriken hair ornament': 52, 'bust chart': 51, 'impossible towel': 51, 'polka dot swimsuit': 51, 'shiny pantyhose': 51, 'purple rope': 51, 'heart ring top': 51, 'see-through bodysuit': 51, 'torn boots': 51, 'fundoshi pull': 51, 'encasement': 51, 'kamui (kill la kill)': 51, 'inside creature': 51, 'toe-point': 51, 'imminent breast grab': 51, 'blue innertube': 51, 'asanagi (style)': 51, 'naked costume': 51, 'ass lift': 51, 'camouflage bikini': 50, 'skirt around ankles': 50, 'forced': 50, 'toe seam': 50, 'embroidered bra': 50, 'two-tone bra': 50, 'lowleg skirt': 49, 'ribbon-trimmed gloves': 49, 'eyewear in mouth': 49, 'embroidered panties': 49, 'snake tattoo': 49, 'virtuous contract': 49, 'ofuro': 49, 'length markings': 49, 'breast sucking through clothes': 48, 'knee to chest': 48, 'bandeau lift': 48, 'nearly naked coat': 48, 'wet shorts': 48, 'ox girl': 48, 'good breasts day': 48, 'heel pop': 48, 'ohisashiburi (style)': 48, 'aestus estus': 47, 'torn sweater': 47, 'good ass day': 47, 'bike jersey': 47, 'suicide': 47, 'petrification': 47, 'lace garter belt': 47, 'cow print thighhighs': 47, 'tennis': 46, 'multicolored bra': 46, 'dress in mouth': 46, 'implied footjob': 46, 'unbuttoning': 46, 'stomach day': 46, 'emaciated': 46, 'lydian academy school uniform': 46, 'sabotaged condom': 46, 'frilled garter': 46, 'belly dancing': 46, 'cat (nyanko daisensou)': 46, 'deltoids': 46, 'face to pecs': 46, 'fig sign': 45, 'wet thighhighs': 45, 'under skirt': 45, 'shirt on shoulders': 45, 'heart bikini': 45, 'implied erection': 45, 'kittysuit': 45, 'milk churn': 45, 'print towel': 45, 'spiked thighlet': 45, 'purple camisole': 45, 'cream on breasts': 45, 'lowleg pantyhose': 44, 'lace-trimmed bikini': 44, 'karada': 44, 'holding surfboard': 44, 'extra breasts': 44, 'kickboard': 44, 'school swimsuit flap': 44, 'highleg dress': 44, 'swimsuit hanger': 44, 'double strap slip': 44, 'beach volleyball': 43, 'slim legs': 43, 'unclasped': 43, 'wiggling toes': 43, 'checkered wall': 43, 'apron tug': 43, 'flower censor': 43, 'rhythmic gymnastics': 43, 'pantsing': 43, 'chocolate covered': 43, 'no hairband': 43, 'green camisole': 43, 'bikini over clothes': 43, 'step-sisters': 43, 'starfish bikini': 43, 'covering one nipple': 43, 'sexting': 43, 'buying condoms': 43, 'black bikini bottom': 43, 'year of the monkey': 42, 'corset piercing': 42, 'chijo': 42, 'towel slip': 42, 'wringing skirt': 42, 'wrist cutting': 42, 'arena (company)': 42, 'iron blood (emblem)': 42, 'convenient hand': 42, 'pixie cut': 42, 'black nightgown': 42, 'swimsuit cover-up': 42, 'red bandeau': 42, 'bat tattoo': 42, 'peed self': 42, 'innerboob': 41, 'strawberry bra': 41, 'checkered panties': 41, 'multicolored stripes': 41, 'convenient skirt': 41, 'maid leotard': 41, 'green slingshot swimsuit': 41, 'downpants': 41, 'adult baby': 41, 'fishnet leotard': 41, 'trinity general school swimsuit': 41, 'curtain call challenge (meme)': 41, 'ryokan': 40, 'bubble filter': 40, 'towel rack': 40, 'white tiger print': 40, '3;': 40, 'grey one-piece swimsuit': 40, 'sunbathing': 40, 'colored armpit hair': 40, 'sock pull': 40, 'sailor swimsuit (idolmaster)': 40, 'skull tattoo': 40, 'white bandeau': 40, 'moomoo milk': 40, 'bent over': 40, 'torso grab': 40, 'bound': 40, 'shibari': 40, 'restrained':40}
|