import gradio as gr
def KhutbahMakerWebUI(client, host: str = None, port: int = None, browser: bool = True, upload_size: str = "4MB",
public: bool = False, limit: int = 10, quiet: bool = True):
"""
Start KhutbahMaker Web UI with all features.
Parameters:
- client (Client): KhutbahMaker instance
- host (str): Server host
- port (int): Server port
- browser (bool): Launch browser automatically
- upload_size (str): Maximum file size for uploads
- public (bool): Enable public URL mode
- limit (int): Maximum number of concurrent requests
- quiet (bool): Enable quiet mode
"""
try:
gr_css = """
footer {
display: none !important;
}
"""
gr_theme = gr.themes.Default(
primary_hue="purple",
secondary_hue="purple",
neutral_hue=gr.themes.colors.zinc,
font=["Amiri", "system-ui", "sans-serif"]
)
with gr.Blocks(title="KhutbahMaker", analytics_enabled=False, theme=gr_theme, css=gr_css).queue(default_concurrency_limit=limit) as demo:
gr.Markdown("##
KhutbahMaker Web UI")
gr.Markdown("Made for #GodamSahur 2025 by Ikmal Said")
gr.Markdown("")
with gr.Row():
with gr.Column():
with gr.Tab("Settings"):
with gr.Column(scale=1):
khutbah_topic = gr.Textbox(
label="Khutbah Topic",
lines=1, max_lines=1,
placeholder="Type your topic here...",
info="Enter the main topic or theme for the khutbah"
)
khutbah_language = gr.Dropdown(
value="Bahasa Malaysia",
choices=["Bahasa Malaysia", "Arabic", "English", "Mandarin", "Tamil"],
label="Khutbah Language",
info="Select the language of the khutbah"
)
khutbah_length = gr.Dropdown(
value="Short",
choices=["Short", "Medium", "Long"],
label="Khutbah Length",
info="Short (10-15 minutes), Medium (15-20 minutes) or Long (20-30 minutes)"
)
khutbah_tone = gr.Dropdown(
value="Scholarly",
choices=["Scholarly", "Inspirational", "Practical", "Reflective", "Motivational", "Educational", "Historical", "Narrative"],
label="Khutbah Tone",
info="Select the tone of the khutbah based on the topic"
)
khutbah_btn = gr.Button("Generate Khutbah", variant="primary")
with gr.Column():
with gr.Tab("Results"):
with gr.Column(scale=1):
khutbah_output = gr.File(label="Download Khutbah as PDF")
with gr.Accordion("Read Khutbah as Text"):
khutbah_text = gr.Markdown(value="Please generate khutbah first for reading!", height=300)
gr.Markdown("")
gr.Markdown("KhutbahMaker can make mistakes. Check important info.")
gr.Markdown("")
# Setup event handlers
khutbah_btn.click(fn=client.generate_khutbah, inputs=[khutbah_topic, khutbah_length, khutbah_tone, khutbah_language], outputs=[khutbah_output, khutbah_text])
demo.launch(
server_name=host,
server_port=port,
inbrowser=browser,
max_file_size=upload_size,
share=public,
quiet=quiet
)
except Exception as e:
client.logger.error(f"{str(e)}")
raise