• Stars
    star
    245
  • Rank 165,304 (Top 4 %)
  • Language
    Python
  • License
    Other
  • Created over 6 years ago
  • Updated 10 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Self hosted vTuner internet radio service emulation

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

  • Denon AVR-X_000 series (AVR-X1000, AVR-2000, AVR-X3000, AVR-X4000)
  • Denon AVR-1912
  • Denon AVR-X2200W
  • Denon CEOL piccolo N5
  • Denon CEOL N9
  • Denon DNP-720AE
  • Denon DNP-730AE
  • Denon DRA-100
  • Marantz Melody Media M-CR610
  • Marantz NR1506
  • Marantz NR1605
  • Marantz NA6005
  • Marantz NA8005
  • Marantz SR5009
  • Onkyo TX-NR414
  • Onkyo TX-NR5009
  • Onkyo TX-NR616
  • Yamaha R-N301
  • Yamaha R-N500
  • Yamaha RX-A810
  • Yamaha RX-A820
  • Yamaha RX-A830
  • Yamaha CRX-N560/MCR-N560
  • Yamaha RX-V_71 series with network connectivity (RX-V671, RX-V771)
  • Yamaha RX-V_73 series with network connectivity (RX-V473, RX-V573, RX-V673, RX-V773)
  • Yamaha RX-V_75 series (RX-V375, RX-V475, RX-V575, RX-V675, RX-V775)
  • Yamaha RX-V_77 series (RX-V377, RX-V477, RX-V577, RX-V677, RX-V777)
  • Yamaha RX-V3067
  • Yamaha RX-V500D

Unconfirmed/Experimental

  • Denon AVR-X_100W series (AVR-X1100W, AVR-2100W, AVR-X3100W, AVR-X4100W)
  • Denon AVR-X_300W series (AVR-X1300W, AVR-2300W, AVR-X3300W)
  • Yamaha RX-A1060
  • Yamaha CX-A5000
  • Yamaha RX-S600D
  • Yamaha RX-S601D
  • Yamaha RX-V2700
  • Yamaha RX-V3800
  • Yamaha RX-V_79 series (RX-V379, RX-V479, RX-V579, RX-V679, RX-V779)
  • Yamaha RX-V_81 series (RX-V381, RX-V481, RX-V581, RX-V681, RX-V781)
  • Yamaha WX-030

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 or a home router.

DNS entries

You need to create a manual entry in your DNS server (read 'Router' for most home users). The *.vtuner.com domain should point to the machine YCast is running on. Specifically the following entries may be configured instead of a wildcard entry:

  • 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)
  • Grundig radios: grundig.vtuner.com, grundig.radiosetup.com (and optionally grundig2.vtuner.com and grundig2.radiosetup.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.

More Repositories

1

rpi-rf

Sending and receiving 433MHz signals with cheap GPIO RF modules on a Raspberry Pi
Python
502
star
2

XMousePasteBlock

Userspace tool to disable middle mouse button paste in Xorg
C
392
star
3

libstrangle

Frame rate limiter for Linux/OpenGL
C
92
star
4

steamlink_VirtualHereFreeInstaller

Custom native Steam Link application to install the free edition of VirtualHere
C
53
star
5

kodi-headless

A headless, dockerized Kodi instance for a shared MySQL database
Shell
48
star
6

graph89

A fork of Graph89 with UI and UX tweaks and fixes for modern Android versions. Graph89 is an emulator targeting the Android platform for TI89, TI89T, TI92, TI92+, V200, TI84+, TI84+SE, TI83, TI83+ and TI83+SE calculators.
C
37
star
7

kodi_addon_blackbarsremover

Kodi addon to automatically fit the video to screen, removing all black bars
Python
11
star
8

ouya_bootmenu

bootmenu for ouya. utilises kexec to boot images from system and datamedia.
C
10
star
9

android_device_lge_p940

LG P940/Prada 3.0 device tree
C
9
star
10

openwrt_knockd

up-to-date knockd for OpenWrt/LEDE
Makefile
8
star
11

android_kernel_lge_p940

LG P940/Prada 3.0 kernel repository
C
4
star
12

openwrt_wireguard-watchdog

Shell
4
star
13

openOBD

C++
3
star
14

scantool.net

C
2
star
15

android_packages_providers_ApplicationsProvider

Java
2
star
16

firefox_proton_inhibitor

Make Firefox usable again
JavaScript
2
star
17

arma3_timemarkers

Arma 3 mod/script for appending timstamps to user placed map markers
SQF
2
star
18

cm4mm-updater-manifest

CM4MM Updater update-site
1
star
19

android_vendor_lge_p940

LG P940/Prada 3.0 vendor blobs
Perl
1
star
20

compat-drivers-3.9-rc4-2

C
1
star
21

osmonitor-ng

A fork of the excellent OSMonitor by eolwral
Java
1
star
22

android_vendor_boxer8_ouya

Ouya vendor repo
Shell
1
star
23

oculus_nano_runtime

Oculus Runtime w/o bloat
NSIS
1
star
24

android_vendor_samsung_maguro

1
star
25

android_toolchains

external android toolchains
C
1
star
26

android_kernel_htc_kovsky

Sony Ericsson Xperia X1 kernel repository
C
1
star
27

kodi_repository_milaq

milaq's Kodi repository for addons
Shell
1
star
28

android_external_wpa_supplicant_6_compat

C
1
star
29

CSipSimple

CSipSimple is an open-source native SIP client for Android
Java
1
star
30

android_packages_providers_UserDictionaryProvider

Java
1
star
31

cm4mm-updater

CM4MM Updater core project
Java
1
star
32

mcabber_loudmouth

loudmouth for mcabber with support for building under cygwin
C
1
star
33

culfw

Firmware for the CUL family of devices
C
1
star
34

openwrt

custom openWrt builds
C
1
star
35

maverick_et-733_rf

Forked from https://www.grillsportverein.de/forum/threads/wlan-maverick-bbq-thermometer-raspberry-pi-edition.232283/
C
1
star