Nostalgex support

Most setup problems come down to one of three things: the server address, https for the web tuner, or your server's metadata. The Apple TV app connects to plain http servers on your network, so if the web tuner won't reach your Jellyfin or Emby server, start with https.

Getting connected, how the channels decide what plays, and fixes for the things that go wrong most often.

Getting started

Nostalgex points at your own Plex, Jellyfin, or Emby and turns it into flippable TV channels, with an actual channel guide instead of an endless grid. There are two ways to run it.

Apple TV app (the easy one)

  • Grab Nostalgex on the Apple TV App Store (tvOS 18 or later).
  • Sign in with Plex, or pick Jellyfin or Emby and it finds your server on your network.
  • The app talks straight to a server on your network, plain http and raw-IP included, so none of the browser headaches below apply. If you're running a normal home setup, this is the one to use.

Web tuner

  • Open the web tuner in a browser and connect Plex, Jellyfin, or Emby.
  • It loads over https, so your server has to be reachable over https too. More on that just below.
Worth saying plainly: there's no account, and there's no server of mine sitting in the middle. It all runs between your browser (or the app) and your box. Your login, your server URL, your library, your video, none of it comes to me. Open your browser's Network tab and watch the requests if you want proof. They all go straight to your server.

Connecting your server

Plex

Sign in with your Plex account and Nostalgex finds your server on its own. Plex hands out its own secure addresses (plex.direct), so it usually just works on both the app and the web tuner with nothing extra to set up.

More on the Plex setup page.

Jellyfin

Drop in your Jellyfin server URL and sign in, either with your username and password or Quick Connect. Use the whole URL with the scheme on the front, like https://jellyfin.yourdomain.com.

More on the Jellyfin setup page.

Emby

Emby and Jellyfin share an API, so Emby works the same way: drop in your Emby server URL and sign in with your username and password. It has its own option in the Apple TV app and its own button on the web tuner.

More on the Emby setup page.

Why the web tuner needs https

The web tuner runs on an https page, and browsers won't let an https page reach out to a plain http or raw-IP address. They call it mixed content, and they just block it. If your server opens fine in another browser tab but the tuner swears it can't reach it, that's almost always what's happening. It's the browser's rule, not something I can flip off from the web.

  • Give your server an https address. A free tunnel like Tailscale Serve or a Cloudflare Tunnel gets you one in about two commands, then paste that https:// URL in.
  • Or just use the Apple TV app, which reaches local http/raw-IP servers directly because native apps don't have this restriction.
  • Or run the tuner on your own server. That copy is served over plain http on your network, so it can reach a plain http Jellyfin or Emby box.

A plain http box on your LAN works in the Apple TV app, and in a browser only if you run the tuner on your own server.

Web tuner CORS errors behind nginx, haproxy or Caddy

Here's the one that catches people. Your Jellyfin is on https and reachable, but the tuner still says "COULD NOT REACH THE JELLYFIN SERVER", and if you pop open the browser dev console you see a CORS error. That means your reverse proxy is rejecting the request because it's coming from a different domain (this site). The browser throws away the response unless your server says it's OK for https://www.nostalgex.app to talk to it.

This is a web-tuner-only thing. The Apple TV app doesn't use CORS, so if you're on the app you can ignore all of this.

The fix is one header at your proxy: allow requests from https://www.nostalgex.app. How you do that depends on what you run.

haproxy

http-request set-var(txn.cors_origin) req.hdr(Origin)
acl cors_allowed var(txn.cors_origin) -m str https://www.nostalgex.app https://nostalgex.app
http-response set-header Access-Control-Allow-Origin %[var(txn.cors_origin)] if cors_allowed

nginx

add_header Access-Control-Allow-Origin "https://www.nostalgex.app" always;
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS, DELETE" always;
add_header Access-Control-Allow-Headers "Authorization, Content-Type, X-Emby-Authorization" always;
# answer the preflight
if ($request_method = OPTIONS) { return 204; }

Caddy

header Access-Control-Allow-Origin "https://www.nostalgex.app"
header Access-Control-Allow-Methods "GET, POST, OPTIONS, DELETE"
header Access-Control-Allow-Headers "Authorization, Content-Type, X-Emby-Authorization"
@options method OPTIONS
respond @options 204

Reload the proxy, hard-refresh the tuner, and try again. The exact syntax shifts around between versions, but the goal is always the same: every response (including the OPTIONS preflight) needs to carry Access-Control-Allow-Origin: https://www.nostalgex.app.

Don't feel like touching your proxy config? Use the Apple TV app. It needs none of this.

How channels pick your stuff

Every channel is just a filter over your own library. Nothing gets downloaded, and nothing gets guessed about your taste. So if a channel looks empty, or a film keeps turning up somewhere weird, it comes down to the metadata on your server. Here's what actually gets checked.

What a channel looks at

  • Type. Movie or episode. A movie never lands on a TV channel.
  • Genres. The big one. Channels let some genres in and shut others out, so a comedy channel can reject anything that's also tagged Animation.
  • Year. Most channels are locked to a decade. A 1994 film won't show up on an 80s channel no matter what else lines up.
  • Runtime. Sorts shorts from features from epics. It's also how music videos get told apart from concert films.
  • Studio or network. For channels built around one producer or broadcaster.
  • Rating. G through R for the kid-safe channels, plus IMDb score and vote floors on the "best of" ones.
  • Keywords. Themes from TMDB, matched against your titles. It's how a heist channel or a road-trip channel can exist when no genre covers it.
  • Play count. The rewatch channels care how often you've actually watched something.

