Custom Web Connector on Synology NAS

ESP32-Based Controller for Up2Stream Devices - “Jukebox Jamz”

Hey everyone! I wanted to share a DIY project I’ve been working on that some of you might find interesting - an ESP32-based web interface for controlling Up2Stream devices.

Why Build This?

I have multiple Up2Stream boards installed in vintage equipment around my house, and while the 4STREAM app works great, I wanted something I could access from any browser without needing to install an app. I also wanted a dedicated wall-mounted tablet interface for quick control - no login, no password, just open and play.

What It Does

I built a standalone ESP32 controller that serves its own web interface. You access it at http://jukebox.local from any device on your network - phone, tablet, laptop, whatever. No app installation needed, and no password required to access any functions.

Features:

  • Auto-discovery - Finds all Up2Stream devices on your network via mDNS and IP scanning
  • Multi-device support - Switch between devices with one tap
  • 10 Presets with “Learn Mode” - Play a station, tap Learn, tap a preset button - it captures the station name automatically
  • Full playback control - Play/pause, skip, volume, mute
  • Source switching - WiFi, Bluetooth, AUX, Optical, USB, DAC, Coax
  • Internet radio search - Search by country and genre, play directly
  • Multiroom grouping - Create and manage synchronized playback groups just like the 4STREAM mobile app! Select a master device, tap to add slaves, adjust individual volumes, remove devices or ungroup - all from the browser
  • Customizable backgrounds - Just for fun, pulls random themed images

How It Compares to the Built-in Arylic Web Interface

