Upload 2 files
Browse files
Danbooru Prompt Selector/TEST/prompt_selector_auto_1208_testv6.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:2e4593d4f9fc5c8aaf0b3e291f874f76e1718d6c83cdfaca02dcc77d7e6e98e4
|
| 3 |
+
size 84497981
|
Danbooru Prompt Selector/TEST/prompt_selector_auto_1208_testv6.py
CHANGED
|
@@ -148,13 +148,14 @@ def generate(width, height, positive, negative, button):
|
|
| 148 |
with open(f"error_log.txt", "a") as file:
|
| 149 |
file.write(error_message)
|
| 150 |
|
| 151 |
-
global access_token
|
| 152 |
while (running_flag):
|
| 153 |
time.sleep(1)
|
| 154 |
try:
|
| 155 |
running_flag = True
|
| 156 |
tprint("Running : NAI request received")
|
| 157 |
-
zipped_bytes = generate_image(access_token, positive, "nai-diffusion-3", "generate", params)
|
|
|
|
| 158 |
d = Path(f"output_NAI/{start_time}/txt2img")
|
| 159 |
d.mkdir(parents=True, exist_ok=True)
|
| 160 |
zipped = zipfile.ZipFile(io.BytesIO(zipped_bytes))
|
|
@@ -170,15 +171,23 @@ def generate(width, height, positive, negative, button):
|
|
| 170 |
globals()['tk_image'] = None
|
| 171 |
tk_image = ImageTk.PhotoImage(i_resized)
|
| 172 |
image_label.config(image=tk_image)
|
|
|
|
| 173 |
image_label.image = tk_image # μ°Έμ‘° μ μ§
|
| 174 |
output_file_path = "output_image.jpg"
|
| 175 |
i.save(output_file_path)
|
|
|
|
| 176 |
except Exception as e:
|
| 177 |
#text_output.insert(tk.END, f"Error: {e}", fg='red')
|
| 178 |
-
log_error(
|
| 179 |
time.sleep(random.uniform(1.0, 2.5))
|
|
|
|
|
|
|
|
|
|
| 180 |
button.config(state=tk.NORMAL)
|
| 181 |
|
|
|
|
|
|
|
|
|
|
| 182 |
running_flag = False
|
| 183 |
last_generation_seed = params['seed']
|
| 184 |
entry_seed_value.set(last_generation_seed)
|
|
@@ -480,6 +489,24 @@ def random_function():
|
|
| 480 |
if " (" in keyword:
|
| 481 |
temp_first_keywords.append(keyword)
|
| 482 |
random_row_keywords.remove(keyword)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 483 |
|
| 484 |
#last_selected_row_keywords =boy_keywords + girl_keywords[:0] + random_row_keywords
|
| 485 |
#print("3 :", temp_first_keywords)
|
|
@@ -558,6 +585,11 @@ def turbo_stop(button):
|
|
| 558 |
tprint("Stopping pipelines ... ")
|
| 559 |
|
| 560 |
def exit_program():
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 561 |
window.destroy()
|
| 562 |
|
| 563 |
def save_settings():
|
|
@@ -843,11 +875,23 @@ def NAI_generation(width, height, button):
|
|
| 843 |
global access_token_multi, NAI_width, NAI_height
|
| 844 |
global button_stop, running_flag
|
| 845 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 846 |
pretest = text_output.get("1.0", tk.END).split(', ')
|
| 847 |
if (turbo_var.get() == 1):
|
| 848 |
if ( 'sex' not in pretest or '1girl' not in pretest or '1boy' not in pretest):
|
| 849 |
-
tprint('
|
| 850 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 851 |
|
| 852 |
if(rand_resolution_var.get() == 1):
|
| 853 |
resolutions = ["1024 x 1024", "960 x 1088", "896 x 1152", "832 x 1216", "1088 x 960", "1152 x 896", "1216 x 832"]
|
|
@@ -866,14 +910,24 @@ def Auto_login_check():
|
|
| 866 |
if os.path.exists('token.txt'):
|
| 867 |
with open('token.txt', 'r', encoding='utf-8') as f:
|
| 868 |
tokens = f.readlines()
|
| 869 |
-
if(tokens[0]):
|
| 870 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 871 |
if(access_token): button_generate.config(state='normal')
|
| 872 |
|
| 873 |
def NAI_generation_normal(width, height, button):
|
| 874 |
button.config(state=tk.DISABLED)
|
| 875 |
positive = text_output.get("1.0", tk.END)
|
| 876 |
negative = negative_text.get("1.0", "end-1c").strip()
|
|
|
|
|
|
|
|
|
|
| 877 |
thread = threading.Thread(target=generate, args=(width, height, positive, negative, button))
|
| 878 |
thread.start()
|
| 879 |
|
|
@@ -882,7 +936,6 @@ def NAI_generation_turbo(width, height, button):
|
|
| 882 |
button.config(state=tk.DISABLED)
|
| 883 |
positive = text_output.get("1.0", tk.END)
|
| 884 |
negative = negative_text.get("1.0", "end-1c").strip()
|
| 885 |
-
|
| 886 |
|
| 887 |
def SELECT(positive):
|
| 888 |
lines = positive[:25]
|
|
@@ -1064,6 +1117,9 @@ def NAI_generation_turbo(width, height, button):
|
|
| 1064 |
sleep2 = sleep1 + random.uniform(13.5,19.5)
|
| 1065 |
sleep3 = sleep2 + random.uniform(13.5,19.5)
|
| 1066 |
|
|
|
|
|
|
|
|
|
|
| 1067 |
thread_init = threading.Thread(target=generate_turbo, args=(seed,turbo_count, access_token, width, height, positive, negative, button, 0, 0))
|
| 1068 |
thread_init.start()
|
| 1069 |
thread0 = threading.Thread(target=generate_turbo, args=(seed,turbo_count, access_token, width, height, positive0, negative, button, 1, sleep0))
|
|
@@ -1149,7 +1205,7 @@ def generate_turbo(_seed, turbo_count, tb_access_token,width, height, positive,
|
|
| 1149 |
|
| 1150 |
return new_image
|
| 1151 |
|
| 1152 |
-
def insert_queue(i, _number):
|
| 1153 |
global image_queue, temp_clipboard_image
|
| 1154 |
while len(image_queue) < 4: image_queue.append(None)
|
| 1155 |
if _number <= 4:
|
|
@@ -1165,17 +1221,23 @@ def generate_turbo(_seed, turbo_count, tb_access_token,width, height, positive,
|
|
| 1165 |
globals()['tk_image'] = None
|
| 1166 |
tk_image = ImageTk.PhotoImage(i_resized)
|
| 1167 |
image_label.config(image=tk_image)
|
|
|
|
| 1168 |
image_label.image = tk_image # μ°Έμ‘° μ μ§
|
| 1169 |
if all(img is not None for img in image_queue):
|
| 1170 |
time.sleep(5)
|
| 1171 |
merged_image = merge_images(image_queue)
|
| 1172 |
temp_clipboard_image = merged_image.copy()
|
| 1173 |
if merged_image is not None:
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1174 |
i_resized = resize_and_fill(merged_image)
|
| 1175 |
if 'tk_image' in globals():
|
| 1176 |
globals()['tk_image'] = None
|
| 1177 |
tk_image = ImageTk.PhotoImage(i_resized)
|
| 1178 |
image_label.config(image=tk_image)
|
|
|
|
| 1179 |
image_label.image = tk_image # μ°Έμ‘° μ μ§
|
| 1180 |
output_file_path = "output_image.jpg"
|
| 1181 |
merged_image.save(output_file_path)
|
|
@@ -1223,7 +1285,8 @@ def generate_turbo(_seed, turbo_count, tb_access_token,width, height, positive,
|
|
| 1223 |
print('containing : ',pipe_number)
|
| 1224 |
|
| 1225 |
running_flag = True
|
| 1226 |
-
tprint("Running : request received, pipeline :"
|
|
|
|
| 1227 |
try:
|
| 1228 |
zipped_bytes = generate_image(tb_access_token, positive, "nai-diffusion-3", "generate", params)
|
| 1229 |
if(pipe_number != 0):
|
|
@@ -1237,13 +1300,14 @@ def generate_turbo(_seed, turbo_count, tb_access_token,width, height, positive,
|
|
| 1237 |
(d / f"{turbo_count:05}_{pipe_number}.png" ).write_bytes(image_bytes)
|
| 1238 |
i = Image.open(io.BytesIO(image_bytes))
|
| 1239 |
i = ImageOps.exif_transpose(i).convert("RGB")
|
|
|
|
| 1240 |
if(pipe_number != 0):
|
| 1241 |
if temp_clipboard_image is not None:
|
| 1242 |
temp_clipboard_image.close()
|
| 1243 |
if(pipe_number == 1 and len(image_queue) < 4): image_queue.clear()
|
| 1244 |
temp_clipboard_image = i
|
| 1245 |
-
insert_queue(i, pipe_number)
|
| 1246 |
-
tprint("image inserted, pipe number : "
|
| 1247 |
else:
|
| 1248 |
if temp_clipboard_image is not None:
|
| 1249 |
temp_clipboard_image.close()
|
|
@@ -1253,12 +1317,16 @@ def generate_turbo(_seed, turbo_count, tb_access_token,width, height, positive,
|
|
| 1253 |
globals()['tk_image'] = None
|
| 1254 |
tk_image = ImageTk.PhotoImage(i_resized)
|
| 1255 |
image_label.config(image=tk_image)
|
|
|
|
| 1256 |
image_label.image = tk_image # μ°Έμ‘° μ μ§
|
| 1257 |
except Exception as e:
|
| 1258 |
#text_output.insert(tk.END, f"Error: {e}", fg='red')
|
| 1259 |
-
log_error(
|
|
|
|
|
|
|
|
|
|
| 1260 |
time.sleep(random.uniform(3.0, 9.0))
|
| 1261 |
-
insert_queue(temp_clipboard_image, pipe_number)
|
| 1262 |
|
| 1263 |
task_finished += 1 #ν°λ³΄ κΈ°λ₯μ μμ μ₯μΉμ
λλ€.
|
| 1264 |
|
|
@@ -1269,6 +1337,9 @@ def generate_turbo(_seed, turbo_count, tb_access_token,width, height, positive,
|
|
| 1269 |
last_generation_seed = params['seed']
|
| 1270 |
entry_seed_value.set(last_generation_seed)
|
| 1271 |
|
|
|
|
|
|
|
|
|
|
| 1272 |
stopped = False
|
| 1273 |
if (turbo_stop_bit):
|
| 1274 |
time.sleep(1.5)
|
|
@@ -1276,7 +1347,7 @@ def generate_turbo(_seed, turbo_count, tb_access_token,width, height, positive,
|
|
| 1276 |
button.config(state=tk.NORMAL)
|
| 1277 |
stopped = True
|
| 1278 |
if (pipe_number != 4):
|
| 1279 |
-
tprint("Stopped : request stopped before assign pipeline :"
|
| 1280 |
|
| 1281 |
if pipe_number == 4 and mac_var.get():
|
| 1282 |
wait_limit = 0
|
|
@@ -1596,7 +1667,6 @@ def apply_wildcard(artist_text, character_text, window):
|
|
| 1596 |
|
| 1597 |
window.destroy()
|
| 1598 |
|
| 1599 |
-
|
| 1600 |
def load_wildcard(text_widget, window, _type):
|
| 1601 |
global artist_wildcard_saved, character_wildcard_saved
|
| 1602 |
window.iconify()
|
|
@@ -1643,13 +1713,236 @@ def get_random_keyword(req_keyword):
|
|
| 1643 |
|
| 1644 |
def tprint(*args):
|
| 1645 |
ctext = ""
|
|
|
|
| 1646 |
for t in args:
|
| 1647 |
-
|
| 1648 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1649 |
|
| 1650 |
def on_hold_seed_button_click():
|
| 1651 |
global last_generation_seed
|
| 1652 |
-
last_generation_seed = entry_seed_value.get()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1653 |
|
| 1654 |
start_time = datetime.now().strftime('%Y%m%d_%H%M')
|
| 1655 |
thread_controller = False
|
|
@@ -1684,6 +1977,8 @@ image_queue = []
|
|
| 1684 |
last_generation_seed = random.randint(0,9999999999)
|
| 1685 |
turbo_stop_bit = False
|
| 1686 |
task_finished = 0
|
|
|
|
|
|
|
| 1687 |
|
| 1688 |
whitelist = wlist.whitelist
|
| 1689 |
bag_of_tags = tagbag.bag_of_tags
|
|
@@ -1802,16 +2097,12 @@ button_stop.grid(row=0, column=5, sticky='ew')
|
|
| 1802 |
button_stop.config(state='disabled')
|
| 1803 |
|
| 1804 |
# "μ€μ " λ²νΌ
|
| 1805 |
-
button_setting = tk.Button(button_frame, text="NAI
|
| 1806 |
button_setting.grid(row=0, column=6, sticky='ew')
|
| 1807 |
|
| 1808 |
-
# "ν°λ³΄" λ²νΌ
|
| 1809 |
-
#button_turbo = tk.Button(button_frame, text="ν°λ³΄", command=lambda: NAI_setting_multi(button_turbo))
|
| 1810 |
-
#button_turbo.grid(row=0, column=7, sticky='ew')
|
| 1811 |
-
|
| 1812 |
# 'μλν'μ 'ν°λ³΄on'μ ν¬ν¨ν μλΈ νλ μ μμ±
|
| 1813 |
sub_frame = tk.Frame(button_frame)
|
| 1814 |
-
sub_frame.grid(row=0, column=
|
| 1815 |
|
| 1816 |
# 'μλν' 체ν¬λ°μ€λ₯Ό μλΈ νλ μμ λ°°μΉ
|
| 1817 |
mac_var = tk.IntVar()
|
|
@@ -1823,6 +2114,10 @@ turbo_var = tk.IntVar()
|
|
| 1823 |
turbo_button = tk.Checkbutton(sub_frame, text="ν°λ³΄on", variable=turbo_var)
|
| 1824 |
turbo_button.grid(row=1, column=0, sticky='ew') # λ λ²μ§Έ νμ λ°°μΉ
|
| 1825 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1826 |
# ν
μ€νΈ λ° κ³ μ ν둬ννΈ λ€κ±°ν°λΈ λ± ν둬ννΈ μ°½
|
| 1827 |
text_frame = tk.Frame(left_frame)
|
| 1828 |
text_frame.grid(row=6, column=0, padx=5, pady=5, sticky='w')
|
|
@@ -1991,6 +2286,10 @@ resolution3_frame.columnconfigure(2, weight=1)
|
|
| 1991 |
|
| 1992 |
running_state = tk.Label(resolution3_frame, text="state : idle")
|
| 1993 |
running_state.grid(row = 0, column= 0, sticky='w')
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1994 |
entry_rescale_value = tk.StringVar()
|
| 1995 |
entry_rescale_label = tk.Label(resolution3_frame, text=" Prompt Guidance Rescale : ", justify=tk.LEFT)
|
| 1996 |
entry_rescale_label.grid(row=0, column=1, sticky='e')
|
|
@@ -2016,6 +2315,9 @@ hold_seed_button.grid(row=0, column=2, sticky='ew')
|
|
| 2016 |
btn_add_low_freq = tk.Button(right_frame_area16, text="μ΄λ―Έμ§λ₯Ό ν΄λ¦½λ³΄λμ 볡μ¬", fg="blue", command=copy_image_to_clipboard)
|
| 2017 |
btn_add_low_freq.grid(row=0, column=3, padx=5, pady=5, sticky='ew')
|
| 2018 |
|
|
|
|
|
|
|
|
|
|
| 2019 |
# νμμ μ΄λ―Έμ§ μμ±
|
| 2020 |
white_image = Image.new('RGB', (_size, _size), 'white')
|
| 2021 |
white_photo = ImageTk.PhotoImage(white_image)
|
|
@@ -2034,4 +2336,5 @@ listener_thread.start()
|
|
| 2034 |
|
| 2035 |
Auto_login_check()
|
| 2036 |
|
|
|
|
| 2037 |
window.mainloop()
|
|
|
|
| 148 |
with open(f"error_log.txt", "a") as file:
|
| 149 |
file.write(error_message)
|
| 150 |
|
| 151 |
+
global access_token, access_token_multi, error_count, multi_token_enable
|
| 152 |
while (running_flag):
|
| 153 |
time.sleep(1)
|
| 154 |
try:
|
| 155 |
running_flag = True
|
| 156 |
tprint("Running : NAI request received")
|
| 157 |
+
if not (multi_token_enable): zipped_bytes = generate_image(access_token, positive, "nai-diffusion-3", "generate", params)
|
| 158 |
+
else: zipped_bytes = generate_image(access_token_multi, positive, "nai-diffusion-3", "generate", params)
|
| 159 |
d = Path(f"output_NAI/{start_time}/txt2img")
|
| 160 |
d.mkdir(parents=True, exist_ok=True)
|
| 161 |
zipped = zipfile.ZipFile(io.BytesIO(zipped_bytes))
|
|
|
|
| 171 |
globals()['tk_image'] = None
|
| 172 |
tk_image = ImageTk.PhotoImage(i_resized)
|
| 173 |
image_label.config(image=tk_image)
|
| 174 |
+
image_label.original_image = i.copy()
|
| 175 |
image_label.image = tk_image # μ°Έμ‘° μ μ§
|
| 176 |
output_file_path = "output_image.jpg"
|
| 177 |
i.save(output_file_path)
|
| 178 |
+
error_count = 0
|
| 179 |
except Exception as e:
|
| 180 |
#text_output.insert(tk.END, f"Error: {e}", fg='red')
|
| 181 |
+
log_error(zipped_bytes.decode('utf-8')[2:-2], "path_to_output_folder")
|
| 182 |
time.sleep(random.uniform(1.0, 2.5))
|
| 183 |
+
error_count += 1
|
| 184 |
+
if error_count > 5:
|
| 185 |
+
mac_var.set(0)
|
| 186 |
button.config(state=tk.NORMAL)
|
| 187 |
|
| 188 |
+
global delay_offset
|
| 189 |
+
time.sleep(delay_offset)
|
| 190 |
+
|
| 191 |
running_flag = False
|
| 192 |
last_generation_seed = params['seed']
|
| 193 |
entry_seed_value.set(last_generation_seed)
|
|
|
|
| 489 |
if " (" in keyword:
|
| 490 |
temp_first_keywords.append(keyword)
|
| 491 |
random_row_keywords.remove(keyword)
|
| 492 |
+
# νμ¨ κ°μ ν둬ννΈ
|
| 493 |
+
valid_keywords = []
|
| 494 |
+
for keyword in temp_first_keywords:
|
| 495 |
+
if "(" in keyword and "(artist)" not in keyword and "(style)" not in keyword:
|
| 496 |
+
start = keyword.find("(") + 1
|
| 497 |
+
end = keyword.find(")")
|
| 498 |
+
if start < end and keyword[start:end] in current_deep_search_keywords:
|
| 499 |
+
valid_keywords.append(keyword)
|
| 500 |
+
for keyword in valid_keywords:
|
| 501 |
+
if keyword in temp_first_keywords:
|
| 502 |
+
temp_first_keywords.remove(keyword)
|
| 503 |
+
girl_index = next((i for i, k in enumerate(temp_first_keywords) if 'girl' in k), None)
|
| 504 |
+
if girl_index is not None:
|
| 505 |
+
for keyword in valid_keywords:
|
| 506 |
+
temp_first_keywords.insert(girl_index + 1, keyword)
|
| 507 |
+
girl_index += 1
|
| 508 |
+
# κ²°κ³Ό μΆλ ₯
|
| 509 |
+
print(temp_first_keywords)
|
| 510 |
|
| 511 |
#last_selected_row_keywords =boy_keywords + girl_keywords[:0] + random_row_keywords
|
| 512 |
#print("3 :", temp_first_keywords)
|
|
|
|
| 585 |
tprint("Stopping pipelines ... ")
|
| 586 |
|
| 587 |
def exit_program():
|
| 588 |
+
global stop_event, auto_thread
|
| 589 |
+
if stop_event is not None:
|
| 590 |
+
stop_event.set()
|
| 591 |
+
if auto_thread is not None and auto_thread.is_alive():
|
| 592 |
+
auto_thread.join() # μ€λ λκ° μ’
λ£λ λκΉμ§ κΈ°λ€λ¦Ό
|
| 593 |
window.destroy()
|
| 594 |
|
| 595 |
def save_settings():
|
|
|
|
| 875 |
global access_token_multi, NAI_width, NAI_height
|
| 876 |
global button_stop, running_flag
|
| 877 |
|
| 878 |
+
def run_function():
|
| 879 |
+
time.sleep(1)
|
| 880 |
+
random_function()
|
| 881 |
+
time.sleep(2)
|
| 882 |
+
window.event_generate(GENERATE_EVENT, when="tail")
|
| 883 |
+
|
| 884 |
pretest = text_output.get("1.0", tk.END).split(', ')
|
| 885 |
if (turbo_var.get() == 1):
|
| 886 |
if ( 'sex' not in pretest or '1girl' not in pretest or '1boy' not in pretest):
|
| 887 |
+
tprint('λΆμ€νΈ κΈ°λ₯μ 1girl, 1boy, sex μΈκ°μ§ ν€μλκ° μμ΄μΌ λμν©λλ€.','color=red')
|
| 888 |
+
if not mac_var.get():
|
| 889 |
+
button.config(state='normal')
|
| 890 |
+
return
|
| 891 |
+
else:
|
| 892 |
+
thread = threading.Thread(target=run_function)
|
| 893 |
+
thread.start()
|
| 894 |
+
return
|
| 895 |
|
| 896 |
if(rand_resolution_var.get() == 1):
|
| 897 |
resolutions = ["1024 x 1024", "960 x 1088", "896 x 1152", "832 x 1216", "1088 x 960", "1152 x 896", "1216 x 832"]
|
|
|
|
| 910 |
if os.path.exists('token.txt'):
|
| 911 |
with open('token.txt', 'r', encoding='utf-8') as f:
|
| 912 |
tokens = f.readlines()
|
| 913 |
+
if(tokens[0]):
|
| 914 |
+
access_token = tokens[0].strip()
|
| 915 |
+
tprint("1 Account automatically loaded : ",access_token[-5:])
|
| 916 |
+
try:
|
| 917 |
+
if(len(tokens)>=2):
|
| 918 |
+
access_token_multi = tokens[1].strip()
|
| 919 |
+
tprint("2 Account automatically loaded : ",access_token[-5:]+", "+access_token_multi[-5:])
|
| 920 |
+
except:
|
| 921 |
+
access_token_multi = None
|
| 922 |
if(access_token): button_generate.config(state='normal')
|
| 923 |
|
| 924 |
def NAI_generation_normal(width, height, button):
|
| 925 |
button.config(state=tk.DISABLED)
|
| 926 |
positive = text_output.get("1.0", tk.END)
|
| 927 |
negative = negative_text.get("1.0", "end-1c").strip()
|
| 928 |
+
global auto_count_left_flag, auto_count_left
|
| 929 |
+
if(auto_count_left_flag and auto_count_left > 0):
|
| 930 |
+
auto_count_left -= 1
|
| 931 |
thread = threading.Thread(target=generate, args=(width, height, positive, negative, button))
|
| 932 |
thread.start()
|
| 933 |
|
|
|
|
| 936 |
button.config(state=tk.DISABLED)
|
| 937 |
positive = text_output.get("1.0", tk.END)
|
| 938 |
negative = negative_text.get("1.0", "end-1c").strip()
|
|
|
|
| 939 |
|
| 940 |
def SELECT(positive):
|
| 941 |
lines = positive[:25]
|
|
|
|
| 1117 |
sleep2 = sleep1 + random.uniform(13.5,19.5)
|
| 1118 |
sleep3 = sleep2 + random.uniform(13.5,19.5)
|
| 1119 |
|
| 1120 |
+
global auto_count_left_flag, auto_count_left, turbo_stop_bit
|
| 1121 |
+
if(auto_count_left_flag and auto_count_left > 0):
|
| 1122 |
+
auto_count_left -= 5
|
| 1123 |
thread_init = threading.Thread(target=generate_turbo, args=(seed,turbo_count, access_token, width, height, positive, negative, button, 0, 0))
|
| 1124 |
thread_init.start()
|
| 1125 |
thread0 = threading.Thread(target=generate_turbo, args=(seed,turbo_count, access_token, width, height, positive0, negative, button, 1, sleep0))
|
|
|
|
| 1205 |
|
| 1206 |
return new_image
|
| 1207 |
|
| 1208 |
+
def insert_queue(i, _number, turbo_count):
|
| 1209 |
global image_queue, temp_clipboard_image
|
| 1210 |
while len(image_queue) < 4: image_queue.append(None)
|
| 1211 |
if _number <= 4:
|
|
|
|
| 1221 |
globals()['tk_image'] = None
|
| 1222 |
tk_image = ImageTk.PhotoImage(i_resized)
|
| 1223 |
image_label.config(image=tk_image)
|
| 1224 |
+
image_label.original_image = i.copy()
|
| 1225 |
image_label.image = tk_image # μ°Έμ‘° μ μ§
|
| 1226 |
if all(img is not None for img in image_queue):
|
| 1227 |
time.sleep(5)
|
| 1228 |
merged_image = merge_images(image_queue)
|
| 1229 |
temp_clipboard_image = merged_image.copy()
|
| 1230 |
if merged_image is not None:
|
| 1231 |
+
output_directory = Path(f"output_NAI/{start_time}/turbo/grid")
|
| 1232 |
+
output_directory.mkdir(parents=True, exist_ok=True)
|
| 1233 |
+
file_path = output_directory / f"{turbo_count:05}.png"
|
| 1234 |
+
merged_image.save(file_path)
|
| 1235 |
i_resized = resize_and_fill(merged_image)
|
| 1236 |
if 'tk_image' in globals():
|
| 1237 |
globals()['tk_image'] = None
|
| 1238 |
tk_image = ImageTk.PhotoImage(i_resized)
|
| 1239 |
image_label.config(image=tk_image)
|
| 1240 |
+
image_label.original_image = i_resized.copy()
|
| 1241 |
image_label.image = tk_image # μ°Έμ‘° μ μ§
|
| 1242 |
output_file_path = "output_image.jpg"
|
| 1243 |
merged_image.save(output_file_path)
|
|
|
|
| 1285 |
print('containing : ',pipe_number)
|
| 1286 |
|
| 1287 |
running_flag = True
|
| 1288 |
+
tprint("Running : request received, pipeline : "+str(pipe_number))
|
| 1289 |
+
global error_count
|
| 1290 |
try:
|
| 1291 |
zipped_bytes = generate_image(tb_access_token, positive, "nai-diffusion-3", "generate", params)
|
| 1292 |
if(pipe_number != 0):
|
|
|
|
| 1300 |
(d / f"{turbo_count:05}_{pipe_number}.png" ).write_bytes(image_bytes)
|
| 1301 |
i = Image.open(io.BytesIO(image_bytes))
|
| 1302 |
i = ImageOps.exif_transpose(i).convert("RGB")
|
| 1303 |
+
error_count = 0
|
| 1304 |
if(pipe_number != 0):
|
| 1305 |
if temp_clipboard_image is not None:
|
| 1306 |
temp_clipboard_image.close()
|
| 1307 |
if(pipe_number == 1 and len(image_queue) < 4): image_queue.clear()
|
| 1308 |
temp_clipboard_image = i
|
| 1309 |
+
insert_queue(i, pipe_number, turbo_count)
|
| 1310 |
+
tprint("image inserted, pipe number : "+str(pipe_number))
|
| 1311 |
else:
|
| 1312 |
if temp_clipboard_image is not None:
|
| 1313 |
temp_clipboard_image.close()
|
|
|
|
| 1317 |
globals()['tk_image'] = None
|
| 1318 |
tk_image = ImageTk.PhotoImage(i_resized)
|
| 1319 |
image_label.config(image=tk_image)
|
| 1320 |
+
image_label.original_image = i.copy()
|
| 1321 |
image_label.image = tk_image # μ°Έμ‘° μ μ§
|
| 1322 |
except Exception as e:
|
| 1323 |
#text_output.insert(tk.END, f"Error: {e}", fg='red')
|
| 1324 |
+
log_error(zipped_bytes.decode('utf-8')[2:-2], "path_to_output_folder")
|
| 1325 |
+
error_count += 1
|
| 1326 |
+
if error_count > 5:
|
| 1327 |
+
mac_var.set(0)
|
| 1328 |
time.sleep(random.uniform(3.0, 9.0))
|
| 1329 |
+
insert_queue(temp_clipboard_image, pipe_number, turbo_count)
|
| 1330 |
|
| 1331 |
task_finished += 1 #ν°λ³΄ κΈ°λ₯μ μμ μ₯μΉμ
λλ€.
|
| 1332 |
|
|
|
|
| 1337 |
last_generation_seed = params['seed']
|
| 1338 |
entry_seed_value.set(last_generation_seed)
|
| 1339 |
|
| 1340 |
+
global delay_offset
|
| 1341 |
+
time.sleep(delay_offset)
|
| 1342 |
+
|
| 1343 |
stopped = False
|
| 1344 |
if (turbo_stop_bit):
|
| 1345 |
time.sleep(1.5)
|
|
|
|
| 1347 |
button.config(state=tk.NORMAL)
|
| 1348 |
stopped = True
|
| 1349 |
if (pipe_number != 4):
|
| 1350 |
+
tprint("Stopped : request stopped before assign pipeline :"+str(pipe_number+1))
|
| 1351 |
|
| 1352 |
if pipe_number == 4 and mac_var.get():
|
| 1353 |
wait_limit = 0
|
|
|
|
| 1667 |
|
| 1668 |
window.destroy()
|
| 1669 |
|
|
|
|
| 1670 |
def load_wildcard(text_widget, window, _type):
|
| 1671 |
global artist_wildcard_saved, character_wildcard_saved
|
| 1672 |
window.iconify()
|
|
|
|
| 1713 |
|
| 1714 |
def tprint(*args):
|
| 1715 |
ctext = ""
|
| 1716 |
+
color = None
|
| 1717 |
for t in args:
|
| 1718 |
+
if(type(t) is str and 'color=' in t):
|
| 1719 |
+
color = t[6:]
|
| 1720 |
+
else:
|
| 1721 |
+
ctext += str(t)
|
| 1722 |
+
if not color: running_state.config(text=ctext, fg='black')
|
| 1723 |
+
else: running_state.config(text=ctext, fg='red')
|
| 1724 |
+
|
| 1725 |
+
|
| 1726 |
+
def show_automation_option():
|
| 1727 |
+
global auto_thread, stop_event
|
| 1728 |
+
top = tk.Toplevel(window)
|
| 1729 |
+
top.title("Automation Stop Condition")
|
| 1730 |
+
|
| 1731 |
+
global var, timer_label, timer_entry, count_label, count_entry
|
| 1732 |
+
var = tk.StringVar(value="unlimited")
|
| 1733 |
+
|
| 1734 |
+
def show_option():
|
| 1735 |
+
if var.get() == 'timer':
|
| 1736 |
+
timer_label.grid(row=4, column=0)
|
| 1737 |
+
timer_entry.grid(row=4, column=1)
|
| 1738 |
+
count_label.grid_forget()
|
| 1739 |
+
count_entry.grid_forget()
|
| 1740 |
+
elif var.get() == 'count':
|
| 1741 |
+
count_label.grid(row=4, column=0)
|
| 1742 |
+
count_entry.grid(row=4, column=1)
|
| 1743 |
+
timer_label.grid_forget()
|
| 1744 |
+
timer_entry.grid_forget()
|
| 1745 |
+
else:
|
| 1746 |
+
timer_label.grid_forget()
|
| 1747 |
+
timer_entry.grid_forget()
|
| 1748 |
+
count_label.grid_forget()
|
| 1749 |
+
count_entry.grid_forget()
|
| 1750 |
+
|
| 1751 |
+
label_time = tk.Label(top, text="μ΄λ―Έμ§ μμ±λΉ μ§μ°μκ° μΆκ° (μ΄)")
|
| 1752 |
+
label_time.grid(row=0, column=0, columnspan=3)
|
| 1753 |
+
|
| 1754 |
+
delay_entry = tk.Entry(top)
|
| 1755 |
+
delay_entry.grid(row=1, column=0, columnspan=3)
|
| 1756 |
+
|
| 1757 |
+
label = tk.Label(top, text="μλν μ’
λ£ μ‘°κ±΄")
|
| 1758 |
+
label.grid(row=2, column=0, columnspan=3)
|
| 1759 |
+
|
| 1760 |
+
radio1 = tk.Radiobutton(top, text="무μ ν", variable=var, value="unlimited", command=show_option)
|
| 1761 |
+
radio1.grid(row=3, column=0)
|
| 1762 |
+
|
| 1763 |
+
radio2 = tk.Radiobutton(top, text="νμ΄λ¨Έ", variable=var, value="timer", command=show_option)
|
| 1764 |
+
radio2.grid(row=3, column=1)
|
| 1765 |
+
|
| 1766 |
+
radio3 = tk.Radiobutton(top, text="μμ± μΉ΄μ΄νΈ", variable=var, value="count", command=show_option)
|
| 1767 |
+
radio3.grid(row=3, column=2)
|
| 1768 |
+
|
| 1769 |
+
timer_label = tk.Label(top, text="μλν λμ μκ°(λΆ) :")
|
| 1770 |
+
timer_entry = tk.Entry(top)
|
| 1771 |
+
|
| 1772 |
+
count_label = tk.Label(top, text="μλ μμ± νμ:")
|
| 1773 |
+
count_entry = tk.Entry(top)
|
| 1774 |
+
|
| 1775 |
+
# "A.μ€μ " μ°½μμ λ²νΌ ν΄λ¦ μ΄λ²€νΈ μ²λ¦¬
|
| 1776 |
+
def on_apply(top):
|
| 1777 |
+
global auto_time_left_flag, auto_time_left, auto_count_left_flag, auto_count_left, delay_offset, delay_offset_label
|
| 1778 |
+
|
| 1779 |
+
selected_option = var.get()
|
| 1780 |
+
if delay_entry.get():
|
| 1781 |
+
try:
|
| 1782 |
+
delay_offset = round(float(delay_entry.get()), 1)
|
| 1783 |
+
delay_offset_label.config(text="Dealy offset : "+str(delay_offset))
|
| 1784 |
+
except ValueError as e:
|
| 1785 |
+
print(e)
|
| 1786 |
+
delay_offset = 0
|
| 1787 |
+
else:
|
| 1788 |
+
delay_offset = 0
|
| 1789 |
+
delay_offset_label.config(text="")
|
| 1790 |
+
if selected_option == "timer":
|
| 1791 |
+
auto_time_left_flag = True
|
| 1792 |
+
auto_count_left_flag = False
|
| 1793 |
+
try:
|
| 1794 |
+
# μνΈλ¦¬μμ μ
λ ₯λ μκ°μ λΆ λ¨μμμ μ΄ λ¨μλ‘ λ³ν
|
| 1795 |
+
auto_time_left = int(timer_entry.get()) * 60
|
| 1796 |
+
except ValueError:
|
| 1797 |
+
# μλͺ»λ μ
λ ₯ μ²λ¦¬
|
| 1798 |
+
print("Invalid input for timer. Please enter a number.")
|
| 1799 |
+
return
|
| 1800 |
+
elif selected_option == "count":
|
| 1801 |
+
auto_count_left_flag = True
|
| 1802 |
+
auto_time_left_flag = False
|
| 1803 |
+
try:
|
| 1804 |
+
auto_count_left = int(count_entry.get())
|
| 1805 |
+
except ValueError:
|
| 1806 |
+
# μλͺ»λ μ
λ ₯ μ²λ¦¬
|
| 1807 |
+
print("Invalid input for count. Please enter a number.")
|
| 1808 |
+
return
|
| 1809 |
+
else:
|
| 1810 |
+
auto_time_left_flag = False
|
| 1811 |
+
auto_count_left_flag = False
|
| 1812 |
+
stop_auto_thread() # μ΄μ μ€λ λ μ’
λ£
|
| 1813 |
+
start_auto_thread() # μ μ€λ λ μμ
|
| 1814 |
+
mac_var.set(1)
|
| 1815 |
+
top.destroy()
|
| 1816 |
+
|
| 1817 |
+
apply_button = tk.Button(top, text="μ μ©", command=lambda: on_apply(top))
|
| 1818 |
+
stop_button = tk.Button(top, text="μ€λ¨", command=on_stop)
|
| 1819 |
+
close_button = tk.Button(top, text="λ«κΈ°", command=top.destroy)
|
| 1820 |
+
|
| 1821 |
+
apply_button.grid(row=5, column=0, pady=5)
|
| 1822 |
+
stop_button.grid(row=5, column=1, pady=5)
|
| 1823 |
+
close_button.grid(row=5, column=2, pady=5)
|
| 1824 |
+
|
| 1825 |
+
def auto_time_thread(stop_event):
|
| 1826 |
+
global auto_time_left, auto_time_left_flag
|
| 1827 |
+
|
| 1828 |
+
def seconds_to_hms(seconds):
|
| 1829 |
+
h = seconds // 3600
|
| 1830 |
+
m = (seconds % 3600) // 60
|
| 1831 |
+
s = seconds % 60
|
| 1832 |
+
return f"{h:02d}:{m:02d}:{s:02d}"
|
| 1833 |
+
|
| 1834 |
+
def update_label_for_time_finished():
|
| 1835 |
+
automation_state.config(text="μ§μ ν μκ°μ΄ λͺ¨λ μμ§λμ΄ μλνκ° μ’
λ£λμμ΅λλ€.")
|
| 1836 |
+
auto_time_left_flag = False
|
| 1837 |
+
mac_var.set(0)
|
| 1838 |
+
|
| 1839 |
+
while not stop_event.is_set() and auto_time_left > 0:
|
| 1840 |
+
time.sleep(1)
|
| 1841 |
+
auto_time_left -= 1
|
| 1842 |
+
remaining_time = seconds_to_hms(auto_time_left)
|
| 1843 |
+
window.after(0, lambda: automation_state.config(text=f"μλν λ¨μμκ° : {remaining_time}"))
|
| 1844 |
+
|
| 1845 |
+
if auto_time_left <= 0:
|
| 1846 |
+
window.after(0, update_label_for_time_finished)
|
| 1847 |
+
|
| 1848 |
+
if stop_event.is_set():
|
| 1849 |
+
window.after(0, lambda: automation_state.config(text="Conditional automation not set (A.μ€μ )"))
|
| 1850 |
+
auto_time_left_flag = False
|
| 1851 |
+
|
| 1852 |
+
def auto_count_thread(stop_event):
|
| 1853 |
+
global auto_count_left, auto_count_left_flag
|
| 1854 |
+
|
| 1855 |
+
def update_label_for_count_finished():
|
| 1856 |
+
mac_var.set(0) # μλν μ’
λ£ μ‘°κ±΄ μΆ©μ‘±
|
| 1857 |
+
auto_count_left_flag = False
|
| 1858 |
+
automation_state.config(text="μ§μ ν νμκ° λͺ¨λ μμ§λμ΄ μλνκ° μ’
λ£λμμ΅λλ€.")
|
| 1859 |
+
|
| 1860 |
+
while not stop_event.is_set():
|
| 1861 |
+
time.sleep(1) # μ£ΌκΈ°μ μΌλ‘ νμΈ
|
| 1862 |
+
window.after(0, lambda: automation_state.config(text=f"μλν λ¨μνμ : {auto_count_left}"))
|
| 1863 |
+
if auto_count_left <= 0:
|
| 1864 |
+
window.after(0, update_label_for_count_finished)
|
| 1865 |
+
break # 루ν νμΆ
|
| 1866 |
+
if stop_event.is_set():
|
| 1867 |
+
window.after(0, lambda: automation_state.config(text="Conditional automation not set (A.μ€μ )"))
|
| 1868 |
+
mac_var.set(0)
|
| 1869 |
+
auto_count_left_flag = False
|
| 1870 |
+
|
| 1871 |
+
# μ€λ λ μμ λ° μ’
λ£ ν¨μ
|
| 1872 |
+
def start_auto_thread():
|
| 1873 |
+
global auto_thread, stop_event
|
| 1874 |
+
stop_event = threading.Event()
|
| 1875 |
+
auto_thread = None
|
| 1876 |
+
|
| 1877 |
+
if auto_time_left_flag:
|
| 1878 |
+
auto_thread = threading.Thread(target=auto_time_thread, args=(stop_event,))
|
| 1879 |
+
elif auto_count_left_flag:
|
| 1880 |
+
auto_thread = threading.Thread(target=auto_count_thread, args=(stop_event,))
|
| 1881 |
+
|
| 1882 |
+
if auto_thread is not None:
|
| 1883 |
+
auto_thread.start()
|
| 1884 |
+
|
| 1885 |
+
def stop_auto_thread():
|
| 1886 |
+
global stop_event, auto_thread
|
| 1887 |
+
if stop_event is not None:
|
| 1888 |
+
stop_event.set()
|
| 1889 |
+
#if auto_thread is not None and auto_thread.is_alive():
|
| 1890 |
+
# auto_thread.join()
|
| 1891 |
+
|
| 1892 |
+
def on_stop():
|
| 1893 |
+
global auto_thread, stop_event
|
| 1894 |
+
stop_auto_thread() # μ€λ λ μ’
λ£
|
| 1895 |
|
| 1896 |
def on_hold_seed_button_click():
|
| 1897 |
global last_generation_seed
|
| 1898 |
+
last_generation_seed = entry_seed_value.get()
|
| 1899 |
+
|
| 1900 |
+
def update_fullscreen_image(new_window, new_image_label):
|
| 1901 |
+
last_updated_image = None
|
| 1902 |
+
while True:
|
| 1903 |
+
time.sleep(1)
|
| 1904 |
+
if not new_window.winfo_exists():
|
| 1905 |
+
break
|
| 1906 |
+
try:
|
| 1907 |
+
current_image = getattr(image_label, 'original_image', None)
|
| 1908 |
+
if current_image and current_image != last_updated_image:
|
| 1909 |
+
resized_image = resize_image_to_fit(current_image, new_window.winfo_height())
|
| 1910 |
+
tk_image = ImageTk.PhotoImage(resized_image)
|
| 1911 |
+
new_window.after(0, lambda img=tk_image: new_image_label.config(image=img))
|
| 1912 |
+
new_image_label.image = tk_image
|
| 1913 |
+
last_updated_image = current_image
|
| 1914 |
+
except ValueError:
|
| 1915 |
+
print(ValueError)
|
| 1916 |
+
|
| 1917 |
+
def show_fullscreen_image():
|
| 1918 |
+
new_window = tk.Toplevel()
|
| 1919 |
+
new_window.attributes('-fullscreen', True)
|
| 1920 |
+
new_window.configure(bg='black')
|
| 1921 |
+
|
| 1922 |
+
new_image_label = tk.Label(new_window, relief='solid', borderwidth=1, bg='black')
|
| 1923 |
+
new_image_label.pack(expand=True, fill='both')
|
| 1924 |
+
new_window.bind("<Escape>", lambda e: new_window.destroy())
|
| 1925 |
+
|
| 1926 |
+
update_thread = threading.Thread(target=update_fullscreen_image, args=(new_window, new_image_label))
|
| 1927 |
+
update_thread.daemon = True
|
| 1928 |
+
update_thread.start()
|
| 1929 |
+
|
| 1930 |
+
def resize_image_to_fit(image, target_height):
|
| 1931 |
+
original_width, original_height = image.size
|
| 1932 |
+
|
| 1933 |
+
ratio = target_height / float(original_height)
|
| 1934 |
+
new_width = int(original_width * ratio)
|
| 1935 |
+
|
| 1936 |
+
resized_image = image.resize((new_width, target_height), Image.Resampling.LANCZOS)
|
| 1937 |
+
return resized_image
|
| 1938 |
+
|
| 1939 |
+
auto_time_left_flag = False
|
| 1940 |
+
auto_time_left = 0
|
| 1941 |
+
auto_count_left_flag = False
|
| 1942 |
+
auto_count_left = 0
|
| 1943 |
+
stop_event = None
|
| 1944 |
+
auto_thread = None
|
| 1945 |
+
delay_offset = 0
|
| 1946 |
|
| 1947 |
start_time = datetime.now().strftime('%Y%m%d_%H%M')
|
| 1948 |
thread_controller = False
|
|
|
|
| 1977 |
last_generation_seed = random.randint(0,9999999999)
|
| 1978 |
turbo_stop_bit = False
|
| 1979 |
task_finished = 0
|
| 1980 |
+
error_count = 0
|
| 1981 |
+
multi_token_enable = False
|
| 1982 |
|
| 1983 |
whitelist = wlist.whitelist
|
| 1984 |
bag_of_tags = tagbag.bag_of_tags
|
|
|
|
| 2097 |
button_stop.config(state='disabled')
|
| 2098 |
|
| 2099 |
# "μ€μ " λ²νΌ
|
| 2100 |
+
button_setting = tk.Button(button_frame, text="NAI μ€μ ", command=lambda: NAI_setting(button_setting, button_generate))
|
| 2101 |
button_setting.grid(row=0, column=6, sticky='ew')
|
| 2102 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2103 |
# 'μλν'μ 'ν°λ³΄on'μ ν¬ν¨ν μλΈ νλ μ μμ±
|
| 2104 |
sub_frame = tk.Frame(button_frame)
|
| 2105 |
+
sub_frame.grid(row=0, column=7, sticky='ns') # μλΈ νλ μμ μ΄ 8μ λ°°μΉ
|
| 2106 |
|
| 2107 |
# 'μλν' 체ν¬λ°μ€λ₯Ό μλΈ νλ μμ λ°°μΉ
|
| 2108 |
mac_var = tk.IntVar()
|
|
|
|
| 2114 |
turbo_button = tk.Checkbutton(sub_frame, text="ν°λ³΄on", variable=turbo_var)
|
| 2115 |
turbo_button.grid(row=1, column=0, sticky='ew') # λ λ²μ§Έ νμ λ°°μΉ
|
| 2116 |
|
| 2117 |
+
# "A.μ€μ " λ²νΌ
|
| 2118 |
+
button_auto_setting = tk.Button(button_frame, text="A.μ€μ ", command=show_automation_option)
|
| 2119 |
+
button_auto_setting.grid(row=0, column=8, sticky='ew')
|
| 2120 |
+
|
| 2121 |
# ν
μ€νΈ λ° κ³ μ ν둬ννΈ λ€κ±°ν°λΈ λ± ν둬ννΈ μ°½
|
| 2122 |
text_frame = tk.Frame(left_frame)
|
| 2123 |
text_frame.grid(row=6, column=0, padx=5, pady=5, sticky='w')
|
|
|
|
| 2286 |
|
| 2287 |
running_state = tk.Label(resolution3_frame, text="state : idle")
|
| 2288 |
running_state.grid(row = 0, column= 0, sticky='w')
|
| 2289 |
+
automation_state = tk.Label(resolution3_frame, text="Conditional automation not set (A.μ€μ )")
|
| 2290 |
+
automation_state.grid(row = 1, column= 0, sticky='w')
|
| 2291 |
+
delay_offset_label = tk.Label(resolution3_frame, text="Dealy offset : "+str(delay_offset))
|
| 2292 |
+
delay_offset_label.grid(row = 1, column= 1, sticky='e')
|
| 2293 |
entry_rescale_value = tk.StringVar()
|
| 2294 |
entry_rescale_label = tk.Label(resolution3_frame, text=" Prompt Guidance Rescale : ", justify=tk.LEFT)
|
| 2295 |
entry_rescale_label.grid(row=0, column=1, sticky='e')
|
|
|
|
| 2315 |
btn_add_low_freq = tk.Button(right_frame_area16, text="μ΄λ―Έμ§λ₯Ό ν΄λ¦½λ³΄λμ 볡μ¬", fg="blue", command=copy_image_to_clipboard)
|
| 2316 |
btn_add_low_freq.grid(row=0, column=3, padx=5, pady=5, sticky='ew')
|
| 2317 |
|
| 2318 |
+
show_fullscreen_btn = tk.Button(right_frame_area16, text="μ 체νλ©΄ 보기 (ESCλ‘ λ«κΈ°)", command=show_fullscreen_image)
|
| 2319 |
+
show_fullscreen_btn.grid(row=0, column=4, padx=5, pady=5, sticky='ew')
|
| 2320 |
+
|
| 2321 |
# νμμ μ΄λ―Έμ§ μμ±
|
| 2322 |
white_image = Image.new('RGB', (_size, _size), 'white')
|
| 2323 |
white_photo = ImageTk.PhotoImage(white_image)
|
|
|
|
| 2336 |
|
| 2337 |
Auto_login_check()
|
| 2338 |
|
| 2339 |
+
window.protocol("WM_DELETE_WINDOW", exit_program)
|
| 2340 |
window.mainloop()
|