Media server
Your configuration as a server, with your catalogs as libraries, your streams as versions, a user for everyone in your household, and your progress kept across devices.
Every configuration is also a media server. The AIOStreams app, in a browser or on your computer, signs in to it, and so does any Jellyfin app, because the server speaks the same API as Jellyfin. You don't need to install or host anything for it: it runs on your AIOStreams instance. Public instances have it on except ElfHosted's, and ElfHosted's private instances have it off until you turn it on. Nothing is downloaded or stored either: when you press play, AIOStreams searches your addons exactly as it does for Stremio.
| In AIOStreams | In the apps |
|---|---|
| Your catalogs | Libraries |
| Your metadata addons | Titles, with their details, seasons and episodes |
| The streams found for a title | Versions of that title |
| Your subtitle addons | Subtitle tracks |
| Catalogs of collections | A Collections library |
| What you watch, and your trackers | Continue Watching, Next Up, played marks and favourites |
Its settings are on the configure page, in a window with Connect, Users, Trackers and Playback tabs. Open it with Users, trackers and playback under Save & Install → AIOStreams app, or with the Jellyfin apps card.
Before you start
- Use streams with a link. Only streams with a URL play in the apps: debrid, Usenet and direct links. P2P torrents, which Stremio plays through its own torrent engine, are left out.
- Add catalog and metadata addons to AIOStreams. The apps only see what your configuration provides, so they need addons for all three jobs: catalogs to fill the libraries, metadata to describe each title, and streams to play it.
- Save your configuration. The apps sign in to a saved configuration.
- Check the instance allows it. It is on by default. If AIOStreams app and Jellyfin apps under Save & Install are greyed out, the instance owner has turned it off.
Streams are played directly, never transcoded. Your app has to be able to play the file as it is, so a device that struggles with a format in other apps will struggle here too. Picking another version usually helps.
Users and PINs
The Users tab adds users to your server, so everyone in a household can have their own profile, with their own Continue Watching, trackers and addon setup.
- The primary user is your configuration itself. Give it a name (your addon name by default), an avatar and, optionally, a PIN.
- Each extra user has a name, which is also what they type to sign in by hand, and an optional avatar. You can hide a user from the sign-in picker.
- History is either own, a separate Continue Watching, or shared with the primary user. Sharing the history also shares its trackers.
- Variants apply while that user is signed in, in the order picked, so a user can get, for example, a different set of filters. A variant that activates on its own applies too, before the ones picked here.
- Trackers can be chosen per user; see Trackers for each user.
- PIN is optional; see below.
Removing a user keeps their watch history. Adding a user again under the same name gets it back.
PINs
Give a user a PIN of 4 to 12 digits to stop others in the household signing in as them. PINs are an AIOStreams addition, so Jellyfin apps have no box for one: type it in the password box after the password, as yourpassword/1234. Without it, an app only reports a failed sign-in. The AIOStreams app is the exception and asks for the PIN on its own, both at sign-in and when switching to that user. Quick Connect asks for it before approving. API keys can't act as a user with a PIN.
- Five wrong PINs in a row pause sign-in to that user for 15 minutes.
- Changing or removing a user's PIN signs that user out on every device.
- The primary user can still see a PIN user's watch history, but can't mark things watched as them.
The primary user's PIN
The primary user sees everyone's activity and history, so a PIN on it keeps the other people using your configuration out of yours. With one set:
- Signing in as the primary user always needs the PIN, even with your configuration password.
- Switching to the primary user from another user in the AIOStreams app asks for the PIN every time, so handing over a device after switching away doesn't hand over your account.
Letting people sign in with only their PIN
Sometimes the people you set up users for shouldn't know your configuration password, because it also opens the configure page. If the instance owner allows it, each of them can sign in with their own PIN instead. The Connect tab says whether your instance does.
- Give each person's user a PIN of 6 or more digits.
- Give them the Address with a sign-in picker, their user name and their PIN.
- They pick their user and enter the PIN as the password.
This only works on the sign-in picker address, and only for household users. The primary user, and users without a PIN, still need your configuration password, and a PIN shorter than 6 digits only works together with it. Anyone with the picker address or your install links who learns or guesses a PIN can sign in as that user, so pick PINs that aren't easy to guess.
Switching users
In the AIOStreams app, you can switch users without signing out:
- Switching to a user with a PIN asks for their PIN.
- A device that signed in with your configuration password switches to users without a PIN freely.
- A device that never had your password, because it was approved with Quick Connect or signed in with a PIN alone, asks for the password to reach the primary user or any user without a PIN. For a primary user with a PIN, it asks for both, as
yourpassword/PIN.
Signing devices out
- One user, everywhere: change or remove their PIN.
- Everyone, everywhere: change your configuration password. That also changes the picker address and your Stremio install links and stops every API key, so hand out the new ones afterwards.
A PIN keeps other people using your addresses out of that user. It does not protect against anyone who can open your configuration, who can change or remove it. For people who need to be fully separate, use separate configurations.
Libraries
Each catalog becomes a library, in the order set under Addons → Catalogs. Reorder or disable catalogs there to change what apps show.
- Limits. An instance shows a limited number of libraries per configuration (20 by default) and lists a limited number of titles in each (250 by default). The Connect tab tells you this instance's numbers. Catalogs past the library limit do not appear at all, so move the ones you care about to the top.
- Search. Searching in an app searches your catalogs that support search. Search-only catalogs are not shown as libraries.
- Genres. A catalog with genres gets a genre filter. A catalog that requires a genre opens on its first one.
- Collections. A catalog whose entries are collections, such as a set of streaming services or film series, becomes a Collections library. A collection can hold both movies and shows, and each opens and plays like it does anywhere else.
Changes you save reach connected apps within about 30 seconds. Apps also keep their own copy for a while, so refresh or reopen the app if something still looks old.
Playing
Versions
Opening a movie or an episode searches your addons, just as opening it in Stremio does, and lists the results as versions. Their names come from your formatter. The first version is the one your sorting ranks highest, so pressing play without choosing picks the same stream Stremio would put at the top.
Two settings on the Playback tab control this:
| Setting | What it does |
|---|---|
| Resolve streams when an item opens | On by default. Off, nothing is searched until you press play, which is lighter on your addons, but the version list shows a placeholder until then, with a Load versions entry to fill it. |
| Versions per item | How many streams to offer. The instance sets the maximum (10 by default). Set it to 1 and apps have nothing to choose between. |
A title's versions are reused for a few minutes, so opening it and then playing it searches once.
Anything an addon sent with nothing to play, such as a notice, an error, or a link to its own website, is listed after the versions, along with any statistics you have switched on. Stremio offers these as links to open in a browser, which a Jellyfin app has no way to do, so only their text is any use there, and playing one gets you a short clip saying so. The AIOStreams app shows them as text too, with a button to open any link. They do not count towards Versions per item, and errors follow your Hide Errors setting.
Audio and subtitle tracks
Subtitles from your subtitle addons show up as subtitle tracks in every app. The file's own audio and subtitle tracks depend on what AIOStreams knows about the stream:
- Media info that lists the tracks: every track, named as in the file.
- Only the languages, as some addons and indexers report: one numbered track per language, such as Audio 2 or Subtitle 1. A file with two tracks in one language has one more than is listed.
- Nothing: one audio track and none of the file's subtitles.
Apps that read the tracks from the file themselves, and the desktop app, list every track regardless.
When nothing plays
- No streams found is shown when your addons returned nothing playable and none of them reported why. When one did, its error is listed in place of it, the same message Stremio would show. Either is looked up again after a few minutes.
- Some streams never appear as versions. P2P torrents have no link to play, so they are always left out. A stream that needs custom request headers can only be played in an app through a proxy, set up under Proxy on the configure page, so without one it is left out.
- A version will not start. Try another version. Because nothing is transcoded, a file your device cannot decode will not play.
Skipping intros and credits
Unless the instance owner has turned it off, the Playback tab has Skip intro and credits, on by default. Apps then get markers they can show a skip button for, and you can choose which markers to offer: intro, recap and credits. Whether the app skips automatically or asks first is a setting inside the app. The markers come from community databases, so on a differently cut copy of an episode they can be a few seconds out.
Watch history
AIOStreams keeps your progress, played marks and favourites itself, for your configuration and for each user with its own history. That is what fills Continue Watching and Next Up, and it is the same on every app you sign in to.
Trackers
An addon that supports Watch State can act as a tracker. The Trackers tab lists the ones in your configuration and what each does:
- Records your plays: what you watch in the apps is sent to the addon, so a service it connects to (such as a watch-history site) stays up to date.
- Imports your history: what the addon knows you watched elsewhere, including in Stremio, shows up in Continue Watching and Next Up.
- If the addon supports a watchlist, your watchlist and your favourites stay in step.
To stop an addon syncing for everyone, untick Watch State in that addon's Resources option and save. The instance owner can turn either direction off for everyone, in which case the tab says so.
Without a tracker, AIOStreams only knows what you played in the apps. Something watched in Stremio reaches Continue Watching only through a tracker that imports your history.
Building a tracker addon? See the Watch State reference.
Trackers for each user
Each user with a history of its own can sync with its own tracker addons, for example a separate watch-history account per person. Add one tracker addon per account to your configuration, then turn on Choose trackers for each user in the Users tab and pick theirs.
- A tracker belongs to one history at a time, so a tracker picked for one user can't be picked for another. Otherwise what one person watches would end up in the other's history.
- The exception is a tracker addon that keeps users apart itself, such as one with a card per person. It can be picked for every user, and AIOStreams tells it which user each play is for. The addon matches a user by name; when the Users tab shows a tracker id for someone, give the addon that id as well.
- Left off, the primary user syncs with every tracker addon, so none are free for other users. Choose the primary user's trackers first.
- Left off for another user, it syncs with a tracker addon that its variants add, and with any tracker addon that keeps users apart.
- A tracker nobody picks is not used.
- Moving a tracker to another user also brings along what it already recorded for the previous one.
Different addons for the apps and Stremio
Stremio and the apps read the same configuration, so an addon you add for one shows up in the other. Some addons only make sense in one of them: a metadata addon with catalogs built to be libraries, say, or one you already install in Stremio on its own. A variant keeps them apart.
Keep the apps' setup in your base configuration and give Stremio a variant. The configure page always edits the base configuration, so this way you can still arrange the addon's catalogs and resources there as usual.
Set it up for the apps
Add the addon, then order and enable its catalogs under Addons → Catalogs for the libraries you want.
Add a variant for Stremio
In Miscellaneous → Variants (Advanced mode), add a variant with the id stremio that takes out what Stremio should not see:
# the addons only the apps should use
disable presets[instanceId=8ae]The editor completes instance ids after presets[instanceId= and names each addon. Anything else that should differ in Stremio can go in the same variant, such as set addonName = "...", or enable an addon kept disabled in the base configuration.
Install it in Stremio
On Save & Install, pick the stremio variant, then install from there. Stremio's install links end in /v/stremio, and the server addresses stay as they are.
Two other ways to do it:
- Per user. Leave the addon disabled in the base configuration, add a variant that turns it on (
enable presets[instanceId=8ae]), and pick that variant for each user in the Users tab, the primary user included. Stremio then needs nothing new, but while the addon is disabled its catalogs can't be arranged on the configure page. - A separate configuration, when the two setups share little. Create a second configuration for the apps and sign in to that one instead. See variants or a parent config for how the two approaches compare.
API keys
A tool that uses the Jellyfin API, such as a dashboard or a script, can connect with an API key instead of your password. Open API keys at the bottom of the Connect tab:
- Name the key and select Create key.
- Save your configuration.
- Select Copy key, and give it to the tool with the same server address your apps use.
A key acts as the server's administrator, though it can't act as a user with a PIN. It sees every user of your configuration: what each is watching now, their watch history, and your libraries. Revoke a key and save to cut a tool off; it stops working within 30 seconds. Changing your configuration password stops every key, so copy them again afterwards.
What a tool can't get from AIOStreams:
- Addresses and locations. AIOStreams does not record where anyone watches from, so rules built on IP addresses, such as account-sharing detection, have nothing to go on.
- Stopping a stream or sending a message. Apps can't be controlled remotely.
- Transcoding and quality details. Everything plays directly, and the stream details are not reported.
- Every title. Each library lists at most
JELLYFIN_MAX_CATALOG_ITEMStitles, and episodes are listed per show, not per library.
For instance owners
The media server, skip markers and watch-state sync are on by default. The settings are under Dashboard → Settings → Media server and Watch State; see environment variables for all of them.
| Variable | Default | What it does |
|---|---|---|
JELLYFIN_ENABLED | true | Turns the media server on or off, for the AIOStreams app and Jellyfin apps. |
JELLYFIN_MAX_LIBRARIES | 20 | Catalogs shown as libraries per configuration. 0 shows them all. |
JELLYFIN_MAX_CATALOG_ITEMS | 250 | Titles listed per library. |
JELLYFIN_MAX_VERSIONS | 10 | The most versions a configuration can ask for. |
JELLYFIN_RESOLVE_ON_OPEN | user | always or never force resolving on open for everyone; user leaves it to each configuration. |
JELLYFIN_MAX_PERSONAS | 20 | Household users per configuration. 0 allows none. |
JELLYFIN_PIN_SIGN_IN | false | Lets a household user with a PIN of 6 or more digits sign in on the picker address with the PIN alone. |
JELLYFIN_SEGMENTS_ENABLED | true | Offers skip markers. It sends what is being played to the marker databases. |
WATCH_STATE_REPORT_ENABLED | true | Sends plays to tracker addons. |
WATCH_STATE_PULL_ENABLED | true | Imports history from tracker addons. |
WATCH_STATE_ALLOW_PRIVATE_URLS | false | Lets watch state reach addons on private addresses. Only enable it on an instance you trust the users of. |

