A lightweight Fastify-based proxy for TIDAL audio segments.
TIDAL sometimes return audio segments from different CDN hosts. In particular, some sp-ad-fa.audio.tidal.com segments may return 403 Forbidden when requested directly from a browser, while the same signed segment URL can be successfully retrieved from a server.
This project provides a small server-side proxy that forwards TIDAL audio segment requests to the allowed TIDAL CDN and streams the response back to the client.
It is designed primarily as a fallback proxy for TIDAL-DL.
- ⚡ Fastify + Node.js
- 🎵 Streams TIDAL audio segments without buffering the entire file
- 🔒 Restricts upstream requests to allowed TIDAL CDN hosts
- 📡 Supports HTTP
Rangerequests - 🌐 CORS support for TIDAL-DL
- 🚀 Works locally or on cloud platforms
- ☁️ Easy deployment on Render
- 🪶 Lightweight and suitable for small personal deployments
- Node.js 20+
- npm
- Git
Node.js 24 is currently used successfully with this project.
Clone the repository:
git clone https://github.com/ODSkyler/tidal-proxy.git
cd tidal-proxyInstall dependencies:
npm installStart the local server:
npm run devThe server will listen on:
http://localhost:3000
Check the health endpoint:
http://localhost:3000/health
Expected response:
{
"status": "ok",
"service": "tidal-proxy"
}The proxy endpoint is:
/proxy/segment?url=
For a local installation, configure TIDAL-DL's custom proxy as:
http://localhost:3000/proxy/segment?url=
The complete TIDAL segment URL is appended after the url= parameter.
For example:
http://localhost:3000/proxy/segment?url=https%3A%2F%2Fsp-ad-fa.audio.tidal.com%2F...
The easiest way to deploy your own TIDAL Proxy is with Render.
Click the Deploy button above and follow the setup wizard. The repository includes a render.yaml Blueprint that automatically configures the build command, start command, and health check.
Click:
Deploy to Render
Render will detect the included render.yaml and configure the service automatically.
You will need to:
- Sign in to your Render account.
- Select the workspace where you want to deploy the service.
- Review the generated service configuration.
- Choose an instance type.
- Click Apply to deploy.
For personal use and testing, the Free instance is sufficient.
Alternatively, you can deploy the service manually.
Open the Render Dashboard and select:
New → Web Service
The proxy can run on Render's Free Web Service for personal/testing use.
Keep in mind that Render Free web services can spin down after periods of inactivity, so the first request after inactivity may take longer while the service starts again.
A proxy also consumes bandwidth because audio data travels through the proxy server.
For larger public usage, consider using an appropriate paid server or another hosting provider.
Checks whether the proxy is running.
Example:
GET /health
Response:
{
"status": "ok",
"service": "tidal-proxy"
}Proxies an allowed TIDAL audio segment.
Example:
GET /proxy/segment?url=<encoded-tidal-url>
The url parameter must contain a valid URL from an allowed TIDAL audio CDN.
The proxy forwards the following request information when applicable:
RangeUser-AgentAccept
Relevant upstream response headers are also forwarded, including:
Content-TypeContent-LengthContent-RangeAccept-RangesETagLast-ModifiedCache-Control
Successful audio responses are streamed directly instead of being fully buffered in memory.
This project intentionally does not operate as an unrestricted URL proxy.
The server validates the hostname of the requested upstream URL against an allowlist:
const ALLOWED_AUDIO_HOSTS = new Set([
"sp-ad-fa.audio.tidal.com",
]);This prevents the endpoint from being used to request arbitrary internet resources.
If you intentionally want to support another TIDAL audio CDN, add its exact hostname to the allowlist:
const ALLOWED_AUDIO_HOSTS = new Set([
"sp-ad-fa.audio.tidal.com",
"sp-ad-cf.audio.tidal.com",
]);Only add hosts that you have verified are legitimate TIDAL audio endpoints.
You can deploy your own instance on:
- Render
- VPS
- Dedicated server
- Home server
- Raspberry Pi
- Other Node.js-compatible hosting providers
This project is an independent server-side proxy and is not affiliated with or endorsed by TIDAL.
Users are responsible for complying with TIDAL's terms, applicable laws, and any other restrictions that apply to their use of the service.
The proxy does not bypass TIDAL authentication or generate TIDAL credentials. It forwards URLs that have already been provided by the client.
This project is licensed under MIT License.
Made with ❤️ by OD Skyler