import gradio as gr # Import generator functions and sample JSONs from concept_map_generator import generate_concept_map from synoptic_chart_generator import generate_synoptic_chart from radial_diagram_generator import generate_radial_diagram from process_flow_generator import generate_process_flow_diagram from wbs_diagram_generator import generate_wbs_diagram from sample_data import CONCEPT_MAP_JSON, SYNOPTIC_CHART_JSON, RADIAL_DIAGRAM_JSON, PROCESS_FLOW_JSON, WBS_DIAGRAM_JSON if __name__ == "__main__": # Define the default dark color DEFAULT_BASE_COLOR = '#19191a' with gr.Blocks( title="Advanced Graph Generator", css=""" .gradio-container { font-family: 'Inter', sans-serif !important; } .gr-tab-item { padding: 10px 20px; font-size: 1.1em; font-weight: bold; } .gr-button { border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); background-color: #4CAF50; color: white; padding: 10px 20px; font-size: 1.1em; } .gr-button:hover { background-color: #45a049; } .gr-textbox { border-radius: 8px; padding: 10px; } /* Dark mode styles, adjust if needed */ .gradio-container.dark { --tw-bg-opacity: 1; background-color: rgb(24 24 27 / var(--tw-bg-opacity)); color: #d4d4d8; /* text-zinc-300 */ } .gradio-container.dark .gr-textbox { background-color: rgb(39 39 42 / var(--tw-bg-opacity)); color: #d4d4d8; border-color: #52525b; /* border-zinc-600 */ } .gradio-container.dark .gr-tab-item { color: #d4d4d8; } .gradio-container.dark .gr-tab-item.selected { background-color: rgb(39 39 42 / var(--tw-bg-opacity)); color: #fff; } """ ) as demo: gr.Markdown( """ # Graphify: Generate concept maps, synoptic charts and radial diagrams from JSON! Choose a graph type and provide your JSON data to generate a visual representation. All graphs maintain a consistent, elegant style with rounded boxes, a dark-to-light color gradient, and a clean white background. """ ) # Global Color Picker - Repositioned with gr.Row(variant="panel"): # Using variant="panel" for better visual grouping with gr.Column(scale=1): gr.Markdown("### Main Diagram Color") with gr.Column(scale=2): base_color_picker = gr.ColorPicker( label="Select Base Color for Diagram", value=DEFAULT_BASE_COLOR, # Default to your dark color interactive=True, elem_id="main-color-picker" ) # Add a small space after the color picker row before tabs gr.Markdown("
") with gr.Tabs(): with gr.TabItem("Concept Map"): # Directly define gr.Interface and pass base_color_picker as an input gr.Interface( fn=generate_concept_map, inputs=[ gr.Textbox( value=CONCEPT_MAP_JSON, placeholder="Paste JSON following the documented format", label="Structured JSON Input", lines=25 ), base_color_picker # Pass the component directly as an input ], outputs=gr.Image( label="Generated Graph", type="filepath", show_download_button=True ), title="Concept Map Generator", ) gr.Markdown("
") gr.Markdown("## Example Concept Maps") with gr.Row(): gr.Image(value="./images/cm1.png", label="Sample 1", show_label=True, interactive=False, height="auto", width="100%") gr.Image(value="./images/cm2.png", label="Sample 2", show_label=True, interactive=False, height="auto", width="100%") with gr.TabItem("Synoptic Chart"): gr.Interface( fn=generate_synoptic_chart, inputs=[ gr.Textbox( value=SYNOPTIC_CHART_JSON, placeholder="Paste JSON following the documented format", label="Structured JSON Input", lines=25 ), base_color_picker # Pass the component directly as an input ], outputs=gr.Image( label="Generated Graph", type="filepath", show_download_button=True ), title="Synoptic Chart Generator", ) gr.Markdown("
") gr.Markdown("## Example Synoptic Charts") with gr.Row(): gr.Image(value="./images/sc1.png", label="Sample 1", show_label=True, interactive=False, height="auto", width="100%") gr.Image(value="./images/sc2.png", label="Sample 2", show_label=True, interactive=False, height="auto", width="100%") with gr.TabItem("Radial Diagram"): gr.Interface( fn=generate_radial_diagram, inputs=[ gr.Textbox( value=RADIAL_DIAGRAM_JSON, placeholder="Paste JSON following the documented format", label="Structured JSON Input", lines=25 ), base_color_picker # Pass the component directly as an input ], outputs=gr.Image( label="Generated Graph", type="filepath", show_download_button=True ), title="Radial Diagram Generator", ) gr.Markdown("
") gr.Markdown("## Example Radial Diagrams") with gr.Row(): gr.Image(value="./images/rd1.png", label="Sample 1", show_label=True, interactive=False, height="auto", width="100%") gr.Image(value="./images/rd2.png", label="Sample 2", show_label=True, interactive=False, height="auto", width="100%") # New Tab for Process Flow Diagram with gr.TabItem("Process Flow"): gr.Interface( fn=generate_process_flow_diagram, inputs=[ gr.Textbox( value=PROCESS_FLOW_JSON, placeholder="Paste JSON following the documented format", label="Structured JSON Input", lines=25 ), base_color_picker # Pass the component directly as an input ], outputs=gr.Image( label="Generated Graph", type="filepath", show_download_button=True ), title="Process Flow Diagram Generator", ) gr.Markdown("
") gr.Markdown("## Example Process Flow Diagrams") with gr.Row(): gr.Image(value="./images/pf1.png", label="Sample 1", show_label=True, interactive=False, height="auto", width="100%") gr.Image(value="./images/pf2.png", label="Sample 2", show_label=True, interactive=False, height="auto", width="100%") # New Tab for WBS Diagram with gr.TabItem("WBS Diagram"): gr.Interface( fn=generate_wbs_diagram, inputs=[ gr.Textbox( value=WBS_DIAGRAM_JSON, placeholder="Paste JSON following the documented format", label="Structured JSON Input", lines=25 ), base_color_picker # Pass the component directly as an input ], outputs=gr.Image( label="Generated Graph", type="filepath", show_download_button=True ), title="WBS Diagram Generator", ) gr.Markdown("
") gr.Markdown("## Example WBS Diagrams") with gr.Row(): gr.Image(value="./images/wbs1.png", label="Sample 1", show_label=True, interactive=False, height="auto", width="100%") gr.Image(value="./images/wbs2.png", label="Sample 2", show_label=True, interactive=False, height="auto", width="100%") demo.launch( mcp_server=True, share=False, server_port=7860, server_name="0.0.0.0" )