Bring practical internet radio and local playback back to first-generation T+A Caruso systems
T+A no longer offers a practical native internet-radio path for older Caruso devices. This project exists to bring that workflow back in a way that still feels usable today: local, self-hosted, and focused on the Caruso as it actually behaves on a home network.
Caruso Reborn turns your computer into a local terminal app, UPnP/DLNA media source, and station management dashboard so older Caruso units can browse saved stations, TuneIn categories, and local music again.
This is an independent community project and is not affiliated with T+A.
- Showcase
- Highlights
- Why This Exists
- Scope
- Current Workflow
- Tech Stack
- Requirements
- Current Status
- Mac App (Beta)
- Quick Start
- Configuration
- How It Works
- Usage
- Security and Network Notes
- Development
- Roadmap Notes
- License
| Feature | |
|---|---|
| Internet radio | TuneIn search plus Radio Browser fallback for alternate streams |
| Caruso browsing | Saved stations appear inside the Caruso UPnP tree under TuneIn > Sender |
| Browse mode | TuneIn root categories are exposed again through the bridge |
| Local music | User-selected folders are scanned and exposed as browsable local tracks |
| Dashboard | Web UI for device discovery, status, favorites, folders, and stream actions |
| Terminal control room | Keyboard-driven TUI with live bridge status, discovery, and quick actions |
| Network resilience | Rebinds when your computer switches between LAN and Wi-Fi |
Older first-generation Caruso systems can still browse UPnP/DLNA media servers on the local network, even when their original internet-radio integration is no longer useful.
The bridge uses that still-working local path instead of trying to revive the discontinued native service flow. In practice that means:
- search stations from your computer
- save working streams locally
- browse them again from the Caruso
- optionally expose local music folders from the same machine
The goal is not to re-create the original T+A backend. The goal is to restore a usable everyday listening workflow.
- macOS-first
- local-network only
- single-user / trusted-home setup
- built specifically around T+A Caruso behavior
- not a hosted service
- not an official T+A product
This repo is currently a source-first project. A packaged macOS app is now available as a Beta release and should still be treated as early-access software.
- Use
npm run onboardfor the guided first-run setup. - Use
npm run devfor the direct terminal control room. - Use the packaged macOS Beta if you want the installed app path instead of running from source.
- Keep the bridge on a trusted local network so the Caruso can reach it reliably.
| Layer | Technologies |
|---|---|
| App runtime | Node.js, TypeScript |
| Server | Fastify |
| Primary shell | Terminal UI |
| UI | Vanilla HTML, CSS, JavaScript |
| Network / device control | UPnP, DLNA, SSDP, SOAP |
| Persistence | Local JSON settings in .caruso-data or app data |
- macOS or Windows
- Node.js
20+ - npm
- a first-generation T+A Caruso on the same local network
Recommended:
- a stable LAN or Wi-Fi connection shared by your computer and Caruso
- a music folder if you want local file playback
Implemented and usable now:
- TuneIn search
- Radio Browser fallback search
- saved station list exposed to the Caruso
- TuneIn browse categories via UPnP
- local music folders
- renderer discovery and basic playback actions
- dashboard plus terminal control room
Still rough or incomplete:
- the packaged macOS app is available only as a Beta
- Deezer integration is still experimental/incomplete
- public-facing docs and screenshots are still being improved
There is now a packaged macOS app (Beta) for easier local setup on Mac.
- install it from the latest GitHub release DMG
- treat the app as Beta and expect rough edges
- the packaged app contains the shipped code and assets only; your local
.env,.caruso-data, and other personal runtime files are created on your machine at first launch and are not bundled into the DMG
If you want the most stable path, run the project from source. If you want the fastest Mac setup, use the DMG Beta.
git clone https://github.com/jx-grxf/Caruso-Reborn.git
cd Caruso-Reborn
npm install
npm run onboardThis opens the guided setup wizard immediately:
- first screen: choose
DeutschorEnglish - then the wizard searches for your Caruso
- after setup you can open the dashboard or continue into the TUI
npm run devThis opens the control-room TUI directly:
dsearches for Caruso / UPnP devicesbopens the browser dashboardsstarts or stops the bridgeqquits cleanly
git clone https://github.com/jx-grxf/Caruso-Reborn.git
cd Caruso-Reborn
npm install
npm run quickstartThe default quickstart now goes through onboarding:
npm run quickstartnpm run onboard
npm run startDev mode still auto-selects the next free port if your preferred port is busy.
The bridge usually detects a working local network address automatically. You can still override it when needed.
Example .env:
PORT=3847
HOST=0.0.0.0
PUBLIC_BASE_URL=http://192.168.x.y:3847
CARUSO_FRIENDLY_NAME=Caruso on your computer
DEEZER_ARL=
DATA_DIR=/custom/path/for/app-dataPUBLIC_BASE_URLmust be reachable by the Caruso on your LAN- the browser dashboard itself is loaded locally via
127.0.0.1 - switching from LAN to Wi-Fi is supported, but the device may need a short rediscovery window
- this repo is not published as an npm package;
"private": trueinpackage.jsonis intentional to prevent accidental publish
The bridge announces itself as a UPnP/DLNA media server on your local network.
On the Caruso, you browse the bridge as a network media source and access:
TuneInTuneIn > SenderTuneIn > BrowseLocal Music
When you save a station from the dashboard, the bridge resolves the actual playable stream URL and stores it locally so the Caruso can browse and play it later through the UPnP tree.
- Start the app.
- If you use
npm run onboard, pick your language first and then chooseMacorWindowsso the setup can apply platform-specific defaults. - Open the dashboard.
- Let the bridge discover your Caruso renderer.
- Search for stations with TuneIn or Radio Browser.
- Add working stations to the saved list.
- On the Caruso, open the UPnP/DLNA media source and browse the bridge.
- Use
TuneIn > Senderfor saved stations orTuneIn > Browsefor category browsing. - Add local music folders if you also want file-based playback.
This project is designed for trusted local home-network use, not for internet exposure.
- do not expose the app directly to the public internet
- keep it behind your local network
- treat
DEEZER_ARLand any future auth tokens as sensitive - review
.envbefore publishing screenshots or logs
The repo ignores common local data and secrets such as:
.env.caruso-datadist.playwright-cli
Useful commands:
npm run check
npm run build
npm run dev
npm run desktopThe repository uses:
- Conventional Commits
- branch-per-topic workflow
- PR-based changes into
main
If you want to contribute, see CONTRIBUTING.md.
- package desktop releases for easier non-dev installation
- improve public-facing screenshots and first-run docs
- finish or remove experimental Deezer work
- extend stream validation and metadata quality indicators
MIT
Copyright (c) Johannes Grof
