dikdimon's picture
Upload extensions using SD-Hub extension
f4a41d8 verified
raw
history blame
3.07 kB
import contextlib
import gradio as gr
from modules import scripts
import requests
def fetchTags(ch, art_box, char_box):
if ch:
try:
if "danbooru.donmai.us/posts" not in ch:
return "unsupported url"
if "?" in ch:
pos = ch.find("?")
ch = ch[:pos]
url = ch + ".json"
with requests.get(url, headers={
'user-agent': 'my-app/0.0.1'}) as r: # it needs a user agent otherwise it doesn't work
data = r.json()
artist = data["tag_string_artist"]
char = data["tag_string_character"]
general_tags = data["tag_string_general"]
format_tags = ""
if art_box and artist:
format_tags += artist
if char_box and char:
if not art_box:
format_tags += char
else:
format_tags += " " + char
format_tags += " " + general_tags
format_tags = format_tags.replace(" ", ", ")
format_tags = format_tags.replace("_", " ")
format_tags = format_tags.replace("(", "\(")
format_tags = format_tags.replace(")", "\)")
format_tags = format_tags.replace("[", "\[")
format_tags = format_tags.replace("]", "\]")
return format_tags
except Exception as err:
# most likely an bad url
return "Incomplete url OR unsupported url"
else:
return []
class BooruScript(scripts.Script):
def __init__(self) -> None:
super().__init__()
def title(self):
return ("Link fetcher")
def show(self, is_img2img):
return scripts.AlwaysVisible
def ui(self, is_img2img):
with gr.Group():
with gr.Accordion("DanBooru Link", open=False):
fetch_tags = gr.Button(value='Get Tags', variant='primary')
link = gr.Textbox(label="insert link")
with gr.Row():
includeartist = gr.Checkbox(value=True, label="Include artist tags", interactive=True)
includecharacter = gr.Checkbox(value=True, label="Include character tags",
interactive=True)
with contextlib.suppress(AttributeError):
if is_img2img:
fetch_tags.click(fn=fetchTags, inputs=[link, includeartist, includecharacter], outputs=[self.boxxIMG])
else:
fetch_tags.click(fn=fetchTags, inputs=[link, includeartist, includecharacter], outputs=[self.boxx])
return [link, fetch_tags, includeartist, includecharacter]
def after_component(self, component, **kwargs):
if kwargs.get("elem_id") == "txt2img_prompt":
self.boxx = component
if kwargs.get("elem_id") == "img2img_prompt":
self.boxxIMG = component