A title has to clear every rule, not just one. That's usually the answer when something you expected is missing: it matched the genre but fell outside the years, or the runtime, or the rating.

Fixing it from Jellyfin, Emby or Plex

It all runs off your server's metadata, so you can steer it without touching the app.

  • Fix the genre. Biggest win by far. A film tagged only "Drama" is never reaching a thriller channel.
  • Fix the year. Rips often carry the re-release date instead of the original, which quietly knocks a film out of its decade.
  • Refresh metadata after you edit, so your server writes the change. Nostalgex picks it up on the next scan, within a few hours.
  • Tag music videos with a Music genre, or park them in their own library, and they'll route to the music channels instead of the film ones.

Building your own channel

Make a collection on your server (a Collection in Plex, a Collection or BoxSet in Jellyfin and Emby), drop at least three movies in it, and Nostalgex can turn it into its own channel. Switch on the collection Channel Packages in Settings, then run a rescan so it gets picked up. That's how you get a channel that's actually yours: "Dad's Westerns", "Comfort Movies", whatever you want. The collection's name becomes the channel's name.

Multi-disc movies

A film ripped across two discs plays straight through as one program, as long as both files carry an obvious marker: part 1 / part 2, pt. 1 / pt. 2, cd1 / cd2, disc 1 / disc 2. Films that genuinely came out in two parts get scheduled back to back for the same reason.

Something you just added

Anything you added in the last week gets treated as a premiere and dropped into that evening's prime time, instead of waiting for the rotation to come around to it. The library refreshes itself every few hours, so something you added in the morning is usually on a channel that night.

FAQ

Does my data go through your servers?

No. It's a straight line from your browser or app to your own server. Your login, server URL, library, and video never reach me. I only host the web page. If you want to check, open the Network tab in your browser and watch where the requests go. Every one of them hits your server, not mine.

Is the web tuner tracking me?

No. The site and the web tuner's connect page load one page analytics script that counts visits, the one described in the privacy policy. It never collects your server address, credentials or library, and once you're connected and watching, no analytics script runs on the page.

Can I use it with an M3U / IPTV playlist?

Not right now. Nostalgex builds channels out of your own Plex, Jellyfin, or Emby library, it doesn't read a list of live streams. M3U isn't on the roadmap yet.

Why does the web tuner need https when the app doesn't?

Browsers won't let a secure page reach a plain http or raw-IP server, and they enforce CORS on top of that. A native app has neither rule, so the Apple TV app just connects to your local box directly.

A channel is a black screen, or takes a while to start. What gives?

First, make sure you're on the latest version. Older builds couldn't play HEVC/H.265 or mkv and would sit on a black screen, and on tvOS 26 anything the server had to convert would freeze on one frame. 1.0.21 fixed both and was tested against MKV, MP4, AVI, AV1, VC-1, 4K and HDR files. A few seconds of the "tuning" screen at the start is normal too: anything that isn't directly playable gets transcoded by your server, and that takes a moment to spin up. If a channel never starts, check that transcoding is turned on (Jellyfin: Dashboard → Playback). If one specific title never plays but everything else does, it's almost always a file the server itself can't read (an unmounted drive is the usual culprit). Try it in Plex Web or the Jellyfin web player: if it fails there too, it isn't the app.

Why is a Dolby Vision movie missing from my channels on Emby?

If it's Dolby Vision profile 5 (common on web rips), Nostalgex leaves it off your channels when your server is Emby. Emby can't send profile 5 in a form the Apple TV or a browser shows right, so you'd get a green and purple picture. That goes for MKV and MP4 files alike. Nothing changes on your server, the file just doesn't air. Profile 8, HDR10 and everything else play as normal, and Plex and Jellyfin aren't affected.

Troubleshooting

"Could not reach the server / check the URL"

  • Type the whole URL with the scheme: https://your-server.
  • On the web tuner the server has to be https-reachable. A raw IP or http LAN address won't fly in a browser, so use the Apple TV app for those.
  • On the Apple TV app, a plain http:// address on a VPN like Tailscale (the 100.x.x.x ones) is blocked by tvOS before 1.0.23, even though other apps allow it. Fixed in 1.0.23. On an older build, use an https address instead: on the server, tailscale serve --bg 8096 gives you one.
  • Running behind a reverse proxy? Jump to Web tuner CORS errors.

"Could not load library"

  • Check the server's actually up and reachable, then hard-refresh and reconnect.
  • On the app, open Settings, disconnect, and sign back in. Tokens expire sometimes.

Black screen, or playback won't start

  • Update to the latest version.
  • Make sure transcoding is on at the server.
  • Give a transcoded channel a few seconds. The tuning screen means it's working on it.

It signs me out, or rebuilds the guide every time I open it

  • Both were bugs, and both are fixed in 1.0.20. On that build you sign in once and it sticks, and the guide comes back instantly instead of rebuilding from scratch.
  • Still landing on the connect screen? There is a small diagnostic line at the bottom of it. Send me a photo of that and I can tell what happened.

Channels look wrong or empty

  • Channels come from whatever's in your library, so a category with nothing matching just stays empty. In the app, flip the Channel Packages you want on or off in Settings.

Contact & bug reports

Email support@nostalgex.app

Bugs and source GitHub Issues. The whole app is open source.

I usually get back within a day or two.

Reporting a bug? The stuff that actually helps me fix it: what you were doing, what you expected versus what happened, your app and tvOS version (Settings → About), whatever error or diagnostic line showed up, and a photo of the screen if you've got one.

Nostalgex is built by Muell Haus Inc. Here are the Privacy Policy and the Terms of Use.