|
1 | | -# Multistreamer |
| 1 | +# MultiStream |
| 2 | + |
| 3 | +A self-hosted, real-time multi-video streaming viewer with chat, perfect for watch parties, storm tracking, event monitoring, and more. |
| 4 | + |
| 5 | +   |
| 6 | + |
| 7 | +## Features |
| 8 | + |
| 9 | +- **Multi-Video Grid** - Watch multiple YouTube streams in a responsive Brady Bunch-style grid |
| 10 | +- **Featured Layout** - Highlight one main video with smaller sidebar streams |
| 11 | +- **Real-Time Sync** - All viewers see the same streams, layout, and settings instantly |
| 12 | +- **Live Chat** - Built-in chat room synced across all viewers |
| 13 | +- **Host Controls** - Only hosts can add/remove streams; viewers just watch |
| 14 | +- **No Backend Required** - Uses Gun.js for P2P sync, works on static hosting (GitHub Pages) |
| 15 | +- **Room Creator** - Create unlimited rooms without editing any files |
| 16 | +- **Customizable** - Themes, colors, labels, announcements, and more |
| 17 | + |
| 18 | +## Quick Start |
| 19 | + |
| 20 | +### Deploy to GitHub Pages |
| 21 | + |
| 22 | +1. **Fork or clone this repository** |
| 23 | + |
| 24 | +2. **Enable GitHub Pages** |
| 25 | + - Go to repository Settings → Pages |
| 26 | + - Source: Deploy from a branch |
| 27 | + - Branch: `main` (or `master`), folder: `/ (root)` |
| 28 | + - Save |
| 29 | + |
| 30 | +3. **Access your site** |
| 31 | + - Your URL will be: `https://yourusername.github.io/repository-name/` |
| 32 | + |
| 33 | +### Create Your First Room |
| 34 | + |
| 35 | +1. Visit your deployed site (no URL parameters) |
| 36 | +2. Fill in: |
| 37 | + - **Room name**: `my-watch-party` (URL-friendly, lowercase) |
| 38 | + - **Room title**: `My Awesome Watch Party!` (displayed to viewers) |
| 39 | + - **Host password**: Your secret key (auto-generated if left blank) |
| 40 | +3. Click **Create Room** |
| 41 | +4. Copy your **Host Link** (keep private!) and **Viewer Link** (share publicly!) |
| 42 | + |
| 43 | +## Usage |
| 44 | + |
| 45 | +### As a Host |
| 46 | + |
| 47 | +Access your room with the host link: |
| 48 | +``` |
| 49 | +https://yoursite.github.io/?room=my-room&host=yourSecretPassword |
| 50 | +``` |
| 51 | + |
| 52 | +**Controls available:** |
| 53 | +| Control | Description | |
| 54 | +|---------|-------------| |
| 55 | +| Add Stream | Paste YouTube URL and click Add | |
| 56 | +| Set Main | Make a video the featured/large video | |
| 57 | +| Label | Give streams custom names | |
| 58 | +| Mute/Unmute All | Control audio for all streams | |
| 59 | +| Weather | Add a Windy.com radar panel | |
| 60 | +| Settings | Customize theme, colors, layout | |
| 61 | +| Share | Get viewer/host links | |
| 62 | +| Clear | Remove all streams | |
| 63 | + |
| 64 | +**Room Management:** |
| 65 | +- Click the room title to edit it (syncs to all viewers) |
| 66 | +- Set an announcement message in Settings |
| 67 | +- Export your config to save/reuse setups |
| 68 | + |
| 69 | +### As a Viewer |
| 70 | + |
| 71 | +Access with the viewer link: |
| 72 | +``` |
| 73 | +https://yoursite.github.io/?room=my-room |
| 74 | +``` |
| 75 | + |
| 76 | +Viewers can: |
| 77 | +- Watch all streams the host has added |
| 78 | +- Mute/unmute individual videos locally |
| 79 | +- Participate in chat |
| 80 | +- See real-time updates when host makes changes |
| 81 | + |
| 82 | +Viewers cannot: |
| 83 | +- Add or remove streams |
| 84 | +- Change layout or settings |
| 85 | +- Edit room title or announcements |
| 86 | + |
| 87 | +## URL Parameters |
| 88 | + |
| 89 | +| Parameter | Description | Example | |
| 90 | +|-----------|-------------|---------| |
| 91 | +| `room` | Room identifier (required for viewing) | `room=blizzard-2025` | |
| 92 | +| `host` | Host password (enables host controls) | `host=mySecretKey` | |
| 93 | + |
| 94 | +**Examples:** |
| 95 | +``` |
| 96 | +# Room creator (no params) |
| 97 | +https://yoursite.github.io/ |
| 98 | +
|
| 99 | +# Viewer mode |
| 100 | +https://yoursite.github.io/?room=storm-watch |
| 101 | +
|
| 102 | +# Host mode |
| 103 | +https://yoursite.github.io/?room=storm-watch&host=abc123 |
| 104 | +``` |
| 105 | + |
| 106 | +## Features in Detail |
| 107 | + |
| 108 | +### Layouts |
| 109 | + |
| 110 | +- **Grid** - Equal-sized tiles, auto-arranges based on stream count |
| 111 | +- **Featured** - One large main video + sidebar with remaining streams |
| 112 | + |
| 113 | +### Synced Settings |
| 114 | + |
| 115 | +All these sync in real-time to viewers: |
| 116 | +- Room title & announcement |
| 117 | +- Streams (add/remove/order) |
| 118 | +- Mute states |
| 119 | +- Layout mode & featured video |
| 120 | +- Custom stream labels |
| 121 | +- Theme & accent color |
| 122 | +- Grid gap & label visibility |
| 123 | +- Weather panel & location |
| 124 | + |
| 125 | +### Chat |
| 126 | + |
| 127 | +- Usernames saved locally |
| 128 | +- Messages sync in real-time |
| 129 | +- Host messages highlighted with badge |
| 130 | +- 2-hour message history |
| 131 | +- Collapsible bottom bar (doesn't cover videos) |
| 132 | + |
| 133 | +### Weather Panel |
| 134 | + |
| 135 | +- Powered by Windy.com embeds |
| 136 | +- Shows radar/precipitation overlay |
| 137 | +- Configurable lat/lon coordinates |
| 138 | +- Great for storm tracking! |
| 139 | + |
| 140 | +### Themes |
| 141 | + |
| 142 | +- **Dark** - Default dark theme |
| 143 | +- **Midnight** - Deep blue tones |
| 144 | +- **AMOLED** - Pure black for OLED screens |
| 145 | + |
| 146 | +### Import/Export |
| 147 | + |
| 148 | +Save your room configuration as JSON: |
| 149 | +```json |
| 150 | +{ |
| 151 | + "version": 3, |
| 152 | + "room": "my-room", |
| 153 | + "streams": [ |
| 154 | + { "id": "dQw4w9WgXcQ", "muted": true, "label": "Main Camera" }, |
| 155 | + { "id": "abc123xyz", "muted": true, "label": "Backup" } |
| 156 | + ], |
| 157 | + "settings": { |
| 158 | + "layout": "featured", |
| 159 | + "featuredId": "dQw4w9WgXcQ", |
| 160 | + "weather": { "enabled": true, "lat": 40.7128, "lon": -74.006 }, |
| 161 | + "display": { "gridGap": 2, "labels": "hover", "theme": "dark", "accent": "#00d4ff" } |
| 162 | + } |
| 163 | +} |
| 164 | +``` |
| 165 | + |
| 166 | +Import configs to quickly set up similar events. |
| 167 | + |
| 168 | +## Technical Details |
| 169 | + |
| 170 | +### How It Works |
| 171 | + |
| 172 | +MultiStream uses [Gun.js](https://gun.eco/) for decentralized, real-time data sync: |
| 173 | +- No server/database required |
| 174 | +- Data syncs via public relay servers |
| 175 | +- Works on any static hosting (GitHub Pages, Netlify, etc.) |
| 176 | +- Room state persists even when host disconnects |
| 177 | + |
| 178 | +### Browser Support |
| 179 | + |
| 180 | +- Chrome/Edge (recommended) |
| 181 | +- Firefox |
| 182 | +- Safari |
| 183 | +- Mobile browsers |
| 184 | + |
| 185 | +### Dependencies |
| 186 | + |
| 187 | +- [Gun.js](https://gun.eco/) - Decentralized database (loaded via CDN) |
| 188 | +- [Windy.com](https://windy.com/) - Weather radar embeds |
| 189 | + |
| 190 | +### Privacy |
| 191 | + |
| 192 | +- No data stored on your server |
| 193 | +- Room data stored on Gun.js relay network |
| 194 | +- Chat messages expire after 2 hours |
| 195 | +- No analytics or tracking |
| 196 | + |
| 197 | +## Self-Hosting Gun Relay (Optional) |
| 198 | + |
| 199 | +For better reliability, you can run your own Gun relay: |
| 200 | + |
| 201 | +```bash |
| 202 | +npm install gun |
| 203 | +npx gun |
| 204 | +``` |
| 205 | + |
| 206 | +Then update the Gun initialization in the HTML: |
| 207 | +```javascript |
| 208 | +const gun = Gun(['https://your-relay-server.com/gun']); |
| 209 | +``` |
| 210 | + |
| 211 | +## Use Cases |
| 212 | + |
| 213 | +- **Storm/Weather Tracking** - Multiple news streams + radar |
| 214 | +- **Sports Watch Parties** - Multiple game angles or broadcasts |
| 215 | +- **Security Monitoring** - Multiple camera feeds |
| 216 | +- **Event Coverage** - News streams during breaking events |
| 217 | +- **Gaming** - Multiple Twitch/YouTube gaming streams |
| 218 | +- **Conference Rooms** - Display multiple video sources |
| 219 | + |
| 220 | +## Contributing |
| 221 | + |
| 222 | +Contributions welcome! Feel free to: |
| 223 | +- Report bugs |
| 224 | +- Suggest features |
| 225 | +- Submit pull requests |
| 226 | + |
| 227 | +## License |
| 228 | + |
| 229 | +MIT License - feel free to use, modify, and distribute. |
| 230 | + |
| 231 | +## Acknowledgments |
| 232 | + |
| 233 | +- [Gun.js](https://gun.eco/) for the amazing decentralized sync |
| 234 | +- [Windy.com](https://windy.com/) for embeddable weather maps |
| 235 | +- Inspired by the need to watch multiple blizzard streams at once! |
| 236 | + |
| 237 | +--- |
| 238 | + |
| 239 | +**Made for storm chasers, sports fans, and anyone who needs to watch ALL the streams.** |
0 commit comments