xlinx / sd-webui-decadetw-auto-prompt-llm

sd-webui-auto-prompt-llm
MIT License
53 stars 8 forks source link

Fix #2

Closed w-e-w closed 3 months ago

w-e-w commented 3 months ago
w-e-w commented 3 months ago

i do try lot of method to implement sendTo, but fail. I'll try.

如果你以後要做類似send to 之類的 "變更 / 刷新" 任何 gradio網頁元素 記本上大致上有兩種方式

  1. 正規方式 透過 透過python 伺服器作中轉 更新元素
  2. 透過JavaScript 直接對網頁元素操作

    我在PR中使用的是 2.


  1. 正規方式優點 必較安定 比較不容易因為Gradio更新等問題導致bug(如果webui本身有重大改動還是考能會春問題),缺點 應為需要伺服器中轉所以速度慢
  2. JS 優點 速度快 不需要伺服器參與,缺點 根據實現的方式比較容易出問題 (相較之下) (根據複雜 這是次算是比較點單的相對安全)

  1. 需要你在創建 .click() 前透過其他方式獲取 你想要改變的元素的所有物件 才能 寫入 fn, inputs, outputs 若需要獲取prompt box 可以透過 scripts.Scriptafter_componenton_after_component 在 透過比對elem_idprompt box創建後保存下來使用到後使用到.click()
  2. 因為prompt box本身就已經有elem_id所以JavaScript 可以輕易地鎖定該網頁元素 之後就可進行操作, 但要注意的是 操作完畢後 要updateInput(textArea)不然之後Gradio不會認識到元素有被改動
xlinx commented 3 months ago

真的。 這兩行我找超久都沒有發現。 再次感謝您專業的修改與架構的說明

關於這個(_js="function(prompt){sendPromptAutoPromptLLM),請問是不是沒有正規的說明,只能抓原始碼慢慢挖掘。

llm_sendto_txt2img.click(fn=None, _js="function(prompt){sendPromptAutoPromptLLM('txt2img', prompt)}", inputs=[llm_llm_answer])
        llm_sendto_img2img.click(fn=None, _js="function(prompt){sendPromptAutoPromptLLM('img2img', prompt)}", inputs=[llm_llm_answer])
w-e-w commented 3 months ago

這兩行我找超久都沒有發現。

吐槽 我基本上都已經分成容易看懂的 commit fix send to buttons 找不到我也沒辦法