File size: 5,817 Bytes
e547b24 79e0fd9 72ada85 79e0fd9 61ebb83 6f5a32e e547b24 c7accf3 b1cd1e8 c7accf3 e547b24 40d7442 001cbbb e547b24 9be63af e547b24 79e0fd9 e547b24 79e0fd9 3f2e57b 61ebb83 e547b24 3f2e57b f94e79d e547b24 6f5a32e e547b24 6f5a32e 9ab70d4 e547b24 6f5a32e e547b24 40d7442 e547b24 f92c94f 413cbda e547b24 1a5c88a b1cd1e8 0ca80b9 724b53f 0ca80b9 02f8cfa 7091e2b 40d7442 272137e 02f8cfa f94e79d 61ebb83 e547b24 b42a697 0ca80b9 724b53f 72ada85 f92c94f 0ca80b9 f92c94f 79e0fd9 e547b24 9ab70d4 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 134 135 136 137 138 139 140 141 142 143 144 145 |
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, steps=28, cfg_scale=3.5, randomize_seed=True, 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 randomize_seed:
seed = random.randint(1, 4294967296)
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, 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 = """
#col-container {
margin: 0 auto;
max-width: 960px;
}
.generate-btn {
background: linear-gradient(90deg, #4B79A1 0%, #283E51 100%) !important;
border: none !important;
color: white !important;
}
.generate-btn:hover {
transform: translateY(-2px);
box-shadow: 0 5px 15px rgba(0,0,0,0.2);
}
"""
with gr.Blocks(css=css) as app:
gr.HTML("<center><h1>FLUX.1-Dev with LoRA support</h1></center>")
with gr.Column(elem_id="col-container"):
with gr.Row():
with gr.Column():
with gr.Row():
text_prompt = gr.Textbox(label="Prompt", placeholder="Enter a prompt here", lines=3, 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)
seed = gr.Slider(label="Seed", value=-1, minimum=-1, maximum=4294967296, step=1)
randomize_seed = gr.Checkbox(label="Randomize seed", value=True)
with gr.Row():
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"])
with gr.Row():
# text_button = gr.Button("Run", variant='primary', elem_id="gen-button")
text_button = gr.Button("✨ Generate Image", variant='primary', elem_classes=["generate-btn"])
with gr.Column():
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)
gr.Markdown(article_text)
with gr.Column():
gr.Examples(
examples = examples,
inputs = [text_prompt],
)
text_button.click(query, inputs=[custom_lora, text_prompt, steps, cfg, randomize_seed, seed, width, height], outputs=[image_output,seed_output, seed])
app.launch(show_api=False, share=False) |