Support
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 17+).
- Sign in with Plex, or point it at a Jellyfin or Emby server by URL.
- The app talks straight to a server on your network, plain
httpand 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.
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.
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.
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. In the Apple TV app it's its own option; on the web tuner, use the Jellyfin connect and point it at your Emby server.
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.
A plain http box on your LAN will always work in the Apple TV app and never in a browser tab. That's the one real difference between them.
Reverse proxy & CORS (Jellyfin or Emby behind nginx, haproxy, 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://nostalgex.app to talk to it.
The fix is one header at your proxy: allow requests from https://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://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://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://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://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. There are no analytics or tracking scripts on the tuner pages. The marketing landing page counts basic visits, but the part that connects to your server doesn't run anything.
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. They play fine now. 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).
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.
- Running behind a reverse proxy? Jump to Reverse proxy & CORS.
"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.
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
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's the Privacy Policy.