File size: 4,166 Bytes
61e31a5
0691226
44feade
4af9c3b
 
 
44feade
4af9c3b
0691226
44feade
4af9c3b
44feade
0691226
 
 
 
 
 
 
44feade
4af9c3b
0691226
44feade
 
 
61e31a5
0691226
4af9c3b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61e31a5
 
44feade
 
 
61e31a5
 
 
 
0691226
 
44feade
 
0691226
 
 
 
61e31a5
 
 
 
 
0691226
44feade
0691226
 
 
 
 
44feade
 
 
61e31a5
 
 
44feade
 
 
4af9c3b
61e31a5
0691226
44feade
 
4af9c3b
44feade
61e31a5
 
 
 
44feade
61e31a5
44feade
61e31a5
 
44feade
0691226
 
44feade
0691226
44feade
 
 
0691226
 
 
44feade
 
0691226
 
 
4af9c3b
0691226
 
44feade
0691226
 
 
 
 
 
4af9c3b
61e31a5
0691226
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
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()