dina1 commited on
Commit
91bd04d
·
verified ·
1 Parent(s): feedef6

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +39 -40
app.py CHANGED
@@ -4,53 +4,52 @@ import gradio as gr
4
  import asyncio
5
  from pyppeteer import launch
6
 
7
- # Configure Gemini
 
 
8
  genai.configure(api_key=os.environ["GENAI_API_KEY"])
9
  model = genai.GenerativeModel("gemini-2.0-flash")
10
 
11
- # Function to render HTML → PNG using pyppeteer
12
- async def render_html_to_png(html_code, output_img="mockup.png"):
13
- browser = await launch(args=['--no-sandbox'])
14
- page = await browser.newPage()
15
- await page.setContent(html_code)
16
- await page.screenshot({'path': output_img, 'fullPage': True})
17
- await browser.close()
18
- return output_img
19
-
20
- def generate_mockup(user_prompt):
21
  system_prompt = (
22
  "You are a Power Apps mockup generator. "
23
  "Convert user descriptions into complete HTML + CSS code that looks like a Power Apps mobile screen. "
24
  "Do NOT include JSON or explanations. Only return valid HTML + CSS."
25
  )
26
- try:
27
- response = model.generate_content(system_prompt + "\n" + user_prompt)
28
- html_code = response.text.strip()
29
-
30
- # Render PNG
31
- output_img = "mockup.png"
32
- asyncio.get_event_loop().run_until_complete(render_html_to_png(html_code, output_img))
33
-
34
- return html_code, output_img
35
- except Exception as e:
36
- return f" Error: {e}", None
37
-
38
- # Gradio UI
39
- with gr.Blocks() as demo:
40
- gr.Markdown("## ⚡ Power Apps Mockup Generator (Gemini + HTML + PNG)")
41
- user_input = gr.Textbox(
42
- label="Describe your Power Apps mockup screen",
43
- placeholder="Example: A login screen with username, password, and a login button",
44
- lines=3
45
- )
46
- generate_btn = gr.Button("Generate Mockup")
47
- html_output = gr.Code(label="Generated HTML + CSS", language="html")
48
- image_output = gr.Image(label="Mockup Preview")
49
-
50
- generate_btn.click(
51
- fn=generate_mockup,
52
- inputs=user_input,
53
- outputs=[html_output, image_output]
54
- )
 
 
 
55
 
56
  demo.launch()
 
4
  import asyncio
5
  from pyppeteer import launch
6
 
7
+ # -----------------------
8
+ # Configure Gemini API
9
+ # -----------------------
10
  genai.configure(api_key=os.environ["GENAI_API_KEY"])
11
  model = genai.GenerativeModel("gemini-2.0-flash")
12
 
13
+ # -----------------------
14
+ # Generate HTML from prompt
15
+ # -----------------------
16
+ def generate_mockup_html(user_prompt):
 
 
 
 
 
 
17
  system_prompt = (
18
  "You are a Power Apps mockup generator. "
19
  "Convert user descriptions into complete HTML + CSS code that looks like a Power Apps mobile screen. "
20
  "Do NOT include JSON or explanations. Only return valid HTML + CSS."
21
  )
22
+ response = model.generate_content(system_prompt + "\n" + user_prompt)
23
+ return response.text
24
+
25
+ # -----------------------
26
+ # Convert HTML → PNG
27
+ # -----------------------
28
+ async def render_html_to_png(html_code, output_file="mockup.png"):
29
+ browser = await launch(args=["--no-sandbox"])
30
+ page = await browser.newPage()
31
+ await page.setContent(html_code)
32
+ await page.screenshot({"path": output_file, "fullPage": True})
33
+ await browser.close()
34
+ return output_file
35
+
36
+ # -----------------------
37
+ # Full pipeline
38
+ # -----------------------
39
+ def gradio_mockup(user_prompt):
40
+ html_code = generate_mockup_html(user_prompt)
41
+ asyncio.get_event_loop().run_until_complete(render_html_to_png(html_code))
42
+ return "mockup.png"
43
+
44
+ # -----------------------
45
+ # Gradio Interface
46
+ # -----------------------
47
+ demo = gr.Interface(
48
+ fn=gradio_mockup,
49
+ inputs=gr.Textbox(label="Describe your PowerApps mockup screen", lines=3),
50
+ outputs=gr.Image(type="filepath", label="Generated Mockup"),
51
+ title="PowerApps Mockup Generator",
52
+ description="Enter your screen description and get a PowerApps-style mockup as an image."
53
+ )
54
 
55
  demo.launch()