Ultra Tools Translator
The translator node that doesn't ask you for an API key
- translated_text
What it's for
If your native language isn't English, every prompt you write involves a small translation step you do in a browser tab. That's fine once and miserable on the twentieth iteration, and it gets worse if you want the translation inside the graph - for a batch, or for a pipeline where a caption gets rewritten between nodes.
Ultra Tools Translator does it in-workflow. The name is honest: it calls no local model, loads no weights, and the default target is Korean. There's no API key required - it uses the public Google translation endpoint, with MyMemory as a second free fallback. It also auto-detects the source language, so you can paste Korean, Japanese or English in and not think about direction.
The realistic use is prompt plumbing. You write in the language you think in, translate to English for a tag model, and see the result in the translated_text output before it hits the encoder - which is a useful half-second of quality control that a browser tab never gave you.
How the free path works, and when it stops
Default service is google, which hits translate.googleapis.com/translate_a/single - the same unofficial endpoint every free translation script uses. It works, it's fast, and it has no contract with you. When you push a batch through it, it will eventually answer HTTP 429.
The node handles that better than most scripts do. Each provider gets a cooldown window after a 429 (30 seconds for the free Google endpoint, 20 for MyMemory), and rather than hanging, it warns and routes the request to the next provider in the chain: Google Cloud (if configured) → free Google → MyMemory. Transient failures, timeouts and HTML error pages returned with a 200 status are all detected and treated as failures rather than being passed through as your prompt. There's also an in-memory cache of recent translations, so a prompt node re-running with identical text doesn't retranslate anything.
If you want the reliable path, the node supports a Google Cloud Translation API key. Open the pack's settings dialog and paste it. Two things are worth knowing about where it goes: it's stored in ComfyUI's own user config directory in a file shared with the author's separate Ultra MiniMax H3 Prompt pack (enter it once, both use it), and it is not written into the workflow file. So sharing a workflow doesn't leak your key, and loading someone else's workflow doesn't overwrite it. That is the correct design and it's rarer than it should be.
Inputs and outputs
text - required, multiline. Wire a text node in, or type here.
target_language - default korean, 20 options across the usual suspects.
source_language - auto plus the same 20 languages. Leave it auto unless detection is failing on short strings, which it does - a three-word prompt in Korean can be detected as Chinese.
translator_service - google or mymemory. MyMemory is the more conservative choice and has a lower free quota; Google is faster and less precise on idiomatic phrasing.
preserve_newlines - on by default. Keep it on for prompts you manage line by line, otherwise the whole block comes back as one paragraph and your structure is gone.
fallback_to_input_on_error - off by default. Turn it on for long unattended batches: a translation failure returns the original text and the workflow keeps running instead of erroring out mid-queue.
Output is one STRING, translated_text.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Yamoon-jjang/comfyui-Ultra-Tools
Or Manager → Ultra Tools. Restart, Ctrl+F5. No pip installs - this uses aiohttp and the stdlib, and the settings dialog is web/ultra_translator_api.js. If you had the old standalone comfyui-Ultra-Translator installed, remove it first; same class name, two copies.
Troubleshooting
It hangs or errors instantly on every run. This node needs an internet connection and it's the only node in the pack that does. A machine behind a proxy, a firewall blocking Google, or DNS filtering will produce exactly this.
429s during a batch. Expected on the free endpoint. Lower the batch size, or add a Cloud key. Note that the cooldown applies per provider across the whole session, so once free Google is cooling down, subsequent lines go to MyMemory and their output will differ slightly in phrasing from the first ones.
Translations that technically mean the right thing and prompt badly. That's machine translation, not the node. Comma-separated booru tags translate especially badly - a translator treats them as prose, and 1girl, solo comes back as a sentence. For tag models, translate the idea and then write the tags yourself; for natural-language models this node is genuinely useful, because those encoders want sentences anyway.
Line breaks disappeared. preserve_newlines got turned off, or the source used something exotic. Keep it on and translate line by line when structure matters.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | — | |
| target_language | COMBO | korean | 20 options: english, korean, japanese, chinese (simplified), chinese (traditional), spanish, +14 |
| source_language | COMBO | auto | 21 options: auto, english, korean, japanese, chinese (simplified), chinese (traditional), +15 |
| translator_service | COMBO | 2 options: google, mymemory | |
| preserve_newlines | BOOLEAN | true | — |
| fallback_to_input_on_error | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| translated_text | STRING | — |