b0121c83147577eb9727fe7ff6d755f7783afc96fc1f4bc321fe4afa32077ef2
Browse files
javascript/token-counters.js
ADDED
@@ -0,0 +1,83 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
let promptTokenCountDebounceTime = 800;
|
2 |
+
let promptTokenCountTimeouts = {};
|
3 |
+
var promptTokenCountUpdateFunctions = {};
|
4 |
+
|
5 |
+
function update_txt2img_tokens(...args) {
|
6 |
+
// Called from Gradio
|
7 |
+
update_token_counter("txt2img_token_button");
|
8 |
+
if (args.length == 2) {
|
9 |
+
return args[0];
|
10 |
+
}
|
11 |
+
return args;
|
12 |
+
}
|
13 |
+
|
14 |
+
function update_img2img_tokens(...args) {
|
15 |
+
// Called from Gradio
|
16 |
+
update_token_counter("img2img_token_button");
|
17 |
+
if (args.length == 2) {
|
18 |
+
return args[0];
|
19 |
+
}
|
20 |
+
return args;
|
21 |
+
}
|
22 |
+
|
23 |
+
function update_token_counter(button_id) {
|
24 |
+
if (opts.disable_token_counters) {
|
25 |
+
return;
|
26 |
+
}
|
27 |
+
if (promptTokenCountTimeouts[button_id]) {
|
28 |
+
clearTimeout(promptTokenCountTimeouts[button_id]);
|
29 |
+
}
|
30 |
+
promptTokenCountTimeouts[button_id] = setTimeout(
|
31 |
+
() => gradioApp().getElementById(button_id)?.click(),
|
32 |
+
promptTokenCountDebounceTime,
|
33 |
+
);
|
34 |
+
}
|
35 |
+
|
36 |
+
|
37 |
+
function recalculatePromptTokens(name) {
|
38 |
+
promptTokenCountUpdateFunctions[name]?.();
|
39 |
+
}
|
40 |
+
|
41 |
+
function recalculate_prompts_txt2img() {
|
42 |
+
// Called from Gradio
|
43 |
+
recalculatePromptTokens('txt2img_prompt');
|
44 |
+
recalculatePromptTokens('txt2img_neg_prompt');
|
45 |
+
return Array.from(arguments);
|
46 |
+
}
|
47 |
+
|
48 |
+
function recalculate_prompts_img2img() {
|
49 |
+
// Called from Gradio
|
50 |
+
recalculatePromptTokens('img2img_prompt');
|
51 |
+
recalculatePromptTokens('img2img_neg_prompt');
|
52 |
+
return Array.from(arguments);
|
53 |
+
}
|
54 |
+
|
55 |
+
function setupTokenCounting(id, id_counter, id_button) {
|
56 |
+
var prompt = gradioApp().getElementById(id);
|
57 |
+
var counter = gradioApp().getElementById(id_counter);
|
58 |
+
var textarea = gradioApp().querySelector(`#${id} > label > textarea`);
|
59 |
+
|
60 |
+
if (opts.disable_token_counters) {
|
61 |
+
counter.style.display = "none";
|
62 |
+
return;
|
63 |
+
}
|
64 |
+
|
65 |
+
if (counter.parentElement == prompt.parentElement) {
|
66 |
+
return;
|
67 |
+
}
|
68 |
+
|
69 |
+
prompt.parentElement.insertBefore(counter, prompt);
|
70 |
+
prompt.parentElement.style.position = "relative";
|
71 |
+
|
72 |
+
promptTokenCountUpdateFunctions[id] = function() {
|
73 |
+
update_token_counter(id_button);
|
74 |
+
};
|
75 |
+
textarea.addEventListener("input", promptTokenCountUpdateFunctions[id]);
|
76 |
+
}
|
77 |
+
|
78 |
+
function setupTokenCounters() {
|
79 |
+
setupTokenCounting('txt2img_prompt', 'txt2img_token_counter', 'txt2img_token_button');
|
80 |
+
setupTokenCounting('txt2img_neg_prompt', 'txt2img_negative_token_counter', 'txt2img_negative_token_button');
|
81 |
+
setupTokenCounting('img2img_prompt', 'img2img_token_counter', 'img2img_token_button');
|
82 |
+
setupTokenCounting('img2img_neg_prompt', 'img2img_negative_token_counter', 'img2img_negative_token_button');
|
83 |
+
}
|
javascript/ui.js
ADDED
@@ -0,0 +1,2041 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
function set_theme(theme) {
|
2 |
+
/*
|
3 |
+
var gradioURL = window.location.href;
|
4 |
+
if (!gradioURL.includes('?__theme=')) {
|
5 |
+
window.location.replace(gradioURL + '?__theme=' + theme);
|
6 |
+
}
|
7 |
+
*/
|
8 |
+
}
|
9 |
+
|
10 |
+
var selectedTabItemId = "tab_txt2img";
|
11 |
+
|
12 |
+
function all_gallery_buttons() {
|
13 |
+
var allGalleryButtons = gradioApp().querySelectorAll('[style="display: block;"].tabitem div[id$=_gallery].gradio-gallery .thumbnails > .thumbnail-item.thumbnail-small');
|
14 |
+
var visibleGalleryButtons = [];
|
15 |
+
allGalleryButtons.forEach(function(elem) {
|
16 |
+
if (elem.parentElement.offsetParent) {
|
17 |
+
visibleGalleryButtons.push(elem);
|
18 |
+
}
|
19 |
+
});
|
20 |
+
return visibleGalleryButtons;
|
21 |
+
}
|
22 |
+
|
23 |
+
function selected_gallery_button() {
|
24 |
+
var allCurrentButtons = gradioApp().querySelectorAll('[style="display: block;"].tabitem div[id$=_gallery].gradio-gallery .thumbnail-item.thumbnail-small.selected');
|
25 |
+
var visibleCurrentButton = null;
|
26 |
+
allCurrentButtons.forEach(function(elem) {
|
27 |
+
if (elem.parentElement.offsetParent) {
|
28 |
+
visibleCurrentButton = elem;
|
29 |
+
}
|
30 |
+
});
|
31 |
+
return visibleCurrentButton;
|
32 |
+
}
|
33 |
+
|
34 |
+
function selected_gallery_index() {
|
35 |
+
var buttons = all_gallery_buttons();
|
36 |
+
var button = selected_gallery_button();
|
37 |
+
|
38 |
+
var result = -1;
|
39 |
+
buttons.forEach(function(v, i) {
|
40 |
+
if (v == button) {
|
41 |
+
result = i;
|
42 |
+
}
|
43 |
+
});
|
44 |
+
|
45 |
+
return result;
|
46 |
+
}
|
47 |
+
|
48 |
+
function extract_image_from_gallery(gallery) {
|
49 |
+
if (gallery.length == 0) {
|
50 |
+
return [null];
|
51 |
+
}
|
52 |
+
if (gallery.length == 1) {
|
53 |
+
return [gallery[0]];
|
54 |
+
}
|
55 |
+
|
56 |
+
var index = selected_gallery_index();
|
57 |
+
|
58 |
+
if (index < 0 || index >= gallery.length) {
|
59 |
+
// Use the first image in the gallery as the default
|
60 |
+
index = 0;
|
61 |
+
}
|
62 |
+
|
63 |
+
return [gallery[index]];
|
64 |
+
}
|
65 |
+
|
66 |
+
window.args_to_array = Array.from; // Compatibility with e.g. extensions that may expect this to be around
|
67 |
+
|
68 |
+
function switch_to_txt2img() {
|
69 |
+
gradioApp().querySelector('#tabs').querySelectorAll('button')[0].click();
|
70 |
+
|
71 |
+
return Array.from(arguments);
|
72 |
+
}
|
73 |
+
|
74 |
+
function switch_to_img2img_tab(no) {
|
75 |
+
gradioApp().querySelector('#tabs').querySelectorAll('button')[1].click();
|
76 |
+
gradioApp().getElementById('mode_img2img').querySelectorAll('button')[no].click();
|
77 |
+
}
|
78 |
+
function switch_to_img2img() {
|
79 |
+
switch_to_img2img_tab(0);
|
80 |
+
return Array.from(arguments);
|
81 |
+
}
|
82 |
+
|
83 |
+
function switch_to_sketch() {
|
84 |
+
switch_to_img2img_tab(1);
|
85 |
+
return Array.from(arguments);
|
86 |
+
}
|
87 |
+
|
88 |
+
function switch_to_inpaint() {
|
89 |
+
switch_to_img2img_tab(2);
|
90 |
+
return Array.from(arguments);
|
91 |
+
}
|
92 |
+
|
93 |
+
function switch_to_inpaint_sketch() {
|
94 |
+
switch_to_img2img_tab(3);
|
95 |
+
return Array.from(arguments);
|
96 |
+
}
|
97 |
+
|
98 |
+
function switch_to_extras() {
|
99 |
+
gradioApp().querySelector('#tabs').querySelectorAll('button')[2].click();
|
100 |
+
|
101 |
+
return Array.from(arguments);
|
102 |
+
}
|
103 |
+
|
104 |
+
function get_tab_index(tabId) {
|
105 |
+
let buttons = gradioApp().getElementById(tabId).querySelector('div').querySelectorAll('button');
|
106 |
+
for (let i = 0; i < buttons.length; i++) {
|
107 |
+
if (buttons[i].classList.contains('selected')) {
|
108 |
+
return i;
|
109 |
+
}
|
110 |
+
}
|
111 |
+
return 0;
|
112 |
+
}
|
113 |
+
|
114 |
+
function create_tab_index_args(tabId, args) {
|
115 |
+
var res = Array.from(args);
|
116 |
+
res[0] = get_tab_index(tabId);
|
117 |
+
return res;
|
118 |
+
}
|
119 |
+
|
120 |
+
function get_img2img_tab_index() {
|
121 |
+
let res = Array.from(arguments);
|
122 |
+
res.splice(-2);
|
123 |
+
res[0] = get_tab_index('mode_img2img');
|
124 |
+
return res;
|
125 |
+
}
|
126 |
+
|
127 |
+
function create_submit_args(args) {
|
128 |
+
var res = Array.from(args);
|
129 |
+
|
130 |
+
// As it is currently, txt2img and img2img send back the previous output args (txt2img_gallery, generation_info, html_info) whenever you generate a new image.
|
131 |
+
// This can lead to uploading a huge gallery of previously generated images, which leads to an unnecessary delay between submitting and beginning to generate.
|
132 |
+
// I don't know why gradio is sending outputs along with inputs, but we can prevent sending the image gallery here, which seems to be an issue for some.
|
133 |
+
// If gradio at some point stops sending outputs, this may break something
|
134 |
+
if (Array.isArray(res[res.length - 3])) {
|
135 |
+
res[res.length - 3] = null;
|
136 |
+
}
|
137 |
+
|
138 |
+
return res;
|
139 |
+
}
|
140 |
+
|
141 |
+
function showSubmitButtons(tabname, show) {
|
142 |
+
gradioApp().getElementById(tabname + "_interrupt").style.display = show ? "none" : "flex";
|
143 |
+
gradioApp().getElementById(tabname + "_skip").style.display = show ? "none" : "flex";
|
144 |
+
gradioApp().getElementById(tabname + "_generate").style.display = !show ? "none" : "flex";
|
145 |
+
}
|
146 |
+
|
147 |
+
function showRestoreProgressButton(tabname, show) {
|
148 |
+
var button = gradioApp().getElementById(tabname + "_restore_progress");
|
149 |
+
if (!button) return;
|
150 |
+
|
151 |
+
button.style.display = show ? "flex" : "none";
|
152 |
+
}
|
153 |
+
|
154 |
+
|
155 |
+
function submit() {
|
156 |
+
showSubmitButtons('txt2img', false);
|
157 |
+
|
158 |
+
var id = randomId();
|
159 |
+
localStorage.setItem("txt2img_task_id", id);
|
160 |
+
|
161 |
+
requestProgress(id, gradioApp().getElementById('txt2img_gallery_container'), gradioApp().getElementById('txt2img_gallery'), function() {
|
162 |
+
showSubmitButtons('txt2img', true);
|
163 |
+
localStorage.removeItem("txt2img_task_id");
|
164 |
+
showRestoreProgressButton('txt2img', false);
|
165 |
+
});
|
166 |
+
|
167 |
+
var res = create_submit_args(arguments);
|
168 |
+
|
169 |
+
res[0] = id;
|
170 |
+
|
171 |
+
return res;
|
172 |
+
}
|
173 |
+
|
174 |
+
function submit_img2img() {
|
175 |
+
showSubmitButtons('img2img', false);
|
176 |
+
|
177 |
+
var id = randomId();
|
178 |
+
localStorage.setItem("img2img_task_id", id);
|
179 |
+
|
180 |
+
requestProgress(id, gradioApp().getElementById('img2img_gallery_container'), gradioApp().getElementById('img2img_gallery'), function() {
|
181 |
+
showSubmitButtons('img2img', true);
|
182 |
+
localStorage.removeItem("img2img_task_id");
|
183 |
+
showRestoreProgressButton('img2img', false);
|
184 |
+
});
|
185 |
+
|
186 |
+
var res = create_submit_args(arguments);
|
187 |
+
|
188 |
+
res[0] = id;
|
189 |
+
res[1] = get_tab_index('mode_img2img');
|
190 |
+
|
191 |
+
return res;
|
192 |
+
}
|
193 |
+
|
194 |
+
function restoreProgressTxt2img() {
|
195 |
+
showRestoreProgressButton("txt2img", false);
|
196 |
+
var id = localStorage.getItem("txt2img_task_id");
|
197 |
+
|
198 |
+
id = localStorage.getItem("txt2img_task_id");
|
199 |
+
|
200 |
+
if (id) {
|
201 |
+
requestProgress(id, gradioApp().getElementById('txt2img_gallery_container'), gradioApp().getElementById('txt2img_gallery'), function() {
|
202 |
+
showSubmitButtons('txt2img', true);
|
203 |
+
}, null, 0);
|
204 |
+
}
|
205 |
+
|
206 |
+
return id;
|
207 |
+
}
|
208 |
+
|
209 |
+
function restoreProgressImg2img() {
|
210 |
+
showRestoreProgressButton("img2img", false);
|
211 |
+
|
212 |
+
var id = localStorage.getItem("img2img_task_id");
|
213 |
+
|
214 |
+
if (id) {
|
215 |
+
requestProgress(id, gradioApp().getElementById('img2img_gallery_container'), gradioApp().getElementById('img2img_gallery'), function() {
|
216 |
+
showSubmitButtons('img2img', true);
|
217 |
+
}, null, 0);
|
218 |
+
}
|
219 |
+
|
220 |
+
return id;
|
221 |
+
}
|
222 |
+
|
223 |
+
onUiLoaded(function() {
|
224 |
+
showRestoreProgressButton('txt2img', localStorage.getItem("txt2img_task_id"));
|
225 |
+
showRestoreProgressButton('img2img', localStorage.getItem("img2img_task_id"));
|
226 |
+
});
|
227 |
+
|
228 |
+
|
229 |
+
function modelmerger() {
|
230 |
+
var id = randomId();
|
231 |
+
requestProgress(id, gradioApp().getElementById('modelmerger_results_panel'), null, function() {});
|
232 |
+
|
233 |
+
var res = create_submit_args(arguments);
|
234 |
+
res[0] = id;
|
235 |
+
return res;
|
236 |
+
}
|
237 |
+
|
238 |
+
|
239 |
+
function ask_for_style_name(_, prompt_text, negative_prompt_text) {
|
240 |
+
var name_ = prompt('Style name:');
|
241 |
+
return [name_, prompt_text, negative_prompt_text];
|
242 |
+
}
|
243 |
+
|
244 |
+
function confirm_clear_prompt(prompt, negative_prompt) {
|
245 |
+
if (confirm("Delete prompt?")) {
|
246 |
+
prompt = "";
|
247 |
+
negative_prompt = "";
|
248 |
+
}
|
249 |
+
|
250 |
+
return [prompt, negative_prompt];
|
251 |
+
}
|
252 |
+
|
253 |
+
|
254 |
+
var promptTokecountUpdateFuncs = {};
|
255 |
+
|
256 |
+
function recalculatePromptTokens(name) {
|
257 |
+
if (promptTokecountUpdateFuncs[name]) {
|
258 |
+
promptTokecountUpdateFuncs[name]();
|
259 |
+
}
|
260 |
+
}
|
261 |
+
|
262 |
+
function recalculate_prompts_txt2img() {
|
263 |
+
recalculatePromptTokens('txt2img_prompt');
|
264 |
+
recalculatePromptTokens('txt2img_neg_prompt');
|
265 |
+
return Array.from(arguments);
|
266 |
+
}
|
267 |
+
|
268 |
+
function recalculate_prompts_img2img() {
|
269 |
+
recalculatePromptTokens('img2img_prompt');
|
270 |
+
recalculatePromptTokens('img2img_neg_prompt');
|
271 |
+
return Array.from(arguments);
|
272 |
+
}
|
273 |
+
|
274 |
+
|
275 |
+
var opts = {};
|
276 |
+
onUiUpdate(function() {
|
277 |
+
|
278 |
+
if (Object.keys(opts).length != 0) return;
|
279 |
+
|
280 |
+
var json_elem = gradioApp().getElementById("settings_json");
|
281 |
+
if (json_elem == null) return;
|
282 |
+
|
283 |
+
var textarea = json_elem.querySelector("textarea");
|
284 |
+
var jsdata = textarea.value;
|
285 |
+
opts = JSON.parse(jsdata);
|
286 |
+
executeCallbacks(optionsChangedCallbacks);
|
287 |
+
|
288 |
+
Object.defineProperty(textarea, "value", {
|
289 |
+
set: function (newValue) {
|
290 |
+
var valueProp = Object.getOwnPropertyDescriptor(
|
291 |
+
HTMLTextAreaElement.prototype,
|
292 |
+
"value"
|
293 |
+
);
|
294 |
+
var oldValue = valueProp.get.call(textarea);
|
295 |
+
valueProp.set.call(textarea, newValue);
|
296 |
+
|
297 |
+
if (oldValue != newValue) {
|
298 |
+
opts = JSON.parse(textarea.value);
|
299 |
+
}
|
300 |
+
|
301 |
+
executeCallbacks(optionsChangedCallbacks);
|
302 |
+
},
|
303 |
+
get: function () {
|
304 |
+
var valueProp = Object.getOwnPropertyDescriptor(
|
305 |
+
HTMLTextAreaElement.prototype,
|
306 |
+
"value"
|
307 |
+
);
|
308 |
+
return valueProp.get.call(textarea);
|
309 |
+
},
|
310 |
+
});
|
311 |
+
|
312 |
+
//console.log(opts);
|
313 |
+
|
314 |
+
json_elem.parentElement.style.display = "none";
|
315 |
+
|
316 |
+
function registerTextarea(id, id_counter, id_button) {
|
317 |
+
var prompt = gradioApp().getElementById(id);
|
318 |
+
var counter = gradioApp().getElementById(id_counter);
|
319 |
+
var textarea = gradioApp().querySelector("#" + id + " > label > textarea");
|
320 |
+
|
321 |
+
if (counter.parentElement == prompt.parentElement) {
|
322 |
+
return;
|
323 |
+
}
|
324 |
+
|
325 |
+
prompt.parentElement.insertBefore(counter, prompt);
|
326 |
+
counter.classList.add("token-counter");
|
327 |
+
prompt.parentElement.style.position = "relative";
|
328 |
+
|
329 |
+
promptTokecountUpdateFuncs[id] = function () {
|
330 |
+
update_token_counter(id_button);
|
331 |
+
};
|
332 |
+
textarea.addEventListener("input", promptTokecountUpdateFuncs[id]);
|
333 |
+
}
|
334 |
+
|
335 |
+
registerTextarea(
|
336 |
+
"txt2img_prompt",
|
337 |
+
"txt2img_token_counter",
|
338 |
+
"txt2img_token_button"
|
339 |
+
);
|
340 |
+
registerTextarea(
|
341 |
+
"txt2img_neg_prompt",
|
342 |
+
"txt2img_negative_token_counter",
|
343 |
+
"txt2img_negative_token_button"
|
344 |
+
);
|
345 |
+
registerTextarea(
|
346 |
+
"img2img_prompt",
|
347 |
+
"img2img_token_counter",
|
348 |
+
"img2img_token_button"
|
349 |
+
);
|
350 |
+
registerTextarea(
|
351 |
+
"img2img_neg_prompt",
|
352 |
+
"img2img_negative_token_counter",
|
353 |
+
"img2img_negative_token_button"
|
354 |
+
);
|
355 |
+
|
356 |
+
var show_all_pages = gradioApp().getElementById("settings_show_all_pages");
|
357 |
+
var settings_tabs = gradioApp().querySelector("#settings div");
|
358 |
+
if (show_all_pages && settings_tabs) {
|
359 |
+
settings_tabs.appendChild(show_all_pages);
|
360 |
+
show_all_pages.onclick = function () {
|
361 |
+
gradioApp()
|
362 |
+
.querySelectorAll("#settings > div")
|
363 |
+
.forEach(function (elem) {
|
364 |
+
elem.style.display = "block";
|
365 |
+
});
|
366 |
+
gradioApp()
|
367 |
+
.querySelectorAll("#settings > div > div > div")
|
368 |
+
.forEach(function (elem) {
|
369 |
+
elem.style.maxHeight = "none";
|
370 |
+
});
|
371 |
+
};
|
372 |
+
}
|
373 |
+
/*
|
374 |
+
^ matches the start
|
375 |
+
* matches any position
|
376 |
+
$ matches the end
|
377 |
+
*/
|
378 |
+
/* anapnoe ui start */
|
379 |
+
|
380 |
+
/* auto grow textarea */
|
381 |
+
function autoGrowPromptTextarea() {
|
382 |
+
gradioApp()
|
383 |
+
.querySelectorAll('[id$="_prompt"] textarea')
|
384 |
+
.forEach(function (elem) {
|
385 |
+
elem.parentElement.click();
|
386 |
+
});
|
387 |
+
}
|
388 |
+
|
389 |
+
gradioApp()
|
390 |
+
.querySelectorAll(
|
391 |
+
'[id$="_prompt"] textarea, [id^="setting_"] textarea, textarea'
|
392 |
+
)
|
393 |
+
.forEach(function (elem) {
|
394 |
+
elem.style.boxSizing = "border-box";
|
395 |
+
var offset = elem.offsetHeight - elem.clientHeight;
|
396 |
+
elem.addEventListener("input", function (e) {
|
397 |
+
e.target.style.minHeight = "auto";
|
398 |
+
e.target.style.minHeight = e.target.scrollHeight + offset + 2 + "px";
|
399 |
+
});
|
400 |
+
|
401 |
+
elem.parentElement.addEventListener("click", function (e) {
|
402 |
+
let textarea = e.currentTarget.querySelector("textarea");
|
403 |
+
textarea.style.minHeight = "auto";
|
404 |
+
textarea.style.minHeight = textarea.scrollHeight + offset + 2 + "px";
|
405 |
+
});
|
406 |
+
});
|
407 |
+
|
408 |
+
/* resizable split view */
|
409 |
+
const resizeEvent = window.document.createEvent("UIEvents");
|
410 |
+
resizeEvent.initUIEvent("resize", true, false, window, 0);
|
411 |
+
|
412 |
+
gradioApp()
|
413 |
+
.querySelectorAll('[id $="2img_splitter"]')
|
414 |
+
.forEach((elem) => {
|
415 |
+
elem.addEventListener("mousedown", function (e) {
|
416 |
+
e.preventDefault();
|
417 |
+
|
418 |
+
let resizer = e.currentTarget;
|
419 |
+
let container = resizer.parentElement;
|
420 |
+
|
421 |
+
let flexDir = window
|
422 |
+
.getComputedStyle(container)
|
423 |
+
.getPropertyValue("flex-direction");
|
424 |
+
|
425 |
+
let leftSide = resizer.previousElementSibling;
|
426 |
+
let rightSide = resizer.nextElementSibling;
|
427 |
+
|
428 |
+
let dir = flexDir == "row-reverse" ? -1.0 : 1.0;
|
429 |
+
|
430 |
+
let x = e.clientX;
|
431 |
+
let y = e.clientY;
|
432 |
+
let leftWidth = leftSide.getBoundingClientRect().width;
|
433 |
+
|
434 |
+
function mouseMoveHandler(e) {
|
435 |
+
resizer.style.cursor = "col-resize";
|
436 |
+
container.style.cursor = "col-resize";
|
437 |
+
|
438 |
+
const dx = (e.clientX - x) * dir;
|
439 |
+
const dy = (e.clientY - y) * dir;
|
440 |
+
|
441 |
+
const newLeftWidth =
|
442 |
+
((leftWidth + dx) * 100) / container.getBoundingClientRect().width;
|
443 |
+
leftSide.style.flexBasis = `${newLeftWidth}%`;
|
444 |
+
leftSide.style.userSelect = "none";
|
445 |
+
leftSide.style.pointerEvents = "none";
|
446 |
+
rightSide.style.userSelect = "none";
|
447 |
+
rightSide.style.pointerEvents = "none";
|
448 |
+
//window.dispatchEvent(resizeEvent);
|
449 |
+
}
|
450 |
+
|
451 |
+
function mouseUpHandler() {
|
452 |
+
resizer.style.removeProperty("cursor");
|
453 |
+
container.style.removeProperty("cursor");
|
454 |
+
leftSide.style.removeProperty("user-select");
|
455 |
+
leftSide.style.removeProperty("pointer-events");
|
456 |
+
rightSide.style.removeProperty("user-select");
|
457 |
+
rightSide.style.removeProperty("pointer-events");
|
458 |
+
container.removeEventListener("mousemove", mouseMoveHandler);
|
459 |
+
container.removeEventListener("mouseup", mouseUpHandler);
|
460 |
+
//window.dispatchEvent(resizeEvent);
|
461 |
+
}
|
462 |
+
|
463 |
+
container.addEventListener("mousemove", mouseMoveHandler);
|
464 |
+
container.addEventListener("mouseup", mouseUpHandler);
|
465 |
+
});
|
466 |
+
|
467 |
+
let flex_reverse = false;
|
468 |
+
elem.addEventListener("dblclick", function (e) {
|
469 |
+
flex_reverse = !flex_reverse;
|
470 |
+
e.preventDefault();
|
471 |
+
|
472 |
+
let resizer = e.currentTarget;
|
473 |
+
let container = resizer.parentElement;
|
474 |
+
//let flexDir = window.getComputedStyle(container).getPropertyValue('flex-direction');
|
475 |
+
|
476 |
+
if (flex_reverse) {
|
477 |
+
container.style.flexDirection = "row-reverse";
|
478 |
+
} else {
|
479 |
+
container.style.flexDirection = "row";
|
480 |
+
}
|
481 |
+
});
|
482 |
+
});
|
483 |
+
|
484 |
+
// set this globally
|
485 |
+
//let selectedTabItemId = "tab_txt2img";
|
486 |
+
/* switch tab item from instance button, this is the only method that works i havent found a workaround yet */
|
487 |
+
const Observe = (sel, opt, cb) => {
|
488 |
+
const Obs = new MutationObserver((m) => [...m].forEach(cb));
|
489 |
+
gradioApp()
|
490 |
+
.querySelectorAll(sel)
|
491 |
+
.forEach((el) => Obs.observe(el, opt));
|
492 |
+
};
|
493 |
+
Observe(
|
494 |
+
"#tabs > div.tabitem",
|
495 |
+
{
|
496 |
+
attributesList: ["style"],
|
497 |
+
attributeOldValue: true,
|
498 |
+
},
|
499 |
+
(m) => {
|
500 |
+
if (m.target.style.display === "block") {
|
501 |
+
let idx = parseInt(m.target.getAttribute("tab-item"));
|
502 |
+
selectedTabItemId = m.target.id;
|
503 |
+
tabItemChanged(idx);
|
504 |
+
}
|
505 |
+
}
|
506 |
+
);
|
507 |
+
|
508 |
+
function tabItemChanged(idx) {
|
509 |
+
gradioApp()
|
510 |
+
.querySelectorAll(
|
511 |
+
"#tabs > div > button.selected, #nav_menu_header_tabs > button.selected"
|
512 |
+
)
|
513 |
+
.forEach(function (tab) {
|
514 |
+
tab.classList.remove("selected");
|
515 |
+
});
|
516 |
+
|
517 |
+
gradioApp()
|
518 |
+
.querySelectorAll(
|
519 |
+
"#tabs > div > button:nth-child(" +
|
520 |
+
(idx + 1) +
|
521 |
+
"), #nav_menu_header_tabs > button:nth-child(" +
|
522 |
+
(idx + 1) +
|
523 |
+
")"
|
524 |
+
)
|
525 |
+
.forEach(function (tab) {
|
526 |
+
tab.classList.add("selected");
|
527 |
+
});
|
528 |
+
//gardio removes listeners and attributes from tab buttons we add them again here
|
529 |
+
gradioApp()
|
530 |
+
.querySelectorAll("#tabs > div > button")
|
531 |
+
.forEach(function (tab, index) {
|
532 |
+
tab.setAttribute("tab-id", index);
|
533 |
+
tab.removeEventListener("mouseup", navTabClicked);
|
534 |
+
tab.addEventListener("mouseup", navTabClicked);
|
535 |
+
if (tab.innerHTML.indexOf("Theme") != -1) tab.style.display = "none";
|
536 |
+
});
|
537 |
+
|
538 |
+
/* gradioApp().querySelectorAll('[id^="image_buttons_"] button').forEach(function (elem){
|
539 |
+
|
540 |
+
if(elem.id == "txt2img_tab"){
|
541 |
+
elem.setAttribute("tab-id", 0);
|
542 |
+
elem.removeEventListener('click', navTabClicked);
|
543 |
+
elem.addEventListener('click', navTabClicked);
|
544 |
+
}else if(elem.id == "img2img_tab" || elem.id == "inpaint_tab"){
|
545 |
+
elem.setAttribute("tab-id", 1);
|
546 |
+
elem.removeEventListener('click', navTabClicked);
|
547 |
+
elem.addEventListener('click', navTabClicked);
|
548 |
+
}if(elem.id == "extras_tab"){
|
549 |
+
elem.setAttribute("tab-id", 2);
|
550 |
+
elem.removeEventListener('click', navTabClicked);
|
551 |
+
elem.addEventListener('click', navTabClicked);
|
552 |
+
}
|
553 |
+
}) */
|
554 |
+
|
555 |
+
/* const pdiv = gradioApp().querySelector("#"+selectedTabItemId+" .progressDiv");
|
556 |
+
if(!pdiv && selectedTabItemId == "tab_txt2img"){
|
557 |
+
showSubmitButtons('txt2img', true);
|
558 |
+
}else if(!pdiv && selectedTabItemId == "tab_img2img"){
|
559 |
+
showSubmitButtons('img2img', true);
|
560 |
+
} */
|
561 |
+
|
562 |
+
//window.onUiHeaderTabUpdate();
|
563 |
+
// also here the same issue
|
564 |
+
/*
|
565 |
+
gradioApp().querySelectorAll('[id^="image_buttons"] [id$="_tab"]').forEach(function (button, index){
|
566 |
+
if(button.id == ("img2img_tab" || "inpaint_tab") ){
|
567 |
+
button.setAttribute("tab-id", 1 );
|
568 |
+
}else if(button.id == "extras_tab"){
|
569 |
+
button.setAttribute("tab-id", 2 );
|
570 |
+
}
|
571 |
+
|
572 |
+
button.removeEventListener('mouseup', navTabClicked);
|
573 |
+
button.addEventListener('mouseup', navTabClicked);
|
574 |
+
|
575 |
+
|
576 |
+
})
|
577 |
+
*/
|
578 |
+
|
579 |
+
netMenuVisibility();
|
580 |
+
}
|
581 |
+
|
582 |
+
// menu
|
583 |
+
function disableScroll() {
|
584 |
+
scrollTop = window.pageYOffset || document.documentElement.scrollTop;
|
585 |
+
scrollLeft = window.pageXOffset || document.documentElement.scrollLeft;
|
586 |
+
window.scrollTo(scrollLeft, scrollTop);
|
587 |
+
|
588 |
+
window.onscroll = function () {
|
589 |
+
window.scrollTo(scrollLeft, scrollTop);
|
590 |
+
};
|
591 |
+
}
|
592 |
+
|
593 |
+
function enableScroll() {
|
594 |
+
window.onscroll = function () {};
|
595 |
+
}
|
596 |
+
|
597 |
+
function getPos(el) {
|
598 |
+
let rect = el.getBoundingClientRect();
|
599 |
+
return { x: rect.left, y: rect.top };
|
600 |
+
}
|
601 |
+
|
602 |
+
function toggleMenu(isopen, icon, panel, func) {
|
603 |
+
if (isopen) {
|
604 |
+
panel.classList.add("open");
|
605 |
+
icon.classList.add("fixed");
|
606 |
+
gradioApp().addEventListener("click", func);
|
607 |
+
disableScroll();
|
608 |
+
} else {
|
609 |
+
panel.classList.remove("open");
|
610 |
+
icon.classList.remove("fixed");
|
611 |
+
gradioApp().removeEventListener("click", func);
|
612 |
+
enableScroll();
|
613 |
+
}
|
614 |
+
}
|
615 |
+
|
616 |
+
// close aside views
|
617 |
+
function closeAsideViews(menu) {
|
618 |
+
if (quick_menu != menu && quick_menu_open) quick_menu.click();
|
619 |
+
if (net_menu != menu && net_menu_open) net_menu.click();
|
620 |
+
if (theme_menu != menu && theme_menu_open) theme_menu.click();
|
621 |
+
}
|
622 |
+
|
623 |
+
// if we change to other view other than 2img and if aside mode is selected close extra networks aside and hide the net menu icon
|
624 |
+
let net_container = gradioApp().querySelector("#txt2img_extra_networks_row");
|
625 |
+
let net_menu_open = false;
|
626 |
+
const net_menu = gradioApp().querySelector("#extra_networks_menu");
|
627 |
+
function netMenuVisibility() {
|
628 |
+
if (selectedTabItemId.indexOf("2img") != -1) {
|
629 |
+
net_menu.style.display = "block";
|
630 |
+
let nid = selectedTabItemId.split("_")[1];
|
631 |
+
net_container = gradioApp().querySelector(
|
632 |
+
"#" + nid + "_extra_networks_row"
|
633 |
+
);
|
634 |
+
if (net_container.classList.contains("aside")) {
|
635 |
+
net_menu.style.display = "block";
|
636 |
+
toggleMenu(net_menu_open, net_menu, net_container, null);
|
637 |
+
} else {
|
638 |
+
net_menu.style.display = "none";
|
639 |
+
}
|
640 |
+
} else {
|
641 |
+
net_menu.style.display = "none";
|
642 |
+
}
|
643 |
+
}
|
644 |
+
|
645 |
+
// mobile nav menu
|
646 |
+
const tabs_menu = gradioApp().querySelector("#tabs > div:first-child");
|
647 |
+
const nav_menu = gradioApp().querySelector("#nav_menu");
|
648 |
+
const header = gradioApp().querySelector("#header-top");
|
649 |
+
let menu_open = false;
|
650 |
+
const z_menu = nav_menu.cloneNode(true);
|
651 |
+
z_menu.id = "clone_nav_menu";
|
652 |
+
header.parentElement.append(z_menu);
|
653 |
+
function toggleNavMenu(e) {
|
654 |
+
e.stopPropagation();
|
655 |
+
menu_open = !menu_open;
|
656 |
+
toggleMenu(menu_open, nav_menu, tabs_menu, toggleNavMenu);
|
657 |
+
}
|
658 |
+
z_menu.addEventListener("click", toggleNavMenu);
|
659 |
+
|
660 |
+
// quicksettings nav menu
|
661 |
+
let quick_menu_open = false;
|
662 |
+
const quicksettings_overflow = gradioApp().querySelector(
|
663 |
+
"#quicksettings_overflow"
|
664 |
+
);
|
665 |
+
const quick_menu = gradioApp().querySelector("#quick_menu");
|
666 |
+
function toggleQuickMenu(e) {
|
667 |
+
closeAsideViews(quick_menu);
|
668 |
+
quick_menu_open = !quick_menu_open;
|
669 |
+
const withinBoundaries = e.composedPath().includes(quicksettings_overflow);
|
670 |
+
if (!quick_menu_open && withinBoundaries) {
|
671 |
+
quick_menu_open = true;
|
672 |
+
} else {
|
673 |
+
e.preventDefault();
|
674 |
+
e.stopPropagation();
|
675 |
+
toggleMenu(
|
676 |
+
quick_menu_open,
|
677 |
+
quick_menu,
|
678 |
+
quicksettings_overflow,
|
679 |
+
toggleQuickMenu
|
680 |
+
);
|
681 |
+
}
|
682 |
+
}
|
683 |
+
quick_menu.addEventListener("click", toggleQuickMenu);
|
684 |
+
|
685 |
+
// extra networks nav menu
|
686 |
+
function clickedOutside(e) {
|
687 |
+
//console.log(e.target.getAttribute('data-testid'));
|
688 |
+
if (
|
689 |
+
e.target.getAttribute("data-testid") != "textbox" &&
|
690 |
+
e.target.getAttribute("data-testid")
|
691 |
+
) {
|
692 |
+
if (net_menu_open && e.target.closest('[id$="2img_settings_scroll"]'))
|
693 |
+
net_menu.click();
|
694 |
+
}
|
695 |
+
}
|
696 |
+
function toggleNetMenu(e) {
|
697 |
+
closeAsideViews(net_menu);
|
698 |
+
net_menu_open = !net_menu_open;
|
699 |
+
e.preventDefault();
|
700 |
+
e.stopPropagation();
|
701 |
+
toggleMenu(net_menu_open, net_menu, net_container, clickedOutside);
|
702 |
+
}
|
703 |
+
net_menu.addEventListener("click", toggleNetMenu);
|
704 |
+
gradioApp()
|
705 |
+
.querySelectorAll('button[id*="2img_extra_networks"]')
|
706 |
+
.forEach((elem) => {
|
707 |
+
elem.addEventListener("click", toggleNetMenu);
|
708 |
+
});
|
709 |
+
|
710 |
+
// theme nav menu
|
711 |
+
let theme_container = gradioApp().querySelector("#tab_ui_theme");
|
712 |
+
let theme_menu_open = false;
|
713 |
+
const theme_menu = gradioApp().querySelector("#theme_menu");
|
714 |
+
function toggleThemeMenu(e) {
|
715 |
+
closeAsideViews(theme_menu);
|
716 |
+
theme_menu_open = !theme_menu_open;
|
717 |
+
e.preventDefault();
|
718 |
+
e.stopPropagation();
|
719 |
+
toggleMenu(theme_menu_open, theme_menu, theme_container, null);
|
720 |
+
}
|
721 |
+
theme_menu.addEventListener("click", toggleThemeMenu);
|
722 |
+
|
723 |
+
const theme_tab = gradioApp().querySelector("#tab_ui_theme");
|
724 |
+
function theme_aside(value) {
|
725 |
+
if (value) {
|
726 |
+
theme_tab.classList.add("aside");
|
727 |
+
} else {
|
728 |
+
theme_tab.classList.remove("aside");
|
729 |
+
}
|
730 |
+
}
|
731 |
+
if (theme_tab) theme_aside(true);
|
732 |
+
|
733 |
+
function generateOnRepeat(elem, isforever) {
|
734 |
+
if (elem.generateOnRepeatInterval != null)
|
735 |
+
clearInterval(elem.generateOnRepeatInterval);
|
736 |
+
if (isforever) {
|
737 |
+
const generate_button = elem.previousElementSibling;
|
738 |
+
elem.generateOnRepeatInterval = setInterval(function () {
|
739 |
+
if (window.getComputedStyle(generate_button).display !== "none") {
|
740 |
+
generate_button.click();
|
741 |
+
}
|
742 |
+
}, 500);
|
743 |
+
}
|
744 |
+
}
|
745 |
+
|
746 |
+
function toggleGenerateForever(e) {
|
747 |
+
e.target.classList.toggle("active");
|
748 |
+
if (e.target.className.indexOf("active") != -1) {
|
749 |
+
generateOnRepeat(e.target, true);
|
750 |
+
} else {
|
751 |
+
generateOnRepeat(e.target, false);
|
752 |
+
}
|
753 |
+
e.preventDefault();
|
754 |
+
e.stopPropagation();
|
755 |
+
}
|
756 |
+
|
757 |
+
gradioApp()
|
758 |
+
.querySelectorAll('button[id*="2img_generate_forever"]')
|
759 |
+
.forEach((elem) => {
|
760 |
+
elem.addEventListener("click", toggleGenerateForever);
|
761 |
+
});
|
762 |
+
|
763 |
+
/* let generateOnRepeat = function (genbuttonid, interruptbuttonid) {
|
764 |
+
let genbutton = gradioApp().querySelector(genbuttonid);
|
765 |
+
let interruptbutton = gradioApp().querySelector(interruptbuttonid);
|
766 |
+
if (!interruptbutton.offsetParent) {
|
767 |
+
genbutton.click();
|
768 |
+
}
|
769 |
+
clearInterval(window.generateOnRepeatInterval);
|
770 |
+
window.generateOnRepeatInterval = setInterval(function () {
|
771 |
+
if (!interruptbutton.offsetParent) {
|
772 |
+
genbutton.click();
|
773 |
+
}
|
774 |
+
}, 500);
|
775 |
+
};
|
776 |
+
|
777 |
+
appendContextMenuOption("#txt2img_generate", "Generate forever", function () {
|
778 |
+
generateOnRepeat("#txt2img_generate", "#txt2img_interrupt");
|
779 |
+
});
|
780 |
+
appendContextMenuOption("#img2img_generate", "Generate forever", function () {
|
781 |
+
generateOnRepeat("#img2img_generate", "#img2img_interrupt");
|
782 |
+
});
|
783 |
+
|
784 |
+
let cancelGenerateForever = function () {
|
785 |
+
clearInterval(window.generateOnRepeatInterval);
|
786 |
+
}; */
|
787 |
+
|
788 |
+
//
|
789 |
+
/*
|
790 |
+
function attachAccordionListeners(elem) {
|
791 |
+
elem.querySelectorAll(".gradio-accordion > div.wrap").forEach((elem) => {
|
792 |
+
elem.addEventListener("click", toggleAccordion);
|
793 |
+
});
|
794 |
+
}
|
795 |
+
function toggleAccordion(e) {
|
796 |
+
//e.preventDefault();
|
797 |
+
//e.stopPropagation();
|
798 |
+
//e.stopImmediatePropagation();
|
799 |
+
let accordion_content =
|
800 |
+
e.currentTarget.parentElement.querySelector(".gap.svelte-vt1mxs");
|
801 |
+
|
802 |
+
if (accordion_content) {
|
803 |
+
e.preventDefault();
|
804 |
+
e.stopPropagation();
|
805 |
+
let accordion_icon = e.currentTarget.parentElement.querySelector(
|
806 |
+
".label-wrap > .icon"
|
807 |
+
);
|
808 |
+
if (accordion_content.className.indexOf("hidden") != -1) {
|
809 |
+
accordion_content.classList.remove("hidden");
|
810 |
+
accordion_icon.style.setProperty("transform", "rotate(0deg)");
|
811 |
+
e.currentTarget.classList.add("hide");
|
812 |
+
} else {
|
813 |
+
accordion_content.classList.add("hidden");
|
814 |
+
accordion_icon.style.setProperty("transform", "rotate(90deg)");
|
815 |
+
e.currentTarget.classList.remove("hide");
|
816 |
+
}
|
817 |
+
} else {
|
818 |
+
let accordion_btn =
|
819 |
+
e.currentTarget.parentElement.querySelector(".label-wrap");
|
820 |
+
e.currentTarget.classList.add("hide");
|
821 |
+
accordion_btn.click();
|
822 |
+
//maybe here we need to setInterval until the content is available
|
823 |
+
setTimeout(function () {
|
824 |
+
accordion_content = accordion_btn.parentElement;
|
825 |
+
//console.log(accordion_content);
|
826 |
+
attachAccordionListeners(accordion_content);
|
827 |
+
}, 1000);
|
828 |
+
}
|
829 |
+
}
|
830 |
+
|
831 |
+
attachAccordionListeners(gradioApp());
|
832 |
+
*/
|
833 |
+
// additional ui styles
|
834 |
+
let styleobj = {};
|
835 |
+
const r = gradioApp();
|
836 |
+
const style = document.createElement("style");
|
837 |
+
style.id = "ui-styles";
|
838 |
+
r.appendChild(style);
|
839 |
+
|
840 |
+
function updateOpStyles() {
|
841 |
+
let ops_styles = "";
|
842 |
+
for (const key in styleobj) {
|
843 |
+
ops_styles += styleobj[key];
|
844 |
+
}
|
845 |
+
const ui_styles = gradioApp().getElementById("ui-styles");
|
846 |
+
ui_styles.innerHTML = ops_styles;
|
847 |
+
//console.log(ui_styles);
|
848 |
+
}
|
849 |
+
|
850 |
+
// generated image fit contain - scale
|
851 |
+
function imageGeneratedFitMethod(value) {
|
852 |
+
styleobj.ui_view_fit =
|
853 |
+
"[id$='2img_gallery'] div>img {object-fit:" + value + "!important;}";
|
854 |
+
}
|
855 |
+
gradioApp()
|
856 |
+
.querySelector("#setting_ui_output_image_fit")
|
857 |
+
.addEventListener("click", function (e) {
|
858 |
+
if (e.target && e.target.matches("input[type='radio']")) {
|
859 |
+
imageGeneratedFitMethod(e.target.value.toLowerCase());
|
860 |
+
updateOpStyles();
|
861 |
+
}
|
862 |
+
});
|
863 |
+
imageGeneratedFitMethod(opts.ui_output_image_fit.toLowerCase());
|
864 |
+
|
865 |
+
// livePreview fit contain - scale
|
866 |
+
function imagePreviewFitMethod(value) {
|
867 |
+
styleobj.ui_fit = ".livePreview img {object-fit:" + value + "!important;}";
|
868 |
+
}
|
869 |
+
gradioApp()
|
870 |
+
.querySelector("#setting_live_preview_image_fit")
|
871 |
+
.addEventListener("click", function (e) {
|
872 |
+
if (e.target && e.target.matches("input[type='radio']")) {
|
873 |
+
imagePreviewFitMethod(e.target.value.toLowerCase());
|
874 |
+
updateOpStyles();
|
875 |
+
}
|
876 |
+
});
|
877 |
+
imagePreviewFitMethod(opts.live_preview_image_fit.toLowerCase());
|
878 |
+
|
879 |
+
// viewports order left - right
|
880 |
+
function viewportOrder(value) {
|
881 |
+
styleobj.ui_views_order =
|
882 |
+
"[id$=_prompt_image] + div {flex-direction:" + value + ";}";
|
883 |
+
}
|
884 |
+
gradioApp()
|
885 |
+
.querySelector("#setting_ui_views_order")
|
886 |
+
.addEventListener("click", function (e) {
|
887 |
+
if (e.target && e.target.matches("input[type='radio']")) {
|
888 |
+
viewportOrder(e.target.value.toLowerCase());
|
889 |
+
updateOpStyles();
|
890 |
+
}
|
891 |
+
});
|
892 |
+
viewportOrder(opts.ui_views_order.toLowerCase());
|
893 |
+
|
894 |
+
// sd max resolution output
|
895 |
+
function sdMaxOutputResolution(value) {
|
896 |
+
gradioApp()
|
897 |
+
.querySelectorAll('[id$="2img_width"] input,[id$="2img_height"] input')
|
898 |
+
.forEach((elem) => {
|
899 |
+
elem.max = value;
|
900 |
+
});
|
901 |
+
}
|
902 |
+
gradioApp()
|
903 |
+
.querySelector("#setting_sd_max_resolution")
|
904 |
+
.addEventListener("input", function (e) {
|
905 |
+
let intvalue = parseInt(e.target.value);
|
906 |
+
intvalue = Math.min(Math.max(intvalue, 512), 16384);
|
907 |
+
sdMaxOutputResolution(intvalue);
|
908 |
+
});
|
909 |
+
sdMaxOutputResolution(opts.sd_max_resolution);
|
910 |
+
|
911 |
+
function extra_networks_visibility(value) {
|
912 |
+
gradioApp()
|
913 |
+
.querySelectorAll('[id$="2img_extra_networks_row"]')
|
914 |
+
.forEach((elem) => {
|
915 |
+
if (value) {
|
916 |
+
elem.classList.remove("!hidden");
|
917 |
+
} else {
|
918 |
+
elem.classList.add("!hidden");
|
919 |
+
}
|
920 |
+
});
|
921 |
+
}
|
922 |
+
gradioApp()
|
923 |
+
.querySelector("#setting_extra_networks_default_visibility input")
|
924 |
+
.addEventListener("click", function (e) {
|
925 |
+
extra_networks_visibility(e.target.checked);
|
926 |
+
});
|
927 |
+
extra_networks_visibility(opts.extra_networks_default_visibility);
|
928 |
+
|
929 |
+
function extra_networks_card_size(value) {
|
930 |
+
styleobj.extra_networks_card_size =
|
931 |
+
":root{--ae-extra-networks-card-size:" + value + ";}";
|
932 |
+
}
|
933 |
+
gradioApp()
|
934 |
+
.querySelectorAll("#setting_extra_networks_cards_size input")
|
935 |
+
.forEach(function (elem) {
|
936 |
+
elem.addEventListener("input", function (e) {
|
937 |
+
extra_networks_card_size(e.target.value);
|
938 |
+
updateOpStyles();
|
939 |
+
});
|
940 |
+
});
|
941 |
+
extra_networks_card_size(opts.extra_networks_cards_size);
|
942 |
+
|
943 |
+
function extra_networks_cards_visible_rows(value) {
|
944 |
+
styleobj.extra_networks_cards_visible_rows =
|
945 |
+
":root{--ae-extra-networks-visible-rows:" + value + ";}";
|
946 |
+
}
|
947 |
+
gradioApp()
|
948 |
+
.querySelectorAll("#setting_extra_networks_cards_visible_rows input")
|
949 |
+
.forEach(function (elem) {
|
950 |
+
elem.addEventListener("input", function (e) {
|
951 |
+
extra_networks_cards_visible_rows(e.target.value);
|
952 |
+
updateOpStyles();
|
953 |
+
});
|
954 |
+
});
|
955 |
+
extra_networks_cards_visible_rows(opts.extra_networks_cards_visible_rows);
|
956 |
+
|
957 |
+
function extra_networks_aside(value) {
|
958 |
+
gradioApp()
|
959 |
+
.querySelectorAll('[id$="2img_extra_networks_row"]')
|
960 |
+
.forEach((elem) => {
|
961 |
+
if (value) {
|
962 |
+
elem.classList.add("aside");
|
963 |
+
} else {
|
964 |
+
elem.classList.remove("aside");
|
965 |
+
}
|
966 |
+
netMenuVisibility();
|
967 |
+
});
|
968 |
+
}
|
969 |
+
gradioApp()
|
970 |
+
.querySelector("#setting_extra_networks_aside input")
|
971 |
+
.addEventListener("click", function (e) {
|
972 |
+
extra_networks_aside(e.target.checked);
|
973 |
+
});
|
974 |
+
extra_networks_aside(opts.extra_networks_aside);
|
975 |
+
|
976 |
+
// hidden - header ui tabs
|
977 |
+
let radio_hidden_html = "";
|
978 |
+
let radio_header_html = "";
|
979 |
+
let hiddentabs = {};
|
980 |
+
let headertabs = {};
|
981 |
+
const setting_ui_hidden_tabs = gradioApp().querySelector(
|
982 |
+
"#setting_ui_hidden_tabs textarea"
|
983 |
+
);
|
984 |
+
const setting_ui_header_tabs = gradioApp().querySelector(
|
985 |
+
"#setting_ui_header_tabs textarea"
|
986 |
+
);
|
987 |
+
const parent_header_tabs = gradioApp().querySelector("#nav_menu_header_tabs");
|
988 |
+
setting_ui_hidden_tabs.style.display = "none";
|
989 |
+
setting_ui_header_tabs.style.display = "none";
|
990 |
+
|
991 |
+
const maintabs = gradioApp().querySelectorAll(
|
992 |
+
"#tabs > div:first-child > button"
|
993 |
+
);
|
994 |
+
const tabitems = gradioApp().querySelectorAll("#tabs > div.tabitem");
|
995 |
+
|
996 |
+
function tabOpsSave(setting) {
|
997 |
+
updateInput(setting);
|
998 |
+
|
999 |
+
}
|
1000 |
+
|
1001 |
+
function tabsHiddenChange() {
|
1002 |
+
const keys = Object.keys(hiddentabs);
|
1003 |
+
setting_ui_hidden_tabs.value = "";
|
1004 |
+
keys.forEach((key, index) => {
|
1005 |
+
//console.log(`${key}: ${hiddentabs[key]} ${index}`);
|
1006 |
+
if (hiddentabs[key] == true) {
|
1007 |
+
styleobj[key] =
|
1008 |
+
"#tabs > div:first-child > button:nth-child(" +
|
1009 |
+
(index + 1) +
|
1010 |
+
"){display:none;}";
|
1011 |
+
setting_ui_hidden_tabs.value += key + ",";
|
1012 |
+
} else {
|
1013 |
+
styleobj[key] =
|
1014 |
+
"#tabs > div:first-child > button:nth-child(" +
|
1015 |
+
(index + 1) +
|
1016 |
+
"){display:block;}";
|
1017 |
+
}
|
1018 |
+
});
|
1019 |
+
|
1020 |
+
tabOpsSave(setting_ui_hidden_tabs);
|
1021 |
+
tabsHeaderChange();
|
1022 |
+
}
|
1023 |
+
function tabsHeaderChange() {
|
1024 |
+
const keys = Object.keys(headertabs);
|
1025 |
+
setting_ui_header_tabs.value = "";
|
1026 |
+
keys.forEach((key, index) => {
|
1027 |
+
//console.log(`${key}: ${hiddentabs[key]} ${index}`);
|
1028 |
+
let nkey = key + "_hr";
|
1029 |
+
if (headertabs[key] == true && hiddentabs[key] == false) {
|
1030 |
+
styleobj[nkey] =
|
1031 |
+
"#nav_menu_header_tabs > button:nth-child(" +
|
1032 |
+
(index + 1) +
|
1033 |
+
"){display:block;}";
|
1034 |
+
setting_ui_header_tabs.value += key + ",";
|
1035 |
+
} else {
|
1036 |
+
styleobj[nkey] =
|
1037 |
+
"#nav_menu_header_tabs > button:nth-child(" +
|
1038 |
+
(index + 1) +
|
1039 |
+
"){display:none;}";
|
1040 |
+
}
|
1041 |
+
});
|
1042 |
+
|
1043 |
+
tabOpsSave(setting_ui_header_tabs);
|
1044 |
+
}
|
1045 |
+
|
1046 |
+
function navigate2TabItem(idx) {
|
1047 |
+
gradioApp()
|
1048 |
+
.querySelectorAll("#tabs > div.tabitem")
|
1049 |
+
.forEach(function (tabitem, index) {
|
1050 |
+
if (idx == index) {
|
1051 |
+
tabitem.style.display = "block";
|
1052 |
+
} else {
|
1053 |
+
tabitem.style.display = "none";
|
1054 |
+
}
|
1055 |
+
});
|
1056 |
+
}
|
1057 |
+
|
1058 |
+
function navTabClicked(e) {
|
1059 |
+
const idx = parseInt(e.currentTarget.getAttribute("tab-id"));
|
1060 |
+
navigate2TabItem(idx);
|
1061 |
+
}
|
1062 |
+
|
1063 |
+
maintabs.forEach(function (elem, index) {
|
1064 |
+
let tabvalue = elem.innerText.replaceAll(" ", "");
|
1065 |
+
hiddentabs[tabvalue] = false;
|
1066 |
+
headertabs[tabvalue] = false;
|
1067 |
+
let checked_hidden = "";
|
1068 |
+
let checked_header = "";
|
1069 |
+
if (setting_ui_hidden_tabs.value.indexOf(tabvalue) != -1) {
|
1070 |
+
hiddentabs[tabvalue] = true;
|
1071 |
+
checked_hidden = "checked";
|
1072 |
+
}
|
1073 |
+
if (setting_ui_header_tabs.value.indexOf(tabvalue) != -1) {
|
1074 |
+
headertabs[tabvalue] = true;
|
1075 |
+
checked_header = "checked";
|
1076 |
+
}
|
1077 |
+
radio_hidden_html +=
|
1078 |
+
'<label class="_' +
|
1079 |
+
tabvalue.toLowerCase() +
|
1080 |
+
' svelte-1qxcj04"><input type="checkbox" name="uiha" class="svelte-1qxcj04" ' +
|
1081 |
+
checked_hidden +
|
1082 |
+
' value="' +
|
1083 |
+
elem.innerText +
|
1084 |
+
'"><span class="ml-2 svelte-1qxcj04">' +
|
1085 |
+
elem.innerText +
|
1086 |
+
"</span></label>";
|
1087 |
+
|
1088 |
+
radio_header_html +=
|
1089 |
+
'<label class="_' +
|
1090 |
+
tabvalue.toLowerCase() +
|
1091 |
+
' svelte-1qxcj04"><input type="checkbox" name="uiha" class="svelte-1qxcj04" ' +
|
1092 |
+
checked_header +
|
1093 |
+
' value="' +
|
1094 |
+
elem.innerText +
|
1095 |
+
'"><span class="ml-2 svelte-1qxcj04">' +
|
1096 |
+
elem.innerText +
|
1097 |
+
"</span></label>";
|
1098 |
+
|
1099 |
+
tabitems[index].setAttribute("tab-item", index);
|
1100 |
+
elem.setAttribute("tab-id", index);
|
1101 |
+
|
1102 |
+
let clonetab = elem.cloneNode(true);
|
1103 |
+
clonetab.id = tabvalue + "_clone";
|
1104 |
+
parent_header_tabs.append(clonetab);
|
1105 |
+
clonetab.addEventListener("click", navTabClicked);
|
1106 |
+
});
|
1107 |
+
|
1108 |
+
let div = document.createElement("div");
|
1109 |
+
div.id = "hidden_radio_tabs_container";
|
1110 |
+
div.classList.add("flex", "flex-wrap", "gap-2", "wrap", "svelte-1qxcj04");
|
1111 |
+
div.innerHTML = radio_hidden_html;
|
1112 |
+
setting_ui_hidden_tabs.parentElement.appendChild(div);
|
1113 |
+
|
1114 |
+
div = document.createElement("div");
|
1115 |
+
div.id = "header_radio_tabs_container";
|
1116 |
+
div.classList.add("flex", "flex-wrap", "gap-2", "wrap", "svelte-1qxcj04");
|
1117 |
+
div.innerHTML = radio_header_html;
|
1118 |
+
setting_ui_header_tabs.parentElement.appendChild(div);
|
1119 |
+
|
1120 |
+
// hidden tabs
|
1121 |
+
gradioApp()
|
1122 |
+
.querySelector("#hidden_radio_tabs_container")
|
1123 |
+
.addEventListener("click", function (e) {
|
1124 |
+
if (e.target && e.target.matches("input[type='checkbox']")) {
|
1125 |
+
let tabvalue = e.target.value.replaceAll(" ", "");
|
1126 |
+
hiddentabs[tabvalue] = e.target.checked;
|
1127 |
+
tabsHiddenChange();
|
1128 |
+
updateOpStyles();
|
1129 |
+
}
|
1130 |
+
});
|
1131 |
+
// header tabs
|
1132 |
+
gradioApp()
|
1133 |
+
.querySelector("#header_radio_tabs_container")
|
1134 |
+
.addEventListener("click", function (e) {
|
1135 |
+
if (e.target && e.target.matches("input[type='checkbox']")) {
|
1136 |
+
let tabvalue = e.target.value.replaceAll(" ", "");
|
1137 |
+
headertabs[tabvalue] = e.target.checked;
|
1138 |
+
tabsHeaderChange();
|
1139 |
+
updateOpStyles();
|
1140 |
+
}
|
1141 |
+
});
|
1142 |
+
|
1143 |
+
tabsHiddenChange();
|
1144 |
+
|
1145 |
+
gradioApp()
|
1146 |
+
.querySelectorAll('[id^="image_buttons_"] button, #png_2img_results button')
|
1147 |
+
.forEach(function (elem) {
|
1148 |
+
//console.log(opts.send_seed);
|
1149 |
+
if (elem.id == "txt2img_tab") {
|
1150 |
+
elem.setAttribute("tab-id", 0);
|
1151 |
+
elem.addEventListener("click", navTabClicked);
|
1152 |
+
} else if (elem.id == "img2img_tab" || elem.id == "inpaint_tab") {
|
1153 |
+
elem.setAttribute("tab-id", 1);
|
1154 |
+
elem.addEventListener("click", navTabClicked);
|
1155 |
+
}
|
1156 |
+
if (elem.id == "extras_tab") {
|
1157 |
+
elem.setAttribute("tab-id", 2);
|
1158 |
+
elem.addEventListener("click", navTabClicked);
|
1159 |
+
}
|
1160 |
+
});
|
1161 |
+
|
1162 |
+
gradioApp()
|
1163 |
+
.querySelectorAll('[id$="2img_extra_tabs"] .search')
|
1164 |
+
.forEach(function (elem) {
|
1165 |
+
elem.addEventListener("keyup", function (e) {
|
1166 |
+
if (e.defaultPrevented) {
|
1167 |
+
return; // Do nothing if event already handled
|
1168 |
+
}
|
1169 |
+
switch (e.code) {
|
1170 |
+
case "Escape":
|
1171 |
+
if (e.target.value == "") {
|
1172 |
+
net_menu.click();
|
1173 |
+
} else {
|
1174 |
+
e.target.value = "";
|
1175 |
+
updateInput(e.target);
|
1176 |
+
}
|
1177 |
+
break;
|
1178 |
+
}
|
1179 |
+
});
|
1180 |
+
});
|
1181 |
+
|
1182 |
+
// add - remove quicksettings
|
1183 |
+
const settings_submit = gradioApp().querySelector("#settings_submit");
|
1184 |
+
const quick_parent = gradioApp().querySelector(
|
1185 |
+
"#quicksettings_overflow_container"
|
1186 |
+
);
|
1187 |
+
const setting_quicksettings = gradioApp().querySelector(
|
1188 |
+
"#setting_quicksettings textarea"
|
1189 |
+
);
|
1190 |
+
function saveQuickSettings() {
|
1191 |
+
updateInput(setting_quicksettings);
|
1192 |
+
const cEvent = new Event("click"); //submit
|
1193 |
+
Object.defineProperty(cEvent, "target", { value: settings_submit });
|
1194 |
+
settings_submit.dispatchEvent(cEvent);
|
1195 |
+
console.log(setting_quicksettings.value);
|
1196 |
+
}
|
1197 |
+
|
1198 |
+
/*
|
1199 |
+
function addModelCheckpoint(){
|
1200 |
+
if(setting_quicksettings.value.indexOf("sd_model_checkpoint") === -1){
|
1201 |
+
setting_quicksettings.value += ",sd_model_checkpoint";
|
1202 |
+
}
|
1203 |
+
saveQuickSettings();
|
1204 |
+
}
|
1205 |
+
*/
|
1206 |
+
|
1207 |
+
function add2quickSettings(id, section, checked) {
|
1208 |
+
let field_settings = setting_quicksettings.value.replace(" ", "");
|
1209 |
+
if (checked) {
|
1210 |
+
field_settings += "," + id;
|
1211 |
+
let setting_row = gradioApp().querySelector("#row_setting_" + id);
|
1212 |
+
quick_parent.append(setting_row);
|
1213 |
+
setting_row.classList.add("warning");
|
1214 |
+
} else {
|
1215 |
+
field_settings = field_settings.replaceAll(id, ",");
|
1216 |
+
const setting_parent = gradioApp().querySelector(
|
1217 |
+
"#" + section + "_settings_2img_settings"
|
1218 |
+
);
|
1219 |
+
let quick_row = gradioApp().querySelector("#row_setting_" + id);
|
1220 |
+
setting_parent.append(quick_row);
|
1221 |
+
quick_row.classList.remove("warning");
|
1222 |
+
}
|
1223 |
+
field_settings = field_settings.replace(/,{2,}/g, ",");
|
1224 |
+
setting_quicksettings.value = field_settings;
|
1225 |
+
//addModelCheckpoint();
|
1226 |
+
saveQuickSettings();
|
1227 |
+
//console.log(section + " - " + id + " - " + checked);
|
1228 |
+
}
|
1229 |
+
gradioApp()
|
1230 |
+
.querySelectorAll('[id*="add2quick_"]')
|
1231 |
+
.forEach(function (elem) {
|
1232 |
+
let trg = elem.id.split("_add2quick_setting_");
|
1233 |
+
let sid = trg[0];
|
1234 |
+
let tid = trg[1];
|
1235 |
+
let elem_input = gradioApp().querySelector("#" + elem.id + " input");
|
1236 |
+
if (elem_input) {
|
1237 |
+
elem_input.addEventListener("click", function (e) {
|
1238 |
+
add2quickSettings(tid, sid, e.target.checked);
|
1239 |
+
});
|
1240 |
+
}
|
1241 |
+
});
|
1242 |
+
//addModelCheckpoint();
|
1243 |
+
|
1244 |
+
// input release component dispatcher
|
1245 |
+
let cached_clone_range;
|
1246 |
+
let cached_clone_num;
|
1247 |
+
let active_clone_input = [];
|
1248 |
+
let focus_input;
|
1249 |
+
|
1250 |
+
function ui_input_release_component(elem) {
|
1251 |
+
//console.log("ok");
|
1252 |
+
if (active_clone_input.length > 0) return;
|
1253 |
+
|
1254 |
+
//img2img_width
|
1255 |
+
let parent = elem.parentElement;
|
1256 |
+
let comp_parent = parent.parentElement.parentElement;
|
1257 |
+
|
1258 |
+
if (
|
1259 |
+
comp_parent.id == "img2img_width" ||
|
1260 |
+
comp_parent.id == "img2img_height" ||
|
1261 |
+
comp_parent.id == "img2img_scale" ||
|
1262 |
+
comp_parent.id.indexOf("--ae-") != -1 ||
|
1263 |
+
comp_parent.id.indexOf("theme") != -1 ||
|
1264 |
+
comp_parent.className.indexOf("posex") != -1
|
1265 |
+
)
|
1266 |
+
return;
|
1267 |
+
|
1268 |
+
let clone_num = elem.cloneNode();
|
1269 |
+
active_clone_input.push(clone_num);
|
1270 |
+
|
1271 |
+
let label = parent.querySelector("label");
|
1272 |
+
|
1273 |
+
clone_num.id = "num_clone";
|
1274 |
+
clone_num.value = elem.value;
|
1275 |
+
parent.append(clone_num);
|
1276 |
+
elem.classList.add("hidden");
|
1277 |
+
|
1278 |
+
clone_num.addEventListener("change", function (e) {
|
1279 |
+
elem.value = clone_num.value;
|
1280 |
+
updateInput(elem);
|
1281 |
+
});
|
1282 |
+
|
1283 |
+
clone_num.addEventListener("focus", function (e) {
|
1284 |
+
focus_input = clone_num;
|
1285 |
+
});
|
1286 |
+
|
1287 |
+
cached_clone_num = clone_num;
|
1288 |
+
cached_clone_range = false;
|
1289 |
+
|
1290 |
+
if (label) {
|
1291 |
+
let comp_range = comp_parent.querySelector("input[type='range']");
|
1292 |
+
let clone_range = comp_range.cloneNode();
|
1293 |
+
active_clone_input.push(clone_range);
|
1294 |
+
|
1295 |
+
clone_range.id = comp_range.id + "_clone";
|
1296 |
+
clone_range.value = comp_range.value;
|
1297 |
+
comp_range.parentElement.append(clone_range);
|
1298 |
+
comp_range.classList.add("hidden");
|
1299 |
+
|
1300 |
+
clone_range.addEventListener("input", function (e) {
|
1301 |
+
clone_num.value = e.target.value;
|
1302 |
+
});
|
1303 |
+
clone_range.addEventListener("change", function (e) {
|
1304 |
+
elem.value = clone_range.value;
|
1305 |
+
updateInput(elem);
|
1306 |
+
});
|
1307 |
+
clone_num.addEventListener("input", function (e) {
|
1308 |
+
clone_range.value = e.target.value;
|
1309 |
+
});
|
1310 |
+
|
1311 |
+
cached_clone_range = clone_range;
|
1312 |
+
}
|
1313 |
+
}
|
1314 |
+
/* function ui_input_focus_handler(e) {
|
1315 |
+
if (e.target != focus_input) {
|
1316 |
+
focus_input = false;
|
1317 |
+
ui_input_release_handler(e);
|
1318 |
+
}
|
1319 |
+
} */
|
1320 |
+
|
1321 |
+
function ui_input_release_handler(e) {
|
1322 |
+
const len = active_clone_input.length;
|
1323 |
+
if (focus_input) {
|
1324 |
+
return;
|
1325 |
+
}
|
1326 |
+
if (len > 0) {
|
1327 |
+
if (e.target.id.indexOf("_clone") == -1) {
|
1328 |
+
for (var i = len - 1; i >= 0; i--) {
|
1329 |
+
let relem = active_clone_input[i];
|
1330 |
+
relem.previousElementSibling.classList.remove("hidden");
|
1331 |
+
relem.remove();
|
1332 |
+
active_clone_input.pop();
|
1333 |
+
}
|
1334 |
+
}
|
1335 |
+
}
|
1336 |
+
|
1337 |
+
let elem_type = e.target.tagName;
|
1338 |
+
if (elem_type == "INPUT") {
|
1339 |
+
let elem = e.target;
|
1340 |
+
if (elem.type == "number") {
|
1341 |
+
ui_input_release_component(elem);
|
1342 |
+
} else if (elem.type == "range") {
|
1343 |
+
elem = e.target.parentElement.querySelector("input[type='number']");
|
1344 |
+
if (elem) {
|
1345 |
+
ui_input_release_component(elem);
|
1346 |
+
}
|
1347 |
+
}
|
1348 |
+
}
|
1349 |
+
}
|
1350 |
+
let timeoutId;
|
1351 |
+
|
1352 |
+
function ui_input_touchmove_handler(e) {
|
1353 |
+
if (cached_clone_range && cached_clone_num) {
|
1354 |
+
if (e.touches) {
|
1355 |
+
const rect = cached_clone_range.getBoundingClientRect();
|
1356 |
+
const xoffset_min = rect.left + window.scrollX;
|
1357 |
+
//const xoffset_max = (rect.right + window.scrollX);
|
1358 |
+
//const yoffset_min = (rect.top + window.scrollY);
|
1359 |
+
//const yoffset_max = (rect.bottom + window.scrollY);
|
1360 |
+
//if( e.touches[0].pageY > yoffset_min && e.touches[0].pageY < yoffset_max && e.touches[0].pageX > xoffset_min && e.touches[0].pageX < xoffset_max){
|
1361 |
+
e.preventDefault();
|
1362 |
+
const percent =
|
1363 |
+
parseInt(((e.touches[0].pageX - xoffset_min) / rect.width) * 10000) /
|
1364 |
+
10000;
|
1365 |
+
cached_clone_range.value =
|
1366 |
+
percent * (cached_clone_range.max - cached_clone_range.min) +
|
1367 |
+
parseFloat(cached_clone_range.min);
|
1368 |
+
cached_clone_num.value = cached_clone_range.value;
|
1369 |
+
//}
|
1370 |
+
}
|
1371 |
+
}
|
1372 |
+
}
|
1373 |
+
function ui_input_touchend_handler(e) {
|
1374 |
+
if (cached_clone_range && cached_clone_num) {
|
1375 |
+
const elem = cached_clone_range.previousElementSibling;
|
1376 |
+
elem.value = cached_clone_range.value;
|
1377 |
+
updateInput(elem);
|
1378 |
+
}
|
1379 |
+
}
|
1380 |
+
|
1381 |
+
function slider_contextmenu(e) {
|
1382 |
+
e.preventDefault();
|
1383 |
+
}
|
1384 |
+
function slider_touchend(e) {
|
1385 |
+
if (timeoutId) clearTimeout(timeoutId);
|
1386 |
+
}
|
1387 |
+
function slider_touchmove(e) {
|
1388 |
+
if (timeoutId) clearTimeout(timeoutId);
|
1389 |
+
}
|
1390 |
+
function slider_touchstart(e) {
|
1391 |
+
const gcontainer = e.target;
|
1392 |
+
//gcontainer.removeEventListener('contextmenu', slider_contextmenu);
|
1393 |
+
gcontainer.removeEventListener("touchend", slider_touchend);
|
1394 |
+
gcontainer.removeEventListener("touchmove", slider_touchmove);
|
1395 |
+
gcontainer.removeEventListener("touchend", ui_input_touchend_handler);
|
1396 |
+
gcontainer.removeEventListener("touchmove", ui_input_touchmove_handler);
|
1397 |
+
|
1398 |
+
timeoutId = setTimeout(function () {
|
1399 |
+
timeoutId = null;
|
1400 |
+
focus_input = false;
|
1401 |
+
e.stopPropagation();
|
1402 |
+
ui_input_release_handler(e);
|
1403 |
+
ui_input_touchmove_handler(e);
|
1404 |
+
gcontainer.addEventListener("touchmove", ui_input_touchmove_handler, {
|
1405 |
+
passive: false,
|
1406 |
+
});
|
1407 |
+
gcontainer.addEventListener("touchend", ui_input_touchend_handler);
|
1408 |
+
}, 500);
|
1409 |
+
|
1410 |
+
//gcontainer.addEventListener('contextmenu', slider_contextmenu);
|
1411 |
+
gcontainer.addEventListener("touchend", slider_touchend);
|
1412 |
+
gcontainer.addEventListener("touchmove", slider_touchmove, {
|
1413 |
+
passive: false,
|
1414 |
+
});
|
1415 |
+
}
|
1416 |
+
|
1417 |
+
function ui_dispatch_input_release(value) {
|
1418 |
+
const gcontainer = gradioApp().querySelector(".gradio-container");
|
1419 |
+
if (value) {
|
1420 |
+
gcontainer.addEventListener("mouseover", ui_input_release_handler);
|
1421 |
+
gcontainer.addEventListener("touchstart", slider_touchstart, {
|
1422 |
+
passive: false,
|
1423 |
+
});
|
1424 |
+
} else {
|
1425 |
+
gcontainer.removeEventListener("mouseover", ui_input_release_handler);
|
1426 |
+
gcontainer.removeEventListener("touchstart", slider_touchstart);
|
1427 |
+
//gcontainer.removeEventListener('contextmenu', slider_contextmenu);
|
1428 |
+
gcontainer.removeEventListener("touchend", slider_touchend);
|
1429 |
+
gcontainer.removeEventListener("touchmove", slider_touchmove);
|
1430 |
+
gcontainer.removeEventListener("touchend", ui_input_touchend_handler);
|
1431 |
+
gcontainer.removeEventListener("touchmove", ui_input_touchmove_handler);
|
1432 |
+
}
|
1433 |
+
}
|
1434 |
+
gradioApp()
|
1435 |
+
.querySelector("#setting_ui_dispatch_input_release input")
|
1436 |
+
.addEventListener("click", function (e) {
|
1437 |
+
ui_dispatch_input_release(e.target.checked);
|
1438 |
+
});
|
1439 |
+
ui_dispatch_input_release(opts.ui_dispatch_input_release);
|
1440 |
+
|
1441 |
+
// step ticks for performant input range
|
1442 |
+
function ui_show_range_ticks(value, interactive) {
|
1443 |
+
if (value) {
|
1444 |
+
const range_selectors = "input[type='range']";
|
1445 |
+
//const range_selectors = "[id$='_clone']:is(input[type='range'])";
|
1446 |
+
gradioApp()
|
1447 |
+
.querySelectorAll(range_selectors)
|
1448 |
+
.forEach(function (elem) {
|
1449 |
+
let spacing = (elem.step / (elem.max - elem.min)) * 100.0;
|
1450 |
+
let tsp = "max(3px, calc(" + spacing + "% - 1px))";
|
1451 |
+
let fsp = "max(4px, calc(" + spacing + "% + 0px))";
|
1452 |
+
var style = elem.style;
|
1453 |
+
style.setProperty(
|
1454 |
+
"--ae-slider-bg-overlay",
|
1455 |
+
"repeating-linear-gradient( 90deg, transparent, transparent " +
|
1456 |
+
tsp +
|
1457 |
+
", var(--ae-input-border-color) " +
|
1458 |
+
tsp +
|
1459 |
+
", var(--ae-input-border-color) " +
|
1460 |
+
fsp +
|
1461 |
+
" )"
|
1462 |
+
);
|
1463 |
+
});
|
1464 |
+
} else if (interactive) {
|
1465 |
+
gradioApp()
|
1466 |
+
.querySelectorAll("input[type='range']")
|
1467 |
+
.forEach(function (elem) {
|
1468 |
+
var style = elem.style;
|
1469 |
+
style.setProperty("--ae-slider-bg-overlay", "transparent");
|
1470 |
+
});
|
1471 |
+
}
|
1472 |
+
}
|
1473 |
+
gradioApp()
|
1474 |
+
.querySelector("#setting_ui_show_range_ticks input")
|
1475 |
+
.addEventListener("click", function (e) {
|
1476 |
+
ui_show_range_ticks(e.target.checked, true);
|
1477 |
+
});
|
1478 |
+
ui_show_range_ticks(opts.ui_show_range_ticks);
|
1479 |
+
|
1480 |
+
const gradio_main = gradioApp().querySelector(".gradio-container > div.main");
|
1481 |
+
function ui_no_slider_layout(value) {
|
1482 |
+
if (value) {
|
1483 |
+
gradio_main.classList.add("no-slider-layout");
|
1484 |
+
} else {
|
1485 |
+
gradio_main.classList.remove("no-slider-layout");
|
1486 |
+
}
|
1487 |
+
}
|
1488 |
+
gradioApp()
|
1489 |
+
.querySelector("#setting_ui_no_slider_layout input")
|
1490 |
+
.addEventListener("click", function (e) {
|
1491 |
+
ui_no_slider_layout(e.target.checked, true);
|
1492 |
+
});
|
1493 |
+
ui_no_slider_layout(opts.ui_no_slider_layout);
|
1494 |
+
|
1495 |
+
// draggable reordable quicksettings
|
1496 |
+
const container = gradioApp().querySelector(
|
1497 |
+
"#quicksettings_overflow_container"
|
1498 |
+
);
|
1499 |
+
let draggables;
|
1500 |
+
let lastElemAfter;
|
1501 |
+
let islastChild;
|
1502 |
+
let timeout;
|
1503 |
+
|
1504 |
+
function preventBehavior(e) {
|
1505 |
+
e.stopPropagation();
|
1506 |
+
e.preventDefault();
|
1507 |
+
return false;
|
1508 |
+
}
|
1509 |
+
let sdCheckpointModels = [];
|
1510 |
+
function getSdCheckpointModels() {
|
1511 |
+
gradioApp()
|
1512 |
+
.querySelectorAll("#txt2img_checkpoints_cards .card")
|
1513 |
+
.forEach(function (elem, i) {
|
1514 |
+
sdCheckpointModels[i] = elem.getAttribute("onclick").split('"')[1];
|
1515 |
+
});
|
1516 |
+
}
|
1517 |
+
getSdCheckpointModels();
|
1518 |
+
|
1519 |
+
function remove_overrides() {
|
1520 |
+
let checked_overrides = [];
|
1521 |
+
gradioApp()
|
1522 |
+
.querySelectorAll("#setting_ignore_overrides input")
|
1523 |
+
.forEach(function (elem, i) {
|
1524 |
+
if (elem.checked) {
|
1525 |
+
checked_overrides[i] = elem.nextElementSibling.innerHTML;
|
1526 |
+
}
|
1527 |
+
});
|
1528 |
+
//console.log(checked_overrides);
|
1529 |
+
gradioApp()
|
1530 |
+
.querySelectorAll("[id$='2img_override_settings'] .token")
|
1531 |
+
.forEach(function (token) {
|
1532 |
+
let token_arr = token.querySelector("span").innerHTML.split(":");
|
1533 |
+
let token_name = token_arr[0];
|
1534 |
+
let token_value = token_arr[1];
|
1535 |
+
token_value = token_value.replaceAll(" ", "");
|
1536 |
+
|
1537 |
+
if (token_name.indexOf("Model hash") != -1) {
|
1538 |
+
const info_label = gradioApp().querySelector(
|
1539 |
+
"[id$='2img_override_settings'] label span"
|
1540 |
+
);
|
1541 |
+
info_label.innerHTML = "Override settings MDL: unknown";
|
1542 |
+
for (let m = 0; m < sdCheckpointModels.length; m++) {
|
1543 |
+
let m_str = sdCheckpointModels[m];
|
1544 |
+
if (m_str.indexOf(token_value) != -1) {
|
1545 |
+
info_label.innerHTML =
|
1546 |
+
"Override settings <i>MDL: " + m_str.split("[")[0] + "</i>";
|
1547 |
+
break;
|
1548 |
+
}
|
1549 |
+
}
|
1550 |
+
}
|
1551 |
+
if (checked_overrides.indexOf(token_name) != -1) {
|
1552 |
+
token.querySelector(".token-remove").click();
|
1553 |
+
gradioApp()
|
1554 |
+
.querySelector(
|
1555 |
+
"#" + selectedTabItemId + " [id$='2img_override_settings']"
|
1556 |
+
)
|
1557 |
+
.parentElement.classList.add("show");
|
1558 |
+
} else {
|
1559 |
+
// maybe we add them again, for now we can select and add the removed tokens manually from the drop down
|
1560 |
+
}
|
1561 |
+
});
|
1562 |
+
}
|
1563 |
+
gradioApp()
|
1564 |
+
.querySelector("#setting_ignore_overrides")
|
1565 |
+
.addEventListener("click", function (e) {
|
1566 |
+
setTimeout(function () {
|
1567 |
+
remove_overrides();
|
1568 |
+
}, 100);
|
1569 |
+
});
|
1570 |
+
|
1571 |
+
function update_input_fields(tab) {
|
1572 |
+
/*
|
1573 |
+
let input_selectors = "#tab_"+ tab + " [id^='num_clone']:is(input[type='number'])";
|
1574 |
+
gradioApp().querySelectorAll(input_selectors).forEach(function (elem){
|
1575 |
+
let elem_source = elem.previousElementSibling;
|
1576 |
+
elem.value = elem_source.value;
|
1577 |
+
updateInput(elem);
|
1578 |
+
})
|
1579 |
+
*/
|
1580 |
+
remove_overrides();
|
1581 |
+
autoGrowPromptTextarea();
|
1582 |
+
}
|
1583 |
+
|
1584 |
+
gradioApp()
|
1585 |
+
.querySelectorAll(
|
1586 |
+
"#tab_pnginfo #png_2img_results button, [id$='2img_actions_column'] #paste"
|
1587 |
+
)
|
1588 |
+
.forEach(function (elem) {
|
1589 |
+
elem.addEventListener("click", function (e) {
|
1590 |
+
let button_id;
|
1591 |
+
if (e.target.id == "paste") {
|
1592 |
+
button_id = e.target.nextElementSibling.id.split("_")[0];
|
1593 |
+
} else {
|
1594 |
+
button_id = e.target.id.split("_")[0];
|
1595 |
+
}
|
1596 |
+
setTimeout(function () {
|
1597 |
+
update_input_fields(button_id);
|
1598 |
+
}, 500);
|
1599 |
+
});
|
1600 |
+
});
|
1601 |
+
|
1602 |
+
const pnginfo = gradioApp().querySelector("#tab_pnginfo");
|
1603 |
+
function forwardFromPngInfo() {
|
1604 |
+
if (selectedTabItemId == "tab_txt2img") {
|
1605 |
+
pnginfo.querySelector("#txt2img_tab").click();
|
1606 |
+
//close generation info
|
1607 |
+
gradioApp()
|
1608 |
+
.querySelector(
|
1609 |
+
"#txt2img_results > div:last-child > div.gradio-accordion > div.hide"
|
1610 |
+
)
|
1611 |
+
?.click();
|
1612 |
+
|
1613 |
+
const img_src = pnginfo.querySelector("img");
|
1614 |
+
const gallery_parent = gradioApp().querySelector(
|
1615 |
+
"#txt2img_gallery_container"
|
1616 |
+
);
|
1617 |
+
const live_preview = gallery_parent.querySelector(".livePreview");
|
1618 |
+
if (live_preview) {
|
1619 |
+
live_preview.innerHTML =
|
1620 |
+
'<img width="' +
|
1621 |
+
img_src.width +
|
1622 |
+
'" height="' +
|
1623 |
+
img_src.height +
|
1624 |
+
'" src="' +
|
1625 |
+
img_src.src +
|
1626 |
+
'">';
|
1627 |
+
} else {
|
1628 |
+
const div = document.createElement("div");
|
1629 |
+
div.classList.add("livePreview", "dropPreview");
|
1630 |
+
div.innerHTML =
|
1631 |
+
'<img width="' +
|
1632 |
+
img_src.width +
|
1633 |
+
'" height="' +
|
1634 |
+
img_src.height +
|
1635 |
+
'" src="' +
|
1636 |
+
img_src.src +
|
1637 |
+
'">';
|
1638 |
+
gallery_parent.prepend(div);
|
1639 |
+
}
|
1640 |
+
} else if (selectedTabItemId == "tab_img2img") {
|
1641 |
+
pnginfo.querySelector("#img2img_tab").click();
|
1642 |
+
//close generation info
|
1643 |
+
gradioApp()
|
1644 |
+
.querySelector(
|
1645 |
+
"#img2img_results > div:last-child > div.gradio-accordion > div.hide"
|
1646 |
+
)
|
1647 |
+
?.click();
|
1648 |
+
}
|
1649 |
+
}
|
1650 |
+
|
1651 |
+
function fetchPngInfoData(files) {
|
1652 |
+
/* const oldFetch = window.fetch;
|
1653 |
+
|
1654 |
+
window.fetch = async (input, options) => {
|
1655 |
+
const response = await oldFetch(input, options);
|
1656 |
+
if( 'run/predict/' === input ) {
|
1657 |
+
if(response.ok){
|
1658 |
+
window.fetch = oldFetch;
|
1659 |
+
}
|
1660 |
+
}
|
1661 |
+
return response;
|
1662 |
+
}; */
|
1663 |
+
|
1664 |
+
const fileInput = gradioApp().querySelector(
|
1665 |
+
'#pnginfo_image input[type="file"]'
|
1666 |
+
);
|
1667 |
+
if (fileInput.files != files) {
|
1668 |
+
fileInput.files = files;
|
1669 |
+
fileInput.dispatchEvent(new Event("change"));
|
1670 |
+
}
|
1671 |
+
|
1672 |
+
setTimeout(function () {
|
1673 |
+
forwardFromPngInfo();
|
1674 |
+
}, 500);
|
1675 |
+
}
|
1676 |
+
|
1677 |
+
function drop2View(e) {
|
1678 |
+
e.stopPropagation();
|
1679 |
+
e.preventDefault();
|
1680 |
+
const files = e.dataTransfer.files;
|
1681 |
+
|
1682 |
+
if (!isValidImageList(files)) {
|
1683 |
+
return;
|
1684 |
+
}
|
1685 |
+
const data_image = gradioApp().querySelector(
|
1686 |
+
'#pnginfo_image [data-testid="image"]'
|
1687 |
+
);
|
1688 |
+
data_image.querySelector('[aria-label="Clear"]')?.click();
|
1689 |
+
setTimeout(function () {
|
1690 |
+
fetchPngInfoData(files);
|
1691 |
+
}, 1000);
|
1692 |
+
}
|
1693 |
+
|
1694 |
+
gradioApp()
|
1695 |
+
.querySelectorAll('[id$="2img_results"]')
|
1696 |
+
.forEach((elem) => {
|
1697 |
+
elem.addEventListener("drop", drop2View);
|
1698 |
+
});
|
1699 |
+
|
1700 |
+
// function that gets the element next of cursor/touch
|
1701 |
+
function getElementAfter(container, y) {
|
1702 |
+
return draggables.reduce(
|
1703 |
+
(closest, child) => {
|
1704 |
+
const box = child.getBoundingClientRect();
|
1705 |
+
const offset = y - box.top - box.height / 2;
|
1706 |
+
if (offset < 0 && offset > closest.offset) {
|
1707 |
+
return { offset: offset, element: child };
|
1708 |
+
} else {
|
1709 |
+
return closest;
|
1710 |
+
}
|
1711 |
+
},
|
1712 |
+
{ offset: Number.NEGATIVE_INFINITY }
|
1713 |
+
).element;
|
1714 |
+
}
|
1715 |
+
|
1716 |
+
function dragOrderChange(elementAfter, isComplete, delem) {
|
1717 |
+
if (lastElemAfter !== elementAfter || islastChild) {
|
1718 |
+
if (lastElemAfter != null) {
|
1719 |
+
lastElemAfter.classList.remove("marker-top", "marker-bottom");
|
1720 |
+
}
|
1721 |
+
|
1722 |
+
if (elementAfter == null) {
|
1723 |
+
islastChild = true;
|
1724 |
+
lastElemAfter.classList.add("marker-bottom");
|
1725 |
+
} else {
|
1726 |
+
islastChild = false;
|
1727 |
+
elementAfter.classList.add("marker-top");
|
1728 |
+
lastElemAfter = elementAfter;
|
1729 |
+
}
|
1730 |
+
}
|
1731 |
+
|
1732 |
+
if (isComplete) {
|
1733 |
+
if (elementAfter == null) {
|
1734 |
+
container.append(delem);
|
1735 |
+
} else {
|
1736 |
+
container.insertBefore(delem, elementAfter);
|
1737 |
+
}
|
1738 |
+
|
1739 |
+
let order_settings = "";
|
1740 |
+
|
1741 |
+
gradioApp()
|
1742 |
+
.querySelectorAll("#quicksettings_overflow_container > div")
|
1743 |
+
.forEach(function (el) {
|
1744 |
+
el.classList.remove("marker-top", "marker-bottom", "dragging");
|
1745 |
+
order_settings += el.id.split("row_setting_")[1] + ",";
|
1746 |
+
});
|
1747 |
+
//console.log(order_settings);
|
1748 |
+
const setting_quicksettings = gradioApp().querySelector(
|
1749 |
+
"#setting_quicksettings textarea"
|
1750 |
+
);
|
1751 |
+
setting_quicksettings.value = order_settings;
|
1752 |
+
updateInput(setting_quicksettings);
|
1753 |
+
|
1754 |
+
const cEvent = new Event("click"); //submit
|
1755 |
+
Object.defineProperty(cEvent, "target", { value: settings_submit });
|
1756 |
+
settings_submit.dispatchEvent(cEvent);
|
1757 |
+
|
1758 |
+
container.classList.remove("no-scroll");
|
1759 |
+
}
|
1760 |
+
}
|
1761 |
+
|
1762 |
+
function touchmove(e) {
|
1763 |
+
let y = e.touches[0].clientY;
|
1764 |
+
let elementAfter = getElementAfter(container, y);
|
1765 |
+
dragOrderChange(elementAfter);
|
1766 |
+
}
|
1767 |
+
function touchstart(e) {
|
1768 |
+
e.currentTarget.draggable = "false";
|
1769 |
+
let target = e.currentTarget;
|
1770 |
+
// touch should be hold for 1 second
|
1771 |
+
timeout = setTimeout(function () {
|
1772 |
+
target.classList.add("dragging");
|
1773 |
+
container.classList.add("no-scroll");
|
1774 |
+
target.addEventListener("touchmove", touchmove);
|
1775 |
+
container.addEventListener("touchmove", preventBehavior, {
|
1776 |
+
passive: false,
|
1777 |
+
});
|
1778 |
+
}, 1000);
|
1779 |
+
|
1780 |
+
target.addEventListener("touchend", touchend);
|
1781 |
+
target.addEventListener("touchcancel", touchcancel);
|
1782 |
+
}
|
1783 |
+
function touchend(e) {
|
1784 |
+
e.currentTarget.draggable = "true";
|
1785 |
+
clearTimeout(timeout);
|
1786 |
+
e.currentTarget.removeEventListener("touchmove", touchmove);
|
1787 |
+
container.removeEventListener("touchmove", preventBehavior);
|
1788 |
+
let y = e.changedTouches[0].clientY;
|
1789 |
+
let elementAfter = getElementAfter(container, y);
|
1790 |
+
dragOrderChange(elementAfter, true, e.currentTarget);
|
1791 |
+
}
|
1792 |
+
function touchcancel(e) {
|
1793 |
+
e.currentTarget.draggable = "true";
|
1794 |
+
clearTimeout(timeout);
|
1795 |
+
e.currentTarget.classList.remove("dragging");
|
1796 |
+
e.currentTarget.removeEventListener("touchmove", touchmove);
|
1797 |
+
container.removeEventListener("touchmove", preventBehavior);
|
1798 |
+
}
|
1799 |
+
|
1800 |
+
function dragstart(e) {
|
1801 |
+
e.currentTarget.draggable = "false";
|
1802 |
+
e.currentTarget.classList.add("dragging");
|
1803 |
+
}
|
1804 |
+
function dragend(e) {
|
1805 |
+
e.stopPropagation();
|
1806 |
+
e.preventDefault();
|
1807 |
+
e.currentTarget.draggable = "true";
|
1808 |
+
let y = e.clientY;
|
1809 |
+
let elementAfter = getElementAfter(container, y);
|
1810 |
+
dragOrderChange(elementAfter, true, e.currentTarget);
|
1811 |
+
}
|
1812 |
+
function dragOver(e) {
|
1813 |
+
e.preventDefault();
|
1814 |
+
let y = e.clientY;
|
1815 |
+
let elementAfter = getElementAfter(container, y);
|
1816 |
+
dragOrderChange(elementAfter);
|
1817 |
+
}
|
1818 |
+
|
1819 |
+
function actionQuickSettingsDraggable(checked) {
|
1820 |
+
if (checked) {
|
1821 |
+
draggables = Array.from(
|
1822 |
+
gradioApp().querySelectorAll(
|
1823 |
+
"#quicksettings_overflow_container > div:not(.dragging)"
|
1824 |
+
)
|
1825 |
+
);
|
1826 |
+
gradioApp().addEventListener("drop", preventBehavior);
|
1827 |
+
} else {
|
1828 |
+
gradioApp().removeEventListener("drop", preventBehavior);
|
1829 |
+
}
|
1830 |
+
|
1831 |
+
gradioApp()
|
1832 |
+
.querySelectorAll("#quicksettings_overflow_container > div")
|
1833 |
+
.forEach(function (elem) {
|
1834 |
+
elem.draggable = checked;
|
1835 |
+
if (checked) {
|
1836 |
+
elem.addEventListener("touchstart", touchstart);
|
1837 |
+
elem.addEventListener("dragstart", dragstart);
|
1838 |
+
elem.addEventListener("dragend", dragend);
|
1839 |
+
elem.addEventListener("dragover", dragOver);
|
1840 |
+
} else {
|
1841 |
+
elem.removeEventListener("touchstart", touchstart, false);
|
1842 |
+
elem.removeEventListener("touchend", touchend, false);
|
1843 |
+
elem.removeEventListener("touchcancel", touchcancel, false);
|
1844 |
+
elem.removeEventListener("touchmove", touchmove, false);
|
1845 |
+
elem.removeEventListener("dragstart", dragstart, false);
|
1846 |
+
elem.removeEventListener("dragend", dragend, false);
|
1847 |
+
elem.removeEventListener("dragover", dragOver, false);
|
1848 |
+
}
|
1849 |
+
});
|
1850 |
+
}
|
1851 |
+
|
1852 |
+
gradioApp()
|
1853 |
+
.querySelector("#quicksettings_draggable")
|
1854 |
+
.addEventListener("click", function (e) {
|
1855 |
+
if (e.target && e.target.matches("input[type='checkbox']")) {
|
1856 |
+
actionQuickSettingsDraggable(e.target.checked);
|
1857 |
+
}
|
1858 |
+
});
|
1859 |
+
|
1860 |
+
updateOpStyles();
|
1861 |
+
|
1862 |
+
/* anapnoe ui end */
|
1863 |
+
});
|
1864 |
+
|
1865 |
+
onOptionsChanged(function() {
|
1866 |
+
var elem = gradioApp().getElementById('sd_checkpoint_hash');
|
1867 |
+
var sd_checkpoint_hash = opts.sd_checkpoint_hash || "";
|
1868 |
+
var shorthash = sd_checkpoint_hash.substring(0, 10);
|
1869 |
+
|
1870 |
+
if (elem && elem.textContent != shorthash) {
|
1871 |
+
elem.textContent = shorthash;
|
1872 |
+
elem.title = sd_checkpoint_hash;
|
1873 |
+
elem.href = "https://google.com/search?q=" + sd_checkpoint_hash;
|
1874 |
+
}
|
1875 |
+
});
|
1876 |
+
|
1877 |
+
let txt2img_textarea, img2img_textarea = undefined;
|
1878 |
+
let wait_time = 800;
|
1879 |
+
let token_timeouts = {};
|
1880 |
+
|
1881 |
+
function update_txt2img_tokens(...args) {
|
1882 |
+
update_token_counter("txt2img_token_button");
|
1883 |
+
if (args.length == 2) {
|
1884 |
+
return args[0];
|
1885 |
+
}
|
1886 |
+
return args;
|
1887 |
+
}
|
1888 |
+
|
1889 |
+
function update_img2img_tokens(...args) {
|
1890 |
+
update_token_counter(
|
1891 |
+
"img2img_token_button"
|
1892 |
+
);
|
1893 |
+
if (args.length == 2) {
|
1894 |
+
return args[0];
|
1895 |
+
}
|
1896 |
+
return args;
|
1897 |
+
}
|
1898 |
+
|
1899 |
+
function update_token_counter(button_id) {
|
1900 |
+
if (token_timeouts[button_id]) {
|
1901 |
+
clearTimeout(token_timeouts[button_id]);
|
1902 |
+
}
|
1903 |
+
token_timeouts[button_id] = setTimeout(() => gradioApp().getElementById(button_id)?.click(), wait_time);
|
1904 |
+
}
|
1905 |
+
|
1906 |
+
|
1907 |
+
|
1908 |
+
function restart_reload() {
|
1909 |
+
let bg_color = window
|
1910 |
+
.getComputedStyle(gradioApp().querySelector("#header-top"))
|
1911 |
+
.getPropertyValue("--ae-main-bg-color");
|
1912 |
+
let primary_color = window
|
1913 |
+
.getComputedStyle(gradioApp().querySelector(".icon-info"))
|
1914 |
+
.getPropertyValue("--ae-primary-color");
|
1915 |
+
let panel_color = window
|
1916 |
+
.getComputedStyle(gradioApp().querySelector(".gradio-box"))
|
1917 |
+
.getPropertyValue("--ae-panel-bg-color");
|
1918 |
+
|
1919 |
+
localStorage.setItem("bg_color", bg_color);
|
1920 |
+
localStorage.setItem("primary_color", primary_color);
|
1921 |
+
localStorage.setItem("panel_color", panel_color);
|
1922 |
+
|
1923 |
+
if (localStorage.hasOwnProperty("bg_color")) {
|
1924 |
+
bg_color = localStorage.getItem("bg_color");
|
1925 |
+
primary_color = localStorage.getItem("primary_color");
|
1926 |
+
panel_color = localStorage.getItem("panel_color");
|
1927 |
+
}
|
1928 |
+
|
1929 |
+
document.body.style.backgroundColor = bg_color;
|
1930 |
+
|
1931 |
+
let style = document.createElement("style");
|
1932 |
+
style.type = "text/css";
|
1933 |
+
style.innerHTML =
|
1934 |
+
".loader{position:absolute;top:50vh;left:50vw;height:60px;width:160px;margin:0;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)} .circles{position:absolute;left:-5px;top:0;height:60px;width:180px} .circles span{position:absolute;top:25px;height:12px;width:12px;border-radius:12px;background-color:" +
|
1935 |
+
panel_color +
|
1936 |
+
"} .circles span.one{right:80px} .circles span.two{right:40px} .circles span.three{right:0px} .circles{-webkit-animation:animcircles 0.5s infinite linear;animation:animcircles 0.5s infinite linear} @-webkit-keyframes animcircles{0%{-webkit-transform:translate(0px,0px);transform:translate(0px,0px)}100%{-webkit-transform:translate(-40px,0px);transform:translate(-40px,0px)}} @keyframes animcircles{0%{-webkit-transform:translate(0px,0px);transform:translate(0px,0px)}100%{-webkit-transform:translate(-40px,0px);transform:translate(-40px,0px)}} .pacman{position:absolute;left:0;top:0;height:60px;width:60px} .pacman .eye{position:absolute;top:10px;left:30px;height:7px;width:7px;border-radius:7px;background-color:" +
|
1937 |
+
bg_color +
|
1938 |
+
'} .pacman span{position:absolute;top:0;left:0;height:60px;width:60px} .pacman span::before{content:"";position:absolute;left:0;height:30px;width:60px;background-color:' +
|
1939 |
+
primary_color +
|
1940 |
+
"} .pacman .top::before{top:0;border-radius:60px 60px 0px 0px} .pacman .bottom::before{bottom:0;border-radius:0px 0px 60px 60px} .pacman .left::before{bottom:0;height:60px;width:30px;border-radius:60px 0px 0px 60px} .pacman .top{-webkit-animation:animtop 0.5s infinite;animation:animtop 0.5s infinite} @-webkit-keyframes animtop{0%,100%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}50%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}} @keyframes animtop{0%,100%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}50%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}} .pacman .bottom{-webkit-animation:animbottom 0.5s infinite;animation:animbottom 0.5s infinite} @-webkit-keyframes animbottom{0%,100%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}50%{-webkit-transform:rotate(45deg);transform:rotate(45deg)}} @keyframes animbottom{0%,100%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}50%{-webkit-transform:rotate(45deg);transform:rotate(45deg)}}";
|
1941 |
+
|
1942 |
+
document.getElementsByTagName("head")[0].appendChild(style);
|
1943 |
+
document.body.innerHTML =
|
1944 |
+
'<div class="loader"><div class="circles"><span class="one"></span><span class="two"></span><span class="three"></span></div><div class="pacman"><span class="top"></span><span class="bottom"></span><span class="left"></span><div class="eye"></div></div></div>';
|
1945 |
+
|
1946 |
+
var requestPing = function () {
|
1947 |
+
requestGet(
|
1948 |
+
"./internal/ping",
|
1949 |
+
{},
|
1950 |
+
function (data) {
|
1951 |
+
location.reload();
|
1952 |
+
},
|
1953 |
+
function () {
|
1954 |
+
setTimeout(requestPing, 500);
|
1955 |
+
}
|
1956 |
+
);
|
1957 |
+
};
|
1958 |
+
|
1959 |
+
setTimeout(requestPing, 2000);
|
1960 |
+
|
1961 |
+
return [];
|
1962 |
+
}
|
1963 |
+
|
1964 |
+
// Simulate an `input` DOM event for Gradio Textbox component. Needed after you edit its contents in javascript, otherwise your edits
|
1965 |
+
// will only visible on web page and not sent to python.
|
1966 |
+
function updateInput(target) {
|
1967 |
+
const e = new Event("input", { bubbles: true });
|
1968 |
+
Object.defineProperty(e, "target", { value: target });
|
1969 |
+
target.dispatchEvent(e);
|
1970 |
+
const eb = new Event("blur");
|
1971 |
+
Object.defineProperty(eb, "target", { value: target });
|
1972 |
+
target.dispatchEvent(eb);
|
1973 |
+
}
|
1974 |
+
|
1975 |
+
document.addEventListener("readystatechange", function (e) {
|
1976 |
+
document.body.style.display = "none";
|
1977 |
+
if (localStorage.hasOwnProperty("bg_color")) {
|
1978 |
+
document.getElementsByTagName("html")[0].style.backgroundColor =
|
1979 |
+
localStorage.getItem("bg_color");
|
1980 |
+
document.body.style.backgroundColor = localStorage.getItem("bg_color");
|
1981 |
+
}
|
1982 |
+
});
|
1983 |
+
|
1984 |
+
window.onload = function () {
|
1985 |
+
document.getElementsByTagName("html")[0].style.backgroundColor =
|
1986 |
+
localStorage.getItem("bg_color");
|
1987 |
+
document.body.style.backgroundColor = localStorage.getItem("bg_color");
|
1988 |
+
document.body.style.display = "none";
|
1989 |
+
document.body.classList.add("dark");
|
1990 |
+
setTimeout(function () {
|
1991 |
+
document.body.style.display = "block";
|
1992 |
+
}, 1000);
|
1993 |
+
};
|
1994 |
+
|
1995 |
+
var desiredCheckpointName = null;
|
1996 |
+
function selectCheckpoint(name) {
|
1997 |
+
desiredCheckpointName = name;
|
1998 |
+
gradioApp().getElementById('change_checkpoint').click();
|
1999 |
+
}
|
2000 |
+
|
2001 |
+
function currentImg2imgSourceResolution(w, h, scaleBy) {
|
2002 |
+
var img = gradioApp().querySelector('#mode_img2img > div[style="display: block;"] img');
|
2003 |
+
return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy];
|
2004 |
+
}
|
2005 |
+
|
2006 |
+
function updateImg2imgResizeToTextAfterChangingImage() {
|
2007 |
+
// At the time this is called from gradio, the image has no yet been replaced.
|
2008 |
+
// There may be a better solution, but this is simple and straightforward so I'm going with it.
|
2009 |
+
|
2010 |
+
setTimeout(function() {
|
2011 |
+
gradioApp().getElementById('img2img_update_resize_to').click();
|
2012 |
+
}, 500);
|
2013 |
+
|
2014 |
+
return [];
|
2015 |
+
|
2016 |
+
}
|
2017 |
+
|
2018 |
+
|
2019 |
+
|
2020 |
+
function setRandomSeed(elem_id) {
|
2021 |
+
var input = gradioApp().querySelector("#" + elem_id + " input");
|
2022 |
+
if (!input) return [];
|
2023 |
+
|
2024 |
+
input.value = "-1";
|
2025 |
+
updateInput(input);
|
2026 |
+
return [];
|
2027 |
+
}
|
2028 |
+
|
2029 |
+
function switchWidthHeight(tabname) {
|
2030 |
+
var width = gradioApp().querySelector("#" + tabname + "_width input[type=number]");
|
2031 |
+
var height = gradioApp().querySelector("#" + tabname + "_height input[type=number]");
|
2032 |
+
if (!width || !height) return [];
|
2033 |
+
|
2034 |
+
var tmp = width.value;
|
2035 |
+
width.value = height.value;
|
2036 |
+
height.value = tmp;
|
2037 |
+
|
2038 |
+
updateInput(width);
|
2039 |
+
updateInput(height);
|
2040 |
+
return [];
|
2041 |
+
}
|
javascript/ui_settings_hints.js
ADDED
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
var settingsHintsSetup = false;
|
2 |
+
|
3 |
+
onOptionsChanged(function() {
|
4 |
+
if (settingsHintsSetup) return;
|
5 |
+
settingsHintsSetup = true;
|
6 |
+
|
7 |
+
gradioApp().querySelectorAll('#settings [id^=setting_]').forEach(function(div) {
|
8 |
+
var name = div.id.substr(8);
|
9 |
+
var commentBefore = opts._comments_before[name];
|
10 |
+
var commentAfter = opts._comments_after[name];
|
11 |
+
|
12 |
+
if (!commentBefore && !commentAfter) return;
|
13 |
+
|
14 |
+
var span = null;
|
15 |
+
if (div.classList.contains('gradio-checkbox')) span = div.querySelector('label span');
|
16 |
+
else if (div.classList.contains('gradio-checkboxgroup')) span = div.querySelector('span').firstChild;
|
17 |
+
else if (div.classList.contains('gradio-radio')) span = div.querySelector('span').firstChild;
|
18 |
+
else span = div.querySelector('label span').firstChild;
|
19 |
+
|
20 |
+
if (!span) return;
|
21 |
+
|
22 |
+
if (commentBefore) {
|
23 |
+
var comment = document.createElement('DIV');
|
24 |
+
comment.className = 'settings-comment';
|
25 |
+
comment.innerHTML = commentBefore;
|
26 |
+
span.parentElement.insertBefore(document.createTextNode('\xa0'), span);
|
27 |
+
span.parentElement.insertBefore(comment, span);
|
28 |
+
span.parentElement.insertBefore(document.createTextNode('\xa0'), span);
|
29 |
+
}
|
30 |
+
if (commentAfter) {
|
31 |
+
comment = document.createElement('DIV');
|
32 |
+
comment.className = 'settings-comment';
|
33 |
+
comment.innerHTML = commentAfter;
|
34 |
+
span.parentElement.insertBefore(comment, span.nextSibling);
|
35 |
+
span.parentElement.insertBefore(document.createTextNode('\xa0'), span.nextSibling);
|
36 |
+
}
|
37 |
+
});
|
38 |
+
});
|
39 |
+
|
40 |
+
function settingsHintsShowQuicksettings() {
|
41 |
+
requestGet("./internal/quicksettings-hint", {}, function(data) {
|
42 |
+
var table = document.createElement('table');
|
43 |
+
table.className = 'popup-table';
|
44 |
+
|
45 |
+
data.forEach(function(obj) {
|
46 |
+
var tr = document.createElement('tr');
|
47 |
+
var td = document.createElement('td');
|
48 |
+
td.textContent = obj.name;
|
49 |
+
tr.appendChild(td);
|
50 |
+
|
51 |
+
td = document.createElement('td');
|
52 |
+
td.textContent = obj.label;
|
53 |
+
tr.appendChild(td);
|
54 |
+
|
55 |
+
table.appendChild(tr);
|
56 |
+
});
|
57 |
+
|
58 |
+
popup(table);
|
59 |
+
});
|
60 |
+
}
|
launch.py
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from modules import launch_utils
|
2 |
+
|
3 |
+
args = launch_utils.args
|
4 |
+
python = launch_utils.python
|
5 |
+
git = launch_utils.git
|
6 |
+
index_url = launch_utils.index_url
|
7 |
+
dir_repos = launch_utils.dir_repos
|
8 |
+
|
9 |
+
commit_hash = launch_utils.commit_hash
|
10 |
+
git_tag = launch_utils.git_tag
|
11 |
+
|
12 |
+
run = launch_utils.run
|
13 |
+
is_installed = launch_utils.is_installed
|
14 |
+
repo_dir = launch_utils.repo_dir
|
15 |
+
|
16 |
+
run_pip = launch_utils.run_pip
|
17 |
+
check_run_python = launch_utils.check_run_python
|
18 |
+
git_clone = launch_utils.git_clone
|
19 |
+
git_pull_recursive = launch_utils.git_pull_recursive
|
20 |
+
list_extensions = launch_utils.list_extensions
|
21 |
+
run_extension_installer = launch_utils.run_extension_installer
|
22 |
+
prepare_environment = launch_utils.prepare_environment
|
23 |
+
configure_for_tests = launch_utils.configure_for_tests
|
24 |
+
start = launch_utils.start
|
25 |
+
|
26 |
+
|
27 |
+
def main():
|
28 |
+
launch_utils.startup_timer.record("initial startup")
|
29 |
+
|
30 |
+
with launch_utils.startup_timer.subcategory("prepare environment"):
|
31 |
+
if not args.skip_prepare_environment:
|
32 |
+
prepare_environment()
|
33 |
+
|
34 |
+
if args.test_server:
|
35 |
+
configure_for_tests()
|
36 |
+
|
37 |
+
start()
|
38 |
+
|
39 |
+
|
40 |
+
if __name__ == "__main__":
|
41 |
+
main()
|
localizations/Put localization files here.txt
ADDED
File without changes
|
models/Stable-diffusion/3dredux.safetensors
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:40d4f9d626a992a41c6fd354d987bb74ef3667420d92068f2e75a267322d5766
|
3 |
+
size 1965287410
|
models/Stable-diffusion/Put Stable Diffusion checkpoints here.txt
ADDED
File without changes
|