Vijish commited on
Commit
d6c7c4a
Β·
verified Β·
1 Parent(s): 6f27610

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +56 -47
app.py CHANGED
@@ -18,6 +18,23 @@ def clear_memory():
18
  torch.cuda.empty_cache()
19
  torch.cuda.ipc_collect()
20
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  # Function to resize images while preserving the aspect ratio
22
  def resize_image(image, max_size=1024):
23
  width, height = image.size
@@ -377,31 +394,6 @@ image_folder_path = "control" # Update this path to your folder
377
  # Load images from folder
378
  loaded_images = load_images_from_folder(image_folder_path)
379
 
380
- # Restart function to clear memory and reinitialize models
381
- def restart():
382
- global controlnet_pipe, reference_pipe, pipe, current_controlnet_type, controlnet_models
383
- clear_memory()
384
- controlnet_pipe = None
385
- reference_pipe = None
386
- pipe = None
387
- current_controlnet_type = None
388
- controlnet_models = {
389
- "Canny": None,
390
- "Depth": None,
391
- "OpenPose": None,
392
- "Reference": None
393
- }
394
- load_base_model()
395
- return "Restarted successfully!"
396
-
397
- def load_base_model():
398
- global pipe
399
- model = "aicollective1/aicollective"
400
- pipe = DiffusionPipeline.from_pretrained(model, torch_dtype=torch.float16)
401
- pipe.to("cuda")
402
-
403
- load_base_model()
404
-
405
  # Define the Gradio interface
406
  with gr.Blocks() as demo:
407
  gr.Markdown("# Image Generation with Custom Prompts and Styles")
@@ -419,8 +411,8 @@ with gr.Blocks() as demo:
419
  num_inference_steps = gr.Slider(minimum=1, maximum=100, step=1, label="Number of Inference Steps", value=30)
420
  use_controlnet = gr.Checkbox(label="Use ControlNet", value=False)
421
  controlnet_type = gr.Dropdown(choices=["Canny", "Depth", "OpenPose", "Reference"], label="ControlNet Type")
422
- controlnet_status = gr.Textbox(label="Status", value="", interactive=False)
423
- mode = gr.Radio(choices=["Single Image", "Batch"], label="Mode", value="Single Image")
424
  use_control_folder = gr.Checkbox(label="Use Control Folder for Batch Processing", value=False)
425
 
426
  with gr.Tabs() as tabs:
@@ -458,7 +450,7 @@ with gr.Blocks() as demo:
458
  height=235,
459
  allow_preview=False
460
  )
461
- gallery = gr.Gallery(label="Generated Images", show_label=False, elem_id="gallery", height=870)
462
 
463
  selected_style = gr.State(value="Anime Studio Dance")
464
 
@@ -479,31 +471,35 @@ with gr.Blocks() as demo:
479
 
480
  selected_folder_images = gr.State(value=[])
481
 
482
- def select_folder_image(evt: gr.SelectData, selected_folder_images):
483
  folder_image_names = [img[0] for img in loaded_images]
484
  if evt.index < 0 or evt.index >= len(folder_image_names):
485
  raise ValueError(f"Invalid index: {evt.index}")
486
  selected_image_name = folder_image_names[evt.index]
487
  selected_image = next(img for img in loaded_images if img[0] == selected_image_name)
488
  current_images = selected_folder_images or []
489
- if selected_image not in current_images:
490
- current_images.append(selected_image)
 
 
 
491
  return current_images
492
 
493
  def clear_selected_folder_images():
494
  return []
495
 
496
- folder_images_gallery.select(fn=select_folder_image, inputs=[selected_folder_images], outputs=selected_folder_images)
497
  clear_selection_button.click(fn=clear_selected_folder_images, inputs=[], outputs=selected_folder_images)
498
 
499
- def generate_images_with_folder_images(prompt, negative_prompt, batch_count, use_controlnet, controlnet_type, mode, use_control_folder, selected_folder_images, batch_images_input, num_inference_steps, progress=gr.Progress(track_tqdm=True)):
500
- if mode == "Batch":
501
- if use_control_folder:
502
- selected_images = [img[1] for img in loaded_images]
503
- else:
504
- if not batch_images_input:
505
- raise ValueError("No images uploaded for batch processing.")
506
- selected_images = [resize_image(Image.open(img).convert("RGB")) for img in batch_images_input]
 
507
  else:
508
  selected_images = [img[1] for img in selected_folder_images]
509
  return generate_images_with_progress(prompt, negative_prompt, batch_count, use_controlnet, controlnet_type, mode, selected_images, num_inference_steps, progress)
@@ -511,7 +507,7 @@ with gr.Blocks() as demo:
511
  generate_button = gr.Button("Generate Images")
512
  generate_button.click(
513
  generate_images_with_folder_images,
514
- inputs=[prompt, negative_prompt, batch_count, use_controlnet, controlnet_type, mode, use_control_folder, selected_folder_images, batch_images_input, num_inference_steps],
515
  outputs=gallery
516
  )
517
 
@@ -522,19 +518,32 @@ with gr.Blocks() as demo:
522
  outputs=metadata_output
523
  )
524
 
525
- restart_button = gr.Button("Restart")
526
- restart_button.click(
527
- fn=restart,
528
  inputs=[],
529
- outputs=controlnet_status
 
 
 
 
 
 
 
 
 
 
 
 
 
530
  )
531
 
532
  with gr.Row():
533
  generate_button
534
- restart_button
535
 
536
  # At the end of your script:
537
  if __name__ == "__main__":
