import gradio as gr from gradio_workflowbuilder import WorkflowBuilder import json def export_workflow(workflow_data): """Export workflow as formatted JSON""" if not workflow_data: return "No workflow to export" return json.dumps(workflow_data, indent=2) # Create the main interface with gr.Blocks( title="🎨 Visual Workflow Builder", theme=gr.themes.Soft(), css=""" .main-container { max-width: 1600px; margin: 0 auto; } .workflow-section { margin-bottom: 2rem; } .button-row { display: flex; gap: 1rem; justify-content: center; margin: 1rem 0; } .component-description { padding: 24px; background: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%); border-radius: 12px; border-left: 4px solid #3b82f6; margin: 16px 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05); } .component-description p { margin: 10px 0; line-height: 1.6; color: #374151; } .base-description { font-size: 17px; font-weight: 600; color: #1e293b; } .base-description strong { color: #3b82f6; font-weight: 700; } .feature-description { font-size: 16px; color: #1e293b; font-weight: 500; } .customization-note { font-size: 15px; color: #64748b; font-style: italic; } .sample-intro { font-size: 15px; color: #1e293b; font-weight: 600; margin-top: 16px; border-top: 1px solid #e2e8f0; padding-top: 16px; } """ ) as demo: with gr.Column(elem_classes=["main-container"]): gr.Markdown(""" # 🎨 Visual Workflow Builder **Create sophisticated workflows with drag and drop simplicity.** """) # Simple description section with styling gr.HTML("""

Base custom component powered by svelteflow.

Create custom workflows.

You can customise the nodes as well as the design of the workflow.

Here is a sample:

""") # Main workflow builder section with gr.Column(elem_classes=["workflow-section"]): workflow_builder = WorkflowBuilder( label="🎨 Visual Workflow Designer", info="Drag components from the sidebar → Connect nodes by dragging from output (right) to input (left) → Click nodes to edit properties" ) # Export section below the workflow gr.Markdown("## 💾 Export Workflow") with gr.Row(): with gr.Column(): export_output = gr.Code( language="json", label="Workflow Configuration", lines=10 ) # Action button with gr.Row(elem_classes=["button-row"]): export_btn = gr.Button("💾 Export JSON", variant="primary", size="lg") # Instructions with gr.Accordion("📖 How to Use", open=False): gr.Markdown(""" ### 🚀 Getting Started 1. **Add Components**: Drag items from the left sidebar onto the canvas 2. **Connect Nodes**: Drag from the blue circle on the right of a node to the left circle of another 3. **Edit Properties**: Click any node to see its editable properties on the right panel 4. **Organize**: Drag nodes around to create a clean workflow layout 5. **Delete**: Use the ✕ button on nodes or click the red circle on connections ### 🎯 Component Types - **📥 Inputs**: Text fields, file uploads, number inputs - **⚙️ Processing**: Language models, text processors, conditionals - **📤 Outputs**: Text displays, file exports, charts - **🔧 Tools**: API calls, data transformers, validators ### 💡 Pro Tips - **Collapsible Panels**: Use the arrow buttons to hide/show sidebars - **Live Updates**: Properties update in real-time as you edit - **Export Options**: Get JSON config for your workflow """) # Event handlers export_btn.click( fn=export_workflow, inputs=[workflow_builder], outputs=[export_output] ) if __name__ == "__main__": demo.launch( server_name="0.0.0.0", show_error=True )