(() => {
  function addButtons(txt2img) {
    // generateボタン消すなら下の行コメントアウト解除
    // document.querySelector(`#${txt2img}_generate`).style.display = 'none';

    function createElementFromHTML(html, callback) {
        const tempEl = document.createElement('div');
        tempEl.innerHTML = html;
        const child = tempEl.firstElementChild;
        child.addEventListener('click', callback);
        return child
    }

    const generateButton = document.querySelector(`#${txt2img}_generate`);
    const reuseSeedButton = document.querySelector(`#${txt2img}_reuse_seed`)
    const seedInput = document.querySelector(`#${txt2img}_seed > label > input`);

    const box = document.querySelector(`#${txt2img}_generate_box`);
    box.style.gap = '2px';
    box.append(createElementFromHTML(
      '<button class="lg primary gradio-button svelte-cmf5ev" style="min-width:0;">🎲</button>',
      () => {
        seedInput.value = -1;
        seedInput.dispatchEvent(new Event('input'));
        generateButton.click();
      }
    ));
    box.append(createElementFromHTML(
      '<button class="lg primary gradio-button svelte-cmf5ev" style="min-width:0;"></button>',
      () => {
        reuseSeedButton.click();
        // うまく動作しない場合は1000の部分を大きくする
        setTimeout(() => {
          generateButton.click();
        }, 1000);
      }
    ));
    box.append(createElementFromHTML(
      '<button class="lg primary gradio-button svelte-cmf5ev" style="min-width:0;">+1</button>',
      () => {
        seedInput.value = parseInt(seedInput.value) + 1;
        seedInput.dispatchEvent(new Event('input'));
        generateButton.click();
      }
    ));
  }
  addButtons('txt2img');
  addButtons('img2img');
})();
Edit
Pub: 28 Nov 2023 06:54 UTC
Edit: 28 Nov 2023 07:06 UTC
Views: 898