throaway2854 commited on
Commit
9519864
·
verified ·
1 Parent(s): aab4f65

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +87 -22
app.py CHANGED
@@ -5,6 +5,7 @@ import random
5
  from PIL import Image
6
  import base64
7
  import io
 
8
 
9
  # Define categories at the top so they are accessible throughout the code
10
  categories = [
@@ -107,7 +108,7 @@ class DataManager:
107
  image_path = os.path.join(self.images_folder, image_filename)
108
 
109
  # Save the image if provided
110
- if image_path and os.path.exists(image_data):
111
  try:
112
  # Open and save the uploaded image to the images folder
113
  image = Image.open(image_data)
@@ -134,7 +135,7 @@ class DataManager:
134
  for idx, char in enumerate(self.characters):
135
  if char['name'] == original_name:
136
  # Handle image update
137
- if updated_character['image']:
138
  image_data = updated_character['image'] # File path
139
  safe_name = "".join(c for c in updated_character['name'] if c.isalnum() or c in (' ', '_', '-')).rstrip()
140
  image_filename = f"{safe_name}.png"
@@ -200,7 +201,13 @@ def prompt_generator_app(data_manager):
200
  with gr.Group():
201
  gr.Markdown(f"### {category_name}")
202
  tag_display = gr.Markdown(f"**Tags:** {tags_string}")
203
- tag_num = gr.Slider(minimum=0, maximum=max_tags, step=1, value=default_value, label=f"Number of {category_name} Tags to Select")
 
 
 
 
 
 
204
  inputs_sliders[var_name + '_num'] = tag_num
205
  tag_displays[var_name] = (tag_display, tag_num)
206
 
@@ -218,17 +225,31 @@ def prompt_generator_app(data_manager):
218
  return character_options
219
 
220
  character_options = get_character_options()
221
- character_select = gr.CheckboxGroup(choices=character_options, label="Select Characters", interactive=True)
 
 
 
 
222
 
223
  refresh_characters_button = gr.Button("Refresh Character List")
224
 
 
 
 
 
225
  refresh_characters_button.click(
226
- lambda: get_character_options(),
227
  outputs=character_select
228
  )
229
 
230
  random_characters = gr.Checkbox(label="Select Random Characters")
231
- num_characters = gr.Slider(minimum=1, maximum=10, step=1, value=1, label="Number of Characters (if random)")
 
 
 
 
 
 
232
 
233
  generate_button = gr.Button("Generate Prompt")
234
  prompt_output = gr.Textbox(label="Generated Prompt", lines=5)
@@ -342,8 +363,8 @@ def prompt_generator_app(data_manager):
342
  slider_value = min(1, max_tags)
343
  # Update the tag display and slider
344
  tag_display, tag_num = tag_displays[var_name]
345
- updates.append(gr.Markdown.update(value=f"**Tags:** {tags_string}"))
346
- updates.append(gr.Slider.update(maximum=max_tags, value=slider_value))
347
  return updates
348
 
349
  # Prepare the outputs list
@@ -355,10 +376,17 @@ def prompt_generator_app(data_manager):
355
  def character_creation_app(data_manager):
356
  with gr.Tab("Character Creation"):
357
  gr.Markdown("## Create and Manage Characters")
 
358
  # **Section 1: Create a New Character**
359
  with gr.Row():
360
- name_input = gr.Textbox(label="Character Name", placeholder="Enter unique character name")
361
- traits_input = gr.Textbox(label="Traits/Appearance Tags (comma separated)", placeholder="e.g., blue hair, green eyes, tall")
 
 
 
 
 
 
362
  image_input = gr.Image(label="Upload Character Image", type="filepath")
363
  gender_input = gr.Radio(choices=["Boy", "Girl"], label="Gender")
364
  save_button = gr.Button("Save Character")
@@ -371,7 +399,11 @@ def character_creation_app(data_manager):
371
  # Dropdown to select a character for editing or deleting
372
  characters = data_manager.get_characters()
373
  character_names = [char['name'] for char in characters]
374
- selected_character = gr.Dropdown(choices=character_names, label="Select a Character to Edit/Delete", interactive=True)
 
 
 
 
375
 
376
  # Buttons for Edit and Delete
377
  edit_button = gr.Button("Edit Selected Character")
@@ -379,17 +411,31 @@ def character_creation_app(data_manager):
379
  action_output = gr.Textbox(label="Action Status", interactive=False)
380
 
381
  # **Section 3: Edit Character**
382
- edit_section = gr.Row(visible=False)
383
  with edit_section:
384
- edit_name = gr.Textbox(label="New Character Name", placeholder="Enter new character name")
385
- edit_traits = gr.Textbox(label="New Traits/Appearance Tags (comma separated)", placeholder="e.g., red hair, blue eyes")
 
 
 
 
 
 
 
386
  edit_image = gr.Image(label="Upload New Character Image", type="filepath")
387
- edit_gender = gr.Radio(choices=["Boy", "Girl"], label="Gender")
 
 
 
388
  update_button = gr.Button("Update Character")
389
  update_output = gr.Textbox(label="Update Status", interactive=False)
390
 
391
  # **Section 4: Delete Confirmation**
392
- delete_confirmation = gr.Textbox(label="Are you sure you want to delete the selected character? Type 'YES' to confirm.", interactive=True, visible=False)
 
 
 
 
393
  confirm_delete_button = gr.Button("Confirm Delete", visible=False)
394
  cancel_delete_button = gr.Button("Cancel Delete", visible=False)
395
 
@@ -416,7 +462,15 @@ def character_creation_app(data_manager):
416
  def show_edit(selected_name):
417
  if not selected_name:
418
  return "Please select a character to edit.", gr.update(visible=False)
419
- return "", gr.update(visible=True)
 
 
 
 
 
 
 
 
420
 
421
  edit_button.click(
422
  show_edit,
@@ -437,7 +491,8 @@ def character_creation_app(data_manager):
437
  'name': new_name,
438
  'traits': new_traits,
439
  'gender': new_gender,
440
- 'image': new_image_path if new_image_path else [char for char in data_manager.get_characters() if char['name'] == original_name][0]['image']
 
441
  }
442
  success = data_manager.update_character(original_name, updated_char)
443
  if success:
@@ -465,7 +520,7 @@ def character_creation_app(data_manager):
465
 
466
  # **Function to Perform Deletion**
467
  def perform_deletion(selected_name, confirmation):
468
- if confirmation != "YES":
469
  return "Deletion cancelled.", gr.update(visible=False), gr.update(visible=False)
470
  success = data_manager.delete_character(selected_name)
471
  if success:
@@ -497,7 +552,10 @@ def tags_app(data_manager):
497
  gr.Markdown(f"### {category_name} Tags")
498
  tags_list = data_manager.get_category_tags(var_name)
499
  tags_string = ', '.join(tags_list)
500
- tag_input = gr.Textbox(label=f"{category_name} Tags (comma separated)", value=tags_string)
 
 
 
501
  save_button = gr.Button(f"Save {category_name} Tags")
502
  status_output = gr.Textbox(label="", interactive=False)
503
 
@@ -514,7 +572,10 @@ def tags_app(data_manager):
514
  # Persistent Tags
515
  gr.Markdown(f"### Persistent Tags")
516
  persistent_tags_string = ', '.join(data_manager.get_persistent_tags())
517
- persistent_tags_input = gr.Textbox(label="Persistent Tags (comma separated)", value=persistent_tags_string)
 
 
 
518
  save_persistent_tags_button = gr.Button("Save Persistent Tags")
519
  persistent_status_output = gr.Textbox(label="", interactive=False)
520
 
@@ -523,7 +584,11 @@ def tags_app(data_manager):
523
  data_manager.set_persistent_tags(tags_list)
524
  return "Persistent tags saved successfully."
525
 
526
- save_persistent_tags_button.click(save_persistent_tags_fn, inputs=persistent_tags_input, outputs=persistent_status_output)
 
 
 
 
527
 
528
  def main():
529
  data_manager = DataManager(base_dir='/data')
 
5
  from PIL import Image
6
  import base64
7
  import io
8
+ from functools import partial
9
 
10
  # Define categories at the top so they are accessible throughout the code
11
  categories = [
 
108
  image_path = os.path.join(self.images_folder, image_filename)
109
 
110
  # Save the image if provided
111
+ if image_data and os.path.exists(image_data):
112
  try:
113
  # Open and save the uploaded image to the images folder
114
  image = Image.open(image_data)
 
135
  for idx, char in enumerate(self.characters):
136
  if char['name'] == original_name:
137
  # Handle image update
138
+ if updated_character['image'] and os.path.exists(updated_character['image']):
139
  image_data = updated_character['image'] # File path
140
  safe_name = "".join(c for c in updated_character['name'] if c.isalnum() or c in (' ', '_', '-')).rstrip()
141
  image_filename = f"{safe_name}.png"
 
201
  with gr.Group():
202
  gr.Markdown(f"### {category_name}")
203
  tag_display = gr.Markdown(f"**Tags:** {tags_string}")
204
+ tag_num = gr.Slider(
205
+ minimum=0,
206
+ maximum=max_tags,
207
+ step=1,
208
+ value=default_value,
209
+ label=f"Number of {category_name} Tags to Select"
210
+ )
211
  inputs_sliders[var_name + '_num'] = tag_num
212
  tag_displays[var_name] = (tag_display, tag_num)
213
 
 
225
  return character_options
226
 
227
  character_options = get_character_options()
228
+ character_select = gr.CheckboxGroup(
229
+ choices=character_options,
230
+ label="Select Characters",
231
+ interactive=True
232
+ )
233
 
234
  refresh_characters_button = gr.Button("Refresh Character List")
235
 
236
+ def refresh_character_selection():
237
+ new_options = get_character_options()
238
+ return gr.CheckboxGroup.update(choices=new_options)
239
+
240
  refresh_characters_button.click(
241
+ refresh_character_selection,
242
  outputs=character_select
243
  )
244
 
245
  random_characters = gr.Checkbox(label="Select Random Characters")
246
+ num_characters = gr.Slider(
247
+ minimum=1,
248
+ maximum=10,
249
+ step=1,
250
+ value=1,
251
+ label="Number of Characters (if random)"
252
+ )
253
 
254
  generate_button = gr.Button("Generate Prompt")
255
  prompt_output = gr.Textbox(label="Generated Prompt", lines=5)
 
363
  slider_value = min(1, max_tags)
364
  # Update the tag display and slider
365
  tag_display, tag_num = tag_displays[var_name]
366
+ updates.append(tag_display.update(value=f"**Tags:** {tags_string}"))
367
+ updates.append(tag_num.update(maximum=max_tags, value=slider_value))
368
  return updates
369
 
370
  # Prepare the outputs list
 
376
  def character_creation_app(data_manager):
377
  with gr.Tab("Character Creation"):
378
  gr.Markdown("## Create and Manage Characters")
379
+
380
  # **Section 1: Create a New Character**
381
  with gr.Row():
382
+ name_input = gr.Textbox(
383
+ label="Character Name",
384
+ placeholder="Enter unique character name"
385
+ )
386
+ traits_input = gr.Textbox(
387
+ label="Traits/Appearance Tags (comma separated)",
388
+ placeholder="e.g., blue hair, green eyes, tall"
389
+ )
390
  image_input = gr.Image(label="Upload Character Image", type="filepath")
391
  gender_input = gr.Radio(choices=["Boy", "Girl"], label="Gender")
392
  save_button = gr.Button("Save Character")
 
399
  # Dropdown to select a character for editing or deleting
400
  characters = data_manager.get_characters()
401
  character_names = [char['name'] for char in characters]
402
+ selected_character = gr.Dropdown(
403
+ choices=character_names,
404
+ label="Select a Character to Edit/Delete",
405
+ interactive=True
406
+ )
407
 
408
  # Buttons for Edit and Delete
409
  edit_button = gr.Button("Edit Selected Character")
 
411
  action_output = gr.Textbox(label="Action Status", interactive=False)
412
 
413
  # **Section 3: Edit Character**
414
+ edit_section = gr.Column(visible=False)
415
  with edit_section:
416
+ with gr.Row():
417
+ edit_name = gr.Textbox(
418
+ label="New Character Name",
419
+ placeholder="Enter new character name"
420
+ )
421
+ edit_traits = gr.Textbox(
422
+ label="New Traits/Appearance Tags (comma separated)",
423
+ placeholder="e.g., red hair, blue eyes"
424
+ )
425
  edit_image = gr.Image(label="Upload New Character Image", type="filepath")
426
+ edit_gender = gr.Radio(
427
+ choices=["Boy", "Girl"],
428
+ label="Gender"
429
+ )
430
  update_button = gr.Button("Update Character")
431
  update_output = gr.Textbox(label="Update Status", interactive=False)
432
 
433
  # **Section 4: Delete Confirmation**
434
+ delete_confirmation = gr.Textbox(
435
+ label="Are you sure you want to delete this character? Type 'YES' to confirm.",
436
+ interactive=True,
437
+ visible=False
438
+ )
439
  confirm_delete_button = gr.Button("Confirm Delete", visible=False)
440
  cancel_delete_button = gr.Button("Cancel Delete", visible=False)
441
 
 
462
  def show_edit(selected_name):
463
  if not selected_name:
464
  return "Please select a character to edit.", gr.update(visible=False)
465
+ # Fetch character details
466
+ character = next((char for char in data_manager.get_characters() if char['name'] == selected_name), None)
467
+ if character:
468
+ edit_name_value = character['name']
469
+ edit_traits_value = ', '.join(character['traits'])
470
+ edit_gender_value = character['gender']
471
+ return "", gr.update(visible=True)
472
+ else:
473
+ return f"Character '{selected_name}' not found.", gr.update(visible=False)
474
 
475
  edit_button.click(
476
  show_edit,
 
491
  'name': new_name,
492
  'traits': new_traits,
493
  'gender': new_gender,
494
+ 'image': new_image_path if new_image_path else \
495
+ next((char['image'] for char in data_manager.get_characters() if char['name'] == original_name), None)
496
  }
497
  success = data_manager.update_character(original_name, updated_char)
498
  if success:
 
520
 
521
  # **Function to Perform Deletion**
522
  def perform_deletion(selected_name, confirmation):
523
+ if confirmation.strip().upper() != "YES":
524
  return "Deletion cancelled.", gr.update(visible=False), gr.update(visible=False)
525
  success = data_manager.delete_character(selected_name)
526
  if success:
 
552
  gr.Markdown(f"### {category_name} Tags")
553
  tags_list = data_manager.get_category_tags(var_name)
554
  tags_string = ', '.join(tags_list)
555
+ tag_input = gr.Textbox(
556
+ label=f"{category_name} Tags (comma separated)",
557
+ value=tags_string
558
+ )
559
  save_button = gr.Button(f"Save {category_name} Tags")
560
  status_output = gr.Textbox(label="", interactive=False)
561
 
 
572
  # Persistent Tags
573
  gr.Markdown(f"### Persistent Tags")
574
  persistent_tags_string = ', '.join(data_manager.get_persistent_tags())
575
+ persistent_tags_input = gr.Textbox(
576
+ label="Persistent Tags (comma separated)",
577
+ value=persistent_tags_string
578
+ )
579
  save_persistent_tags_button = gr.Button("Save Persistent Tags")
580
  persistent_status_output = gr.Textbox(label="", interactive=False)
581
 
 
584
  data_manager.set_persistent_tags(tags_list)
585
  return "Persistent tags saved successfully."
586
 
587
+ save_persistent_tags_button.click(
588
+ save_persistent_tags_fn,
589
+ inputs=persistent_tags_input,
590
+ outputs=persistent_status_output
591
+ )
592
 
593
  def main():
594
  data_manager = DataManager(base_dir='/data')