|
|
import warnings |
|
|
warnings.filterwarnings("ignore") |
|
|
import gradio as gr |
|
|
from gradio_client import Client, handle_file |
|
|
|
|
|
def generate_image(prompt, image_url=None, image_file=None): |
|
|
|
|
|
client = Client("yanze/PuLID-FLUX") |
|
|
|
|
|
|
|
|
if image_url: |
|
|
id_image = handle_file(image_url) |
|
|
elif image_file: |
|
|
id_image = handle_file(image_file.name) |
|
|
else: |
|
|
return "Error: Please provide an image URL or upload an image file." |
|
|
|
|
|
|
|
|
try: |
|
|
result = client.predict( |
|
|
prompt=prompt, |
|
|
id_image=id_image, |
|
|
start_step=0, |
|
|
guidance=2, |
|
|
seed="-1", |
|
|
true_cfg=1, |
|
|
width=896, |
|
|
height=1152, |
|
|
num_steps=20, |
|
|
id_weight=1, |
|
|
neg_prompt="bad quality, worst quality, text, signature, watermark, extra limbs", |
|
|
timestep_to_start_cfg=1, |
|
|
max_sequence_length=128, |
|
|
api_name="/generate_image" |
|
|
) |
|
|
|
|
|
|
|
|
base_url = "https://yanze-pulid-flux.hf.space/file=" |
|
|
file_path = result[0] |
|
|
full_url = f"{base_url}{file_path}" |
|
|
|
|
|
return full_url |
|
|
except Exception as e: |
|
|
return f"Error during prediction: {str(e)}" |
|
|
|
|
|
|
|
|
def gradio_interface(): |
|
|
with gr.Blocks() as demo: |
|
|
gr.Markdown("# Image Generation App\nUpload an image or provide an image URL, and enter a prompt to generate a new image.") |
|
|
|
|
|
with gr.Row(): |
|
|
prompt = gr.Textbox(label="Prompt", placeholder="Enter your prompt, e.g., portrait, color, cinematic") |
|
|
image_url = gr.Textbox(label="Image URL", placeholder="Enter the image URL (optional)") |
|
|
|
|
|
image_file = gr.File(label="Upload Image", file_types=["image"]) |
|
|
|
|
|
with gr.Row(): |
|
|
submit_button = gr.Button("Generate Image") |
|
|
|
|
|
output = gr.Textbox(label="Generated Image URL") |
|
|
output_image = gr.Image(label="Generated Image") |
|
|
|
|
|
def process(prompt, image_url, image_file): |
|
|
result_url = generate_image(prompt, image_url, image_file) |
|
|
if result_url.startswith("http"): |
|
|
return result_url, result_url |
|
|
else: |
|
|
return result_url, None |
|
|
|
|
|
submit_button.click( |
|
|
fn=process, |
|
|
inputs=[prompt, image_url, image_file], |
|
|
outputs=[output, output_image] |
|
|
) |
|
|
|
|
|
return demo |
|
|
|
|
|
if __name__ == "__main__": |
|
|
demo = gradio_interface() |
|
|
demo.launch() |