For those who don’t know, each Up2Stream device has a built-in web interface at its IP address (e.g., http://192.168.1.10). Here’s how my ESP32 controller compares:

Feature Arylic Built-in ESP32 Jukebox Jamz
Access method Device IP only mDNS hostname (jukebox.local)
Authentication PW required None - instant access
Multi-device One device per page All devices in one interface
Device discovery Manual IP entry Automatic network scan
Preset names Can’t customize Custom names + auto-learn
Radio search Limited Full search
Multiroom Not available Full group management (like 4STREAM app!)
Mobile-friendly Basic Fully responsive
Customization None Themes, backgrounds
Always available Only when device on Dedicated controller

Where the built-in interface wins:

  • Direct connection (no middleman)
  • No additional hardware needed
  • Shows more technical details (firmware, network config) -FIXED
  • EQ and advanced audio settings - FIXED

Where my ESP32 wins:

  • Single interface for ALL your Up2Stream devices
  • Much faster device switching
  • No password or login required - just open and control
  • Multiroom control from any browser (the killer feature for me - same convenience as 4STREAM app but on any device!)
  • Preset learning captures station names
  • Works great on wall-mounted tablets
  • mDNS means you never need to remember IP addresses

The Hardware

Super simple - just an ESP32 dev board. I’m using an ESP32-S3 but any WiFi capable ESP32 works. Total cost maybe $8-10. Power it via USB.

For my setup, I have it running 24/7 on ESP32 board mounted beneath my desk and a wall-mounted tablet in my living room. The tablet just has a browser bookmark to http://jukebox.local.

Technical Notes

The ESP32 talks to your Up2Stream devices using the same HTTP API that the 4STREAM app uses. It’s basically a proxy/aggregator that makes controlling multiple devices much more convenient.

The multiroom feature was the main reason I built this. I wanted the same “tap to group devices” experience from the 4STREAM app, but accessible from a wall tablet or laptop. It uses the documented API commands:

  • ConnectMasterAp:JoinGroupMaster for grouping devices
  • multiroom:getSlaveList for getting group status
  • multiroom:SlaveVolume for individual slave volume control
  • multiroom:SlaveKickout for removing devices
  • multiroom:Ungroup for dissolving the group

Works exactly like the mobile app - pick a master, add slaves, they all play in sync.

Would Anyone Want the Code?

If there’s interest, I’m happy to share the Arduino sketch. It’s a single .ino file, about 1200 lines including the embedded HTML/CSS/JavaScript.

Fair warning - it’s definitely a hobbyist project, not polished commercial software. But it works great for my needs and might give others a starting point for their own customizations.

Let me know if you have questions! Always happy to chat about Up2Stream projects.

3 Likes

great work and looks very clean and tidy, thanks for sharing.

And btw if you have time, could check out the UPNP methods. And could fetch the more accurate media information including the coverart URL if exist, and also could work with the playlists. It would look more pretty with the coverart picture.

That works! Thanks. I’ll integrate this code into my Home Assistant! UPDATE: I just successfully ported this as a software package into my Synology NAS, so I no longer need the separate ESP running.


2 Likes

Now I am interested! Thinking of putting it on GitHub or keeping code private?

A docker image would be great.

2 Likes

Strong work and I’d be very interested in the source.

1 Like

I would also be interested in the source and in contributing to the project if you open source it!

2 Likes

@ktademy : What a great work! Do you have any updates for this project, especially regarding the arduino sketch?

It seems that the 4Stream App does not work anymore, so an alternative would be great!

Thanks,
Stefan

2 Likes

Would love the source code if you are still sharing

1 Like

Also interrested in the nas setup.

1 Like

:rocket: Jukebox Jamz v3.6.0 “Resonance” is here! :notes:

After another round of late nights, I’ve released the next major milestone for Jukebox Jamz—a self-hosted Universal LinkPlay Audio Controller for Synology NAS designed for Arylic, WiiM, Up2Stream, Dayton Audio, AudioCast, and other LinkPlay-compatible devices.

What started as a simple controller has evolved into a whole-home audio management platform. I use it every day from a wall-mounted Home Assistant touchscreen, but it also works great from any phone, tablet, or computer through a modern Progressive Web App.

:sparkles: Highlights in the “Resonance” release:

:house: Room-Based Audio Management

  • Create rooms (Living Room, Office, Patio, etc.)
  • Assign one or more devices to each room
  • Control an entire room or an individual device
  • Simple multiroom grouping

:dart: New Provider-Based Architecture

  • Jukebox Jamz now separates Rooms, Devices, Sources, Queues, Playback Sessions, and Favorites into independent components.
  • This architecture makes adding new streaming services and future features much easier while keeping the interface consistent.

:musical_note: New Browse Hub

  • A dedicated Browse page now serves as the central launcher for music providers.
  • Browse Internet Radio, TuneIn, Radio Paradise, Open Network Streams, Spotify, Amazon Music, Pandora, TIDAL, Qobuz, Napster, QQMusic, BBC Radio, iHeartRadio, and more from one place.
  • Provider support continues to expand as APIs become available.

:musical_score: Playback Session Engine

  • Jukebox Jamz now keeps track of what it started playing instead of relying solely on LinkPlay metadata.
  • The Home page always reflects the correct stream, station, or library track.
  • Provides a solid foundation for playlists, automation, and future integrations.

:house: Enhanced Home Dashboard

  • Instantly see the room or device you’re controlling
  • Current source, track, volume, and playback status
  • Easy switching between rooms and devices

:level_slider: Enhanced Audio Controls

  • Per-device EQ
  • Hardware presets
  • Persistent Favorite Streams
  • Scenes
  • Sleep timers
  • Alarms
  • Device source selection (NET, Bluetooth, Line In, USB DAC)

:musical_score: Your Music, Your Way

  • Browse and stream your local music library
  • Save favorite streams that belong to Jukebox Jamz, not individual devices
  • Favorite Streams remain available even if devices are replaced or rediscovered
  • Listening history
  • Improved interface and usability refinements

:floppy_disk: Configuration Backup & Restore

  • Export and import your Favorite Streams, Rooms, Room Assignments, and application settings.
  • No more rebuilding your custom configuration after package upgrades or moving to a new server.

Everything runs locally, providing a fast, responsive web interface with no cloud dependency for everyday playback. Whether you’re controlling one speaker or an entire home filled with LinkPlay devices, Jukebox Jamz provides a single, unified experience.

Resonance represents an important milestone in the project’s evolution. With the new provider architecture and Playback Session Engine in place, Jukebox Jamz is now positioned to support additional music services, richer automation, playlists, and deeper smart home integration in future releases.

I’m excited about where this project is headed next. If you’re using Arylic, WiiM, or any other LinkPlay-based hardware, I’d love to hear your ideas and feedback!

The next major update will include new features for Synology NAS. I’m exploring porting this package to other NAS devices like QNAP & others. I’m also looking into adding additional music streaming services such as SoundCloud, DI.FM, SomaFM, Jazzradio.com, Classicradio.com, Radio Swiss Jazz/Classic/Pop, NTS Radio & FIP after evaluating: catalog quality, long-term stability, API or stream availability, licensing constraints.

**#**JukeboxJamz #RebornEchoes #LinkPlay #Arylic #WiiM #Up2Stream #AudioCast #DaytonAudio #WholeHomeAudio #SelfHosted #HomeAssistant #MusicServer #ProgressiveWebApp #HomeLab #DIYAudio

jukebox-jamz-3.6.0-resonance.spk