From lightsync/audio/engine.py:
```python
class MPVEngine:
def get_state(self) -> dict[str, Any]:
# Returns: {"position": float, "paused": bool, "duration": float|None, "loaded": bool, "file": str|None}
```
WebSocket tick message format:
```json
{"type": "tick", "position": 42.1, "paused": false, "duration": 180.5, "loaded": true, "file": "/path/to/song.mp3"}
```
WebSocket commands accepted:
```json
{"type": "play"}
{"type": "pause"}
{"type": "seek", "position": 42.0}
{"type": "load", "path": "/path/to/file.mp3"}
```
REST endpoints:
```
POST /api/audio/load — body: {"path": "..."}
GET /api/audio/state — returns engine state dict
```
From lightsync/api/audio.py:
```python
router = APIRouter()
# Already has POST /load and GET /state
```
From lightsync/frontend/index.html:
- `` — currently shows placeholder text
- `