50 lines
1.4 KiB
Python
50 lines
1.4 KiB
Python
import random
|
|
|
|
from modules import script_callbacks, shared
|
|
import gradio as gr
|
|
|
|
art_symbol = '\U0001f3a8' # 🎨
|
|
global_prompt = None
|
|
related_ids = {"txt2img_prompt", "txt2img_clear_prompt", "img2img_prompt", "img2img_clear_prompt" }
|
|
|
|
|
|
def roll_artist(prompt):
|
|
allowed_cats = set([x for x in shared.artist_db.categories() if len(shared.opts.random_artist_categories)==0 or x in shared.opts.random_artist_categories])
|
|
artist = random.choice([x for x in shared.artist_db.artists if x.category in allowed_cats])
|
|
|
|
return prompt + ", " + artist.name if prompt != '' else artist.name
|
|
|
|
|
|
def add_roll_button(prompt):
|
|
roll = gr.Button(value=art_symbol, elem_id="roll", visible=len(shared.artist_db.artists) > 0)
|
|
|
|
roll.click(
|
|
fn=roll_artist,
|
|
_js="update_txt2img_tokens",
|
|
inputs=[
|
|
prompt,
|
|
],
|
|
outputs=[
|
|
prompt,
|
|
]
|
|
)
|
|
|
|
|
|
def after_component(component, **kwargs):
|
|
global global_prompt
|
|
|
|
elem_id = kwargs.get('elem_id', None)
|
|
if elem_id not in related_ids:
|
|
return
|
|
|
|
if elem_id == "txt2img_prompt":
|
|
global_prompt = component
|
|
elif elem_id == "txt2img_clear_prompt":
|
|
add_roll_button(global_prompt)
|
|
elif elem_id == "img2img_prompt":
|
|
global_prompt = component
|
|
elif elem_id == "img2img_clear_prompt":
|
|
add_roll_button(global_prompt)
|
|
|
|
|
|
script_callbacks.on_after_component(after_component)
|