throaway2854 commited on
Commit
c05d37f
·
verified ·
1 Parent(s): 3d1e39b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +44 -149
app.py CHANGED
@@ -187,7 +187,7 @@ def prompt_generator_app(data_manager):
187
  # Add a refresh tags button
188
  refresh_tags_button = gr.Button("Refresh Tags")
189
 
190
- inputs = {}
191
  tag_displays = {}
192
  for category_name, var_name in categories:
193
  tags_list = data_manager.get_category_tags(var_name)
@@ -201,7 +201,7 @@ def prompt_generator_app(data_manager):
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[f"{var_name}_num"] = tag_num
205
  tag_displays[var_name] = (tag_display, tag_num)
206
 
207
  # For Character Selection
@@ -222,11 +222,10 @@ def prompt_generator_app(data_manager):
222
 
223
  refresh_characters_button = gr.Button("Refresh Character List")
224
 
225
- def refresh_characters():
226
- new_options = get_character_options()
227
- return gr.CheckboxGroup.update(choices=new_options)
228
-
229
- refresh_characters_button.click(refresh_characters, outputs=character_select)
230
 
231
  random_characters = gr.Checkbox(label="Select Random Characters")
232
  num_characters = gr.Slider(minimum=1, maximum=10, step=1, value=1, label="Number of Characters (if random)")
@@ -323,7 +322,7 @@ def prompt_generator_app(data_manager):
323
  # Prepare the list of inputs for the generate_prompt function
324
  inputs_list = []
325
  for category_name, var_name in categories:
326
- inputs_list.append(inputs[f"{var_name}_num"])
327
  # Add character_select directly to inputs
328
  inputs_list.extend([character_select, random_characters, num_characters])
329
 
@@ -364,158 +363,54 @@ def character_creation_app(data_manager):
364
  save_button = gr.Button("Save Character")
365
  output = gr.Textbox(label="Status", interactive=False)
366
 
367
- def save_character(name, traits, image_path, gender, characters_container):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
368
  if not name.strip() or not traits.strip() or not gender:
369
- return "Please enter all fields.", None
 
370
  # Check for duplicate names
371
  existing_names = [char['name'] for char in data_manager.get_characters()]
372
  if name in existing_names:
373
- return f"Character with name '{name}' already exists. Please choose a different name.", None
374
 
375
  character = {'name': name, 'traits': traits, 'gender': gender, 'image': image_path}
376
-
377
  data_manager.add_character(character)
378
- # After adding, re-render the character list
379
- return f"Character '{name}' saved successfully.", list_characters(data_manager)
380
 
381
  save_button.click(
382
- save_character,
383
- inputs=[name_input, traits_input, image_input, gender_input, gr.State()],
384
- outputs=[output, "characters_renderer"]
385
  )
386
 
387
- # Divider
388
- gr.Markdown("---")
389
-
390
  # Display Existing Characters
391
- gr.Markdown("## Existing Characters")
392
-
393
- # Renderer for characters
394
- characters_renderer = gr.Column(label="Characters")
 
 
395
 
