token-counters.js 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. let promptTokenCountDebounceTime = 800;
  2. let promptTokenCountTimeouts = {};
  3. var promptTokenCountUpdateFunctions = {};
  4. function update_txt2img_tokens(...args) {
  5. // Called from Gradio
  6. update_token_counter("txt2img_token_button");
  7. if (args.length == 2) {
  8. return args[0];
  9. }
  10. return args;
  11. }
  12. function update_img2img_tokens(...args) {
  13. // Called from Gradio
  14. update_token_counter("img2img_token_button");
  15. if (args.length == 2) {
  16. return args[0];
  17. }
  18. return args;
  19. }
  20. function update_token_counter(button_id) {
  21. if (opts.disable_token_counters) {
  22. return;
  23. }
  24. if (promptTokenCountTimeouts[button_id]) {
  25. clearTimeout(promptTokenCountTimeouts[button_id]);
  26. }
  27. promptTokenCountTimeouts[button_id] = setTimeout(
  28. () => gradioApp().getElementById(button_id)?.click(),
  29. promptTokenCountDebounceTime,
  30. );
  31. }
  32. function recalculatePromptTokens(name) {
  33. promptTokenCountUpdateFunctions[name]?.();
  34. }
  35. function recalculate_prompts_txt2img() {
  36. // Called from Gradio
  37. recalculatePromptTokens('txt2img_prompt');
  38. recalculatePromptTokens('txt2img_neg_prompt');
  39. return Array.from(arguments);
  40. }
  41. function recalculate_prompts_img2img() {
  42. // Called from Gradio
  43. recalculatePromptTokens('img2img_prompt');
  44. recalculatePromptTokens('img2img_neg_prompt');
  45. return Array.from(arguments);
  46. }
  47. function setupTokenCounting(id, id_counter, id_button) {
  48. var prompt = gradioApp().getElementById(id);
  49. var counter = gradioApp().getElementById(id_counter);
  50. var textarea = gradioApp().querySelector(`#${id} > label > textarea`);
  51. if (opts.disable_token_counters) {
  52. counter.style.display = "none";
  53. return;
  54. }
  55. if (counter.parentElement == prompt.parentElement) {
  56. return;
  57. }
  58. prompt.parentElement.insertBefore(counter, prompt);
  59. prompt.parentElement.style.position = "relative";
  60. promptTokenCountUpdateFunctions[id] = function() {
  61. update_token_counter(id_button);
  62. };
  63. textarea.addEventListener("input", promptTokenCountUpdateFunctions[id]);
  64. }
  65. function setupTokenCounters() {
  66. setupTokenCounting('txt2img_prompt', 'txt2img_token_counter', 'txt2img_token_button');
  67. setupTokenCounting('txt2img_neg_prompt', 'txt2img_negative_token_counter', 'txt2img_negative_token_button');
  68. setupTokenCounting('img2img_prompt', 'img2img_token_counter', 'img2img_token_button');
  69. setupTokenCounting('img2img_neg_prompt', 'img2img_negative_token_counter', 'img2img_negative_token_button');
  70. }