Package: ycast
YCastGet it via PyPIDownload from GitHubIssue trackerYCast 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 theCommunity Radio Browser index.YCast is for you if:You do not want to use a proprietary streaming serviceYou are sick of loading delays and/or downtimes of the vTuner serviceYou do not want to pay for a feature which was free beforeYou are unsure about the continuation of the vTuner serviceSupported devicesTheoretically, YCast should work formost 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 workingDenon AVR-X_000 series (AVR-X1000, AVR-2000, AVR-X3000, AVR-X4000)Denon AVR-1912Denon AVR-X2200WDenon CEOL piccolo N5Denon CEOL N9Denon DNP-720AEDenon DNP-730AEDenon DRA-100Marantz Melody Media M-CR610Marantz NR1506Marantz NR1605Marantz NA6005Marantz NA8005Onkyo TX-NR414Onkyo TX-NR5009Onkyo TX-NR616Yamaha R-N301Yamaha R-N500Yamaha RX-A810Yamaha RX-A820Yamaha RX-A830Yamaha CRX-N560/MCR-N560Yamaha 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-V3067Yamaha RX-V500DUnconfirmed/ExperimentalDenon 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-A1060Yamaha CX-A5000Yamaha RX-S600DYamaha RX-S601DYamaha RX-V2700Yamaha RX-V3800Yamaha 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-030Dependencies:Python version:3Python packages:requestsflaskPyYAMLPillowUsageYCast 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 entriesYou need to create a manual entry in your DNS server (read 'Router' for most home users). The*.vtuner.comdomain 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 optionallyradioyamaha2.vtuner.com)Onkyo AVRs:onkyo.vtuner.com(and optionallyonkyo2.vtuner.com)Denon/Marantz AVRs:denon.vtuner.com(and optionallydenon2.vtuner.com)Grundig radios:grundig.vtuner.com,grundig.radiosetup.com(and optionallygrundig2.vtuner.comandgrundig2.radiosetup.com)Running the serverWith built-in webserverYou 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 ycastWhile 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-land-prespectively) 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 onlocalhost.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/ycastAttention: Do not rewrite the requests transparently. YCast expects the complete URL (i.e. including/ycastor/setupapp). It also need an intactHostheader; so if you're proxying YCast you need to pass the original header on. For Nginx, this can be accomplished withproxy_set_header Host $host;.In case you are using (or plan on using) Nginx to proxy requests, have a look atthis example.
This can be used together withthis systemd service examplefor a fully functional deployment.With WSGIYou can also setup a proper WSGI server. See theofficial Flask documentation.Custom stationsIf you want to use the 'My Stations' feature, create astations.ymland run YCast with the-cswitch 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/URLYou can also have a look at the providedexampleto better understand the configuration.Firewall rulesYour AVR needs access to the internet.Your AVR needs to reach port80of the machine running YCast.If you want to use Radiobrowser stations, the machine running YCast needs internet access.CaveatsvTuner 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.