diff --git a/MULTI_NODE_UPDATE.md b/MULTI_NODE_UPDATE.md
new file mode 100644
index 0000000..8045364
--- /dev/null
+++ b/MULTI_NODE_UPDATE.md
@@ -0,0 +1,234 @@
+# Multi-Node Canvas Grid Update
+
+## Overview
+
+The SPORE LEDLab interface has been redesigned to display all SPORE nodes simultaneously with individual canvases in a responsive grid layout. Each node can be controlled independently with its own preset and parameters.
+
+## Key Changes
+
+### 1. UI Layout Redesign
+
+**Before:**
+- Single canvas display in center
+- Node list in right sidebar
+- Controls always visible in right sidebar
+
+**After:**
+- Full-width grid layout displaying all nodes
+- Each node has its own canvas card
+- Floating control panel appears when a node is selected
+- Maximizes screen space for displaying multiple nodes
+
+### 2. New Components
+
+#### `NodeCanvasGrid` Component
+- **Location:** `/public/scripts/node-canvas-grid.js`
+- **Purpose:** Manages the grid of node canvases
+- **Features:**
+ - Displays all discovered SPORE nodes in a responsive grid
+ - Each node card shows:
+ - Node IP address
+ - Connection status (connected/streaming)
+ - Live canvas with streaming visualization
+ - Click on any node to select it and show controls
+ - Supports both individual node selection and broadcast mode
+ - Real-time frame rendering for each node
+
+#### Updated `PresetControls` Component
+- **Location:** `/public/scripts/preset-controls.js`
+- **Changes:**
+ - Now works with floating control panel
+ - Tracks parameters per node (using Map)
+ - Restores node-specific settings when switching between nodes
+ - Sends node-specific commands to server
+
+### 3. CSS Styling
+
+#### New Classes
+- `.matrix-grid-section` - Full-width container for node grid
+- `.node-canvas-grid` - CSS grid layout for node cards
+- `.node-canvas-item` - Individual node card styling
+ - Hover effects
+ - Selected state (green border glow)
+ - Streaming animation
+- `.floating-controls` - Floating control panel
+ - Appears when node is selected
+ - Slides in from right (desktop) or bottom (mobile)
+ - Closes when clicking X or deselecting node
+
+#### Responsive Design
+- Desktop: 3-4 columns based on screen width
+- Tablet: 2-3 columns
+- Mobile: 1-2 columns with controls sliding from bottom
+
+### 4. Server-Side Multi-Node Streaming
+
+#### Updated `LEDLabServer` Class
+- **Location:** `/server/index.js`
+- **New Features:**
+ - `nodeStreams` Map: Tracks active streams per node
+ - `nodeConfigurations` Map: Stores per-node settings
+ - Simultaneous streaming to multiple nodes
+ - Per-node preset instances and parameters
+
+#### Key Methods Updated
+- `startPreset(presetName, width, height, nodeIp, parameters)`
+ - Now accepts nodeIp to target specific node
+ - Supports initial parameter values
+
+- `stopStreaming(nodeIp)`
+ - Stops streaming for specific node or all nodes
+
+- `updatePresetParameter(parameter, value, nodeIp)`
+ - Updates parameters for specific node or broadcast to all
+
+- `streamFrameForNode(nodeIp)`
+ - Generates and sends frames for specific node
+ - Multiple intervals running simultaneously
+
+### 5. HTML Structure
+
+#### Stream View (Main View)
+```html
+
+
+
+```
+
+### 6. User Workflow
+
+1. **Node Discovery**
+ - Nodes automatically discovered via UDP
+ - Each node appears as a card in the grid
+
+2. **Node Selection**
+ - Click any node card to select it
+ - Floating control panel appears
+ - Node card highlights with green border
+
+3. **Configure Node**
+ - Select preset from dropdown
+ - Adjust parameters with sliders
+ - Changes apply only to selected node
+
+4. **Start Streaming**
+ - Click "Start Streaming" button
+ - Node card shows "streaming" status
+ - Canvas displays live animation
+
+5. **Multi-Node Operation**
+ - Select different node
+ - Configure with different preset/parameters
+ - Start streaming independently
+ - Multiple nodes can stream simultaneously
+
+6. **Broadcast Mode**
+ - Click "Broadcast to All" button
+ - Control panel shows "Broadcast to All"
+ - Preset and parameters apply to all nodes
+
+## Technical Details
+
+### Per-Node State Management
+
+#### Client-Side (PresetControls)
+```javascript
+this.nodeParameters = new Map(); // nodeIp -> {presetName, parameters}
+```
+- Stores preset selection and parameters for each node
+- Restores settings when switching between nodes
+- Maintains independent state per node
+
+#### Server-Side (LEDLabServer)
+```javascript
+this.nodeStreams = new Map(); // nodeIp -> {preset, presetName, interval, matrixSize}
+this.nodeConfigurations = new Map(); // nodeIp -> {presetName, parameters, matrixSize}
+```
+- Active streams run independently with separate intervals
+- Configurations saved per node
+- Multiple presets can run simultaneously
+
+### WebSocket Messages
+
+#### Enhanced Messages
+All streaming-related messages now include optional `nodeIp` field:
+```javascript
+{
+ type: 'startPreset',
+ presetName: 'lava-lamp',
+ width: 16,
+ height: 16,
+ nodeIp: '192.168.1.100', // or null for broadcast
+ parameters: {speed: 1.5, scale: 2.0}
+}
+```
+
+### Frame Rendering
+
+Each node has its own canvas with:
+- Independent rendering context
+- Automatic sizing based on container
+- Serpentine pixel order support
+- Glow effects for bright pixels
+- Smooth animations
+
+## Benefits
+
+1. **Visual Overview** - See all nodes at once
+2. **Independent Control** - Each node can run different animations
+3. **Space Efficient** - Responsive grid maximizes screen usage
+4. **Scalable** - Works with 1-20+ nodes
+5. **Intuitive** - Click to select, visual feedback
+6. **Flexible** - Individual or broadcast mode
+
+## Backwards Compatibility
+
+- Old single-stream API still supported
+- Settings view unchanged
+- Existing presets work without modification
+- UDP discovery unchanged
+
+## File Changes Summary
+
+### New Files
+- `/public/scripts/node-canvas-grid.js` - New component
+
+### Modified Files
+- `/public/index.html` - Updated layout
+- `/public/styles/main.css` - New grid and floating control styles
+- `/public/scripts/preset-controls.js` - Per-node parameter tracking
+- `/public/scripts/ledlab-app.js` - Initialize new component
+- `/server/index.js` - Multi-node streaming support
+
+### Unchanged Files
+- All preset files (`/presets/*.js`)
+- `/server/udp-discovery.js`
+- `/public/scripts/framework.js`
+- `/public/scripts/theme-manager.js`
+- `/public/scripts/navigation.js`
+
+## Testing Recommendations
+
+1. Test with single node
+2. Test with multiple nodes (2-4)
+3. Test node selection and switching
+4. Test broadcast mode
+5. Test parameter independence
+6. Test starting/stopping individual streams
+7. Test responsive layout on different screen sizes
+8. Test node disconnection/reconnection
+
+## Future Enhancements
+
+- Drag to reorder nodes
+- Group nodes for collective control
+- Save/load multi-node scenes
+- Node status graphs
+- Performance metrics per node
+
diff --git a/README.md b/README.md
index 4a189d9..56199b2 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,9 @@
# SPORE LEDLab
LEDLab is a tool for streaming animations to SPORE nodes that implement the PixelStreamController.
+SPORE LEDLab is a powerful tool for streaming animations to LED matrices connected to SPORE nodes. Create stunning visual effects with real-time parameter control and multi-node streaming capabilities.
+
+
## Components
diff --git a/assets/ledlab.png b/assets/ledlab.png
new file mode 100644
index 0000000..ecd592f
Binary files /dev/null and b/assets/ledlab.png differ
diff --git a/public/index.html b/public/index.html
index 403e04b..092d90a 100644
--- a/public/index.html
+++ b/public/index.html
@@ -27,80 +27,70 @@
-
-