A minimal, installable web app to control a Jellyfin playback session (e.g., Android client) using REST APIs.
- Host these static files on any web server (or run serve.py) on the same network as your Jellyfin server
- Open the app in Safari, tap the share icon, and choose "Add to Home Screen" to install as a PWA on iPhone.
- Enter your Jellyfin base URL (e.g.,
http://10.0.0.5:8096orhttps://jellyfin.example.com) and your API token.- The app sets the modern
Authorization: MediaBrowser ... Token="<token>"header.
- The app sets the modern
- Enter your Android Bridge URL/IP and secret for bridge functionality
- This requires the (companion android app)
- Tap Save, and Test Connection to verify that you can reach your Jellyfin server. If successful, tap Refresh to list active, controllable sessions.
- Pick your session, then use the controls (play/pause/seek/next/prev/stop, volume).
- If you use a client that does not expose playback controls through Jellyfin, controls will not work. You could use the android media control bridge app to control an android device as a workaround.
- Install the bridge on your Android phone, and enter your IP, shared secret, and toggle "use bridge for this session"
- The PWA technically supports websockets for connection to Jellyfin, however there are still some bugs so currently it falls back to polling via the REST API.
- Settings are saved locally in the browser (localStorage).
- Service Worker provides basic offline caching of app shell assets.
- Support for controlling Jellyfin sessions directly rely on the target Jellyfin client's support for those commands, if not using the Android media control bridge.
For a quick test, you can run a simple static server, e.g. with Python:
python serve.py
Then open http://<your-computer-ip>:8081.