Spaces:
Runtime error
Runtime error
Update app.py
Browse files
app.py
CHANGED
@@ -89,13 +89,15 @@ def character_creation_app(data_manager):
|
|
89 |
name_input = gr.Textbox(label="Character Name")
|
90 |
traits_input = gr.Textbox(label="Traits/Appearance Tags (comma separated)")
|
91 |
image_input = gr.Image(label="Upload Character Image", type="filepath")
|
|
|
|
|
92 |
save_button = gr.Button("Save Character")
|
93 |
output = gr.Textbox(label="Status", interactive=False)
|
94 |
|
95 |
-
def save_character(name, traits, image_path):
|
96 |
-
if not name or not traits:
|
97 |
return "Please enter all fields."
|
98 |
-
character = {'name': name, 'traits': traits, 'image': None}
|
99 |
|
100 |
# Read and encode image if provided
|
101 |
if image_path:
|
@@ -108,7 +110,7 @@ def character_creation_app(data_manager):
|
|
108 |
data_manager.add_character(character)
|
109 |
return f"Character '{name}' saved successfully."
|
110 |
|
111 |
-
save_button.click(save_character, inputs=[name_input, traits_input, image_input], outputs=output)
|
112 |
|
113 |
def prompt_generator_app(data_manager):
|
114 |
with gr.Tab("Prompt Generator"):
|
@@ -142,9 +144,6 @@ def prompt_generator_app(data_manager):
|
|
142 |
|
143 |
refresh_characters_button = gr.Button("Refresh Character List")
|
144 |
|
145 |
-
# Number of people in the scene
|
146 |
-
num_people = gr.Slider(minimum=0, maximum=10, step=1, value=1, label="Number of People in the Scene")
|
147 |
-
|
148 |
random_characters = gr.Checkbox(label="Select Random Characters")
|
149 |
num_characters = gr.Slider(minimum=0, maximum=10, step=1, value=1, label="Number of Characters (if random)")
|
150 |
|
@@ -205,7 +204,6 @@ def prompt_generator_app(data_manager):
|
|
205 |
|
206 |
def generate_prompt(*args):
|
207 |
# args correspond to inputs in the order they are defined
|
208 |
-
# Need to map args to variables
|
209 |
arg_idx = 0
|
210 |
|
211 |
prompt_tags = []
|
@@ -218,14 +216,13 @@ def prompt_generator_app(data_manager):
|
|
218 |
if tags_list and tags_num > 0:
|
219 |
selected_tags = random.sample(tags_list, min(len(tags_list), int(tags_num)))
|
220 |
prompt_tags.extend(selected_tags)
|
221 |
-
|
222 |
# Handle Characters
|
223 |
selected_characters_json = args[arg_idx]
|
224 |
random_chars = args[arg_idx + 1]
|
225 |
num_random_chars = args[arg_idx + 2]
|
226 |
-
num_people_in_scene = args[arg_idx + 3]
|
227 |
|
228 |
-
arg_idx +=
|
229 |
|
230 |
selected_character_names_list = json.loads(selected_characters_json) if selected_characters_json else []
|
231 |
|
@@ -238,29 +235,57 @@ def prompt_generator_app(data_manager):
|
|
238 |
else:
|
239 |
selected_chars = [char for char in characters if char['name'] in selected_character_names_list]
|
240 |
|
241 |
-
#
|
242 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
243 |
|
|
|
|
|
244 |
for idx, char in enumerate(selected_chars):
|
245 |
-
|
246 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
247 |
|
248 |
# Load persistent tags
|
249 |
persistent_tags = data_manager.get_persistent_tags()
|
250 |
-
|
|
|
|
|
251 |
|
252 |
-
# Assemble prompt with classic syntax (word:weight)
|
253 |
-
prompt = ', '.join(f"({tag}:1.0)" for tag in prompt_tags if tag)
|
254 |
# Add ending tags
|
255 |
ending_tags = "source_anime, score_9, score_8_up, score_7_up, masterpiece, best quality, very aesthetic, absurdres, anime artwork, anime style, vibrant, studio anime, highly detailed"
|
256 |
-
|
257 |
-
|
|
|
258 |
|
259 |
# Prepare the list of inputs for the generate_prompt function
|
260 |
inputs_list = []
|
261 |
for var_name in inputs:
|
262 |
inputs_list.append(inputs[var_name])
|
263 |
-
inputs_list.extend([hidden_selected_characters, random_characters, num_characters
|
264 |
|
265 |
generate_button.click(generate_prompt, inputs=inputs_list, outputs=prompt_output)
|
266 |
|
|
|
89 |
name_input = gr.Textbox(label="Character Name")
|
90 |
traits_input = gr.Textbox(label="Traits/Appearance Tags (comma separated)")
|
91 |
image_input = gr.Image(label="Upload Character Image", type="filepath")
|
92 |
+
# New gender selection input
|
93 |
+
gender_input = gr.Radio(choices=["Boy", "Girl"], label="Gender")
|
94 |
save_button = gr.Button("Save Character")
|
95 |
output = gr.Textbox(label="Status", interactive=False)
|
96 |
|
97 |
+
def save_character(name, traits, image_path, gender):
|
98 |
+
if not name or not traits or not gender:
|
99 |
return "Please enter all fields."
|
100 |
+
character = {'name': name, 'traits': traits, 'gender': gender, 'image': None}
|
101 |
|
102 |
# Read and encode image if provided
|
103 |
if image_path:
|
|
|
110 |
data_manager.add_character(character)
|
111 |
return f"Character '{name}' saved successfully."
|
112 |
|
113 |
+
save_button.click(save_character, inputs=[name_input, traits_input, image_input, gender_input], outputs=output)
|
114 |
|
115 |
def prompt_generator_app(data_manager):
|
116 |
with gr.Tab("Prompt Generator"):
|
|
|
144 |
|
145 |
refresh_characters_button = gr.Button("Refresh Character List")
|
146 |
|
|
|
|
|
|
|
147 |
random_characters = gr.Checkbox(label="Select Random Characters")
|
148 |
num_characters = gr.Slider(minimum=0, maximum=10, step=1, value=1, label="Number of Characters (if random)")
|
149 |
|
|
|
204 |
|
205 |
def generate_prompt(*args):
|
206 |
# args correspond to inputs in the order they are defined
|
|
|
207 |
arg_idx = 0
|
208 |
|
209 |
prompt_tags = []
|
|
|
216 |
if tags_list and tags_num > 0:
|
217 |
selected_tags = random.sample(tags_list, min(len(tags_list), int(tags_num)))
|
218 |
prompt_tags.extend(selected_tags)
|
219 |
+
|
220 |
# Handle Characters
|
221 |
selected_characters_json = args[arg_idx]
|
222 |
random_chars = args[arg_idx + 1]
|
223 |
num_random_chars = args[arg_idx + 2]
|
|
|
224 |
|
225 |
+
arg_idx += 3
|
226 |
|
227 |
selected_character_names_list = json.loads(selected_characters_json) if selected_characters_json else []
|
228 |
|
|
|
235 |
else:
|
236 |
selected_chars = [char for char in characters if char['name'] in selected_character_names_list]
|
237 |
|
238 |
+
# Determine the number of boys and girls
|
239 |
+
num_girls = sum(1 for char in selected_chars if char.get('gender') == 'Girl')
|
240 |
+
num_boys = sum(1 for char in selected_chars if char.get('gender') == 'Boy')
|
241 |
+
|
242 |
+
# Build the initial character count tags
|
243 |
+
character_count_tags = []
|
244 |
+
if num_girls > 0:
|
245 |
+
character_count_tags.append(f"{num_girls}girl" if num_girls == 1 else f"{num_girls}girls")
|
246 |
+
if num_boys > 0:
|
247 |
+
character_count_tags.append(f"{num_boys}boy" if num_boys == 1 else f"{num_boys}boys")
|
248 |
+
|
249 |
+
prompt_string = ', '.join(character_count_tags)
|
250 |
|
251 |
+
# Build character descriptions
|
252 |
+
character_descriptions = []
|
253 |
for idx, char in enumerate(selected_chars):
|
254 |
+
# Get traits for the character
|
255 |
+
traits = ', '.join(char['traits'])
|
256 |
+
# Create a description for each character
|
257 |
+
character_description = f"({char['name']}:1.0), ({traits}:1.0)"
|
258 |
+
character_descriptions.append(character_description)
|
259 |
+
|
260 |
+
# Include character descriptions in the prompt
|
261 |
+
if character_descriptions:
|
262 |
+
character_descriptions_str = ' AND '.join(character_descriptions)
|
263 |
+
prompt_string = f"{prompt_string}, {character_descriptions_str}"
|
264 |
+
else:
|
265 |
+
prompt_string = f"{prompt_string}"
|
266 |
+
|
267 |
+
# Append selected prompt tags from categories
|
268 |
+
if prompt_tags:
|
269 |
+
prompt_tags_str = ', '.join(f"({tag}:1.0)" for tag in prompt_tags if tag)
|
270 |
+
prompt_string = f"{prompt_string}, {prompt_tags_str}"
|
271 |
|
272 |
# Load persistent tags
|
273 |
persistent_tags = data_manager.get_persistent_tags()
|
274 |
+
if persistent_tags:
|
275 |
+
persistent_tags_str = ', '.join(f"({tag}:1.0)" for tag in persistent_tags if tag)
|
276 |
+
prompt_string = f"{prompt_string}, {persistent_tags_str}"
|
277 |
|
|
|
|
|
278 |
# Add ending tags
|
279 |
ending_tags = "source_anime, score_9, score_8_up, score_7_up, masterpiece, best quality, very aesthetic, absurdres, anime artwork, anime style, vibrant, studio anime, highly detailed"
|
280 |
+
prompt_string = f"{prompt_string}, {ending_tags}"
|
281 |
+
|
282 |
+
return prompt_string
|
283 |
|
284 |
# Prepare the list of inputs for the generate_prompt function
|
285 |
inputs_list = []
|
286 |
for var_name in inputs:
|
287 |
inputs_list.append(inputs[var_name])
|
288 |
+
inputs_list.extend([hidden_selected_characters, random_characters, num_characters])
|
289 |
|
290 |
generate_button.click(generate_prompt, inputs=inputs_list, outputs=prompt_output)
|
291 |
|