| Management view | Streaming view |
|---|---|
![]() |
![]() |
Changelog
New look & feel
- Refreshed UI with new fonts, colors, and visual assets throughout the platform
- Consistent button sizes and layouts across all screens
- Animated buttons in the simulation selection and management views
- Colored borders on headset streams to easily identify which headset is which
- New folder icon to distinguish sub-projects
Headset setup is now automatic
- The platform can now automatically install required apps (auto-adb, Oculus ADB) on connected headsets — no manual setup
needed - Use a custom android application to keep ADB Wireless active all the time
- Headset power settings are now configured automatically (4-hour auto-off)
UPS power management
- The platform now monitors your UPS (APC Back-UPS BX2200MI) and will automatically shut down all headsets after 3 hours or
on power events
Better video streaming
- Significantly improved stream quality and performance
- Video now decodes in a background thread, reducing UI lag
- Stream rotation is now correct (no longer tilted at 25°)
- Streams restart automatically when a new browser tab connects
- Fixed streaming on Safari
Bug fixes
- Disconnected headsets are now properly grayed out in the interface
- All players are correctly disconnected when stopping an experiment
- Fixed the stop button not appearing in the simulation manager
- Fixed the platform crashing when no VU is found in the configuration (Gamaless mode now clearly indicated)
For developers
ADB & Headset Management
- Refactored AdbManager into a proper manager + new HeadsetSetup class handling all device checks and application
installation - Auto-install of auto-adb and Oculus ADB tools on headsets
- Zero interaction one - https://github.com/project-SIMPLE/adb-auto-enable
- Added installApk() support for future self-healing headset configuration
- OVR preferences and power settings (4-hour auto-off) now configurable from the platform
- System/secure settings exposed for headset setup
- Early detection of device → offline transitions in AdbManager
UPS Power Control
- New UpsManager with polling, reconnection logic, and graceful shutdown
- Reverse-engineered communication protocol for the APC Back-UPS BX2200MI
- Automatic 3-hour session shutdown timer integrated with UPS state
- Added shutdownAllHeadsets() on the AdbManager
Video Streaming (Scrcpy)
- Migrated video decoding to WebCodecs API (replacing previous approach)
- Moved WebCodecs decoder to a Web Worker for better performance
- Added backpressure handling to keep video stream clean and reduce artifacts
- Bumped Scrcpy to v3.1 and yume-chan libs to v1.0.0 (stream rotation now flat)
- Fixed bitrate: was wrongly set to 200bps instead of 8Mbps
- Fallback to MessagePort when ReadableStream transfer is unsupported (Safari fix)
- Streams now restart for every newly connecting client
- ReadableStream and decoder lifecycle management improved
Networking & WebSockets
- Migrated WebSocket layer to µWebSockets.js (faster, lighter, better payload compression)
- Added multicast DNS (mDNS) support — connect via simple.local: instead of static IPs
- Per-message compression enabled for player connections
- Unified sendMessageByWs() function in Monitor for cleaner message handling
- Fixed wsID forwarding in addEveryPlayer
Player Management
- Migrated PlayerManager to a Map<id, player> structure
- Fixed player disconnect/reconnect edge cases (ghost players when closing a simulation)
- Properly disconnect all players when stopping an experiment
- Fixed player ID mismatch between websocket ID and in-game Unity ID
Gamaless Mode
- Better handling of the GAMALESS mode in both backend (verbose warnings) and frontend (visual indicator)
- Prevents crashes when no VU is found in the configuration
Scanning & Setup Scripts
- scan_and_connect script reworked: faster scan (~2s vs 10s), verbose flag, better regex, admin-mode speedup
- PowerShell equivalent script added for Windows users
- IP address sanitization added to prevent copy-paste artifacts from breaking the config
Cleanup & Refactoring
- Removed the old demo package and unused components/pages
- Removed React.FC usage across components
- Reorganized dependencies (most devDependencies moved to prod)
- Package version bumped to 3.0.0
- Added GitHub issue templates
Generated changelog
- Single binary application by @RoiArthurB in #111
- Proper fix for the issue 112 by @RoiArthurB in #116
- Eslint check by @GuillaumeLeroy34 in #119
- Refactor: Per-device WebSocket streams to fix backpressure + cross-browser codec support by @RoiArthurB in #125
- Move WebCodecs decoder to Web Worker for better scrcpy video streaming performance by @RoiArthurB in #129
- chore: Better handle Gamaless by @RoiArthurB in #131
- [WIP] UPS control from the webplatform by @RoiArthurB in #135
- Fix scrcpy streams rendering on Safari using MessageChannel fallback by @RoiArthurB in #137
- Visual rework by @GuillaumeLeroy34 in #143
- Merge long development branch in main by @RoiArthurB in #144
- Migrate Auto ADB app from tpn to SIMPLE's fork one by @RoiArthurB in #148
Full Changelog: 2.5...v3.0

