Skip to main content
Join the official 2019 Python Developers SurveyStart the survey!

Self hosted vTuner internet radio service emulation

Project description

YCast

PyPI latest version GitHub latest version Python version License GitHub issues

Get it via PyPI

Download from GitHub

Issue tracker

YCast is a self hosted replacement for the vTuner internet radio service which many AVRs use. It emulates a vTuner backend to provide your AVR with the necessary information to play self defined categorized internet radio stations and listen to Radio stations listed in the Community Radio Browser index.

YCast is for you if:

  • You do not want to use a proprietary streaming service
  • You are sick of loading delays and/or downtimes of the vTuner service
  • You do not want to pay for a feature which was free before
  • You are unsure about the continuation of the vTuner service

Supported devices

Theoretically, YCast should work for most AVRs which support vTuner. Most AVRs with network connectivity that were produced between 2011 and 2017 have vTuner support built-in.

Go ahead, test it with yours and kindly report the results back. Any reported device helps the community to see which AVRs work properly and which may have issues.

Confirmed working

  • Yamaha RX-Vx73 series (RX-V373, RX-V473, RX-V573, RX-V673, RX-V773)
  • Yamaha RX-Vx75 series (RX-V375, RX-V475, RX-V575, RX-V675, RX-V775)
  • Yamaha RX-Vx77 series (RX-V377, RX-V477, RX-V577, RX-V677, RX-V777)
  • Yamaha R-N500
  • Yamaha RX-A820
  • Yamaha RX-A830
  • Onkyo TX-NR414
  • Marantz Melody Media M-CR610

Unconfirmed/Experimental

  • Yamaha RX-Vx79 series (RX-V379, RX-V479, RX-V579, RX-V679, RX-V779)
  • Yamaha RX-Vx81 series (RX-V381, RX-V481, RX-V581, RX-V681, RX-V781)
  • Yamaha RX-S600D
  • Yamaha RX-S601D
  • Yamaha WX-030
  • Yamaha RX-A1060
  • Yamaha RX-V2700
  • Yamaha RX-V3800
  • Yamaha CX-A5000
  • Denon AVR-Xx000 series (AVR-X1000, AVR-2000, AVR-X3000, AVR-X4000)
  • Denon AVR-Xx100W series (AVR-X1100W, AVR-2100W, AVR-X3100W, AVR-X4100W)
  • Denon AVR-Xx300W series (AVR-X1300W, AVR-2300W, AVR-X3300W)

Dependencies:

Python version: 3

Python packages:

  • requests
  • flask
  • PyYAML
  • Pillow

Usage

YCast really does not need much computing power nor bandwidth, i.e. you can run it on a low-spec RISC machine like a Raspberry Pi.

DNS entries

You need to create a manual entry in your DNS server (read 'Router' for most home users). vtuner.com (more specifically *.vtuner.com) should point to the machine YCast is running on. Alternatively, in case you only want to forward specific vendors, the following entries may be configured:

  • Yamaha AVRs: radioyamaha.vtuner.com (and optionally radioyamaha2.vtuner.com)
  • Onkyo AVRs: onkyo.vtuner.com (and optionally onkyo2.vtuner.com)
  • Denon/Marantz AVRs: denon.vtuner.com (and optionally denon2.vtuner.com)

Running the server

With built-in webserver

You can run YCast by using the built-in development server of Flask (not recommended for production use, but should™ be enough for your private home use): python -m ycast

While you can simply run YCast with root permissions listening on all interfaces on port 80, this may not be desired for various reasons.

You can change the listen address and port (via -l and -p respectively) if you are already running a HTTP server on the target machine and/or want to proxy or restrict YCast access.

It is advised to use a proper webserver (e.g. Nginx) in front of YCast if you can. Then, you also don't need to run YCast as root and can proxy the requests to YCast running on a higher port (>1024) listening only on localhost.

You can redirect all traffic destined for the original request URL (e.g. radioyamaha.vtuner.com, onkyo.vtuner.com) or need to redirect the following URLs from your webserver to YCast:

  • /setupapp
  • /ycast

Attention: Do not rewrite the requests transparently. YCast expects the complete URL (i.e. including /ycast or /setupapp). It also need an intact Host header; so if you're proxying YCast you need to pass the original header on. For Nginx, this can be accomplished with proxy_set_header Host $host;.

In case you are using (or plan on using) Nginx to proxy requests, have a look at this example. This can be used together with this systemd service example for a fully functional deployment.

With WSGI

You can also setup a proper WSGI server. See the official Flask documentation.

Custom stations

If you want to use the 'My Stations' feature, create a stations.yml and run YCast with the -c switch to specify the path to it. The config follows a basic YAML structure (see below).

Category one name:
  First awesome station name: first.awesome/station/URL
  Second awesome station name: second.awesome/station/URL

Category two name:
  Third awesome station name: third.awesome/station/URL
  Fourth awesome station name: fourth.awesome/station/URL

You can also have a look at the provided example to better understand the configuration.

Firewall rules

  • Your AVR needs access to the internet.
  • Your AVR needs to reach port 80 of the machine running YCast.
  • If you want to use Radiobrowser stations, the machine running YCast needs internet access.

Caveats

  • vTuner compatible AVRs don't do HTTPS. As such, YCast blindly rewrites every HTTPS station URL to HTTP. Most station providers which utilize HTTPS for their stations also provide an HTTP stream. Thus, most HTTPS stations should work.
  • The built-in bookmark function does not work at the moment. You need to manually add your favourite stations for now.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for ycast, version 1.0.0
Filename, size File type Python version Upload date Hashes
Filename, size ycast-1.0.0-py3-none-any.whl (13.5 kB) File type Wheel Python version py3 Upload date Hashes View hashes
Filename, size ycast-1.0.0.tar.gz (14.0 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page