Spaces:
Running
Running
File size: 5,309 Bytes
e547b24 79e0fd9 72ada85 79e0fd9 f94e79d 6f5a32e e547b24 c7accf3 b1cd1e8 c7accf3 e547b24 40d7442 001cbbb e547b24 9be63af e547b24 79e0fd9 e547b24 79e0fd9 3f2e57b e547b24 3f2e57b f94e79d e547b24 6f5a32e e547b24 6f5a32e 3f2e57b e547b24 6f5a32e e547b24 40d7442 e547b24 02f8cfa bc84ac0 02f8cfa 73f7edc e547b24 02f8cfa b1cd1e8 02f8cfa 3febe0e 40d7442 272137e 02f8cfa f94e79d 12c1d15 02f8cfa e547b24 02f8cfa ebc6be0 40d7442 72ada85 40d7442 1fdefaa 40d7442 79e0fd9 e547b24 f94e79d e547b24 06ca9b2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
import gradio as gr
import requests
import io
import random
import os
import time
from PIL import Image
from deep_translator import GoogleTranslator
import json
API_TOKEN = os.getenv("HF_READ_TOKEN")
headers = {"Authorization": f"Bearer {API_TOKEN}"}
timeout = 100
article_text = """
<div style="text-align: center;">
<p>Enjoying the tool? Buy me a coffee and get exclusive prompt guides!</p>
<p><i>Instantly unlock helpful tips for creating better prompts!</i></p>
<div style="display: flex; justify-content: center;">
<a href="https://piczify.lemonsqueezy.com/buy/0f5206fa-68e8-42f6-9ca8-4f80c587c83e">
<img src="https://www.buymeacoffee.com/assets/img/custom_images/yellow_img.png"
alt="Buy Me a Coffee"
style="height: 40px; width: auto; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); border-radius: 10px;">
</a>
</div>
</div>
"""
def query(lora_id, prompt, is_negative=False, steps=28, cfg_scale=3.5, sampler="DPM++ 2M Karras", seed=-1, width=1024, height=1024):
if prompt == "" or prompt == None:
return None
if lora_id.strip() == "" or lora_id == None:
lora_id = "black-forest-labs/FLUX.1-dev"
key = random.randint(0, 999)
API_URL = "https://api-inference.huggingface.co/models/"+ lora_id.strip()
API_TOKEN = random.choice([os.getenv("HF_READ_TOKEN")])
headers = {"Authorization": f"Bearer {API_TOKEN}"}
# prompt = GoogleTranslator(source='ru', target='en').translate(prompt)
# print(f'\033[1mGeneration {key} translation:\033[0m {prompt}')
prompt = f"{prompt} | ultra detail, ultra elaboration, ultra quality, perfect."
# print(f'\033[1mGeneration {key}:\033[0m {prompt}')
# If seed is -1, generate a random seed and use it
if seed == -1:
seed = random.randint(1, 1000000000)
payload = {
"inputs": prompt,
"steps": steps,
"cfg_scale": cfg_scale,
"seed": seed,
"parameters": {
"width": width, # Pass the width to the API
"height": height # Pass the height to the API
}
}
response = requests.post(API_URL, headers=headers, json=payload, timeout=timeout)
if response.status_code != 200:
print(f"Error: Failed to get image. Response status: {response.status_code}")
print(f"Response content: {response.text}")
if response.status_code == 503:
raise gr.Error(f"{response.status_code} : The model is being loaded")
raise gr.Error(f"{response.status_code}")
try:
image_bytes = response.content
image = Image.open(io.BytesIO(image_bytes))
print(f'\033[1mGeneration {key} completed!\033[0m ({prompt})')
return image, seed
except Exception as e:
print(f"Error when trying to open the image: {e}")
return None
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",
]
css = """
#app-container {
max-width: 600px;
margin-left: auto;
margin-right: auto;
}
"""
with gr.Blocks(theme='Nymbo/Nymbo_Theme', css=css) as app:
gr.HTML("<center><h1>FLUX.1-Dev with LoRA support</h1></center>")
with gr.Column(elem_id="app-container"):
with gr.Row():
with gr.Column(elem_id="prompt-container"):
with gr.Row():
text_prompt = gr.Textbox(label="Prompt", placeholder="Enter a prompt here", lines=2, elem_id="prompt-text-input")
with gr.Row():
custom_lora = gr.Textbox(label="Custom LoRA", info="LoRA Hugging Face path (optional)", placeholder="multimodalart/vintage-ads-flux")
with gr.Row():
with gr.Accordion("Advanced Settings", open=False):
with gr.Row():
width = gr.Slider(label="Width", value=1024, minimum=64, maximum=1216, step=8)
height = gr.Slider(label="Height", value=1024, minimum=64, maximum=1216, step=8)
steps = gr.Slider(label="Sampling steps", value=28, minimum=1, maximum=100, step=1)
cfg = gr.Slider(label="CFG Scale", value=3.5, minimum=1, maximum=20, step=0.5)
method = gr.Radio(label="Sampling method", value="DPM++ 2M Karras", choices=["DPM++ 2M Karras", "DPM++ SDE Karras", "Euler", "Euler a", "Heun", "DDIM"])
seed = gr.Slider(label="Seed", value=-1, minimum=-1, maximum=1000000000, step=1)
with gr.Row():
text_button = gr.Button("Run", variant='primary', elem_id="gen-button")
with gr.Row():
image_output = gr.Image(type="pil", label="Image Output", elem_id="gallery")
with gr.Row():
seed_output = gr.Textbox(label="Seed Used", show_copy_button = True, elem_id="seed-output")
gr.Markdown(article_text)
gr.Examples(
examples = examples,
inputs = [text_prompt],
)
text_button.click(query, inputs=[custom_lora, text_prompt, negative_prompt, steps, cfg, method, seed, width, height], outputs=[image_output,seed_output])
app.launch(show_api=False, share=False) |