Spaces:
Running
Running
add prompt count
Browse files
app.py
CHANGED
|
@@ -49,13 +49,16 @@ def change_image_style(
|
|
| 49 |
edit_prompt = data.get("edit_prompt")
|
| 50 |
# replace \n to <br>
|
| 51 |
edit_prompt = edit_prompt.replace("\n", "<br>")
|
| 52 |
-
return resultImageUrl, edit_prompt
|
| 53 |
else:
|
| 54 |
-
|
|
|
|
| 55 |
|
| 56 |
def generate_image(
|
| 57 |
input_image,
|
| 58 |
style_images,
|
|
|
|
|
|
|
| 59 |
extract_model,
|
| 60 |
extract_prompt,
|
| 61 |
prompt_prefix
|
|
@@ -66,20 +69,47 @@ def generate_image(
|
|
| 66 |
|
| 67 |
if style_images is None:
|
| 68 |
raise gr.Error(f"Cannot find any style image! Please refer to step 1️⃣")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 69 |
|
| 70 |
inputImageUrl = prefix + input_image
|
| 71 |
|
| 72 |
-
|
|
|
|
| 73 |
markdownStr = ""
|
| 74 |
-
for style_image in style_images:
|
| 75 |
-
if not style_image:
|
| 76 |
-
raise gr.Error(f"Cannot find any style image! Please refer to step 1️⃣")
|
| 77 |
-
styleImageUrl = prefix + style_image[0]
|
| 78 |
-
result_image, edit_prompt = change_image_style(inputImageUrl, styleImageUrl, extract_model, extract_prompt, prompt_prefix)
|
| 79 |
-
result_images.append(result_image)
|
| 80 |
-
markdownStr += f"{edit_prompt} <img src='{result_image}' style='zoom: 33%;' />\n"
|
| 81 |
|
| 82 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 83 |
|
| 84 |
|
| 85 |
def swap_to_gallery(images):
|
|
@@ -101,6 +131,11 @@ with gr.Blocks() as demo:
|
|
| 101 |
with gr.Column(visible=False) as clear_button:
|
| 102 |
remove_and_reupload = gr.ClearButton(value="Remove and upload new ones", components=files, size="sm")
|
| 103 |
input_image = gr.Image(label="Input Image", type="filepath", interactive=True)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 104 |
extract_model = gr.Dropdown(choices=extract_model_tag_list, label="Extract Model", value="o3")
|
| 105 |
extract_prompt = gr.Textbox(lines=2, label="Extracted Prompt", value="Accurately extract everything from this photo into a prompt especially the hairstyle excluding the backgrounds. I want to replicate it perfectly. need to be a complete paragraph")
|
| 106 |
prompt_prefix = gr.Textbox(lines=1, label="Prompt Prefix", value="change the backgrounds to match this:")
|
|
@@ -108,6 +143,8 @@ with gr.Blocks() as demo:
|
|
| 108 |
submit = gr.Button("Submit")
|
| 109 |
|
| 110 |
with gr.Column():
|
|
|
|
|
|
|
| 111 |
gallery = gr.Gallery(label="Generated Images")
|
| 112 |
markdown = gr.Markdown(label="Generated Images")
|
| 113 |
|
|
@@ -116,8 +153,8 @@ with gr.Blocks() as demo:
|
|
| 116 |
|
| 117 |
submit.click(
|
| 118 |
fn=generate_image,
|
| 119 |
-
inputs=[input_image, uploaded_files, extract_model, extract_prompt, prompt_prefix],
|
| 120 |
-
outputs=[gallery, markdown]
|
| 121 |
)
|
| 122 |
|
| 123 |
|
|
|
|
| 49 |
edit_prompt = data.get("edit_prompt")
|
| 50 |
# replace \n to <br>
|
| 51 |
edit_prompt = edit_prompt.replace("\n", "<br>")
|
| 52 |
+
return resultImageUrl, edit_prompt, ""
|
| 53 |
else:
|
| 54 |
+
error_msg = f"Error: {response.status_code} - {response.text}"
|
| 55 |
+
return "", "", error_msg
|
| 56 |
|
| 57 |
def generate_image(
|
| 58 |
input_image,
|
| 59 |
style_images,
|
| 60 |
+
prompt_count: int,
|
| 61 |
+
image_count: int,
|
| 62 |
extract_model,
|
| 63 |
extract_prompt,
|
| 64 |
prompt_prefix
|
|
|
|
| 69 |
|
| 70 |
if style_images is None:
|
| 71 |
raise gr.Error(f"Cannot find any style image! Please refer to step 1️⃣")
|
| 72 |
+
|
| 73 |
+
style_size = len(style_images)
|
| 74 |
+
if style_size < 1:
|
| 75 |
+
raise gr.Error(f"Please upload at least one style image! Refer to step 1️⃣")
|
| 76 |
+
|
| 77 |
+
total_count = style_size * prompt_count * image_count
|
| 78 |
+
completed_count = 0
|
| 79 |
+
success_count = 0
|
| 80 |
+
error_count = 0
|
| 81 |
|
| 82 |
inputImageUrl = prefix + input_image
|
| 83 |
|
| 84 |
+
result_image_list = []
|
| 85 |
+
error_list = []
|
| 86 |
markdownStr = ""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 87 |
|
| 88 |
+
for style_index in range(style_size):
|
| 89 |
+
style_image = style_images[style_index]
|
| 90 |
+
if not style_image:
|
| 91 |
+
error_list.append(f"Style image {style_index + 1} is empty.")
|
| 92 |
+
continue
|
| 93 |
+
|
| 94 |
+
for prompt_index in range(prompt_count):
|
| 95 |
+
for image_index in range(image_count):
|
| 96 |
+
completed_count += 1
|
| 97 |
+
styleImageUrl = prefix + style_image[0]
|
| 98 |
+
result_image, edit_prompt, error_msg = change_image_style(
|
| 99 |
+
inputImageUrl, styleImageUrl, extract_model, extract_prompt, prompt_prefix
|
| 100 |
+
)
|
| 101 |
+
|
| 102 |
+
if result_image:
|
| 103 |
+
success_count += 1
|
| 104 |
+
result_image_list.append(result_image)
|
| 105 |
+
markdownStr += f"{edit_prompt} <img src='{result_image}' style='zoom: 33%;' />\n"
|
| 106 |
+
else:
|
| 107 |
+
error_count += 1
|
| 108 |
+
error_list.append(f"Error processing style image {style_index + 1}, prompt {prompt_index + 1}, image {image_index + 1}: {error_msg}")
|
| 109 |
+
|
| 110 |
+
status = "processing" if completed_count < total_count else "completed"
|
| 111 |
+
status_message = f"Status: {status} ({completed_count}/{total_count}) success: {success_count}, error: {error_count}"
|
| 112 |
+
yield status_message, error_list, result_image_list, markdownStr
|
| 113 |
|
| 114 |
|
| 115 |
def swap_to_gallery(images):
|
|
|
|
| 131 |
with gr.Column(visible=False) as clear_button:
|
| 132 |
remove_and_reupload = gr.ClearButton(value="Remove and upload new ones", components=files, size="sm")
|
| 133 |
input_image = gr.Image(label="Input Image", type="filepath", interactive=True)
|
| 134 |
+
with gr.Row():
|
| 135 |
+
with gr.Column():
|
| 136 |
+
prompt_count = gr.Number(label="Prompt Count", value=4, precision=0)
|
| 137 |
+
with gr.Column():
|
| 138 |
+
image_count = gr.Number(label="Image Count", value=3, precision=0)
|
| 139 |
extract_model = gr.Dropdown(choices=extract_model_tag_list, label="Extract Model", value="o3")
|
| 140 |
extract_prompt = gr.Textbox(lines=2, label="Extracted Prompt", value="Accurately extract everything from this photo into a prompt especially the hairstyle excluding the backgrounds. I want to replicate it perfectly. need to be a complete paragraph")
|
| 141 |
prompt_prefix = gr.Textbox(lines=1, label="Prompt Prefix", value="change the backgrounds to match this:")
|
|
|
|
| 143 |
submit = gr.Button("Submit")
|
| 144 |
|
| 145 |
with gr.Column():
|
| 146 |
+
status_text = gr.Textbox(label="Status", show_label=False, interactive=False)
|
| 147 |
+
error_text = gr.Textbox(label="Error List", show_label=False, interactive=False)
|
| 148 |
gallery = gr.Gallery(label="Generated Images")
|
| 149 |
markdown = gr.Markdown(label="Generated Images")
|
| 150 |
|
|
|
|
| 153 |
|
| 154 |
submit.click(
|
| 155 |
fn=generate_image,
|
| 156 |
+
inputs=[input_image, uploaded_files, prompt_count, image_count, extract_model, extract_prompt, prompt_prefix],
|
| 157 |
+
outputs=[status_text, error_text, gallery, markdown]
|
| 158 |
)
|
| 159 |
|
| 160 |
|