Markdown version: https://ai.hiina.space/reports/two-stage-user-styled-translation/04-live-tools-are-single-stage-translators-with.md · index

Index of everything on this site: https://ai.hiina.space/index.md

Two-stage styled translation exists only in pieces: 4. Live tools are single-stage translators with a prompt box

4. Live tools are single-stage translators with a prompt box

LunaTranslator, the most widely used VN front end (GPL-3.0, about 13.2k stars), sends each hooked or OCR'd line to the chosen engine with a user-editable prompt. Variables include {sentence}, {contextOriginal[N]}, {contextTranslation[N]} and {DictWithPrompt[XXXXX]}, which injects only the glossary entries that match the line and clears itself otherwise. Dedicated offline models (SakuraLLM, GalTransl, Hy-MT2, IndexTeam's Index-Translate) take no custom prompt (Luna LLM docs; Luna README). Luna seeds its glossary from VNDB character names. Its docs contradict themselves on what non-English users get: one section says the translation is left empty, the pre-translation substitution section says it is filled with the original text (Luna translation optimisation). A SQLite translation cache is described only by an auto-generated DeepWiki page, with no schema (DeepWiki, secondary, auto-generated); the official pages fetched do not mention caching. One blogger found LLM output "frequently better" than Google or Microsoft but the wait "absolutely brutal" for live reading, and concluded batch-made shared patches are the better use (Sakimichi's Otome Spot, secondary, single blogger). That latency complaint is the practical case for the split.

Hook and engine tools bolt an OpenAI-compatible call onto a line pipeline. XUnity.AutoTranslator caches results by source string in _AutoGeneratedTranslations.txt, which "will always have the lowest priority when reading translations", and recommends redistributing it (XUnity README). Its LLM plugins add glossary entries with optional context fields only when the raw term matches (LlmTranslators) and a Requirement field for "a requested translation style" (AutoLLMTranslator). Textractor Translator tracks the last speaker for unattributed lines and keeps an in-memory cache (textractor-translator). MoriTranslates' RPG Maker translator runs a two-stage workflow, database names first and then dialogue, with an auto-built glossary, speaker detection and a pronoun-aware gender system (rpgmaker-translator). DazedTL keeps per-game game.md (setting, register, naming) and quirks.md (voice habits) files, the closest thing found to a persisted per-game style document, though both feed the same single call (DazedMTLTool). VNTranslator's example system prompt tells the model to render honorifics and idioms as natural English (VNTranslator docs), and UGTLive suggests a more literal prompt for learners (UGTLive). In all of them, style is a sentence in a prompt.

The VN-specific LLM projects come closest to the proposed stage one. GalTransl's input is JSON with name and message; its dictionary lines are Source[Tab]Target[Tab]Explanation, with notes such as gender and occupation so the model picks pronouns and titles. Its per-file transl_cache stores index, name, pre_jp, post_jp, pre_zh, post_zh_preview, proofread_zh, trans_by, proofread_by and problem, and a changed post_jp triggers retranslation. Its problem analyser flags word repetition above 20, output over 1.3x source length, leftover kana and dictionary non-compliance (GalTransl README_EN). GenDic generates a character-name dictionary with an LLM pass; release 8.4.0 (10 Oct, year not shown, likely 2026) added a joint review of names, nicknames and compound speakers (GalTransl 8.4.0), and v8 added an agent mode with a proofreading sub-agent (GalTransl README). GalTransl++ adds dictionary conditions on neighbouring lines, cache lookups that consider surrounding sentences, a terminology ledger, and a Rebuild mode that regenerates output from cache with no model call (GalTranslPP). Stage one there still emits Chinese text and short notes, not a language-neutral per-line record, but the data model (speaker field, annotated dictionary, problem flags, cache-first rebuild) is the nearest reusable one.

The local models show the shape of a stage-two prompt and the absence of style control. Sakura-GalTransl-7B-v3.7's system prompt says it translates "using the given glossary in the specified style", but its user prompt has only optional history, a src->dst #note glossary and the text (Sakura-GalTransl-7B-v3.7); output is Japanese-to-Chinese (SakuraLLM, CC BY-NC-SA 4.0). The 14B v3.8 card's AutoDL deployment guide claims about 30,000 sentences per hour on an RTX 4090 with 16 parallel slots, an unmethodical tutorial figure (Sakura-GalTransl-14B-v3.8). VNTL's Llama-3 8B fine-tune is the only Japanese-to-English model found with structured character metadata in its native format: a <<METADATA>> block of [character] Name | Gender | Aliases entries, then <<JAPANESE>>/<<ENGLISH>> turns with [Speaker]: tags (vntl-llama3-8b-202409). The card romanises the same name 桜乃 as "Sakuno" in its translation example and "Sakurano" in its chat example, a small reminder that names belong in fixed fields. Sugoi 14B Ultra is a Qwen2.5-14B localiser fine-tune recommending about 10 lines of context (Sugoi-14B-Ultra-GGUF), and LinguaGacha adds a term-extraction step before batch translation (LinguaGacha). VNDB glossary builders export info fields with gender, role, traits and a spoiler flag (VNDB-Glossary-Builder) or one sentence per character "to create a prompt for LLM" (VisualNovelCharacterNameExtractor).

On quality, the community-run VNTL Leaderboard 2026 (87 original entries plus 4 new, scored by embedding cosine similarity on 128 lines each from Senren*Banka and Mashiro-iro Symphony, with values at or below 0.5 counted as zero) puts Qwen2.5-72B at 0.7079, shisa-v2-mistral-nemo-12b at 0.6985, vntl-llama3-8b-v2 at 0.6952, Sugoi-14B-Ultra at 0.6827 and Qwen2.5-7B-instruct at 0.6518 (VNTL leaderboard 2026, community-run). Local 8-14B fine-tunes sit close to 72B open models on literal similarity, but that metric rewards closeness to one reference and cannot score a styled render. Manga tools follow the same pattern: manga-image-translator has prompt templates, a glossary and prior-page context for its OpenAI translator only (manga-image-translator), and Koharu documents local models and an agent workflow with no custom prompt or glossary (Koharu). Steam's Game Overlay Translator ($3.99, July 2026) runs offline OCR plus FuguMT or Argos, caches translated lines locally, and offers a "High quality (AI)" engine as a free DLC needing a Vulkan GPU. Its page says both that the local AI accepts "your own custom prompt" and that "the app does not accept free-form prompts" (Steam).

Community norms matter if records are ever shared. 11 bit studios shipped The Alters with leftover LLM text, including "Sure! Here is the translated text into Brazilian Portuguese" in a player's screenshot of the Portuguese translation and a second leftover line in a background text screen, and said "In hindsight, we acknowledge this was the wrong call" (PC Gamer, 2025-06-30). Romhack.ing "disabled downloads for machine-translated content" (reported for 2026-06-17), keeping them available on request as a base for human scripts, and an AI patch of Tricolore Crise was released over a parallel human effort (Held Games, secondary). A per-reader renderer over a private record distributes no translation, which sidesteps the patch backlash but also forgoes community review.


Text licensed CC BY 4.0 (attribution: Hiina, ai.hiina.space). Source: https://github.com/hiinaspace/ai-hiina-space