Spaces:
Running
Running
| import os | |
| import io | |
| import random | |
| import requests | |
| import gradio as gr | |
| import numpy as np | |
| from PIL import Image | |
| import replicate | |
| MAX_SEED = np.iinfo(np.int32).max | |
| def predict(replicate_api, prompt, lora_id, lora_scale=0.95, aspect_ratio="1:1", seed=-1, randomize_seed=True, guidance_scale=3.5, num_inference_steps=28, progress=gr.Progress(track_tqdm=True)): | |
| # Validate API key and prompt | |
| if not replicate_api or not prompt: | |
| return "Error: Missing necessary inputs.", -1, None | |
| # Set the seed if randomize_seed is True | |
| if randomize_seed: | |
| seed = random.randint(0, MAX_SEED) | |
| # Set the Replicate API token in the environment variable | |
| os.environ["REPLICATE_API_TOKEN"] = replicate_api | |
| # Construct the input for the replicate model | |
| input_params = { | |
| "prompt": prompt, | |
| "output_format": "jpg", | |
| "aspect_ratio": aspect_ratio, | |
| "num_inference_steps": num_inference_steps, | |
| "guidance_scale": guidance_scale, | |
| "seed": seed, | |
| "disable_safety_checker": True | |
| } | |
| # If lora_id is provided, include it in the input | |
| if lora_id and lora_id.strip()!="": | |
| input_params["hf_lora"] = lora_id.strip() | |
| input_params["lora_scale"] = lora_scale | |
| try: | |
| # Run the model using the user's API token from the environment variable | |
| output = replicate.run( | |
| "lucataco/flux-dev-lora:a22c463f11808638ad5e2ebd582e07a469031f48dd567366fb4c6fdab91d614d", | |
| input=input_params | |
| ) | |
| print("\nGeneration Completed: ",output,prompt,lora_id) | |
| return output[0], seed, seed # Return the generated image and seed | |
| except Exception as e: | |
| # Catch any exceptions, such as invalid API token or lack of credits | |
| return f"Error: {str(e)}", -1, None | |
| finally: | |
| # Always remove the API key from the environment | |
| if "REPLICATE_API_TOKEN" in os.environ: | |
| del os.environ["REPLICATE_API_TOKEN"] | |
| demo = gr.Interface(fn=predict, inputs="text", outputs="image") | |
| css=""" | |
| #col-container { | |
| margin: 0 auto; | |
| max-width: 520px; | |
| } | |
| """ | |
| examples = [ | |
| "a tiny astronaut hatching from an egg on the moon", | |
| "a cat holding a sign that says hello world", | |
| "an anime illustration of a wiener schnitzel", | |
| ] | |
| with gr.Blocks(css=css) as demo: | |
| with gr.Column(elem_id="col-container"): | |
| gr.Markdown("# FLUX Dev with Replicate API") | |
| replicate_api = gr.Text(label="Replicate API Key", type='password', show_label=True, max_lines=1, placeholder="Enter your Replicate API token", container=True) | |
| prompt = gr.Text(label="Prompt", show_label=True, lines = 2, max_lines=4, show_copy_button = True, placeholder="Enter your prompt", container=True) | |
| with gr.Accordion("Advanced Settings", open=False): | |
| with gr.Row(): | |
| custom_lora = gr.Textbox(label="Custom LoRA", info="LoRA Hugging Face path (optional)", placeholder="multimodalart/vintage-ads-flux") | |
| lora_scale = gr.Slider( | |
| label="LoRA Scale", | |
| minimum=0, | |
| maximum=1, | |
| step=0.01, | |
| value=0.95, | |
| ) | |
| aspect_ratio = gr.Radio(label="Aspect ratio", value="1:1", choices=["1:1", "4:5", "2:3", "3:4","9:16", "4:3", "16:9"]) | |
| seed = gr.Slider( | |
| label="Seed", | |
| minimum=0, | |
| maximum=MAX_SEED, | |
| step=1, | |
| value=0, | |
| ) | |
| randomize_seed = gr.Checkbox(label="Randomize seed", value=True) | |
| with gr.Row(): | |
| guidance_scale = gr.Slider( | |
| label="Guidance Scale", | |
| minimum=1, | |
| maximum=15, | |
| step=0.1, | |
| value=3.5, | |
| ) | |
| num_inference_steps = gr.Slider( | |
| label="Number of inference steps", | |
| minimum=1, | |
| maximum=50, | |
| step=1, | |
| value=28, | |
| ) | |
| submit = gr.Button("Generate Image", variant="primary",scale=1) | |
| output = gr.Image(label="Output Image", show_label=True) | |
| seed_used = gr.Textbox(label="Seed Used", show_copy_button = True) | |
| gr.Examples( | |
| examples=examples, | |
| fn=predict, | |
| inputs=[prompt] | |
| ) | |
| gr.on( | |
| triggers=[submit.click, prompt.submit], | |
| fn=predict, | |
| inputs=[replicate_api, prompt, custom_lora, lora_scale, aspect_ratio, seed, randomize_seed, guidance_scale, num_inference_steps], | |
| outputs = [output, seed, seed_used] | |
| ) | |
| demo.launch() |