538
  # Your Gradio interface setup here
539
  demo.launch(auth=("roland", "roland"), debug=True)
540
- clear_memory()
 
18
  torch.cuda.empty_cache()
19
  torch.cuda.ipc_collect()
20
 
21
+ def reset_ui():
22
+ clear_memory()
23
+ return (
24
+ "", # Reset prompt
25
+ "", # Reset negative prompt
26
+ 1, # Reset batch count
27
+ 30, # Reset number of inference steps
28
+ False, # Reset use controlnet
29
+ None, # Reset controlnet type
30
+ "Restart/Refresh completed", # Reset controlnet status with message
31
+ "Single Image", # Reset mode
32
+ False, # Reset use control folder
33
+ None, # Reset control image
34
+ [], # Reset selected folder images
35
+ None, # Reset batch images input
36
+ )
37
+
38
  # Function to resize images while preserving the aspect ratio
39
  def resize_image(image, max_size=1024):
40
  width, height = image.size
 
394
  # Load images from folder
395
  loaded_images = load_images_from_folder(image_folder_path)
396
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
397
  # Define the Gradio interface
398
  with gr.Blocks() as demo:
399
  gr.Markdown("# Image Generation with Custom Prompts and Styles")
 
411
  num_inference_steps = gr.Slider(minimum=1, maximum=100, step=1, label="Number of Inference Steps", value=30)
412
  use_controlnet = gr.Checkbox(label="Use ControlNet", value=False)
413
  controlnet_type = gr.Dropdown(choices=["Canny", "Depth", "OpenPose", "Reference"], label="ControlNet Type")
414
+ controlnet_status = gr.Textbox(label="ControlNet Status", value="", interactive=False)
415
+ mode = gr.Radio(choices=["Single Image", "Batch", "Multiselect"], label="Mode", value="Single Image")
416
  use_control_folder = gr.Checkbox(label="Use Control Folder for Batch Processing", value=False)
417
 
418
  with gr.Tabs() as tabs:
 
450
  height=235,
451
  allow_preview=False
452
  )
453
+ gallery = gr.Gallery(label="Generated Images", show_label=False, elem_id="gallery", height=820)
454
 
455
  selected_style = gr.State(value="Anime Studio Dance")
456
 
 
471
 
472
  selected_folder_images = gr.State(value=[])
473
 
474
+ def select_folder_image(evt: gr.SelectData, selected_folder_images, mode):
475
  folder_image_names = [img[0] for img in loaded_images]
476
  if evt.index < 0 or evt.index >= len(folder_image_names):
477
  raise ValueError(f"Invalid index: {evt.index}")
478
  selected_image_name = folder_image_names[evt.index]
479
  selected_image = next(img for img in loaded_images if img[0] == selected_image_name)
480
  current_images = selected_folder_images or []
481
+ if mode == "Single Image":
482
+ current_images = [selected_image]
483
+ else:
484
+ if selected_image not in current_images:
485
+ current_images.append(selected_image)
486
  return current_images
487
 
488
  def clear_selected_folder_images():
489
  return []
490
 
491
+ folder_images_gallery.select(fn=select_folder_image, inputs=[selected_folder_images, mode], outputs=selected_folder_images)
492
  clear_selection_button.click(fn=clear_selected_folder_images, inputs=[], outputs=selected_folder_images)
493
 
494
+ def generate_images_with_folder_images(prompt, negative_prompt, batch_count, use_controlnet, controlnet_type, mode, use_control_folder, selected_folder_images, batch_images_input, num_inference_steps, control_image, progress=gr.Progress(track_tqdm=True)):
495
+ if mode == "Batch" and use_control_folder:
496
+ selected_images = [img[1] for img in loaded_images]
497
+ elif mode == "Batch":
498
+ if not batch_images_input:
499
+ raise ValueError("No images uploaded for batch processing.")
500
+ selected_images = [resize_image(Image.open(img).convert("RGB")) for img in batch_images_input]
501
+ elif mode == "Single Image" and control_image is not None:
502
+ selected_images = [control_image]
503
  else:
504
  selected_images = [img[1] for img in selected_folder_images]
505
  return generate_images_with_progress(prompt, negative_prompt, batch_count, use_controlnet, controlnet_type, mode, selected_images, num_inference_steps, progress)
 
507
  generate_button = gr.Button("Generate Images")
508
  generate_button.click(
509
  generate_images_with_folder_images,
510
+ inputs=[prompt, negative_prompt, batch_count, use_controlnet, controlnet_type, mode, use_control_folder, selected_folder_images, batch_images_input, num_inference_steps, control_image],
511
  outputs=gallery
512
  )
513
 
 
518
  outputs=metadata_output
519
  )
520
 
521
+ refresh_button = gr.Button("Restart/Refresh")
522
+ refresh_button.click(
523
+ fn=reset_ui,
524
  inputs=[],
525
+ outputs=[
526
+ prompt,
527
+ negative_prompt,
528
+ batch_count,
529
+ num_inference_steps,
530
+ use_controlnet,
531
+ controlnet_type,
532
+ controlnet_status,
533
+ mode,
534
+ use_control_folder,
535
+ control_image,
536
+ selected_folder_images,
537
+ batch_images_input
538
+ ]
539
  )
540
 
541
  with gr.Row():
542
  generate_button
543
+ refresh_button
544
 
545
  # At the end of your script:
546
  if __name__ == "__main__":
547
  # Your Gradio interface setup here
548
  demo.launch(auth=("roland", "roland"), debug=True)
549
+ clear_memory()