Auto-translates ASMR subtitles on Kikoeru-based sites. Supports any OpenAI API-compatible LLM, DeepL, LibreTranslate, and LunaTranslator.
ASMR Translator shows the subtitles of ASMR works in your language while they play. Each line is translated as it comes up, using the translation service you pick, and the translation replaces the original in the player's lyric bar.

http://localhost:8888 or http://127.0.0.1:8888, tested with the ValoHalo fork.Running Kikoeru on another address or port? Add it as a user match: in the Tampermonkey dashboard, open the script, go to its Settings tab, and under Includes/Excludes add a user match such as http://192.168.1.50:8888/*. Keep the original matches enabled. User matches survive script updates.
Until a translator is picked, the script leaves the subtitles alone.
This is the most flexible option, and it works with both online services and models on your own machine.
| Setting | What to enter |
|---|---|
| Chat Completions URL | The full chat completions address of the service, see below |
| Model | The model's name on that service |
| API Key / Auth Token | The service's key, or leave it empty for a local server without one |
| Source Language, Target Language | Names like Chinese and English. Auto leaves the source out of the prompt |
| System Prompt | The instruction sent with every line. {0} becomes the source language and {1} the target |
| Extra Parameters | A JSON object added to every request, see below. |
Common addresses:
| Service | Chat Completions URL |
|---|---|
| OpenRouter | https://openrouter.ai/api/v1/chat/completions (the default) |
| LM Studio | http://localhost:1234/v1/chat/completions |
| Ollama | http://localhost:11434/v1/chat/completions |
| llama.cpp server | http://localhost:8080/v1/chat/completions |
The default model, tencent/hy-mt2-30b-a3b on OpenRouter, is a dedicated translation model and is inexpensive. To use OpenRouter, create a key at openrouter.ai and paste it into API Key / Auth Token. Alternatively, you can use llamacpp to run the same model for free.
The Extra Parameters field takes whatever your server understands, under its own names. Servers don't always support the same parameters, so check your server's documentation. Some examples:
| Purpose | Server | Extra Parameters |
|---|---|---|
| Top-k and repetition penalty | llama.cpp, LM Studio | {"top_k": 20, "repeat_penalty": 1.05} |
| Top-k and repetition penalty | OpenRouter, vLLM | {"top_k": 20, "repetition_penalty": 1.05} |
| Turn off thinking, so lines arrive faster | OpenRouter | {"reasoning": {"effort": "none"}} |
| Turn off thinking | llama.cpp, Ollama | {"reasoning_effort": "none"} |
| Send nothing extra | Any | {} |
OpenAI's reasoning models, such as the o-series and GPT-5, only accept their default temperature and reject the request otherwise. Use {} with those.
Paste your DeepL API key into API Key. Pick a target language, and feel free to leave the source on AUTO unless detection guesses wrong.
Set API Endpoint to your instance's translate address. The default is http://localhost:5000/translate.
Set API Endpoint to the address of LunaTranslator's API server, by default http://localhost:2333/. With the server running, the LunaTranslator Model list fills in. Pick the model to use.
The first time the script contacts a server that isn't built in, Tampermonkey asks whether to allow it. The built-in servers are DeepL, OpenRouter, localhost and 127.0.0.1. Choose Always allow for that domain, or Always allow all domains if you switch servers often. That is also why the install page says the script can connect to any domain: the address is whatever you enter.
Subtitle lines are sent to the translation service you configured, and nowhere else. Settings, API keys, and the cache stay in your browser's userscript storage.
Open the browser console with F12. Every message from the script starts with [Translate].
[Translate] lines - The script isn't running on that page. Check the address against the supported sites, or add a user match.Bug reports and suggestions are welcome in the Feedback tab.