> Does Nuvio have a web app? Not officially, so here's one: free and open source. Sign in with your Nuvio account for your profiles, addons, library and watch progress in any browser. Self-host it with Docker. Subtitles, skip intro, cast to TV, offline downloads.
> Source: https://zedensix.com/nuvio-web · Site index: https://zedensix.com/llms.txt

# Nuvio Web

An unofficial web implementation of the [Nuvio](https://nuvio.tv/) API, because
there isn't one yet. Sign in with your Nuvio account and get your profiles,
addons, library and watch progress in a browser tab.

![Nuvio Web in a browser: the home screen with a featured title above continue watching](https://zedensix.com/images/e8667c1d63e553a2059c0334b8ae0c1a04def3d8.webp)
**Your Nuvio, in a browser.** Profiles, addons, library and a player that
streams right in the tab, with nothing to install.

## Disclaimer, up front

Nuvio Web hosts no media. Every catalog, all metadata, streams and subtitles
come from **addons you install and are responsible for** (the Stremio addon
protocol). The app is a shell around whatever those addons return; it does not
endorse, index or verify any of them. Use only addons you have the right to use
where you live. Not affiliated with or endorsed by Nuvio.

## Showcase

Every screenshot below comes out of the repo, not a design tool. A Playwright
run seeds a Showcase profile whose only addon is a static one committed in the
repo: six Blender open movies, Creative Commons, streamed from Wikimedia
Commons. Nothing copyrighted and nothing torrent-backed ever goes on screen, and
a shot that lands on the wrong page fails the run instead of being published.
Light or dark follows your system; both are the real thing.

![The Nuvio Web home screen, with a hero carousel above continue watching](https://zedensix.com/images/e5f71f7178da9269a392d586b36d37bb3e6e0c1f.webp)
**Home** A hero carousel, then continue watching, then one row per addon
catalog. Which rows, and in what order, is your call in settings.

![A movie's detail page with synopsis, cast and rating](https://zedensix.com/images/23bf365c255a5ab3a461d7f812f27c9472910b49.webp) **A title**
Synopsis, cast, IMDb rating and trailer, plus the season and episode carousel
when it's a series.

![The sources drawer, listing streams with their parsed quality](https://zedensix.com/images/8b61d3670e721da89422b4121987db00617165a3.webp)
**Sources** Every stream your addons return, with quality, codec and size parsed
out of their labels, and where the title streams legally in your region.
Downloads start from here too.

![The player streaming a Blender open movie](https://zedensix.com/images/39a6cdc9169fd4461d4e724b802565c12276944e.webp) **The player** Streams in
the browser with subtitles and intro / outro skipping, casts to a TV, or hands
the link off to a native app.

![The library, with continue watching and saved titles](https://zedensix.com/images/e6ce2b3a29edd6b46568bbe0b7ca9174050f92dc.webp) **Library**
Library and collections are yours to curate, per profile, and they sync with the
mobile app.

![Watch stats built from the profile's history](https://zedensix.com/images/a3d0439c336e62ae9590b968758a04ea6acf42c4.webp) **Stats** History and
stats come from what you actually watched, not from what you bookmarked.

![The settings page](https://zedensix.com/images/7822f275dcd571aa3e0f190e1467ba71a1fb23d0.webp) **Settings** Appearance, playback, sync, addons
and integrations, stored on your Nuvio account so they follow you to the next
device.

Discover, search, collections, addons, history and the account page are in the
[full showcase](https://zedensix.com/nuvio-web/docs/showcase), all of it generated the same way.

## Browse

### Home

A rotating hero spotlight, continue watching, your library, and a row per
catalog your addons expose, in the order you pick.

### Discover

The full catalog browser: any catalog from any installed addon, filtered by type
and genre, paginated.

### Search

Fans out across every addon that serves a search catalog, and remembers recent
queries.

### Detail pages

Synopsis, cast, IMDb rating, trailer, season and episode carousel, and a
JustWatch "where to watch" row for your region.

### Command palette

`⌘K` from anywhere to jump to a screen or start a search.

## Watch

### Source picker

Quality, codec, size and release details parsed out of each addon's stream
label, with an auto-pick that honours your preferred resolution.

### HLS & direct playback

`hls.js` for `.m3u8`, the element's own `src` for everything else, with
audio-track switching on either.

### Subtitles

SRT converted to WebVTT in the browser, so a subtitle file never touches the
server. Size, colour, background plate, preferred language.

### Skip intro / outro

Via TheIntroDB. The keyless public tier works out of the box; add your own key
to raise the limits.

### Cast to a TV

No third-party SDK: the standard Remote Playback API for Chromecast, falling
back to WebKit's AirPlay hooks in Safari.

### Auto-play next

Rolls into the next episode with an end-of-episode panel.

### Hand off to another app

An Intent chooser on Android, VLC's x-callback on iOS, the raw `magnet:` link
for a P2P source, or copy to clipboard on desktop.

### Playback diagnostics

The codec is probed before a stream reaches the player. One that decodes no
video (unsupported HEVC/AV1) or no audio (Dolby Digital, DTS, Atmos) raises a
dismissible banner instead of a black screen.

## Offline

### Installs as an app

Its own window, its code cached on the device, and an offline page instead of a
browser error when the network is gone.

### Downloads

Direct files and HLS streams, AES-128 included, with up to five subtitle
languages. One at a time, resumable after closing the tab, written by a Web
Worker to the browser's private file storage. Torrents, live streams and DRM
stay online, because they have to.

### Watch without a connection

The offline page lists the last profile's finished downloads and plays them with
their subtitles. Progress isn't recorded offline: there's no server to record it
to.

## Library & sync

### Library

Your library, continue watching, and history, kept per profile.

### Collections

Your own folders of titles, separate from the library.

### Two-way sync

The server keeps each profile's library, progress and history and syncs them
both ways with your Nuvio account in the background, so the phone and TV apps
stay in step. Open tabs stay in step over `BroadcastChannel`.

### Watch stats

A full, editable history under Account.

## Make it yours

### Profiles

With avatars, as on mobile.

### Themes

Light, dark or system, a dim or AMOLED dark style, and seven accent colours.

### Settings

Appearance, playback, sync, addons and integrations, stored on your Nuvio
account so they follow you between devices.

### Accessible by default

Every route is checked against WCAG 2 A/AA in CI (axe), including skip links and
focus management.

## Run it

### Docker run

```bash
docker run -p 3000:3000 \
  -v ./data:/app/data \
  orochibraru/nuvio-web:latest
```

### Docker Compose

```yaml
services:
  nuvio:
    image: orochibraru/nuvio-web:latest
    restart: unless-stopped
    ports:
      - 3000:3000
    volumes:
      # Sessions, and your library / progress / history. Back it up.
      - ./data:/app/data
    environment:
      # Behind a reverse proxy that terminates HTTPS
      PROTOCOL_HEADER: x-forwarded-proto
      HOST_HEADER: x-forwarded-host
    healthcheck:
      test: ["CMD", "curl", "-fsS", "http://localhost:3000/api/health"]
      interval: 30s
      timeout: 30s
      retries: 3
      start_period: 5s
```

Put it behind a reverse proxy that serves HTTPS, open that address, sign in,
pick a profile, and add an addon from **Settings → Addons** if the account has
none yet. Images are published for `linux/amd64` and `linux/arm64`.

**Mount the volume.** `/app/data` holds a small SQLite database: signed-in
sessions (Nuvio tokens, encrypted) and each profile's library, watch progress
and history, synced both ways with your Nuvio account. Without it, a restart
signs everyone out and drops any change not yet pushed to Nuvio. Downloads live
in each browser, not on the server.

**Serve it over HTTPS.** On plain HTTP the app renders but nothing saves: every
write gets `403 Cross-site remote requests are forbidden`. Plain HTTP needs your
own image built with `--build-arg NUVIO_BUILD_ORIGIN=http://…`. The `ORIGIN`
variable from earlier releases does nothing now. See
[Troubleshooting](https://zedensix.com/nuvio-web/docs/troubleshooting).

Putting it on the public internet is on you: HTTPS and whatever access control
you would give any other self-hosted app.

## Questions people ask

### Does Nuvio have a web app?

Not an official one for the browser. Nuvio's own NuvioWeb is the TV app for
Samsung Tizen and LG webOS. This is an unofficial browser client on the same
account, so everything you set up on your phone is already here.

### Can I use Nuvio on PC?

Yes, in any browser on Windows, macOS, Linux or a Chromebook. No Android
emulator, no BlueStacks. Install it from the address bar if you want its own
window.

### Do I have to self-host it?

No. There's a [hosted instance](https://nuvio.orochibraru.com) to try. Run your
own with Docker if you'd rather your Nuvio session didn't pass through my
server.

### Will my addons work?

Any addon on your Nuvio account loads, as long as it is reachable from the
internet. One on `localhost` or a LAN address won't. Addons that don't load,
black video and missing audio are all in
[Troubleshooting](https://zedensix.com/nuvio-web/docs/troubleshooting).
