HAL1993's picture
Update app.py
dbfc881 verified
import gradio as gr
import numpy as np
import spaces
import torch
import random
from PIL import Image
from diffusers import FluxKontextPipeline
from diffusers.utils import load_image
import requests
MAX_SEED = np.iinfo(np.int32).max
pipe = FluxKontextPipeline.from_pretrained("black-forest-labs/FLUX.1-Kontext-dev", torch_dtype=torch.bfloat16).to("cuda")
@spaces.GPU
def translate_albanian_to_english(text):
"""Translate Albanian to English using sepioo-facebook-translation API."""
if not text.strip():
return ""
for attempt in range(2):
try:
response = requests.post(
"https://hal1993-mdftranslation1234567890abcdef1234567890-fc073a6.hf.space/v1/translate",
json={"from_language": "sq", "to_language": "en", "input_text": text},
headers={"accept": "application/json", "Content-Type": "application/json"},
timeout=5
)
response.raise_for_status()
translated = response.json().get("translate", "")
return translated
except Exception as e:
if attempt == 1:
raise gr.Error(f"Përkthimi dështoi: {str(e)}")
raise gr.Error("Përkthimi dështoi. Ju lutem provoni përsëri.")
@spaces.GPU
def infer(input_image, prompt, seed=42, randomize_seed=False, guidance_scale=2.5, steps=12, progress=gr.Progress(track_tqdm=True)):
"""
Perform image editing using the FLUX.1 Kontext pipeline.
"""
# Translate Albanian prompt to English
final_prompt = translate_albanian_to_english(prompt.strip()) if prompt.strip() else ""
if not final_prompt:
return None, seed, gr.Button(visible=False)
if randomize_seed:
seed = random.randint(0, MAX_SEED)
if input_image:
input_image = input_image.convert("RGB")
image = pipe(
image=input_image,
prompt=final_prompt,
guidance_scale=guidance_scale,
width=input_image.size[0],
height=input_image.size[1],
num_inference_steps=steps,
generator=torch.Generator().manual_seed(seed),
).images[0]
else:
image = pipe(
prompt=final_prompt,
guidance_scale=guidance_scale,
width=1024,
height=1024,
num_inference_steps=steps,
generator=torch.Generator().manual_seed(seed),
).images[0]
return image, seed, gr.Button(visible=True)
@spaces.GPU
def infer_example(input_image, prompt):
image, seed, _ = infer(input_image, prompt)
return image, seed
with gr.Blocks() as demo:
gr.HTML("""
<style>
body::before {
content: "";
display: block;
height: 320px;
background-color: var(--body-background-fill);
}
button[aria-label="Fullscreen"], button[aria-label="Fullscreen"]:hover {
display: none !important;
visibility: hidden !important;
opacity: 0 !important;
pointer-events: none !important;
}
button[aria-label="Share"], button[aria-label="Share"]:hover {
display: none !important;
}
button[aria-label="Download"] {
transform: scale(3);
transform-origin: top right;
margin: 0 !important;
padding: 6px !important;
}
</style>
""")
gr.Markdown("# Modifiko imazhet")
gr.Markdown("Modifiko imazhet ne menyre universale ne baze te pershkrimit")
with gr.Column():
input_image = gr.Image(label="Ngarko Imazhin për Editim", type="pil")
prompt = gr.Textbox(
label="Përshkrimi",
placeholder="Shkruani përshkrimin këtu",
lines=3
)
run_button = gr.Button(value="Gjenero")
reuse_button = gr.Button("Rivendos këtë imazh", visible=False)
# Hidden advanced settings
seed = gr.Slider(
minimum=0,
maximum=MAX_SEED,
step=1,
value=0,
visible=False
)
randomize_seed = gr.Checkbox(value=True, visible=False)
guidance_scale = gr.Slider(
minimum=1,
maximum=10,
step=0.1,
value=2.5,
visible=False
)
steps = gr.Slider(
minimum=1,
maximum=30,
value=12,
step=1,
visible=False
)
with gr.Row():
result = gr.Image(label="Imazhi i Gjeneruar", interactive=False)
with gr.Row():
reuse_button = gr.Button("Përdor imazhin e gjeneruar", visible=False)
gr.on(
triggers=[run_button.click, prompt.submit],
fn=infer,
inputs=[input_image, prompt, seed, randomize_seed, guidance_scale, steps],
outputs=[result, seed, reuse_button]
)
reuse_button.click(
fn=lambda image: image,
inputs=[result],
outputs=[input_image]
)
demo.launch(mcp_server=True)