Skip to main content

nyrxmain

PyPI License

Overview

nyrx is a terminal media center. It brings Youtube, Soundcloud, internet radio, and TV/Movies into a single keyboard-driven interface. Search, play, queue, download, and browse across four media sources from one terminal window. No browser, no Electron app, no accounts.

Who is this for? If your media diet is Youtube, Soundcloud, radio, and TV/Movies, and you generally know what you want to watch or listen to, nyrx is built for that.

  • Youtube mode is search-based: no algorithm, no related videos, no channel browsing. You search, you play, it remembers what you've watched. Audio and video modes both supported.
  • Soundcloud mode is built for discovery: follow artists, build a feed, browse trending by genre, like tracks, start stations.
  • Radio mode has 62k stations worldwide, filter by name, tags, or country, like stations to pin them.
  • TV/Movies mode lets you search TMDb, bookmark media, browse seasons and episodes, watch and track what you've watched. Requires user-configured server plugins (Lua scripts) to find streaming sources.
  • Privacy-first: no accounts, no logins, no tracking. The app doesn't know who you are.

Not for you if:

  • You need deep Youtube browsing with algorithms, playlists, or channel pages
  • You want to connect accounts or sync with official services
  • You don't use Youtube, Soundcloud, radio, and don't care to know what TV/Movies mode is all about.
  • You need mouse support (nyrx is keyboard-only)
  • You are on Windows (not supported)

New to terminal apps? nyrx is approachable and built with UX in mind. Keep scrolling for screenshots.

For channel browsing, playlist management, subscriptions, and deeper Youtube features, check out youtube-tui.


Requirements

  • Python 3.12 or higher
  • mpv installed and on your PATH
  • Linux or macOS (Windows is not supported due to mpv Unix socket dependency)
  • Internet connection (required for streaming and searching)

Everything else is installed automatically by pip or dealt with on your first start-up.

nyrx has been tested on Linux via Kitty, Ghostty and Konsole. It should work on macOS, but has not been tested there.

Kitty is recommended. Terminals using Sixel (WezTerm, foot) may have sizing issues due to how textual-image handles Sixel rendering. Terminals without image support will render images using colored Unicode characters (last resort).


Quick Start

pip install nyrx

You will also need mpv (a very capable media player) installed on your system:

# Linux (Debian/Ubuntu)
sudo apt install mpv

# Linux (Fedora)
sudo dnf install mpv

# Linux (Arch)
sudo pacman -S mpv

# macOS
brew install mpv

Then just run it:

nyrx

nyrx handles everything else on first launch. It checks for mpv, installs Playwright Chromium if it is missing (for TV/Movies server probing), and bundles ffmpeg so you do not have to worry about that. You will get a clean pre-flight summary before the app opens.

Pre-flight dependency check


What Can nyrx Do

Press F1 through F4 to switch between sources. Each source has its own landing view, and features. The queue is source-agnostic, so you can mix Youtube, Soundcloud, radio, and TV/Movies in a single playback session.

Mode switcher

Youtube

  • Search videos and paste URLs directly to play media
  • Play video or audio (toggle with m)
  • Download with quality presets (480p to 2160p)
  • Persistent search history (last 10 queries)
  • Open in browser (b), copy media URL to clipboard
  • Watched indicators on search results

Youtube search

Soundcloud

  • Search tracks and browse artist's profiles
  • Trending playlists by 14 genres and 31 regions
  • Follow artists, like tracks, build a personalized feed
  • Start a station from any track (auto-queues similar music)
  • Sync liked tracks from a public profile
  • Collection browser for artist playlists and albums
  • Download audio

Soundcloud homepage

Radio

  • 62,000+ internet radio stations from around the world
  • Filter by name, tags, or country with autocomplete
  • Like stations to pin them to the top of the list
  • Live ICY metadata (now-playing title) during playback
  • Station index auto-refreshes every 6 days

Radio station table

TV and Movies

  • Search TMDb for movies and TV shows with filter chips (All/Movies/TV)
  • Bookmark shows and build a watchlist
  • Get recommendations based on your watchlist
  • Browse TV series by season and episode
  • Track what you have watched (per-episode and per-movie status)
  • Poster art, ratings, genres, and overview text
  • Batch episode downloads with deduplication
  • Subtitle and multi-audio track muxing into MKV
  • Server plugins fetched from a user-configured manifest URL (hotswap)
  • Write your own server plugins via the Lua plugin system (scroll to the end to read more)
  • Cycle through specific streaming server plugins or use auto mode

TV/Movies watchlist


Why Not Just Use a Browser?

Browser nyrx
10 tabs, each eating RAM One terminal window
Ads, popups, tracking Clean, no ads, no telemetry
Juggling multiple sites Four sources, one queue

Features

Queue

Source-agnostic queue with management features like batch deletion, and move-to-front reorder.

