# Graph Architecture Evolution A visual journey through the architectural transformation of ComfyUI's graph system. --- ## Slide 1: Traditional LiteGraph Architecture ``` ┌─────────────────────────────────────┐ │ LiteGraph Node │ │ ┌─────────────────────────────┐ │ │ │ • Data (inputs/outputs) │ │ │ │ • UI (position, size) │ │ │ │ • Rendering (draw methods) │ │ │ │ • Interaction (mouse) │ │ │ │ • Business Logic │ │ │ └─────────────────────────────┘ │ │ │ │ Everything tightly coupled in │ │ a single monolithic structure │ └─────────────────────────────────────┘ ``` **Problem**: All concerns mixed together - data, UI, rendering, and interaction are inseparable. --- ## Slide 2: Separation of Concerns ``` ┌─────────────────────┐ ┌──────────────────────┐ │ Graph Data Model │ │ Layout Tree │ ├─────────────────────┤ ├──────────────────────┤ │ • Node connections │ │ • Node positions │ │ • Input/output data │ │ • Node sizes │ │ • Execution state │ │ • Z-index/stacking │ │ • Business logic │ │ • Visibility states │ │ │ │ • Bounds/spatial │ │ Pure data structure │ │ Pure UI structure │ │ No UI concepts │ │ No business logic │ └─────────────────────┘ └──────────────────────┘ ``` **Benefit**: Clean separation - graph logic vs presentation concerns. --- ## Slide 3: Multiple Renderer Support ``` Layout Tree │ ┌────────────────┼────────────────┐ ▼ ▼ ▼ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ Canvas Render│ │ Vue Render │ │ Three.js 3D │ ├──────────────┤ ├──────────────┤ ├──────────────┤ │ │ │ │ │ │ │ [Canvas] │ │ │ │ [WebGL] │ │ │ │ │ │ │ └──────────────┘ └──────────────┘ └──────────────┘ ┌────────────────┼────────────────┐ ▼ ▼ ▼ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ Native iOS │ │Native Android│ │ Terminal │ ├──────────────┤ ├──────────────┤ ├──────────────┤ │ UIKit │ │ Compose │ │ ASCII │ └──────────────┘ └──────────────┘ └──────────────┘ ``` **Power**: Same layout tree, infinite rendering possibilities. --- ## Slide 4: Alternative UI Paradigms ``` Graph Data Model │ ├─────── With Layout Tree ─────► Traditional Node UI │ └─────── Without Layout ───────┐ ▼ ┌──────────────────┐ │ Form-Based UI │ ├──────────────────┤ │ ┌──────────────┐ │ │ │ Input Fields │ │ │ ├──────────────┤ │ │ │ Sliders │ │ │ ├──────────────┤ │ │ │ Buttons │ │ │ └──────────────┘ │ │ │ │ Like Gradio/A1111│ └──────────────────┘ ``` **Flexibility**: Renderers can interpret the graph data model however they want. --- ## Slide 5: Service Architecture ``` ┌─────────────────────┐ ┌──────────────────────┐ │ Graph Mutations │ │ Layout Mutations │ │ Service │ │ Service │ ├─────────────────────┤ ├──────────────────────┤ │ • addNode() │ │ • moveNode() │ │ • connectNodes() │ │ • resizeNode() │ │ • updateNodeData() │ │ • bringToFront() │ │ • executeGraph() │ │ • setVisibility() │ └──────┬──────────────┘ └──────┬───────────────┘ │ │ ▼ ▼ ┌─────────────────────┐ ┌──────────────────────┐ │ Graph Gateway │ │ Layout Gateway │ │ (Interface) │ │ (Interface) │ └─────────────────────┘ └──────────────────────┘ ``` **Clean APIs**: Well-defined interfaces for all operations. --- ## Slide 6: Deployment Flexibility ``` ┌────────────────────────────────────────────────┐ │ Graph Data Model │ │ Layout System │ │ Service Layer │ └─────────────┬───────────┬───────────┬──────────┘ │ │ │ Local │ Cloud │ Native │ Hybrid ▼ ▼ ▼ ▼ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │Browser │ │ AWS │ │ iOS │ │Electron│ │ │ │Lambda │ │ App │ │ + │ │ Yjs │ │ + │ │ + │ │ Rust │ │ CRDT │ │GraphQL │ │ Swift │ │Backend │ └────────┘ └────────┘ └────────┘ └────────┘ Because everything is behind interfaces, easily switch implementations without major development effort: • Move graph execution to GPU cluster • Run layout calculations in WebAssembly • Store state in any database • Sync across any network protocol ``` **Ultimate Flexibility**: Plug and play any component, deploy anywhere. --- ## Summary By separating concerns and defining clear interfaces: 1. **Data Model** → Pure business logic, no UI 2. **Layout Tree** → Pure spatial data, no logic 3. **Renderers** → Consume what they need 4. **Services** → Clean mutation APIs 5. **Gateways** → Swappable implementations, automatically map across differing API versions or schemas This architecture enables: - Multiple simultaneous renderers - Alternative UI paradigms - Cloud/edge/native deployment - Real-time collaboration - Time-travel debugging - Performance optimization per layer - Better performance for state observers and undo/redo The key insight: **When you separate concerns properly, everything becomes possible.**