1+ import os
2+ import gradio as gr
3+ import requests
4+ import base64
5+ import io
6+ from PIL import Image
7+
8+ FIREWORKS_API_KEY = os .getenv ("FIREWORKS_API_KEY" )
9+ API_BASE = "https://api.fireworks.ai/inference/v1/workflows/accounts/fireworks/models/{}/text_to_image"
10+ DUMMY_MODELS = ["stable-diffusion-3p5-medium" ,
11+ "stable-diffusion-3p5-large" ,
12+ "stable-diffusion-3p5-large-turbo" ,
13+ "flux-1-dev-fp8" ,
14+ "flux-1-schnell-fp8" ,
15+ ]
16+
17+ def generate_image (prompt , model ):
18+ """Generate image from text prompt using Fireworks API"""
19+ headers = {
20+ "Authorization" : f"Bearer { FIREWORKS_API_KEY } " ,
21+ "Content-Type" : "application/json" ,
22+ "Accept" : "image/jpeg" ,
23+ }
24+
25+ data = {
26+ "prompt" : prompt ,
27+ "aspect_ratio" : "16:9" ,
28+ "guidance_scale" : 4.5 ,
29+ "num_inference_steps" : 3 ,
30+ }
31+
32+ api_url = API_BASE .format (model = model )
33+
34+ try :
35+ response = requests .post (api_url , headers = headers , json = data )
36+ if response .status_code != 200 :
37+ raise Exception (f"Failed to generate image: { response .status_code } { response .text } " )
38+
39+ image_bytes = response .content
40+ image = Image .open (io .BytesIO (image_bytes ))
41+
42+ return image
43+
44+ except requests .exceptions .RequestException as e :
45+ return f"Error generating image: { str (e )} "
46+
47+ # Create Gradio interface
48+ with gr .Blocks (title = "Text to Image Generator" ) as demo :
49+ gr .Markdown ("# Text to Image Generator" )
50+ gr .Markdown ("Enter a text prompt to generate an image" )
51+
52+ with gr .Column ():
53+ with gr .Group ():
54+ model_selector = gr .Dropdown (
55+ choices = DUMMY_MODELS ,
56+ interactive = True ,
57+ show_label = False ,
58+ container = False ,
59+ )
60+ image_output = gr .Image (
61+ label = "Generated Image" ,
62+ type = "pil"
63+ )
64+
65+ with gr .Row ():
66+ text_input = gr .Textbox (
67+ label = "Prompt" ,
68+ placeholder = "Enter your prompt here..." ,
69+ show_label = False
70+ )
71+ send_btn = gr .Button ("Generate" , variant = "primary" )
72+
73+ # Handle generation
74+ send_btn .click (
75+ fn = generate_image ,
76+ inputs = [text_input , model_selector ],
77+ outputs = image_output
78+ )
79+
80+ text_input .submit (
81+ fn = generate_image ,
82+ inputs = [text_input , model_selector ],
83+ outputs = image_output
84+ )
85+
86+ if __name__ == "__main__" :
87+ demo .launch (share = True )
0 commit comments