396
- def list_characters(data_manager):
397
- characters = data_manager.get_characters()
398
- if not characters:
399
- return gr.Markdown("No characters created yet.")
400
-
401
- components = []
402
- for char in characters:
403
- with gr.Accordion(label=char['name'], open=False):
404
- with gr.Row():
405
- if char['image']:
406
- img_display = gr.Image(value=char['image'], label="Character Image", type="filepath", interactive=False)
407
- else:
408
- img_display = gr.Markdown("**No Image Provided**")
409
- with gr.Column():
410
- gr.Markdown(f"**Name:** {char['name']}").render()
411
- gr.Markdown(f"**Gender:** {char['gender']}").render()
412
- gr.Markdown(f"**Traits:** {', '.join(char['traits'])}").render()
413
- with gr.Row():
414
- edit_btn = gr.Button("Edit", variant="primary")
415
- delete_btn = gr.Button("Delete", variant="secondary")
416
- edit_output = gr.Textbox(label="", interactive=False, visible=False)
417
- delete_output = gr.Textbox(label="", interactive=False, visible=False)
418
-
419
- # Edit Interface (initially hidden)
420
- edit_interface = gr.Column(visible=False)
421
- with edit_interface:
422
- with gr.Row():
423
- edit_name = gr.Textbox(label="Character Name", value=char['name'], placeholder="Enter new name")
424
- edit_traits = gr.Textbox(label="Traits/Appearance Tags (comma separated)", value=', '.join(char['traits']), placeholder="e.g., red hair, blue eyes")
425
- edit_image = gr.Image(label="Upload New Character Image", type="filepath")
426
- edit_gender = gr.Radio(choices=["Boy", "Girl"], label="Gender", value=char['gender'])
427
- save_edit_btn = gr.Button("Save Changes")
428
- save_edit_output = gr.Textbox(label="Edit Status", interactive=False)
429
-
430
- def save_edit(original_name, new_name, new_traits, new_image_path, new_gender):
431
- if not new_name.strip() or not new_traits.strip() or not new_gender:
432
- return "Please enter all fields.", None
433
- # If the name has changed, check for duplicates
434
- if new_name != original_name:
435
- existing_names = [c['name'] for c in data_manager.get_characters()]
436
- if new_name in existing_names:
437
- return f"Character with name '{new_name}' already exists. Please choose a different name.", None
438
- updated_char = {
439
- 'name': new_name,
440
- 'traits': new_traits,
441
- 'gender': new_gender,
442
- 'image': new_image_path if new_image_path else data_manager.characters[[c['name'] for c in data_manager.get_characters()].index(original_name)]['image']
443
- }
444
- success = data_manager.update_character(original_name, updated_char)
445
- if success:
446
- return f"Character '{new_name}' updated successfully.", list_characters(data_manager)
447
- else:
448
- return "Failed to update character.", None
449
-
450
- save_edit_btn.click(
451
- save_edit,
452
- inputs=[gr.State(char['name']), edit_name, edit_traits, edit_image, edit_gender],
453
- outputs=[save_edit_output, "characters_renderer"]
454
- )
455
-
456
- # Define edit functionality
457
- def toggle_edit_visibility():
458
- return gr.update(visible=True)
459
-
460
- edit_btn.click(
461
- lambda: True,
462
- inputs=None,
463
- outputs=edit_interface
464
- )
465
-
466
- # Define delete functionality
467
- def confirm_delete(char_name):
468
- return f"Are you sure you want to delete '{char_name}'?", True
469
-
470
- def perform_delete(char_name, confirm):
471
- if confirm:
472
- success = data_manager.delete_character(char_name)
473
- if success:
474
- return f"Character '{char_name}' deleted successfully.", list_characters(data_manager)
475
- else:
476
- return f"Failed to delete character '{char_name}'.", None
477
- return "Deletion cancelled.", None
478
-
479
- delete_btn.click(
480
- confirm_delete,
481
- inputs=[char['name']],
482
- outputs=[delete_output, delete_output]
483
- )
484
-
485
- delete_confirm = gr.Button("Confirm Delete", visible=False)
486
- delete_cancel = gr.Button("Cancel Delete", visible=False)
487
-
488
- # Show confirmation buttons when delete is clicked
489
- def show_delete_buttons(message):
490
- if "Are you sure" in message:
491
- return gr.update(visible=True), gr.update(visible=True)
492
- return gr.update(visible=False), gr.update(visible=False)
493
-
494
- delete_btn.click(
495
- show_delete_buttons,
496
- inputs=[delete_output],
497
- outputs=[delete_confirm, delete_cancel]
498
- )
499
-
500
- # Handle delete confirmation
501
- delete_confirm.click(
502
- perform_delete,
503
- inputs=[char['name'], gr.Checkbox(label="", value=True)],
504
- outputs=[delete_output, "characters_renderer"]
505
- )
506
-
507
- # Handle delete cancellation
508
- delete_cancel.click(
509
- lambda: ("Deletion cancelled.", None),
510
- inputs=None,
511
- outputs=[delete_output, "characters_renderer"]
512
- )
513
- return components
514
-
515
- def list_characters_render():
516
- return list_characters(data_manager)
517
-
518
- characters_renderer.render(list_characters(data_manager))
519
 
