import gradio as gr from huggingface_hub import InferenceClient import os import base64 from io import BytesIO from PIL import Image HF_TOKEN = os.environ.get("HF_TOKEN", "") client = InferenceClient(provider="fal-ai", api_key=HF_TOKEN) def generate_image_api(prompt, seed=42, num_inference_steps=50): try: image = client.text_to_image( prompt, model="tencent/HunyuanImage-3.0", seed=int(seed), num_inference_steps=int(num_inference_steps) ) return image, seed, "Success!" except Exception as e: placeholder = Image.new('RGB', (1024, 1024), color=(240, 240, 245)) return placeholder, seed, f"Error: {str(e)}" def infer(prompt, seed, randomize_seed, diff_infer_steps, image_size): import random if randomize_seed: seed = random.randint(0, 2 ** 32 - 1) image, used_seed, status = generate_image_api(prompt, seed, diff_infer_steps) return image, used_seed, status def api_generate(prompt: str, seed: int = 42, num_inference_steps: int = 50): try: image, used_seed, status = generate_image_api(prompt, seed, num_inference_steps) buffered = BytesIO() image.save(buffered, format="PNG") img_str = base64.b64encode(buffered.getvalue()).decode() return { "success": True, "image_base64": img_str, "seed": used_seed, "status": status, "prompt": prompt } except Exception as e: return { "success": False, "error": str(e), "seed": seed, "prompt": prompt } examples = [ "A brown and white dog is running on the grass", "A futuristic city at sunset with flying cars", "A serene mountain landscape with a crystal clear lake", ] css = """ #col-container { margin: 0 auto; max-width: 800px; } .note { background: #fff3cd; padding: 15px; border-radius: 8px; margin: 10px 0; } """ with gr.Blocks(css=css) as demo: with gr.Column(elem_id="col-container"): gr.Markdown("# 🎨 HunyuanImage-3.0 Text-to-Image using fal.ai Provider") gr.Markdown( """ ### Tencent HunyuanImage-3.0 - Using fal.ai Inference Provider ✅ هذه المساحة الآن تولّد صور حقيقية فعلياً عبر مزود fal.ai 🔗 كل شيء يعمل تلقائياً باستخدام التوكن HF_TOKEN من أسرارك. """, elem_classes="note" ) with gr.Row(): prompt = gr.Text( label="Prompt", show_label=True, max_lines=3, placeholder="Enter your prompt for image generation...", value="A serene mountain landscape with a crystal clear lake" ) run_button = gr.Button("🎨 Generate Image", variant="primary") result = gr.Image(label="Generated Image", show_label=True) status_text = gr.Textbox(label="Status", interactive=False) with gr.Accordion("Advanced Settings", open=False): seed = gr.Slider( label="Seed", minimum=0, maximum=2**32 - 1, step=1, value=42, ) randomize_seed = gr.Checkbox(label="Randomize seed", value=True) diff_infer_steps = gr.Slider( label="Inference Steps", minimum=1, maximum=100, step=1, value=50, ) image_size = gr.Radio( choices=["1024x1024"], value="1024x1024", label="Image Size" ) gr.Examples( examples=examples, inputs=[prompt], outputs=[result, seed, status_text], fn=infer, cache_examples=False, ) run_button.click( fn=infer, inputs=[prompt, seed, randomize_seed, diff_infer_steps, image_size], outputs=[result, seed, status_text], ) if __name__ == "__main__": demo.launch()