-
Notifications
You must be signed in to change notification settings - Fork 7
DLX Provider
Translatify can translate lyrics with a DLX-compatible endpoint (formerly known as DeepLX) instead of Google Translate. DLX is an open-source, self-hostable translation server that talks to DeepL's translation service without an API key.
The DLX provider was added in Translatify 0.0.0.20, alongside fixes for popup settings and a rework of the provider architecture — see the Changelog for details.
This feature is experimental. DLX endpoints can be public, self-hosted, or run by anyone — you are responsible for the server you point Translatify at. If anything looks off, switch the provider back to Google Translate.
- No API key required — DLX is a self-hostable server that proxies DeepL, so you don't need a DeepL developer account or an API token.
- Better translations than Google Translate — DeepL's engine handles lyrics context, idioms, and tone more naturally.
- Batch by default — Translatify sends the whole lyric sheet as one request per song (DLX preserves newlines), which keeps translations consistent and faster than translating line by line. Google Translate is limited to per-line requests, which is why it can miss meaning that only makes sense across the whole song.
- Privacy — you choose the endpoint. Self-hosted means lyrics go to your server and nowhere else.
The trade-off: a slow or unreachable endpoint makes translation slower, and a public endpoint you don't control is a privacy consideration — see Choosing an endpoint.
You need a DLX-compatible server first. The easiest way to try it is a public DLX instance (no setup) or your own self-hosted instance (privacy) — see Self-hosting.
Open the extension popup and set:
| Field | Value |
|---|---|
| Translation Provider | DLX |
| API Endpoint URL | https://your-dlx-instance.example.com/translate |
| Translation Mode | Batch (default) |
Then click Test Connection. Approve the permission prompt when your browser asks for access to the endpoint. A success message means you're ready.
Open a song's lyrics in the Spotify web player and press the translate button. With Batch mode, the whole lyric sheet is translated in one request — usually faster and more consistent than per-line.
The endpoint is the URL Translatify sends requests to (e.g.
https://your-dlx-instance.example.com/translate). You can use:
- Your own self-hosted instance — full privacy, recommended.
- A public DLX instance — zero setup, but the server operator sees the lyrics you translate and can rate-limit or go down. Only use instances you trust.
There is no default endpoint bundled in Translatify — which server receives your lyrics is always an explicit choice you make. This is intentional.
When you choose DLX as the provider, these controls appear:
-
API Endpoint URL — the full URL of a DLX-compatible server
(e.g.
https://your-dlx-instance.example.com/translate). No/translateis appended automatically — enter the full path. -
Translation Mode
- Batch (default) — the whole lyric sheet is sent as one request per song. Consistent results, fewer requests, faster for most songs. Line count mismatches show an error marker instead of misaligning.
- Per line — one request per lyric line. Useful for very long songs or if your endpoint struggles with multi-line requests, but results can be less consistent and it generates more requests.
- Test Connection — sends a tiny request to verify the endpoint works.
- Clear current song cache / Clear all cache — force a fresh translation if you changed endpoints or want to retry.
DLX (formerly DeepLX, renamed in July 2026) is an open-source project by OwO-Network, MIT-licensed. The translation quality comes from DeepL, and the server does not need a DeepL API key.
docker run -d -p 1188:1188 ghcr.io/owo-network/dlx:latestOr with Docker Compose, using the repo's compose.yaml:
git clone https://github.com/OwO-Network/DLX
cd DLX
docker compose up -dThe server exposes a simple HTTP API on port 1188.
Download the binary for your platform from the Releases page and run it:
./dlxThere's also install.sh/uninstall.sh, a systemd unit (dlx.service) and a macOS
plist for running it as a service.
Once running, the endpoint URL for Translatify is:
http://localhost:1188/translate
Test it from the terminal:
curl -X POST http://localhost:1188/translate \
-H "Content-Type: application/json" \
-d '{"text": "Hello", "source_lang": "", "target_lang": "ID"}'Expected response: {"code": 200, "data": "Halo"}.
Firefox / Chrome note: Translatify can request access to
http://localhostendpoints (HTTP host permissions were added for localhost in 0.0.0.20). You may need to allow mixed content in Firefox forhttp://localhost— if the test connection fails and you're sure the server is running, check your browser's localhost HTTP policy.
Prefer to try the DLX provider without running your own server? These are public instances, maintained by the community and the Translatify DLX provider author, Fahry-a:
| Endpoint | Hosted by | Notes |
|---|---|---|
https://sta.oryn.my.id/deepl |
STA — Fahry-a | Serverless Translation API on Cloudflare Workers. Free, no API key. |
STA is a serverless translation service (MIT) — a production fork of xixu-me/DeepLX
that proxies DeepL and Google through Cloudflare's edge network, with intelligent
endpoint rotation and rate limiting to avoid HTTP 429 errors.
Use it as the API Endpoint URL, then Test Connection. Public instances can be slow, rate-limited, or temporarily down — and the operator sees the lyrics you translate. Don't use a public endpoint for anything sensitive.
- In Batch mode, Translatify collects all visible lyric lines and sends them in one request to your endpoint, with newlines preserved. The server returns the translated text, which Translatify splits back per line.
- In Per line mode, each line is translated individually (like Google Translate).
- If a batch request fails or returns the wrong number of lines, Translatify shows an error marker on the translate button and stops — it doesn't fall back to per-line requests that could produce inconsistent translations.
- Lines that can't be translated (e.g.
♪, punctuation-only) are skipped and left as they are. - When Spotify re-renders lyric lines (e.g. for the highlighted/current line), Translatify re-applies the cached translation instead of re-translating, so the lyrics stay consistent.
- The endpoint URL, mode, and settings are stored locally in your browser
(
chrome.storage.local) — never sent to Translatify's developers.
Connection failed / test fails
Check that the server is running and reachable. For a self-hosted instance, confirm
the port is open: curl http://localhost:1188/translate. For a public instance, it
may be down or rate-limiting.
"access to the endpoint was not granted" The browser permission prompt was dismissed. Click Test Connection again and approve it.
"Endpoint returned … instead of JSON" / parse errors
Make sure the URL is the full endpoint path (including /translate). Unlike the
Custom AI provider, Translatify does not append a path for DLX.
Translations missing or inconsistent In Batch mode, some lines may not match if the server returns a different number of lines. Try Per line mode, clear the song cache, and retry.
Too slow Batch mode should already be fast for most songs; if the endpoint itself is slow, there's little to do other than switching endpoints. For very long songs, per-line mode can feel more responsive even if it does more requests.
Rate limited (429) / server busy Public instances get busy. Wait a moment, or switch to your own self-hosted instance.
- The endpoint URL and mode are stored locally in your browser
(
chrome.storage.local) — never sent to Translatify's developers. - Translation requests go directly from your browser to the endpoint you configured.
- Translatify only requests access to the specific endpoint you enter, and only after you approve the browser's permission prompt.
- With a public endpoint, the server operator can see the lyrics you translate. Use a self-hosted instance if that matters to you.