diff options
author | AUTOMATIC1111 <16777216c@gmail.com> | 2023-05-22 05:09:48 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-22 05:09:48 +0000 |
commit | 0cbcc4d82899f8f95493975e9e79f16748105448 (patch) | |
tree | a6c232e89beb10c53ad1c8604ab8fd22951b5ce5 /javascript/token-counters.js | |
parent | ee2f4fb92da56ce5d5d06a78332e7f7da56ee2ae (diff) | |
parent | 618c59b01d8b90794df0aea625de1c1d5d94d407 (diff) | |
download | stable-diffusion-webui-gfx803-0cbcc4d82899f8f95493975e9e79f16748105448.tar.gz stable-diffusion-webui-gfx803-0cbcc4d82899f8f95493975e9e79f16748105448.tar.bz2 stable-diffusion-webui-gfx803-0cbcc4d82899f8f95493975e9e79f16748105448.zip |
Merge pull request #10611 from akx/disable-token-counters
Add option to disable token counters
Diffstat (limited to 'javascript/token-counters.js')
-rw-r--r-- | javascript/token-counters.js | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/javascript/token-counters.js b/javascript/token-counters.js new file mode 100644 index 00000000..9d81a723 --- /dev/null +++ b/javascript/token-counters.js @@ -0,0 +1,83 @@ +let promptTokenCountDebounceTime = 800; +let promptTokenCountTimeouts = {}; +var promptTokenCountUpdateFunctions = {}; + +function update_txt2img_tokens(...args) { + // Called from Gradio + update_token_counter("txt2img_token_button"); + if (args.length == 2) { + return args[0]; + } + return args; +} + +function update_img2img_tokens(...args) { + // Called from Gradio + update_token_counter("img2img_token_button"); + if (args.length == 2) { + return args[0]; + } + return args; +} + +function update_token_counter(button_id) { + if (opts.disable_token_counters) { + return; + } + if (promptTokenCountTimeouts[button_id]) { + clearTimeout(promptTokenCountTimeouts[button_id]); + } + promptTokenCountTimeouts[button_id] = setTimeout( + () => gradioApp().getElementById(button_id)?.click(), + promptTokenCountDebounceTime, + ); +} + + +function recalculatePromptTokens(name) { + promptTokenCountUpdateFunctions[name]?.(); +} + +function recalculate_prompts_txt2img() { + // Called from Gradio + recalculatePromptTokens('txt2img_prompt'); + recalculatePromptTokens('txt2img_neg_prompt'); + return Array.from(arguments); +} + +function recalculate_prompts_img2img() { + // Called from Gradio + recalculatePromptTokens('img2img_prompt'); + recalculatePromptTokens('img2img_neg_prompt'); + return Array.from(arguments); +} + +function setupTokenCounting(id, id_counter, id_button) { + var prompt = gradioApp().getElementById(id); + var counter = gradioApp().getElementById(id_counter); + var textarea = gradioApp().querySelector(`#${id} > label > textarea`); + + if (opts.disable_token_counters) { + counter.style.display = "none"; + return; + } + + if (counter.parentElement == prompt.parentElement) { + return; + } + + prompt.parentElement.insertBefore(counter, prompt); + prompt.parentElement.style.position = "relative"; + + promptTokenCountUpdateFunctions[id] = function() { + update_token_counter(id_button); + }; + textarea.addEventListener("input", promptTokenCountUpdateFunctions[id]); +} + +function setupTokenCounters() { + setupTokenCounting('txt2img_prompt', 'txt2img_token_counter', 'txt2img_token_button'); + setupTokenCounting('txt2img_neg_prompt', 'txt2img_negative_token_counter', 'txt2img_negative_token_button'); + setupTokenCounting('img2img_prompt', 'img2img_token_counter', 'img2img_token_button'); + setupTokenCounting('img2img_neg_prompt', 'img2img_negative_token_counter', 'img2img_negative_token_button'); +} |