Spaces:
Build error
Build error
import copy | |
import random | |
import gradio as gr | |
import numpy | |
import PIL | |
from pathlib import Path | |
from constants.init_values import ( | |
genres, places, moods, jobs, random_names, default_character_images | |
) | |
from modules import ImageMaker | |
from modules.llms import get_llm_factory | |
from interfaces import utils | |
img_maker = ImageMaker('https://huggingface.co./jphan32/Zero2Story/hellonijicute25d_V10b.safetensors', | |
vae="https://huggingface.co./jphan32/Zero2Story/klF8Anime2Fp16.safetensors") | |
############ | |
# for plotting | |
get_random_name_js = f""" | |
function get_random_name(cur_char_name, char_name1, char_name2, char_name3) {{ | |
console.log("hello world"); | |
const names = {random_names}; | |
const names_copy = JSON.parse(JSON.stringify(names)); | |
console.log(names); | |
let index = names_copy.indexOf(cur_char_name); | |
names_copy.splice(index, 1); | |
index = names_copy.indexOf(char_name1); | |
names_copy.splice(index, 1) | |
index = names_copy.indexOf(char_name2); | |
names_copy.splice(index, 1); | |
index = names_copy.indexOf(char_name3); | |
names_copy.splice(index, 1); | |
return names_copy[(Math.floor(Math.random() * names_copy.length))]; | |
}} | |
""" | |
def update_selected_char_image(evt: gr.EventData): | |
return evt.value | |
# def get_random_name(cur_char_name, char_name1, char_name2, char_name3): | |
# tmp_random_names = copy.deepcopy(random_names) | |
# tmp_random_names.remove(cur_char_name) | |
# tmp_random_names.remove(char_name1) | |
# tmp_random_names.remove(char_name2) | |
# tmp_random_names.remove(char_name3) | |
# return random.choice(tmp_random_names) | |
def gen_character_image( | |
gallery_images, | |
name, age, personality, job, | |
genre, place, mood, creative_mode | |
): | |
# generate prompts for character image with LLM | |
for _ in range(3): | |
try: | |
prompt, neg_prompt = img_maker.generate_character_prompts(name, age, job, keywords=[personality, genre, place, mood], creative_mode=creative_mode) | |
print(f"Image Prompt: {prompt}") | |
print(f"Negative Prompt: {neg_prompt}") | |
break | |
except Exception as e: | |
print(e) | |
raise gr.Error(e) | |
if not prompt: | |
raise ValueError("Failed to generate prompts for character image.") | |
# generate image | |
try: | |
img_filename = img_maker.text2image(prompt, neg_prompt=neg_prompt, ratio='3:4', cfg=4.5) | |
except ValueError as e: | |
print(e) | |
img_filename = str(Path('.') / 'assets' / 'nsfw_warning.png') | |
# update gallery | |
# gen_image = numpy.asarray(PIL.Image.open(img_filename)) | |
gallery_images.insert(0, img_filename) | |
return gr.update(value=gallery_images), gallery_images, img_filename | |
def update_on_age(evt: gr.SelectData): | |
job_list = jobs[evt.value] | |
return ( | |
gr.update(value=places[evt.value][0], choices=places[evt.value]), | |
gr.update(value=moods[evt.value][0], choices=moods[evt.value]), | |
gr.update(value=job_list[0], choices=job_list), | |
gr.update(value=job_list[1], choices=job_list), | |
gr.update(value=job_list[2], choices=job_list), | |
gr.update(value=job_list[3], choices=job_list) | |
) | |
############ | |
# for tabbing | |
def update_on_main_tabs(chat_state, evt: gr.SelectData): | |
chat_mode = "plot_chat" | |
if evt.value.lower() == "background setup": | |
chat_mode = "plot_chat" | |
elif evt.value.lower() == "story generation": | |
chat_mode = "story_chat" | |
else: # export | |
chat_mode = "export_chat" | |
ppm = chat_state[chat_mode] | |
return chat_mode, ppm.build_uis() | |
def reset(llm_type="PaLM"): | |
factory = get_llm_factory(llm_type) | |
ui_pp_manager = factory.create_ui_pp_manager() | |
return ( | |
[], # cursors | |
0, # cur_cursor | |
{ | |
"setting_chat": ui_pp_manager, | |
"story_chat": ui_pp_manager, | |
"export_chat": ui_pp_manager, | |
}, # chat_state | |
"setting_chat", # chat_mode | |
default_character_images, # gallery_images1 | |
default_character_images, # gallery_images2 | |
default_character_images, # gallery_images3 | |
default_character_images, # gallery_images4 | |
default_character_images[0], # selected_main_char_image1 | |
default_character_images[0], # selected_side_char_image1 | |
default_character_images[0], # selected_side_char_image2 | |
default_character_images[0], # selected_side_char_image3 | |
genres[0], # genre_dd | |
places[genres[0]][0], # place_dd | |
moods[genres[0]][0], # mood_dd | |
default_character_images, # char_gallery1 | |
jobs[genres[0]][0], # job_dd1 | |
False, # side_char_enable_ckb1 | |
default_character_images, # char_gallery2 | |
jobs[genres[0]][1], # job_dd2 | |
False, # side_char_enable_ckb2 | |
default_character_images, # char_gallery3 | |
jobs[genres[0]][2], # job_dd3 | |
False, # side_char_enable_ckb3 | |
default_character_images, # char_gallery4 | |
jobs[genres[0]][3], # job_dd4 | |
None, # story_image | |
None, # story_audio | |
None, # story_video | |
'', # story_content | |
gr.Slider( | |
1, 2, 1, step=1, interactive=True, | |
label="1/2", visible=False | |
), # story_progress | |
'', # custom_prompt_txt | |
'Action 1', # action_btn1 | |
'Action 2', # action_btn2 | |
'Action 3', # action_btn3 | |
'', # custom_action_txt | |
'Your Own Story', # title_txt | |
"", # export_html | |
) | |