Metadata-Version: 2.4
Name: nichromecast
Version: 0.3.0
Summary: Open-source casting (Cast v2, DLNA, YouTube lounge) for the terminal
Author: nichromecast contributors
License: GPL-3.0-or-later
Project-URL: Homepage, https://github.com/evanwidloski/nichromecast
Project-URL: Source, https://github.com/evanwidloski/nichromecast
Project-URL: Issues, https://github.com/evanwidloski/nichromecast/issues
Keywords: chromecast,cast,dlna,upnp,youtube,tui,casting
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Console :: Curses
Classifier: Intended Audience :: End Users/Desktop
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Topic :: Multimedia :: Video
Classifier: Topic :: Utilities
Requires-Python: >=3.10
Description-Content-Type: text/markdown
Requires-Dist: rich>=13.0
Requires-Dist: zeroconf>=0.100
Provides-Extra: dev
Requires-Dist: pytest>=7.0; extra == "dev"
Requires-Dist: ruff>=0.4; extra == "dev"

# nichromecast (Linux TUI)

Cast media from the terminal to Chromecast, DLNA renderers, and smart TVs — without Google's
proprietary SDK.

`../BACKENDS.md` is the source of truth for how casting works; this package implements it.

## Install

```sh
pip install -e .          # from this directory
```

Requires Python 3.10+. Depends only on `rich` and `zeroconf`.

## Use

```sh
nichromecast                       # interactive TUI
nichromecast scan                  # list receivers and exit
nichromecast cast video.mp4        # cast a local file
nichromecast cast https://example.com/clip.mp4 --device "living room"
nichromecast cast 'https://www.youtube.com/watch?v=…'
```

Local files are served over HTTP from your machine, because receivers always pull and never
accept a push — so the process stays alive until you stop it.

### TUI keys

| Screen | Keys |
|---|---|
| Connect | `↑`/`↓` select, `enter` connect, `r` rescan, `s` settings, `q` quit |
| Player | `space` play/pause, `←`/`→` seek 10s, `+`/`-` volume, `l` load, `x` stop, `b` back |
| Settings | `↑`/`↓` move, `enter` toggle or edit, `b` back |

## Backends

| Backend | Discovery | Plays arbitrary URLs | Plays YouTube |
|---|---|---|---|
| Cast v2 | mDNS `_googlecast._tcp` | yes | via stream extraction (not yet implemented) |
| DLNA / UPnP | SSDP `AVTransport` | yes | no |
| YouTube lounge | DIAL over SSDP | no | yes, with ads |

The right backend is chosen from what the device advertises plus the kind of thing you asked
to play. Casting YouTube via the lounge backend drives the TV's own YouTube app, so its ads
are unavoidable.

## Known gaps

- Automatic fallback is not yet gated on the playback-confirmation latch in `BACKENDS.md`.
- The lounge backend reports the video ID as the title; fetching real titles would need
  another YouTube request.
- No AirPlay support, so most Apple TVs and some recent LG/Samsung sets are out of reach.
