Spaces:
Runtime error
Runtime error
Update app.py
Browse files
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=
|
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
|
490 |
-
current_images
|
|
|
|
|
|
|
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 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
|
|
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 |
-
|
526 |
-
|
527 |
-
fn=
|
528 |
inputs=[],
|
529 |
-
outputs=
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
530 |
)
|
531 |
|
532 |
with gr.Row():
|
533 |
generate_button
|
534 |
-
|
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()
|