520
  def tags_app(data_manager):
521
  with gr.Tab("Tags"):
@@ -546,12 +441,12 @@ def tags_app(data_manager):
546
  save_persistent_tags_button = gr.Button("Save Persistent Tags")
547
  persistent_status_output = gr.Textbox(label="", interactive=False)
548
 
549
- def save_persistent_tags_fn(tags_string):
550
  tags_list = [t.strip() for t in tags_string.split(',') if t.strip()]
551
  data_manager.set_persistent_tags(tags_list)
552
  return "Persistent tags saved successfully."
553
 
554
- save_persistent_tags_button.click(save_persistent_tags_fn, inputs=persistent_tags_input, outputs=persistent_status_output)
555
 
556
  def main():
557
  data_manager = DataManager(base_dir='/data')
 
187
  # Add a refresh tags button
188
  refresh_tags_button = gr.Button("Refresh Tags")
189
 
190
+ inputs_sliders = {}
191
  tag_displays = {}
192
  for category_name, var_name in categories:
193
  tags_list = data_manager.get_category_tags(var_name)
 
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
 
207
  # For Character Selection
 
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)")
 
322
  # Prepare the list of inputs for the generate_prompt function
323
  inputs_list = []
324
  for category_name, var_name in categories:
325
+ inputs_list.append(inputs_sliders[f"{var_name}_num"])
326
  # Add character_select directly to inputs
327
  inputs_list.extend([character_select, random_characters, num_characters])
328
 
 
363
  save_button = gr.Button("Save Character")
364
  output = gr.Textbox(label="Status", interactive=False)
365
 
366
+ characters_renderer = gr.HTML(label="Existing Characters")
367
+
368
+ def list_characters():
369
+ characters = data_manager.get_characters()
370
+ if not characters:
371
+ return "<p>No characters created yet.</p>"
372
+
373
+ html_content = ""
374
+ for char in characters:
375
+ html_content += f"""
376
+ <div style="border:1px solid #ccc; padding:10px; margin-bottom:10px;">
377
+ <h3>{char['name']}</h3>
378
+ <p><strong>Gender:</strong> {char['gender']}</p>
379
+ <p><strong>Traits:</strong> {', '.join(char['traits'])}</p>
380
+ </div>
381
+ """
382
+ return html_content
383
+
384
+ def save_character(name, traits, image_path, gender):
385
  if not name.strip() or not traits.strip() or not gender:
386
+ return "Please enter all fields."
387
+
388
  # Check for duplicate names
389
  existing_names = [char['name'] for char in data_manager.get_characters()]
390
  if name in existing_names:
391
+ return f"Character with name '{name}' already exists. Please choose a different name."
392
 
393
  character = {'name': name, 'traits': traits, 'gender': gender, 'image': image_path}
 
394
  data_manager.add_character(character)
395
+
396
+ return f"Character '{name}' saved successfully."
397
 
398
  save_button.click(
399
+ save_character,
400
+ inputs=[name_input, traits_input, image_input, gender_input],
401
+ outputs=output
402
  )
403
 
 
 
 
404
  # Display Existing Characters
405
+ refresh_characters_button = gr.Button("Refresh Characters")
406
+ refresh_characters_button.click(
407
+ lambda: list_characters(),
408
+ inputs=None,
409
+ outputs=characters_renderer
410
+ )
411
 
412
+ # Initial load of characters
413
+ characters_renderer.render(list_characters())
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
414
 
415
  def tags_app(data_manager):
416
  with gr.Tab("Tags"):
 
441
  save_persistent_tags_button = gr.Button("Save Persistent Tags")
442
  persistent_status_output = gr.Textbox(label="", interactive=False)
443
 
444
+ def save_persistent_tags(tags_string):
445
  tags_list = [t.strip() for t in tags_string.split(',') if t.strip()]
446
  data_manager.set_persistent_tags(tags_list)
447
  return "Persistent tags saved successfully."
448
 
449
+ save_persistent_tags_button.click(save_persistent_tags, inputs=persistent_tags_input, outputs=persistent_status_output)
450
 
451
  def main():
452
  data_manager = DataManager(base_dir='/data')