throaway2854 commited on
Commit
7e47165
·
verified ·
1 Parent(s): 22e5dae

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +46 -21
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 += 4
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
- # Adjust the number of people in the scene
242
- # You can modify how additional characters are added if needed
 
 
 
 
 
 
 
 
 
 
243
 
 
 
244
  for idx, char in enumerate(selected_chars):
245
- prompt_tags.append(f"{char['name']}")
246
- prompt_tags.extend(char['traits'])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
247
 
248
  # Load persistent tags
249
  persistent_tags = data_manager.get_persistent_tags()
250
- prompt_tags.extend(persistent_tags)
 
 
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
- prompt = f"{prompt}, {ending_tags}"
257
- return prompt
 
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, num_people])
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