Playback queue modal

Downloads and Playback

Background downloads show speed and ETA with a live animation. Existing files are skipped automatically. Both download and playback widgets live in the sidebar: Soundcloud shows a braille waveform, Youtube displays progress and metadata, Radio shows the station name and live ICY titles, and TV displays episode details. Queue indicators sit below. When both downloads and playback are active, navigation keys let you move between widgets and cancel as needed.

Now-playing widget and download progress

Thumbnails and Info

Press z to view thumbnails, posters, and metadata. TV/Movies shows ratings, genres, and overview. Soundcloud shows track covers as such:

Thumbnail modal

Command Palette

Press Ctrl+p to open the command palette. Source-specific commands in a searchable list: configure Lua plugin source, toggle plugin auto-updates, set download directory, sync liked tracks, and more.

Help

Press ? at any time for context-sensitive keybindings. The help changes based on which screen you are on. Focus indicators are unambiguous and the keybind hints update as you navigate around.

Watch Tracking

Every playback session is logged locally (mpv handles that), what you watched, how long, and whether you finished. This data stays on your machine.

This tracking could potentially become a digital wellbeing feature, letting you generate a local report showing your weekly viewing and listening habits, from data already stored on your machine.


Tech Stack

  • Python 3.12+ with a mixin-based architecture
  • Textual for the terminal UI framework
  • mpv for media playback, controlled via Unix socket IPC
  • yt-dlp for Youtube and Soundcloud stream extraction
  • ffmpeg bundled via static-ffmpeg for downloads and muxing
  • Playwright with headless Chromium for TV/Movies server probing
  • Lua (via lupa) for the TV/Movies sandbox and mpv tracker script
  • SQLite for watch history, Soundcloud data, and TMDb cache
  • TMDb for movie and TV show metadata
  • radio-browser.info for the global radio station index
  • pyfiglet for the ASCII banner on the home screen

The app uses a custom dark color scheme with a lavender primary. The palette is designed for extended use in a terminal without eye strain.


Known Quirks

These are not bugs that block anything, just things worth knowing about.

Notification persistence. Sometimes a notification toast stays on screen past its timeout if the full screen has not refreshed. Workaround: open any modal or press Tab to force a screen refresh. Hopefully this will be fixed as Textual gets updated.

Navigation keys not responding. If none of the focus indicators are lit up and navigation keys stop responding (this can happen after canceling a now-playing or download widget), press Tab to refocus the active element.


Server Plugins (Optional)

TV/Movies works through server plugins: small Lua scripts that hunt down streaming sources. nyrx does not bundle these. They are third-party, community-maintained code that lives in a separate repo under its own MIT license, and you configure a manifest URL yourself.


License

nyrx is licensed under the GNU Affero General Public License v3.0.

This is free software, and you are welcome to modify and distribute it under the terms of the AGPLv3.


Privacy

nyrx does not require accounts and does not collect telemetry. nyrx itself runs no first-party server, but TV/Movies metadata is fetched through a third-party TMDb proxy, so your search and browsing queries are sent to that proxy rather than to nyrx. All your data, watch history, bookmarks, and search history stay on your machine. Network requests happen only when you search, play, stream content, or have caching jobs queued. TV/Movies server plugins are fetched only from a URL you explicitly configure. For full details, see the Privacy Policy.


nyrx does not host, upload, store, or distribute any media files or copyrighted content. It aggregates URLs to content already hosted on third-party public websites. TV/Movies server plugins must be configured manually by the user. You are solely responsible for complying with all applicable laws and terms of service. For full details, see the Legal Notice.

Metadata

Release files for nyrx 1.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nyrx 1.0.1
File Size Uploaded
nyrx-1.0.1.tar.gz 5.8 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for nyrx 1.0.1
File Interpreter ABI Platform
nyrx-1.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 11.6 MB

Release files / nyrx-1.0.1.tar.gz

Download URL nyrx-1.0.1.tar.gz
Size 5.8 MB
Tags Source
SHA-256 checksum
How to use checksums
19be76dfffdb3c775c07d7101dda401ed25029d115c63224ef8f3bab8970ffe2
BLAKE2b-256 checksum
How to use checksums
1575853e0163040fc951a7b9c9285ed0fa7669f62fef95bf1649f2875f2a12f7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.

Transparency log

Release files / nyrx-1.0.1-py3-none-any.whl

Download URL nyrx-1.0.1-py3-none-any.whl
Size 5.7 MB
Tags Python 3
SHA-256 checksum
How to use checksums
805809a42e45911de8f530f84ef0a89a183cac9288f059228487635df2a55bea
BLAKE2b-256 checksum
How to use checksums
c317149b81736503b55d40818dbb4aba73e53eae847dc0b6a145bb5f3243614b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.0.1 This release

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page