Spaces:
Running
Running
from gradio_client import Client, handle_file | |
import gradio as gr | |
import concurrent.futures | |
import tempfile | |
import os | |
from PIL import Image | |
# Impor tema custom dari themes.py | |
from themes import IndonesiaTheme | |
# Siapkan URL dan header untuk permintaan API | |
url_api1 = os.environ['url_api1'] | |
url_api2 = os.environ['url_api2'] | |
# Fungsi untuk FLUX Std | |
def infer_image(prompt, seed, randomize_seed, width, height, guidance_scale, num_inference_steps, progress=gr.Progress()): | |
client = Client(url_api1) | |
try: | |
progress(0, "Memulai proses...") | |
result = client.predict( | |
prompt=prompt, | |
seed=seed, | |
randomize_seed=randomize_seed, | |
width=width, | |
height=height, | |
guidance_scale=guidance_scale, | |
num_inference_steps=num_inference_steps, | |
api_name="/infer" | |
) | |
progress(1, "Proses selesai.") | |
return result[0], seed if not randomize_seed else result[1] | |
except concurrent.futures.CancelledError: | |
return None, "Request was cancelled. Please try again." | |
# Fungsi untuk FLUX Inpainting | |
def inpainting_process(input_image_editor, input_text, seed_slicer, randomize_seed_checkbox, strength_slider, num_inference_steps_slider, progress=gr.Progress()): | |
client = Client(url_api2) | |
try: | |
progress(0, "Memulai proses inpainting...") | |
# Simpan gambar sementara ke file | |
with tempfile.NamedTemporaryFile(suffix=".png", delete=False) as temp: | |
input_image_editor["composite"].save(temp.name) | |
temp_image_path = temp.name | |
# Tutup file setelah penulisan selesai | |
temp.close() | |
# Gunakan handle_file untuk memproses gambar dari jalur file sementara | |
input_image_editor = {"background": handle_file(temp_image_path)} | |
result = client.predict( | |
input_image_editor=input_image_editor, | |
input_text=input_text, | |
seed_slicer=seed_slicer, | |
randomize_seed_checkbox=randomize_seed_checkbox, | |
strength_slider=strength_slider, | |
num_inference_steps_slider=num_inference_steps_slider, | |
api_name="/process" | |
) | |
progress(1, "Proses inpainting selesai.") | |
return result[0], result[1] | |
except concurrent.futures.CancelledError: | |
return None, "Request was cancelled. Please try again." | |
finally: | |
# Hapus file sementara setelah selesai digunakan | |
import os | |
os.remove(temp_image_path) | |
# CSS untuk styling antarmuka | |
css = """ | |
#col-left, #col-mid, #col-right { | |
margin: 0 auto; | |
max-width: 400px; | |
padding: 10px; | |
border-radius: 15px; | |
background-color: #f9f9f9; | |
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); | |
} | |
#banner { | |
width: 100%; | |
text-align: center; | |
margin-bottom: 20px; | |
} | |
#run-button { | |
background-color: #ff4b5c; | |
color: white; | |
font-weight: bold; | |
padding: 10px; | |
border-radius: 10px; | |
cursor: pointer; | |
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); | |
} | |
#footer { | |
text-align: center; | |
margin-top: 20px; | |
color: silver; | |
} | |
""" | |
# Interface Gradio | |
with gr.Blocks(css=css, theme=IndonesiaTheme()) as app: | |
# Tambahkan banner | |
gr.HTML(""" | |
<div style='text-align: center;'> | |
<img src='https://i.postimg.cc/ZYFNKrjK/banner.jpg' alt='Banner' style='width: 100%; height: auto;'/> | |
</div> | |
""") | |
# Ganti judul | |
gr.Markdown("<h2 style='text-align: center;'>FLUX.1 Untuk membuat gambar terbaik di dunia.</h2>") | |
gr.HTML(""" | |
<h4 style='text-align: center;'> | |
<a href="https://huggingface.co/sayakpaul/FLUX.1-merged">FLUX.1 [merged]</a> Merge by | |
<a href="https://huggingface.co/sayakpaul">Sayak Paul</a> of 2 of the 12B param rectified flow transformers | |
<a href="https://huggingface.co/black-forest-labs/FLUX.1-dev">FLUX.1 [dev]</a> and | |
<a href="https://huggingface.co/black-forest-labs/FLUX.1-schnell">FLUX.1 [schnell]</a> by | |
<a href="https://blackforestlabs.ai/">Black Forest Labs</a>, created by | |
<a href="https://github.com/drat">Deddy</a> | |
</h4> | |
""") | |
with gr.Tabs(): | |
with gr.TabItem("FLUX Std"): | |
with gr.Row(): | |
with gr.Column(): | |
prompt_input = gr.Textbox(label="Prompt", placeholder="Ceritakan tentang image apa yang ingin dibuat...") | |
seed_slider = gr.Slider(label="Seed", minimum=0, maximum=10000, step=1, value=0) | |
randomize_seed_checkbox = gr.Checkbox(label="Randomize Seed", value=True) | |
width_slider = gr.Slider(label="Lebar", minimum=512, maximum=2048, step=64, value=1024) | |
height_slider = gr.Slider(label="Tinggi", minimum=512, maximum=2048, step=64, value=1024) | |
guidance_scale_slider = gr.Slider(label="Guidance Scale", minimum=1.0, maximum=20.0, step=0.5, value=3.5) | |
inference_steps_slider = gr.Slider(label="Jumlah Inference Steps", minimum=1, maximum=50, step=1, value=8) | |
submit_button = gr.Button("Mulai Membuat Gambar", elem_id="run-button") | |
with gr.Column(): | |
result_image = gr.Image(label="Result") | |
seed_output = gr.Number(label="Seed Digunakan") | |
submit_button.click( | |
infer_image, | |
inputs=[prompt_input, seed_slider, randomize_seed_checkbox, width_slider, height_slider, guidance_scale_slider, inference_steps_slider], | |
outputs=[result_image, seed_output], | |
show_progress=True # Menampilkan progress bar | |
) | |
with gr.TabItem("FLUX Inpainting"): | |
with gr.Row(): | |
with gr.Column(): | |
input_image_editor = gr.ImageEditor( | |
label='Image', | |
type='pil', | |
sources=["upload", "webcam"], | |
image_mode='RGB', | |
layers=False, | |
brush=gr.Brush(colors=["#FFFFFF"], color_mode="fixed")) | |
input_text = gr.Textbox(label="Prompt", placeholder="Deskripsi untuk inpainting...") | |
seed_slicer = gr.Slider(label="Seed", minimum=0, maximum=10000, step=1, value=42) | |
randomize_seed_checkbox = gr.Checkbox(label="Randomize Seed", value=True) | |
strength_slider = gr.Slider(label="Strength", minimum=0.0, maximum=1.0, step=0.01, value=0.85) | |
num_inference_steps_slider = gr.Slider(label="Number of Inference Steps", minimum=1, maximum=50, step=1, value=20) | |
inpainting_button = gr.Button("Mulai Proses Inpainting", elem_id="run-button") | |
with gr.Column(): | |
generated_image = gr.Image(label="Generated Image") | |
input_mask = gr.Image(label="Input Mask") | |
inpainting_button.click( | |
inpainting_process, | |
inputs=[input_image_editor, input_text, seed_slicer, randomize_seed_checkbox, strength_slider, num_inference_steps_slider], | |
outputs=[generated_image, input_mask], | |
show_progress=True # Menampilkan progress bar | |
) | |
# Tambahkan footer di bagian bawah | |
gr.HTML(""" | |
<footer id="footer"> | |
Transfer Energi Semesta Digital © 2024 __drat. | 🇮🇩 Untuk Indonesia Jaya! | |
</footer> | |
""") | |
# Meluncurkan aplikasi | |
if __name__ == "__main__": | |
app.launch() | |