ทุกเวอร์ชัน และสิ่งที่เปลี่ยนไป การรองรับเอนจิน ผู้ให้บริการแปล Image Studio และการแก้ที่อยู่เบื้องหลัง — ใหม่สุดก่อน
บันทึกการเปลี่ยนแปลงเขียนเป็นภาษาอังกฤษและไม่มีการแปล
Fixed: some Wolf RPG games crashed at launch after export. A few bytes of a game's own script data could be mistaken for text and translated, which desynced the script and ended in a crash before the title screen. Those lines are now refused and marked in red so you can see what was skipped. Re-export from this version for a working build.
Find & replace
$ or a similar pattern with Regex on could freeze the window. Fixed.Also
?.Regex exclusions now live with your account, not just one project. Save a pattern once and re-apply it to your next project in a click — useful when a game updates and you start over. Supporters sync them across every PC they sign in on, and can manage them at runetranslate.com/account/regex-rules.
No window closes on a stray click any more. Every dialog keeps what you typed; Escape still closes, and asks first if you have unsaved edits.
New in the RT Coins shop — Moondew, a quiet night-sky theme with a slow shooting star. Built to a supporter's brief: easy on the eyes over long sessions.
Fixes
If you closed RuneTranslate, reopened a project you had already translated, and exported it, the exported build could come out with none of your translations in it — and on some games with translated lines written into the wrong place instead. The export still reported success, which is why it looked like the game simply wasn't supported.
Your translations were never lost. They were only mis-addressed on the way out, so re-exporting with this version is all that is needed to get a correct build.
Which projects were affected
Which engines were affected
Unity, Godot, Electron visual novels and TyranoBuilder. Every other engine addressed its translations differently and was never affected.
If you have an exported build that never picked up your Thai, Chinese, Korean or any other translation, export it again from this version.
\n escape, so translating that line can't reflow it, drop it, or ship a literal "\n" to the player. Lines translated before this are repaired on export.The Image Studio can typeset a translation over a picture, but it cannot redraw one — a logo with the lettering built into the artwork, a button that has to change shape, a background no automatic cleanup can rebuild. Now it does not have to.
Export hands you the picture as an ordinary PNG. Edit it in Photoshop, Krita, GIMP, anything. Import puts it back: it replaces the game's artwork, and your text boxes stay exactly where they are and are drawn on top of it.
.tlg artwork exports as a normal PNG and is re-encoded as TLG on the way back into the game, so a format no image editor can open is now editable like any other..png_ and .rpgmvp artwork exports as a plain PNG and is re-encrypted with the game's own scheme when you export the game.Editing images is part of the Image Studio and needs a Supporter plan; reading your translations does not.
Export no longer fails on older Wolf games. Games built with Wolf RPG Editor 2.x could
fail to export with UberWolfCli repack exited with code 3221226356. The bundled repacking
tool cannot rebuild that archive format at all — and worse, it damaged the archive on the way
out. RuneTranslate now detects this, restores the archive, and ships the translation as loose
files instead, which the game reads in preference to its archive. The original archive is kept
beside them as .wolf.rt-original, and a note in the export folder explains how to undo it.
Confirmed playable end to end on a real 2.x title.
Strings the engine looks up by name are no longer offered for translation. Wolf resolves
database type, data and field names by their exact text. Translating one didn't produce a bad
translation — it stopped the game starting, with errors like【DB操作】以下のタイプ名は存在しません. These are now recognised structurally and shown as
red opt-in rows. If you already translated some, just re-export: the protection applies when
writing the game files, so an existing project is repaired without recreating it.
Roughly half the rows in a Wolf project were never translatable text. Developer comment
blocks (including the ■■■ separator bars that showed up as rectangles) were not being
detected at all. Neither were numeric fields, which appeared as meaningless one-character rows
like A — and translating those corrupted the exported file. On the test game this removed
about 10,000 rows that should never have been billed to a translator.
Dialogue that was previously unreachable now appears. Some lines were swallowed inside
mis-read data and could not be translated at all; 129 Japanese lines were recovered on the test
\GO(...) now arrive as red opt-in rows too. Existing YU-RIS projects keep the old rows, so re-create the project to get the clean list.Assembly-CSharp.dll, where no asset extractor could reach it — 820 strings on the game this was built against, including on-screen prompts, loading-screen tips, class descriptions and item messages. Strings the game feeds to animator parameters, tag comparisons or scene loads arrive as opt-in rows, so translating one cannot silently break the game.<Keyboard>/w, Vector2, GUIDs), TextMeshPro font/sprite/style assets and tag/id fields now arrive as opt-in rows instead of live text — 627 of 1,701 rows on one game — and C# code templates that some asset packs ship as TextAssets are no longer sliced into hundreds of rows.System.json at all. Verified on a game with 1,004 encrypted images, and baked images are written back in the game's own format.Kirikiri: games that keep their data inside the .exe (no .xp3 on disk) are now detected and translated.
Unity:
Support tickets: you can now keep 3 open at once instead of 1, and resolved tickets no longer count against the limit.
Tickets are also kept longer — 20 days without a reply instead of 10, and 90 days after a ticket is marked resolved.
Godot: fixed an error that could stop a C# game from opening ("could not recover this Godot game — FileWrite error"). C# games now unpack in a single pass.
Godot: games written in C# extract their dialogue. Previously only a handful of menu strings came through — the script lives in the game's compiled assembly, which is now read, and translations are delivered through the game's own translation file.
Godot: fixed a freeze when opening a game whose pack is encrypted. The app stays responsive and finds what it needs in milliseconds instead of stalling for minutes.
Godot: far less noise on English-language games. Animation names, bone paths, mesh data and other engine internals are no longer offered as translatable lines.
Godot: fixed a freeze when opening a game whose pack is encrypted. The app stays responsive throughout and now finds what it needs in milliseconds instead of stalling for minutes.
Godot: games written in C# now extract their dialogue. Previously only a handful of menu strings came through — the script lives in the game's compiled assembly, which is now read, and translations are delivered through the game's own translation file.
Godot: far less noise on English-language games. Animation names, bone paths, mesh data and other engine internals are no longer offered as translatable lines.
Kirikiri: Thai vowel and tone marks now sit on their letter instead of taking a space of their own.
Security and stability improvements.
Fixes
Ren'Py — Image Studio support. Title screens, menu art and buttons can now be
translated in Ren'Py games, both the ones that ship their art loose under game/
and the ones that pack everything into .rpa archives. Images inside an archive
are read straight out of it, and the translated version is written back so the
game loads it without any repacking. Verified on a fully-packed Ren'Py 8 title:
954 images found in under a second.
Previously the Studio simply found nothing in a Ren'Py game and said so.
Everywhere else in the Studio
of images opens and scrolls as fast as one with ten.
gui/ and images/ folders.
Also fixed
İ or Japanese text produced a game that closed instantly on launch, with no error.
The export now warns before it starts, and points you at a plain A–Z folder
name. (Accented Latin characters were never affected.)
The old Images tab was a one-shot automation — draw a box, and at export the app
erased it and stamped one line of system text. When it got something wrong, there
was nothing you could do.
The new Studio tab replaces it with the workflow comic translators use:
detect → clean → typeset → bake, every step yours to correct.
and rotate boxes freely, with undo throughout.
so your translation sits on the real background instead of a coloured patch.
outline, shadow and colour per box. Seven bundled fonts cover Latin, Cyrillic,
Greek, Japanese, Chinese, Korean, Thai and Arabic; vertical Japanese included.
An eyedropper picks colours straight off the artwork, and the canvas shows
exactly what the export will produce.
Engines: RPG Maker MV / MZ (including games that ship encrypted images),
Kirikiri / KAG (XP3 archives, TLG included), NScripter / ONScripter (.nsa), and
any other engine that keeps its images in ordinary folders.
Plans: Free opens the Studio and reads your existing work — this does replace
the old free flat-fill image export. Supporter unlocks the whole editor. Pro adds
a much larger daily image allowance for whole-game jobs.
Image translation is new and has not been through a full playthrough on every
engine yet. If a baked image looks wrong in game, a support ticket from inside the
app is the fastest way to get it fixed.
Godot: games whose data is encrypted can now be translated. These failed at project creation with "Cannot open encrypted pck". Very large games are supported too — packs over 2 GB used to stop the export.
LiveMaker: games that keep their data in a separate index file (game.ext next to game.dat) can now be exported, not just read.
RPG Maker XP/VX/Ace: fixes missing images after export in games with Japanese file names, and the editor is far more responsive on large games.
Ren'Py: menu buttons, phone and SMS text, character bios and gallery hints are now picked up.
Security and reliability hardening around sign-in and account checks. Recommended for everyone.
Developer tier: the interchange tab now needs to be opened once while online before it will work offline.
Ren'Py: a lot more of the game now comes through. Menu and interface buttons written directly into a screen (Back, Auto, Skip, Log, Q. Save and friends), phone and SMS text along with its reply choices, character bios and journal entries, and gallery unlock hints were all left in the original language because they aren't written as ordinary dialogue lines.
Ren'Py: text containing a literal square bracket, such as a perk or item name like [Social Chameleon], no longer breaks. It was translated but reached the game with a bracket missing, so the line rendered wrong.
Re-scan an existing project, or create a new one, to pick up the extra lines.
Unreal Engine: accented characters now display correctly in game. Translations into Spanish, French, German, Portuguese, Italian and the Nordic languages were shipping letters like á, ó, ñ, é, ü and ß as a question mark — "poción mágica" reached the player as "poci?n m?gica".
Re-export an existing project to fix it. Your translated text was never damaged, so there is no need to translate anything again.
Unity: games with an English or other Latin-script source language now extract their in-game text. Titles that used to detect the engine but find no lines at all — dialogue, menus and UI — now come through.
Unity: button, animator and event wiring is filtered out, so the editor lists real text instead of thousands of internal names. What was skipped is shown in the extraction report.
Unity: more third-party plugin lookup keys are protected from translation, so exported builds keep working.
Smoother on very large projects — a few actions that could stall the app on huge games no longer do.
Find a file by typing. Projects with a lot of files now have a filter box above the file list in the editor — type part of a name to narrow it down. Handy on games that ship hundreds of script files.
The RT Coins shop is now in the app. Settings → RT Coins shows your balance and streak, sells gift codes and cosmetics, and redeems a code — no need to open the website. Everything RT Coins introduced in 0.49.0 is unchanged.
RT Coins. Every month you stay subscribed earns coins, and an unbroken run earns more. Spend them on a month of RuneTranslate for someone else — you get a code to hand to anyone — or on cosmetics. Balance and streak are on your account page.
Gettext (.po / .mo) — new engine, the 19th. Python and pygame games, Solarus, SDL and GTK games, and anything localized with Poedit, Weblate or Crowdin. Export writes the compiled .mo the game actually loads, protects %s and {count} placeholders, and fits plural forms to your language.
Two new themes. Aurora and Ember, unlocked with RT Coins.
Four engines get text they were missing entirely, plus a font fix for accented languages and several editor conveniences.
Ren'Py: accented languages no longer show boxes. Hungarian, Polish, Czech, Slovak, Romanian, Turkish, Baltic, Vietnamese, Greek and Cyrillic translations came back as □ because many game fonts simply don't contain those letters — on one game, nine of its seventeen fonts couldn't render Hungarian. A suitable font is now bundled automatically for those languages. Re-export an existing translation to pick it up.
Ren'Py: choices, prompts and asset names. Choices that only appear under certain conditions (a perk, an earlier decision) were invisible to the scan — 239 of them on one reported game. Those are picked up now, along with the prompt a game shows when you type your character's name. Sound and image file names are no longer offered to you as text to translate.
Artemis: scenario files that came back empty. Some script files produced nothing at all and looked as though they'd been skipped on purpose. They hadn't — a single line of a certain kind made the whole file unreadable, silently. One reported game gained 27 scenario files and roughly 6,800 lines.
RPG Maker: .xos scenario scripts. Some games keep their entire character dialogue in scenario files beside the game data rather than inside it, so only menus were being translated. On the reported game that was 33,574 lines that had never been visible. Speaker names, choices and the stage directions around them are kept apart, so only what the player reads is translated.
Godot: separate .pck files, and Dialogic. Games that keep their content in a .pck beside the .exe can now be exported — previously the export stopped with an error. And visual novels built with the Dialogic add-on now get their dialogue, which for one game meant going from 822 lines to over 10,000.
Kirikiri: somewhere to enter an encryption key. If a game's archive needs a master key, there's now a field for it when you create the project, right where the error appears.
Export warns before it can overwrite saves. If you export again over a folder you've been playing in, you'll be told how many save files are there and whether any are actually at risk, so you can back them up first.
Godot games that keep their data next to the .exe can now be exported, Godot visual novels built with Dialogic get their script translated, and Ren'Py picks up choices, prompts and asset paths it was getting wrong.
Godot: games with a separate .pck file now export. Some Godot games keep their content in a .pck file beside the .exe instead of inside it. Those could be opened and translated but not exported — the export stopped with "supports games with the .pck embedded in the .exe". They now export normally, and the game's .exe is left exactly as it was.
Godot: visual novels made with Dialogic now get their dialogue. If a Godot game is built on the Dialogic addon, its whole script can live in timeline files that nothing was reading — so the game would come back with its menus translated and its story untouched. Those are now included. On one reported game that took it from 822 lines to over 10,000. Speaker names, choices and the stage directions around them are kept apart, so only what the player reads is translated.
A translated line can no longer break a Dialogic game's speaker labels. Certain punctuation in a translation was being read by the engine as "this is a character name", which could make it invent a character mid-scene. If you already exported a Dialogic game and your translation contains colons, re-export to pick this up.
Ren'Py: choices that only appear under certain conditions were being missed. Many games only offer a choice when something is true — a perk, an earlier decision, an item. Those options were invisible to the scan and came back untranslated. On one reported game that was 239 choices. All of them are picked up now.
Ren'Py: sound and image file names are no longer offered as translatable. Entries like sound effects/click.wav or week 2/w2_1947.png were being listed as text to translate whenever the folder name contained a space. On one game that was roughly 2,800 rows of noise you were paying to translate. They are now marked as excluded, like every other asset path.
Ren'Py: name-entry prompts are translated. The question a game asks when you type your character's name — "Now, what is your family name?" — was never collected, and stayed in the original language even in a finished translation.
The AI refiner can now double-check a translation against the original, Wolf RPG games get a lot more of their text, and two refiner bugs are fixed.
Refine has two modes. The refiner used to only improve the wording of the translation you already had. It can now also check against the source: it translates each line from the original itself, compares that with your current translation, and keeps whichever is more faithful. Reach for it when a line was translated wrongly rather than just awkwardly — polishing tends to keep a confident mistake if it reads well. Set a default in Settings → Translation, or change it for a single run in the Refine dialog. The default is the old behaviour, so nothing about your existing results changes unless you switch.
If you use your own refiner prompt, the mode now works alongside it — your prompt still decides tone and terminology, and the source-check instruction is added on top. (In the previous build the mode picker was greyed out for you. Sorry about that.)
Fixed: "Reset to pending" could stop working on a refined line. If you reset a refined line to pending and then used "Reset refined translations", the old translation came back and the line got stuck — its reset option greyed out. Clearing a translation now clears its pre-refine copy too, so the two resets no longer fight. Affected projects heal themselves the next time you use either reset.
Wolf RPG: three separate causes of missing text.
.txt files under Data/ that a plugin reads at runtime instead of in the event data. Those are picked up now, and each line's speaker prefix and directives are preserved exactly — only the spoken text is translated, so a line can't lose the marker that makes the game display it. One reported game gained ~310 lines this way.Wolf RPG games get a lot more of their text, and Refine can now double-check a translation against the original.
Refine has two modes. Until now the AI refiner improved the wording of the translation you already had. It can now also check against the source: it translates each line from the original itself, compares that with your current translation, and keeps whichever is more faithful. Use it when a line was translated wrongly rather than just awkwardly — the polish mode tends to keep a confident mistake if it reads well. Pick a default in Settings → Translation, or change it for a single run in the Refine dialog. The default is unchanged, so nothing about your existing results moves unless you switch.
Wolf RPG: three separate causes of missing text, all fixed.
.txt files under Data/ that a plugin reads at runtime, rather than in the event data. Those are now picked up, and each line's speaker prefix and directives (0/, #bgs20, \150, @6, %003) are preserved exactly — only the spoken text is translated, so a line can't lose the marker that makes the game display it. One reported game gained ~310 lines this way.To pick these up on an existing Wolf project, use "Re-scan source" in the ⋯ More menu, or create the project again.
Support tickets, a fix for missing character portraits in RPG Maker MZ, and better Kirikiri detection.
Support is now a conversation. There's a new Support screen in the app: your bug reports and feature requests become tickets you can reply to, and the developer can reply back. You get a badge in the app and an email whenever there's an answer, so a report is no longer something you send into the void. Available in all 18 app languages.
RPG Maker MZ: fixes character portraits disappearing after translation in games that use a standing-portrait plugin (such as TRP_SkitMZ). These plugins find a portrait by matching the speaker's name, so translating the name stopped the match — the game kept running, the portraits just silently never showed. Both sides are now kept in sync on export, and the portrait images themselves are untouched. Re-export an affected project to pick this up.
Kirikiri: detects more games. Titles whose folders don't carry the usual engine markers are now recognised by the shape of their archives instead, so games that previously weren't detected as Kirikiri at all should now open.
Wolf RPG: asset paths are no longer offered as translatable text.
Also includes smaller export and translation-memory fixes.
Kirikiri: fixes several crashes that could happen after translating a game.
Note: to pick these up on an existing Kirikiri project, use "Re-scan source" in the ... More menu, or create the project again.
If a Patreon payment fails (for example an expired card), you now keep your paid features for a few days with a reminder to update your card — instead of losing access right away.
When a pledge unlocks a new tier, RuneTranslate now shows you exactly which features just became available.
Also includes the near-real-time collaborative projects from 0.47.5 (a teammate's edits and cursor now show up live).
Collaborative projects are now near-real-time: a teammate's edits and their live cursor/selection show up the instant they happen, instead of after a short sync delay. If the live connection is interrupted it automatically falls back to the previous background sync, so collaboration keeps working either way.
Also includes the fixes from 0.47.4 (better Wolf RPG file/asset-path exclusion, the refined-text export fix, and removal of the manual "Scan for issues" option).
Wolf RPG — image and audio file paths (e.g. Anime/…png, sound files) are no longer sent for translation.
Refiner — fixed refined translations sometimes reverting to their original version on export.
Removed the "Scan for issues" tool — with broader exclusion coverage it was no longer needed, and could occasionally flag correct translations.
Translation memory — no longer caches excluded / non-content lines.
Unreal Engine — Games that protect their data files with signature checks can now be translated. On these titles the translation patch was built correctly but the game silently refused to load it — no error, the game just stayed in its original language. RuneTranslate now also delivers the translation as loose localization files, which load without that restriction. Coverage is best for in-game dialogue and menu text.
Kirikiri — Games that keep their scenarios under a different file extension now extract properly. Scenario files are found by their content instead of their filename, so a game storing its story as script/*.src rather than the usual .ks no longer comes up empty — one such title went from 0 to over 9,000 translatable lines. Games that already worked are unaffected.
Kirikiri — Preprocessor #command lines are no longer offered for translation. Their arguments are internal identifiers, such as character variables and track names, and translating them broke the game's lookups. They still appear as opt-in rows if you need to translate one.
App — Release notes now display their formatting (bold, headings, lists) instead of showing the raw markup.
Bakin — Dialogue now applies on games that ship their own localization data. On those titles the menus translated but every line of dialogue stayed in the original language, with no error shown. Verified in-game on a real title: all 20,096 dialogue lines now display translated.
Bakin — Exports of games whose source language isn't Japanese now apply correctly. Previously the export could come out untranslated.
Unity — Games with Thai, Arabic, Ukrainian, Greek or Traditional Chinese source text no longer extract as empty. Their text files were being skipped entirely.
.wolf files that shadowed them. On one game that meant 43 stray archives and an export that ballooned from 528 MB to 4.2 GB.Text_Script/プロローグ/01.txt or tatie/アン/AN_A服 were treated as dialogue because they contain Japanese. Wolf looks these up by exact name, so translating them broke the lookup. Paths with Japanese folder or file names are now excluded automatically, while choice lists like はい/いいえ stay translatable.Godot: translate games that use Godot's built-in localization system. On these games the dialogue lives in compiled translation tables rather than in the scripts and scenes, so earlier versions couldn't see it at all — on a real game this added about 5,000 lines that were previously invisible. Extracted, translated and written back into the exported build; verified in-game.
Godot: scene-node names, node paths (../../Something, Name:property) and res:// resource references are no longer offered for translation, so a translation can't break a scene lookup or an animation.
RPG Maker XP / VX / Ace: notetags in a database Note field (<Key: value>) are now excluded. Plugins match those strings literally, so translating them used to break the plugin. A note that mixes tags with real prose stays fully translatable.
AliceSoft: the code-string pool is now filtered with the full rule set, and developer log lines and printf-style format strings are excluded.
Unreal Engine: object paths (/Game/...) and developer log lines that were gathered into the .locres alongside real UI text are excluded.
SRPG Studio: values under customParameters are excluded — scripts match those by value.
TyranoBuilder: jump labels (*start), variable references (&f.page), bare tags ([r]) and script filenames are excluded from tag attributes, lang.js and Config.tjs. Scenario dialogue is unaffected.
Ren'Py: say lines that contain nothing but markup or a substitution ({w}{nw}, [player_name]) are excluded.
Everything newly excluded stays visible in the editor as an opt-in row — if you want one translated, switch it on and it behaves exactly as before. Nothing is hidden or deleted.
Unity: fixed rare freezes during extraction on some games, and added support for translating games built with Unity Localization — including games whose source text isn't Japanese. Bakin: removed non-text data (binary blobs, control codes) from the translatable list so you only see real text.
Wolf RPG: numeric/flag data (e.g. tile rows) no longer appears as translatable text — it's now an opt-in row. And the editor groups extracted text by source file (CommonEvent.dat, DataBase.dat, each map) instead of one long list.
Wolf RPG: some games whose data archives are unencrypted (no decryption needed) extracted no text at all — they now extract and translate correctly. Also includes the new localized in-app help pages.
New in-app help: a help button on every Settings tab and inside the project editor opens a plain-language guide to every option, including what each paid feature does. Fully localized into all 18 app languages.
Proxy pool: reliability fixes for large proxy lists. A proxy can no longer be pushed past its safe per-IP request rate when other proxies get rate-limited mid-run, so heavy runs are less likely to trip a proxy's limits. Testing all proxies no longer keeps extra connections open afterward.
Proxies (Pro): send translation requests through your own proxies so per-IP rate limits on the free translators (Google, DeepL) no longer cap a run. Add and test them in Settings → Proxies, and watch a live indicator while a project translates — requests spread across your proxies automatically and a rate-limited one steps aside on its own. Also: smoother free DeepL (Classic / Next-gen) behaviour when routed through proxies, plus reliability fixes.
Unreal Engine: fixed two separate problems that could crash an exported UE5 game on launch.
The translation container is now built for the game's actual Unreal Engine version and is verified against the game before it ships, instead of being assumed. This mainly affects UE 5.4, 5.5, 5.6 and 5.7 games, which previously received a container built for the wrong engine version.
Text detection is also stricter: some binary game data could be mistaken for text, offered for translation, and then written back over real asset data. Those are now rejected, both when scanning a game and when exporting — so an older project can no longer produce a broken build either.
Bakin: fixed an export failure on games whose engine build doesn't ship Bakin's localization plugin — those games now export through direct text replacement instead of stopping with an error. Games on the other Bakin build are unaffected and export exactly as before.
Also corrected how Bakin support is described in-app: an exported Bakin build always opens already translated — the language is applied for you, not offered as an in-game choice.
Unreal Engine: fixed games where menus translated but in-game dialogue stayed in the original language - dialogue text baked into cooked assets (widget Blueprints) is now translated too. Extraction also stays responsive while scanning large Unreal games (no more freeze).
Unity: fixed games with array-based dialogue where only one line per section translated - now every line translates. Added automatic non-Latin font embedding for Unity (TextMeshPro) games, so Thai, Arabic, Chinese, Japanese and Korean render instead of empty boxes.
Reliability: translation requests now use sensible timeouts, so a slow or unresponsive model fails fast instead of hanging or looping. New controls in Settings > Translation let you set the request timeout and how many retry passes to make. DeepL: Arabic is now supported on all engines; Thai works with a paid DeepL API key.
Godot: fixed exporting translations for Godot 4.4+ games (new GDPC v3 pack format). Godot 4.0-4.3 games are unaffected.
• Kirikiri / KAG visual novels: fixed exported translations not appearing in-game on titles that use a non-standard override hook (some games rename the loading hook). The translation now loads correctly on these games.
• Unreal Engine: much better AES-key auto-detection — recovers keys that games build from split 32-bit constants in the executable (previously undetectable), so more encrypted UE4/UE5 games open without pasting a key.
• As an optional last resort, if the key is nowhere in the game files, RuneTranslate can (only with your explicit permission) launch your game once and read the key from its memory — it never modifies the game and leaves it running.
• Developer tier: new "Dump & localize your own game" tool — extract every translatable string from your own game (any supported engine) to CSV/JSON/PO/XLIFF, translate, and rebuild the localized game. Now supports multiple target languages in one pass.
• Unreal Engine: broader export compatibility — more games now export their translated text even when the game's package container can't be rebuilt.
This one fought us every step of the way—and became one of the hardest RPG Maker compatibility fixes we have shipped. The game's modified nw.dll encrypted all 73 data/*.json files, rejected normal Node/Electron hooks, depended on preserved NTFS metadata and even short path lengths, and produced misleading Failed to load Actors.json / Animations.json errors when approached conventionally.
RuneTranslate now recognizes this protection automatically, visibly launches the game to capture the plaintext JSON at runtime, reports progress to the user, hash-restores every temporary manifest/plugin change, and exports through a transient safe overlay without ever overwriting the encrypted originals.
Real-game verified: all 73 JSON files were recovered, and the translated [RuneTranslate Test] House build launched and ran without errors.
Fixed Korean text rendering as boxes in Ren'Py character logs by adding additive font fallback aliases for custom UI fonts. Existing Latin/Cyrillic export behavior is unchanged.
Ren'Py: menus, screens, item descriptions and character logs now translate on games that ship their own languages — and a lot more on-screen text is picked up. Non-Latin translations (Korean, Japanese, Chinese, Thai, Arabic) now render on every screen instead of showing boxes. Developer projects: smoother importing of CSV, JSON (including flat key/value files), PO and XLIFF, and exports now preserve your file's original structure. Various fixes and polish.
Developer projects — bring your own strings. The Developer tab is reworked: import your own CSV / JSON / PO / XLIFF strings, pick a source language and one or more target languages, and RuneTranslate creates a project per language and translates them automatically with your chosen provider. Each opens in the normal editor and exports back to the same format — for any engine, on your own text. Also fixes the tier badge for Developer accounts.
New: Developer tier — adds a Developer tab that exports any project's text to CSV, JSON, PO (gettext), or XLIFF for every supported engine, so you can work with translators, CAT tools (Poedit, memoQ, Trados, Weblate), or your own pipeline — then re-import the edited file straight back into your project. Includes everything in Pro.
Save Editor now supports RPG Maker XP / VX / VX Ace (.rvdata2 etc.) and RPG Maker 2000/2003 (.lsd) saves — edit gold, variables, and switches.
Early-access release dates now show in your local timezone with a small countdown (e.g. 2 days 15 hours).
RPG Maker: games with encrypted data files now show a clear explanation instead of a confusing error when creating a project.
RPG Maker (MV/MZ): event comments now appear as opt-in rows so nothing is hidden, and choice-branch text is fully translated for more complete map coverage.
New Project is smoother: every engine now shows a live progress bar while it reads a game's text, and the app stays responsive during extraction (no more freezing on large games).
Unreal Engine — major improvements:
• Translates UE games that keep their text inside cooked assets / Blueprints (no .locres needed) — applied at runtime so the game stays stable.
• Much broader automatic AES-key detection for encrypted UE games (scans all game files + more key formats), now with a progress bar and no UI freeze.
Plus stability fixes across engines.
Unreal Engine games now open correctly.
Creating a project from a modern Unreal Engine game (UE 4.23 and newer, including UE5) failed with an error claiming no localization files could be found. The archive reader was misreading the game's file table, so it never got as far as the text. That's fixed — Unreal games are now read properly.
Clearer answers when a game can't be translated
Some Unreal games don't store their text as localization files at all — it's compiled into the game's assets. RuneTranslate now tells you that plainly, instead of giving a confusing error. If your game's text is there and we fail to read it, the app now says so and offers to send a report.
Also
Bug fix.
The note shown on the export-complete screen was only appearing once a day instead of on every export. It now shows every time you finish exporting a translated game.
The Open game folder button is unchanged — it stays the main action and always takes you straight to your game.
Readability fix for the Light theme.
Several pieces of text were rendered in a shade meant for dark backgrounds, which made them very hard to read on the Light theme. Fixed throughout:
All of them now adapt properly to whichever theme you're using.
Your game is translated — now go play it.
Exporting a finished translation used to end with a small toast showing a file path. It now ends with a proper completion panel: how many lines shipped, which images were re-baked, and a one-click Open game folder button so you can launch straight into the game you just made playable.
Also in this release
OpenAI-Compatible API: custom request parameters. The OpenAI-Compatible provider now has a Request parameters section in Settings → Providers — a temperature field and an Advanced parameters (JSON) box that gets merged into every request.
This lets you send whatever your provider or self-hosted server needs, for example:
{ "topp": 0.9, "maxtokens": 512,
"chattemplatekwargs": { "enable_thinking": false } }
That last one is useful for reasoning models — turning thinking off keeps their internal monologue out of the translation (and makes them a lot faster). The required fields (model, messages) are always protected, so nothing you put here can break a request.
Nothing changes unless you fill these in — every other provider, including Local Model, behaves exactly as before.
Artemis engine: multilingual games now fully translate. Games that ship several languages side by side (for example NinNinDays 2) previously extracted only a handful of lines. RuneTranslate now reads their dialogue, speaker names and choices in full. Your translation replaces the Japanese text, so run the exported game with Japanese selected — any official English/Chinese text the game ships is left untouched.
Artemis patch archives are now handled correctly. Numbered archives (.pfs.000, .pfs.040, …) are read in the engine's own priority order, so text that a game's patch archive adds or replaces gets translated too — and the exported patch is numbered to load after every archive the game ships.
Note for existing Artemis projects: create a NEW project for these games rather than using 'Re-scan source for new lines'. The newly-found lines are inserted mid-file, which a re-scan cannot align.
Wolf RPG 3.x support — RuneTranslate now translates newer Wolf RPG Editor games (3.0+, UTF-8): dialogue, choices, character names, and database text that earlier builds couldn't read.
Already have a Wolf project? Open it and use the More menu (⋯) → 'Re-scan source for new lines' to pull in the newly-supported text.
The image translator now handles RPG Maker MV/MZ games that ship encrypted images (.png_ / .rpgmvp). These games previously showed "no candidate images" in the Images tab — now their menus, titles, and buttons appear in the gallery and can be translated and re-baked like any other image.
Artemis engine: translations now apply in-game. Fixed the export so translated scripts actually load into the game, and the text extractor now captures bracketed dialogue lines and speaker names that were previously missed. Tip: re-scan an existing Artemis project (⋯ More → Re-scan source for new lines) to pick up the newly-detected dialogue.
Fixes the finished-translation-queue banner reappearing after you dismiss it and switch tabs.
Fixes Ren'Py games (especially newer Ren'Py 8 titles) extracting only a fraction of their dialogue — lines carrying an internal id are now captured. Re-extract the project to pull in the full script.
Translated Ren'Py games now display correctly in Japanese, Chinese (Simplified & Traditional), Korean, Thai, and Arabic — the export bundles a matching font so text no longer shows as empty boxes. Re-export your project to apply it.
Fixes Korean text in translated Ren'Py games showing as empty boxes — the export now bundles a Korean font so the translation displays correctly. (Re-export your project to apply it.)
The newer features (translation queue, project pinning, and more) are now fully translated in all 17 supported languages.
Fixes the translation queue so every provider you've set up (OpenAI, Claude, DeepSeek, DeepL, and more) shows up right away — no need to open Settings first.
The translation queue now scales with your plan — Supporter can queue up to 10 games at once, Pro up to 30. Plus small refinements.
New: Translation queue — line up several games and translate them back-to-back, unattended (Supporter feature). Your PC stays awake for the batch and you get a notification when it finishes. Plus stability improvements.
You can now pin projects on the projects list — pinned projects stay at the top and stand out. The project editor's 'Filters' tool is renamed 'Regex exclusions' for clarity. Plus stability improvements.
You can now choose which translation engines add to your Translation Memory (Settings → Translation). The free unofficial Google/DeepL scrapers are off by default so their quick guesses aren't cached and reused. Plus stability improvements.
LiveMaker translation now also covers on-screen UI captions (button and label text such as OK / Cancel / Mute), in addition to dialogue and menu choices. Plus stability improvements.
Fixes LiveMaker export for games that ship their data as a split (multi-file) archive. Plus stability improvements.
Adds LiveMaker / LiveNovel visual novel support — detect, translate, and export a runnable translated build. Plus stability improvements and bug fixes.
Bug fixes and general improvements to stability and reliability.
Unreal Engine support remains experimental / best-effort — please verify translated builds in-game before sharing.
RuneTranslate can now translate Unreal Engine games. It pulls the on-screen text (menus, system messages, item and skill names, subtitles) from the .locres files inside the game's .pak archives — automatically recovering the AES key for encrypted games — and from UE5 IoStore containers. On export it builds a small patch pak you drop into the game's Content/Paks folder: no full repack and no re-signing.
⚠️ Experimental / best-effort. This engine is brand new and has not yet been verified in-game on a real Unreal title — extraction and export are proven on test data only. Please try it on a copy of your game first and let us know how it goes. Text baked into the engine's data tables or compiled assets isn't covered yet.
Also includes general stability and polish improvements.
New: RuneTranslate Workbench — an interactive panel that opens right inside Claude Desktop. Browse your projects and progress, view & edit translation lines, manage your glossary, build exclusion filters, run the translation engine, and export your build — all visually, without leaving the chat. Enable it in Settings → AI Connections, then ask Claude to open my RuneTranslate workbench.
New: Auto-skip game-code lines — Claude can now detect and exclude non-dialogue lines (asset paths, ID & system codes) from translation through AI Connections, so you don't spend translations on engine codes.
Plus stability and reliability improvements.
Browsing is free for everyone; editing, glossary, filters, running the engine, and export are Supporter & Pro.
Stability and quality-of-life improvements, plus minor fixes and polish.
Stability and bug-fix update. This release focuses on under-the-hood reliability improvements and minor fixes.
Three animated, hand-crafted theme backdrops, exclusive to Pro:
Pick them in Settings → Theme. They're purely cosmetic — translation works exactly the same on every tier — and respect your system "reduce motion" setting.
Connect an AI assistant like Claude Desktop to RuneTranslate. Once you enable it in Settings under "AI Connections", it can browse and search your translation projects. With a paid plan it can also translate lines, build and edit glossaries, run the translation engine, and export your build. One-click setup via a Desktop Extension, and it stays off until you turn it on.
Discord Rich Presence polish: your activity now shows a per-engine thumbnail and a quick "Join our Discord" button.
Stability and reliability improvements.
YU-RIS: cleaner extraction. Older two-segment YU-RIS games were surfacing thousands of bytecode/numeric "junk" rows that buried the dialogue. Fixed — only real text is shown now. (Tip: for an English game, set the project source language to English so the dialogue shows as translatable.)
YU-RIS: now reads older games (Eroge! and similar). Some YU-RIS games use an older compiled-script format (the two-segment YSTB) that previously showed "0 translatable strings." Fixed — the dialogue now extracts. (Newer YU-RIS games are unaffected.)
Artemis: now reads games that ship scripts as .iet text. Some Artemis games pack their scenario as line-oriented script text under the .iet extension (not compiled) — these previously showed "no scripts found / 0 strings." Fixed; the dialogue now extracts. (Compiled-.iet games are unaffected.)
AliceSoft: now detects newer games (Rance 9 / Evenicle era). Games that ship a per-game .ain + .afa (and no System40.exe / .ald) were reported as "no supported engine found" — fixed; detection is now content-based, so Rance 9 and similar load correctly. Also: the New Project "Create" button now waits for engine inspection to finish before it can be clicked.
Fixes AliceSoft extraction. The new AliceSoft System engine returned 0 translatable lines in 0.30.0 — fixed. Re-open your Rance / AliceSoft project (or create it again) and the messages now load for both System 3.x and System 4 games.
New engine — AliceSoft System. RuneTranslate now translates AliceSoft's System 3.x and System 4 games — the Rance series, Evenicle, Daiakuji and many more. It reads the game's message data directly and exports a fully translated copy you can play. Brand-new engine: translate a few lines and test the exported build before sharing a full patch.
Internal reliability and build-hardening improvements.
Translation memory correctness: fixed a case where a cached translation that was missing an engine control code could be reused and corrupt the exported game text. Such partially-translated lines are no longer cached or served from memory, and the duplicate-line memory path now applies the same control-code safety check as the main path.
Resizable editor layout: drag the divider beside the Files sidebar to widen or narrow it, and drag the column edges in the table header to resize the Source / Translation / Refined columns. Your sizes are saved and apply to every project.
Two editor changes: (1) The AI refiner is now opt-in — turn it on in Settings → Translation (the Refine button is off until you do). (2) Translation memory: you're asked once per project whether to use your memory or translate fresh, and that choice is now respected by the per-file and 'Translate using…' actions too (they previously always used memory).
Local model translation reliability: the local provider now keeps small batches and runs one at a time, instead of being pushed to larger batches that small local models miscount — which could trigger a slow line-by-line fallback and make batches take minutes.
Smoother editor scrolling on large projects, especially while a translation is running — UI updates during a run are now coalesced so the unit list no longer stutters.
Translation progress now shows which file is being worked on and flags slow or retrying batches, so a slow run no longer looks frozen. Added detailed translation logs to help diagnose stalls.
Fixed the AI refiner prompt reappearing on every translation after you chose "Always refine — don't ask every run"; it now refines automatically with your chosen model.
Stability and reliability improvements
Two fixes: (1) the editor's Source column now shows your project's actual source language (e.g. Source (ZH) / Source (KO)) instead of always 'Source (JP)'. (2) Security hardening — bundled engine tools (sidecars) are now integrity-checked: a modified/replaced tool is refused at run time, with the check sealed so it can't be quietly bypassed. No effect on a normal install; every engine works as before.
Cleaner Providers settings: the Settings → Providers screen is redesigned as a tidy master–detail layout — a grouped list of every provider on the left (with a status dot and a ★ for your default), and the selected provider's settings on the right. Set a default/favourite provider with the ★ and new projects start on it. Works across all 12 themes. Everything else (keys, models, presets, Test, local-model params) is unchanged.
YU-RIS fix: 0.25.25 extracted no dialogue from real YU-RIS games — the scenario text is stored as raw Shift-JIS (a form the parser skipped) and a too-strict check was discarding the scenario scripts entirely. Now the dialogue extracts correctly (verified on a real game: 5,350+ lines), and translated scripts re-encode + round-trip safely. If you translate a YU-RIS game, export and tell us whether the exported build runs in-game — that's the last thing we still need to confirm.
New engine: YU-RIS (raiL-soft) visual novels. RuneTranslate now opens .ypf packages and the compiled YSTB scripts inside ysbin.ypf, auto-recovers each script's XOR key, extracts the Japanese dialogue, and exports translated scripts by loose-file override (no repack). Newly added and best-effort — verify on your own YU-RIS game and report any that don't open on our Discord.
Fixes the crash when exporting a translation patch as Excel (.xlsx). The Excel export/import added in the last update now works in the installed app.
Translation patches can now be Excel files. When you Export patch, a popup lets you pick .rtpatch (for RuneTranslate users) or Excel (.xlsx) — edit the translations in Excel or Google Sheets, or hand the sheet to a translator, then re-import. Import patch now accepts .xlsx too (one picker, either format). The .rtpatch format is unchanged.
UI fixes: the Patch / More (⋯) toolbar dropdowns now open neatly under their button instead of jamming against the right edge; and the Excluded filter gained per-reason checkboxes so you can hide noise (e.g. ascii-only, plugin-key) and focus on the lines worth opting in.
Artemis engine: now translates the compiled binary scenario format (ASB) that many Artemis games ship instead of plain .ast/.txt — including titles that rename it to a custom extension such as .iet. RuneTranslate detects the compiled scenario by its signature, extracts the dialogue and choices, and exports it loose with no repack. (Earlier builds found no text on these games.) Still new — please report any Artemis game that does not open or load.
Added support for the Artemis engine — a Lua-based visual-novel engine used by ~730 titles on VNDB. RuneTranslate now reads Artemis .pfs archives (including encrypted PF8) and translates .ast / .txt scripts — dialogue, character names, and choices — exporting via loose-file override (no repack). Artemis support is brand-new and not yet verified on many real games; please report any issues on our Discord.
New: an animated tier badge in the top bar - a charming gold (Pro) / violet (Supporter) treatment for members, and a subtle shimmer for free. Plus minor UI polish.
Export now shows a real-time progress bar - current file, phase/step, counts and ETA - instead of a static spinner. A big help on large games (Unity, Bakin, etc.) where export takes minutes.
Unity (IL2CPP) games now translate text stored in MonoBehaviour components - e.g. Adventure Creator and Fungus visual novels that previously showed zero translatable lines. Best-effort; verify per game.
Smoother, more polished UI: subtle animations across dialogs, menus, navigation, and lists, plus button press feedback. Honors your system's reduce-motion setting.
The 'auto-fit overflowing menu/UI text' setting now applies to RPG Maker MV/MZ only (the Bakin menu-sizing attempt was removed — it wasn't reliable). Plus fixes and improvements.
RPG Developer Bakin: menu / UI labels too long after translation now grow their box (and wrap) so the text fits, instead of spilling out. Toggle in Settings → App. Plus fixes and improvements.
Auto-fit overflowing menu / UI text is now a general setting and works for RPG Maker MV/MZ too (lowers the UI font a notch on export), in addition to RPG Developer Bakin. Toggle in Settings → App. Plus fixes and improvements.
RPG Developer Bakin: menu / UI labels that are too long after translation now auto-shrink to fit their box (toggle in Settings → App). Plus fixes and improvements.
RPG Developer Bakin: speaker / character name translation now works across any game whose name-plate code matches your translated cast, not just one code style. Plus fixes and improvements.
RPG Developer Bakin: character / speaker names now translate (the \NPL[] name-plate codes). Existing Bakin projects just need a re-export — no need to re-translate. Plus fixes and improvements.
General bug fixes and improvements.
General bug fixes and improvements.
General bug fixes and improvements.
New engine: NScripter / ONScripter. RuneTranslate now translates NScripter and ONScripter visual novels - both the on-screen script text and baked-in image text (titles, menus, buttons) - into your language. Heads-up: this engine is brand new and has not been tested on many real games yet. If you have an NScripter/ONScripter game that does not load or translate correctly, please report it so we can harden support quickly. All other engines are unchanged.
Kirikiri visual novels: translated text and images now load in-game on encrypted titles that previously showed the original — the override is encrypted to match the game's own scheme, and is no longer skipped on signed builds that don't actually enforce signatures. Other engines unchanged.
Image translation UX: small & transparent images. Tiny button/label images now zoom up so there's room to draw a selection box, and the box no longer disappears when the cursor leaves the canvas. OCR on transparent button text (e.g. title-screen labels) is much more reliable — the crop is flattened onto a contrast background and contrast-stretched before recognition, and small crops are upscaled. Opaque images are unchanged.
Kirikiri: translate scrambled scripts. Many Kirikiri / KAG games store their scenario scripts in the standard scrambled form (FE FE <mode> FF FE) — these previously came through as garbled or near-empty. RuneTranslate now descrambles them on import and re-scrambles your translation on export so the game loads it exactly like an original. One real game went from 33 to ~6,900 translatable lines. Plain-text scripts are unaffected.
Kirikiri fix: games whose scenario scripts are stored in a COMPILED / binary KAG format (rather than plain text) no longer extract as garbled lines — those compiled scripts are detected and skipped, so projects stay clean. The project-inspection screen now warns when a game's scenario is compiled (only its plain-text scripts will translate). Note: some titles ship deliberately protected/compiled scenarios that can't be extracted.
Kirikiri image translation. The Images tab now works for Kirikiri / KAG visual novels — translate the text baked into images packed inside XP3 archives, including Kirikiri's native TLG format (TLG5/TLG6). Box the text, recognize, translate, and export injects the translated images back so the game loads them (loose files + patch2.xp3, signed-build aware). Recognition + clean inpainted backgrounds remain Supporter; free gets the local erase.
Image translation: clean backgrounds. Baked-in image text (menu/title/CG art) now has the text removed and the artwork behind it rebuilt before your translation is drawn on top — no more solid-color patch (Supporter+; free users get the local flat-fill erase). Also: clearer "no text detected" feedback on Recognize, and exported images keep their original format (PNG stays lossless).
Image-text OCR fixes (from the 0.24.0 feature):
New: translate text baked into game images (menu buttons, titles, HUD).
Kirikiri: support for signature-protected (signed) builds.
Stability & reliability release.
New: 'Re-scan source for new lines' (in the More menu) re-checks your game folder and adds any newly-detected text to your project without touching your existing translations — handy after an app update improves extraction. Also improves RPG Maker MZ coverage by extracting displayed text from plugin commands (while safely leaving plugin config untouched). No action needed.
Fixes a bug where re-translating a project (for example after switching translation providers) could discard your AI-refined lines. Refined lines are now protected from re-translation by default — you'll be asked to confirm before any refinement is overwritten. No action needed.
Security and anti-tamper hardening: the app now verifies the integrity of its bundled components at startup and reports tampering for review, with stronger account and device protection. Includes reliability improvements. No action needed - just keep translating.
ไม่มีการเผยแพร่บันทึกสำหรับเวอร์ชันนี้
Disable Lilac (api.getlilac.com) default 'thinking'/reasoning mode for OpenAI-Compatible translations — faster batches, lower token cost, and no chain-of-thought leaking into the output (Kimi K2.6 / GLM 5.1).
Fix Discord activity grammar: 'an RPG Maker game' (was 'a').
Discord activity now reads 'Translating a game' when no project is open.
Discord Rich Presence: while RuneTranslate is open it can show as a Discord activity (engine type only — never the game name). Toggle in Settings → App. Plus wider project cards.
Wider project cards on the home screen.
Collaborative projects now show a countdown of time left, and are auto-archived after 15 days with no edits (each edit resets the clock).
RuneTranslate is now fully localized — 18 interface languages.
Updated the in-app About page to reflect the new RPG Maker XP / VX / VX Ace engine, the AI refiner, and live collaborative projects (no functional change).
RuneTranslate now translates the older Ruby-based RPG Makers — XP, VX, and VX Ace — not just MV/MZ.
Data files and auto-decrypts encrypted RGSSAD archives (.rgssad / .rgss2a / .rgss3a) — just point it at the game folder.Notes: VX Ace outputs full Unicode; XP and VX render Shift-JIS, so they're best for English / romaji targets. Ruby Script (UI) strings aren't extracted yet — dialogue and the database are. Best-effort on encrypted games — please report any that don't decrypt.
Collaboration fixes + improvements:
Fix: opening a collaborative project could crash with "Cannot read properties of undefined" once another member's presence arrived. The live member roster is now passed through correctly, and the presence avatars are crash-proof. (Collaborative projects shipped in 0.19.0.)
Hosting a collab project needs the Supporter tier; joining is free.
RuneTranslate now translates into 32 target languages. Added Arabic, Thai, Traditional Chinese, Ukrainian, Indonesian, Bulgarian, Czech, Danish, Greek, Estonian, Finnish, Hungarian, Lithuanian, Latvian, Norwegian, Romanian, Slovak, Slovenian, and Swedish — pick any of them as your target. (DeepL covers all but Arabic and Thai; use OpenAI, Anthropic, or Google for those.)
Fixes the AI refiner appearing to stall at 0: the progress bar now tracks lines processed (advancing per batch even when the model keeps a line unchanged), and if the refine model errors (e.g. a wrong model name or rate limit) the run now stops and shows the error instead of sitting silently at 0.
Fewer rate-limit (429) errors on the OpenAI-compatible provider: paid concurrency lowered from 6 to 5 parallel requests so OpenRouter / NanoGPT / Groq and self-hosted gateways are less likely to throttle.
The AI refiner now runs as an optional pass AFTER translation finishes, not during it — so translation completes fast and you can export and start playing right away, then refine separately in the background. When a translation completes you'll be offered to refine; refined lines show in a 'Refined Translation' column next to the original.
New 'Refined Translation' column: when you run the AI refiner, each line now shows its original translation next to the refined version, so you can see exactly what the refiner changed or kept. Larger AI batch sizes (OpenAI / Anthropic / OpenAI-compatible) for faster translation with fewer requests.
AI refiner: dedicated concurrency so it no longer trips provider rate limits, plus the refiner progress bar now stays accurate through the end of a run. Patch export: the all-lines export now also includes excluded (non-translatable) lines.
Faster AI translation: increased parallel-batch concurrency for the AI providers (OpenAI, Anthropic, OpenAI-compatible) on both free and paid tiers.
Refiner progress - when the AI refiner is running, it now shows its own progress bar (and the model it's using) right below the translation bar, so you can see it working. The run summary also reports how many lines were refined.
AI translation refiner - when a translation starts, opt in to have a second AI pass proof-check and improve every line using the surrounding lines as context. Pick any LLM engine and type the model. Free on every tier (it runs on your own API key). Tune its instructions in Settings > Translation > AI refiner prompt.
Export patch (include untranslated) - the Patch menu can now export a full-line-set snapshot that also carries your untranslated lines; importing it never overwrites the recipient's own translations.
General improvements and bug fixes.
General improvements and bug fixes.
Polish and under-the-hood improvements.
The 'use your translation memory?' prompt now predicts how many lines will actually be served from memory (matching the run summary), instead of under-counting distinct cached phrases.
Clicking Translate now shows a 'Checking your translation memory…' spinner while it looks up your cloud TM, instead of the button appearing unresponsive for a moment.
Translation Memory improvements: it's now always on for Supporters (no toggle to forget), and translating asks whether to reuse your saved translations or translate everything fresh — so memory is never applied blindly. Manage your memory (browse, search, delete) from runetranslate.com → Account → Translation Memory; the local import/export/clear buttons are retired in favor of the web panel.
Cloud Translation Memory: your TM now lives in your RuneTranslate account — it syncs across every device you sign in on and survives reinstalls (a paid feature). Manage it on runetranslate.com → Account → Translation Memory (browse, search, and delete saved lines). Your existing local TM is uploaded to the cloud automatically on first launch. Works offline too — translation still runs, just without cloud cache hits until you're back online.
Unity/Fungus fix (3rd follow-up): the intro/prologue no longer stalls on Live2D games — Fungus StringVariable values (state tokens like a language flag or scene name) are now left untranslated so the game's If/comparison logic still matches. Completes the Unity Fungus hardening (flow operands + scene/message names + Cubism model names + variable values).
Unity/Fungus fix (follow-up to 0.17.1): menu buttons and character interactions no longer break after translating Live2D games — Live2D Cubism model part names (Name/DisplayName) are now left untranslated. Also adds a translation-memory guard that re-translates any cached entry which had dropped a {$name} placeholder, so the player name no longer goes missing on re-export.
Fix: Unity (Fungus-engine) games no longer freeze on the loading screen after translation. The translator now preserves Fungus variable keys, message and scene names, event-callback methods, and If/SetVariable comparison values, and keeps {$name}-style placeholders intact so the player name renders correctly.
New: Cheat Mode — a dedicated Cheats tab. Point it at any RPG Maker (MV/MZ) or Ren'Py game folder and inject a live, in-game cheat menu (offline single-player only); a one-click Remove cleanly undoes it.
RPG Maker: a hotkey-toggled overlay with Add 1000 gold, godmode, full heal, one-hit kill, no random encounters and walk-through-walls — plus Variables and Switches tabs that list and edit every game variable/switch live. Ren'Py: the built-in developer console (Shift+O) and a live variable editor.
Free for everyone; a few advanced cheats are part of a paid plan.
Editor: removed the "Untranslated" filter and added a "Show excluded" toggle (on by default) — turn it off to hide engine-excluded rows from every view: the unit table, search, and find & replace.
Hardening + Bug Fixes
Removed the over-eager 'code-referenced' exclusion that was leaving common names (HP/MP, status effects, equipment/menu terms) untranslated. Newly-created projects translate these normally again. The genuinely-useful fixes from that work stay: previously-missing RPG Maker plugin text is still extracted.
Excluded (opt-in) strings now show in orange instead of red, so they read as a heads-up rather than an error and stand apart from failed rows. The exclusion explanations are softer too — a flagged name 'may break' game logic rather than 'will'.
Editor: clicking Translate now opens a pop-up to pick which files to translate (with select-all and per-file string counts). New 'Untranslated' filter (pending + failed). The button shows 'Resume' on a partly-translated project. Searches with no matches now show '0 results found for …'.
Editor fix: translation rows no longer overlap each other when a project has many excluded (red) rows — the table now measures variable row heights correctly while scrolling.
Smarter translation filter (RPG Maker): automatically skips database names — skills, states, items, equipment/menu terms — that a game's own scripts look up by name, so translating them can't break game logic. They appear as opt-in rows you can still translate. Also: RPG Maker plugin text that previously never showed up for translation is now extracted; custom Electron VNs no longer leak code constants as translatable text; unified the per-engine exclusion logic under the hood.
Fix: the free (no-key) DeepL provider was translating everything to English regardless of the target language — it now correctly translates to all supported languages (Spanish, French, German, Portuguese, Russian, Chinese, Italian, Korean, Dutch, Polish, Turkish, Vietnamese).
Translation fix: internal placeholders (e.g. [[G4]]) can no longer leak into translated text, and RPG Maker %1/%2 name substitutions are now preserved correctly. Note: lines already translated before updating may still need a re-translate.
Localization fix: the Account page, sign-in screen, auto-update messages and several Settings panels were still showing English in Spanish, French, German, Portuguese, Russian, Chinese, Italian and Turkish — they are now fully translated.
All 8 interface languages (Spanish, French, German, Portuguese, Russian, Chinese, Italian, Turkish) are now fully translated — every screen, dialog and menu, matching English 1:1.
Add Vietnamese (Tiếng Việt) as an app interface language and as a translation source and target language.
Wolf RPG: fixes a hard crash on some translated V3 games. Root-caused with a debugger — certain message lines embed window render parameters at the end of the string; translating/padding them shifted those bytes and made the game try to allocate gigabytes of memory (instant crash on a scene load). The exporter now leaves those special lines in the original language and self-heals the rest (smart-quote/dash normalization, line-count and control-structure validation), so translated Wolf games play through. A few heavily-coded lines stay untranslated rather than crash.
Wolf RPG: self-healing translation writeback. Fixes crashes on translated Wolf games (V3/DXArchive v8 included) caused by corrupted in-message command codes — each line is now auto-repaired, and any line whose binary structure an AI scrambled falls back to the original text instead of crashing the game. Also stops the exporter from creating stray archives (e.g. CG.wolf) that broke some games.
Wolf RPG V3 support overhaul: archives now repack into a correctly-encrypted, game-loadable Data.wolf (fixes the crash / broken export on V3.x games), and in-text command codes are fully protected during translation so they're no longer corrupted. For an affected game, re-create the project and re-translate to apply.
Supporters/Pro now get at least 8 lines per batch (faster local-model runs). Wolf RPG: developer comment lines are now auto-skipped instead of cluttering the project — re-create the project to apply.
Wolf RPG: in-text command codes (the □ rectangles and tokens like U@20) are now protected during translation instead of being mistranslated into junk. Re-translate affected lines after updating.
Wolf RPG: fixes garbled/mojibake text on newer (V3.x) games — the extractor now auto-detects UTF-8 vs Shift-JIS from the actual content instead of guessing from the version header. Re-create the project to re-extract.
Fixes Wolf RPG extraction failing in the installed app with a 'Cannot find module ../encodings' error — Shift-JIS save/game text now decodes correctly.
Save Editor: you can now click the drop area to open a file picker, not just drag-and-drop.
Bigger default window (more room in the editor) and an updated About page that credits the engine tooling we built in-house — including the custom RPG Developer Bakin sidecar.
Translation Memory no longer caches game-code strings (identifiers, asset paths, system labels) — and Compact TM now sweeps any that were saved before. The Account page now lists every Supporter/Pro feature, with locked items marked so free users can see what they're missing.
Fixes the app not closing when you're signed out — the quit confirmation now works on the sign-in screen.
Custom filters: after applying a filter, if some now-excluded lines were already translated, you're now asked whether to reset them to pending — so the original text exports instead of the old (now-unwanted) translation. Engine exclusions are untouched.
Unity fix: scene names and Animator state/trigger names are no longer translated (those are internal identifiers — translating them caused black screens / broken scene loads). On-screen text still translates. If a Unity game broke after translating, re-create the project and re-export.
Unity: big improvement for Mono-backend games — text stored in MonoBehaviour components (e.g. TextMeshPro UI/dialogue) is now extracted by generating type info from the game's own assemblies, so many Unity games that previously found nothing now translate. Internal/engine strings are auto-excluded.
New: per-project custom regex filters — define patterns (with live preview + a regex helper) to auto-exclude lines from translation, game by game. Fix: the OpenAI-Compatible API provider now saves its key and is usable in projects.
OpenAI-Compatible API: the model field now lets you type any model name freely with autocomplete from the provider's live list — no more forced dropdown. Minor fixes.
New provider: OpenAI-Compatible API. Use any hosted OpenAI-compatible service — OpenRouter, NanoGPT, and others — by entering your API key + base URL (one-click presets included) in Settings → Providers, then picking from the provider's live model list.
SRPG Studio: cleaner string extraction — internal/system tokens (event command types, config keys) are now auto-excluded so you only translate real in-game text. Bug fixes.
New engine: SRPG Studio support. RuneTranslate can now detect SRPG Studio games, unpack the data.dts, translate all in-game text (story, maps, database, items, events), and export a fully translated copy. Best-effort — please verify on your game and report issues on Discord.
Local model: you can now set the temperature and add advanced request parameters (topp, maxtokens, Ollama options, etc.) under Settings → Providers. Also tidied the project editor — Export/Import patch are now a single Patch menu.
Easier patch sharing: a new guided 'Import patch' button on the Projects tab. Pick a shared .rtpatch and it shows which game/engine/language it's for, asks you to point at your own copy of the game, then creates the project and applies the translations automatically. Plus reliability fixes for patch import.
New: share translations as a patch. Export your finished translations to a .rtpatch file (no game files included) that another owner of the same game can import and re-export — works across all engines. Free includes 1 export + 1 import; paid is unlimited.
Added a Discord community link in the top bar and on the About page — join to get help, request engines, and report bugs. Plus minor fixes and improvements.
Bug fixes and stability improvements.
New (Supporter) Auto-glossary: one click scans your whole game for recurring character names and terms, auto-suggests romanized translations, and adds the ones you approve to your glossary — so names and terminology stay consistent across the entire game. Find it as the ✨ Auto-glossary button in the project toolbar.
Failed lines now retry automatically. When a provider or local model can't translate a line on the first try (a transient/non-deterministic glitch), the app now re-attempts the still-failed lines up to 3 more times at the end of the run — no need to click Retry. It stops early once a pass stops making progress, so it won't waste time or API calls on genuinely untranslatable lines.
Translation-quality fix: code identifiers, engine variable references (e.g. TyranoScript f.page / f.selectedcgimage), asset paths and UI label tokens are now consistently excluded from translation across every engine (Tyrano, Kirikiri, Unity, Wolf, Bakin, RPG Maker, Ren'Py), so they no longer get mistranslated and break the game. Per-source-language exclusion behaviour is unchanged.
Maintenance update. Refreshes the in-app About page to document the new Kirikiri compiled-scenario (PSB .scn) support and the patch.xp3 export. No functional change to translation — primarily a release to confirm the more reliable full-file auto-update path introduced in 0.14.8.
Kirikiri compiled-scenario games + update reliability.
• Kirikiri/KAG: translated PSB '.scn' scenario now loads in-game even on titles whose Initialize.tjs disables the AfterInit2 hook (e.g. Lose's Monobeno) — the export now also writes a patch.xp3, the engine's own override mechanism. Verified in-game.
• Auto-update: downloads no longer stall partway (e.g. 'stuck at 68%') — the updater now fetches the full installer instead of a block-level diff, which is far more reliable.
• The update 'Download' button now disables and shows 'Starting…' the moment you click it, instead of looking stale and accepting repeated clicks.
Kirikiri PSB scenario: smarter filtering. Scenario file references and asset/command ids inside compiled .scn games (e.g. bgm/cg names, scene-jump filenames like '…夏葉.txt') are now correctly skipped instead of offered for translation — so a 'translate everything' pass can't accidentally break music, CG, or scene jumps. Builds on 0.14.6's PSB scenario support.
Kirikiri/KAG: translate compiled PSB scenario. KirikiriZ games (e.g. Lose's Monobeno) that compile their dialogue into PSB '.scn' files are now fully translatable — RuneTranslate reads the text out of the PSB binary, translates it, and repacks it, leaving bgm/cg/voice asset references untouched. Combined with the recent fixes for plugin-subfolder detection and large compressed archives, these games now work end to end. (Encrypted/MDF PSB scenario is still skipped.)
Better Kirikiri / KAG game support: RuneTranslate now detects KirikiriZ games that keep their engine files (krmovie.dll, .tpm) in a plugin/ subfolder or ship signed builds (.exe.emb / .xp3.sig), and it can now open large Kirikiri archives whose file index is compressed — these previously failed to load. (Note: a few Kirikiri titles store their script in a compiled PSB '.scn' format that still isn't translatable yet.)
DeepL (Free) now handles rate limits gracefully: requests are paced to stay within DeepL's free quota, and if the limit is hit it tells you to wait or switch instead of stalling. Best for small jobs; use Google (free) or a DeepL key for whole games.
New free translation option: DeepL (Free) — DeepL-quality translation with no API key. Pick it under Settings - Providers.
Two new pastel themes: Sakura (soft cherry-blossom light) and Cotton Candy (pink & purple dark). Pick them under Settings - Appearance.
Update notifications got better: when a new version is available the banner is clearer and has a "What's new" link, and after updating, RuneTranslate now shows you what changed.
Fixed local-model translation with LM Studio: RuneTranslate now adapts to servers that reject the json_object response format, so LM Studio (and similar OpenAI-compatible servers) work for both the connection test and actual translation.
EVB-packed RPG Maker games now export a complete, ready-to-run translated copy into the folder you choose (run the game from there). Fixes translations not applying in-game for Enigma Virtual Box-packed titles.
Added support for RPG Maker MV/MZ games packed with Enigma Virtual Box. These games (common on DLsite) previously showed "no supported engine detected" — RuneTranslate now unpacks the embedded data, translates it, and applies the translation in place automatically.
Smarter exclusions: lone GUI/widget-label words (namebox, window, vertical, slot, radio, slider, help, confirm, etc.) are no longer offered as translatable lines when they appear by themselves — but the same word inside a sentence is still translated. Applies to all engines.
Ren'Py: translated exports now actually apply in-game. The exporter writes a content-matched translation layer (dialogue + menus) plus UI string translations, and activates them automatically — works on source, compiled, and archived (.rpa) games, without disturbing games that have their own language systems.
Ren'Py: asset and resource paths (e.g. gui/.../door_hover.png, audio/bgm.ogg) are no longer offered as translatable lines — they're auto-excluded along with code identifiers, while real dialogue stays translatable.
Fixes a bug where non-Japanese source projects (e.g. English -> Turkish on Ren'Py) marked every line as 'ASCII ONLY' — now only genuine code/keys stay flagged. The Projects screen, editor, and New Project dialog are also fully translated into all 9 UI languages.
Reliability & diagnostics: the app now records a log even if it crashes, and a game folder that can't be inspected shows a clear error instead of closing. New: About -> Troubleshooting has 'Open logs folder' and 'Copy diagnostics' buttons to make sending logs to support a one-click job.
Community translation counter: RuneTranslate now contributes the number of lines you translate to the public total on runetranslate.com. Only an anonymous count is sent (never any text or game data); you can opt out in Settings -> App.
Stability and packaging improvements.
Find / Replace overhaul: separate Find (Ctrl+F) with prev/next match navigation, in-view highlighting and an M/N counter, plus a dedicated Replace (Ctrl+H) mode with Replace and Replace All scoped to the current view.
Fix: Japanese is now selectable in the source-language dropdown (it was missing from the language list). Pick any of 13 source languages when creating a project; defaults to Japanese → English.
Configurable source language: pick the language a game is written in when creating a project (defaults to Japanese → English), savable as a default in Settings. Supports all 13 languages as source — translate Chinese, Korean, English (and more) games, not just Japanese. Providers, the AI prompt, and text extraction are all source-aware.
RPG Developer Bakin: full text coverage. Exported Bakin games now translate database names, story dialogs, AND the in-game menus / choices (はい/いいえ, ESC menu), and default to the translated language. If you translated a Bakin game on an earlier build, re-create the project (it now extracts menu + all dialog text) and re-export.
Fixes RPG Developer Bakin exported games launching to a black screen (the repacked data.rbpack now preserves the game's media section exactly). If you exported a Bakin game on 0.10.0, re-export it on 0.10.1. Bakin database + event text translation applies through Bakin's own localization as a selectable in-game language.
RPG Developer Bakin support — translate database text (items, skills, characters, classes, conditions) and event/scenario text from Bakin games. Translations ship through Bakin's own localization system as a new in-game language you select on the title screen. Best-effort; verify on your game. Also: broader exporter robustness.
v0.9.3 — fix: saved theme (and UI language) now apply at app startup, not only after opening Settings
v0.9.2 — Theme picker: dedicated Settings → Theme sub-tab with 10 selectable color themes (Dark default, Light, Dracula, Nord, Gruvbox, Solarized Dark, Tokyo Night, Rosé, Ocean, Forest)
v0.9.1 — About tab updated for Unity engine + Local Model provider (content-only refresh of v0.9.0's engine support)
v0.9.0 — Unity engine support (best-effort, externalized text), +11 Kirikiri encryption schemes + single-byte-XOR solver, RPA-4.0 / obfuscated Ren'Py archive support
Critical export fix
New: in-app "Report a problem" button
Plus the v0.7.0 Local Model (Ollama / LM Studio) provider and translation reliability fixes.
New: Local Model translation (Ollama / LM Studio)
Reliability
v0.6.6 — Renderer-integrity check now actually runs. It was failing open with ENOENT because the engine adapters set process.noAsar=true at load (to read external game asars), which disabled Electron's asar-aware fs and broke reading our own renderer bundle inside app.asar. The check now toggles asar-aware fs on for its own read. No user-facing changes.
v0.6.5 — Hardening + hygiene. Renderer bundle is now actually obfuscated (string-array + mangled identifiers via a deterministic post-build pass; the old Vite-plugin approach was being undone by esbuild re-minify). Removed dev-only files that were leaking into app.asar (publish tooling, scratch SQL). No user-facing feature changes.
v0.6.4 — Full localization pass for the Save Editor: the Tyrano/Ren'Py/RPG Maker support strings (drop hints, supported-format messages, 'no editable variables' notice) are now translated across all 9 UI languages (en/es/fr/de/pt/ru/zh/it/tr), not just English. No functional changes.
v0.6.3 — Save Editor adds Ren'Py (.save) support: edits primitive store variables (gold, flags, stats) via the bundled Python sidecar, with the same auto-save + one-time .rt-backup + revert flow. Best-effort — complex objects round-trip untouched and the sidecar self-verifies the rewritten save re-loads before writing. Also renamed the 'Projects' tab to 'Translation Projects'. (Wolf RPG saves are a closed/undocumented binary format and are not yet supported.)
v0.6.2 — Save Editor now also reads TyranoBuilder / TyranoScript saves (.sav, percent-encoded JSON): edit game variables (f) and system variables (sf) with the same drag-drop, auto-save and one-time .rt-backup flow. RPG Maker MV/MZ support unchanged. (Ren'Py and Wolf RPG saves coming next.)
v0.6.1 — New: standalone Save Editor (RPG Maker MV .rpgsave + MZ .rmmzsave). Drag in a save file to edit gold, party HP/MP/level/exp, variables, switches and inventory; changes auto-save with a one-time .rt-backup you can revert. Variable/switch labels are auto-detected from the game's System.json when the save sits in the game folder, with a 'Translate labels' button to render them in your language (visual only). Fully localized across all 9 UI languages. Also includes the v0.5.x performance + cleanup pass (virtualized unit table, debounced project saves).
v0.5.1 — keep paid-feature toggles (TM, routing) where the user left them when tier drops to free. Server allowance is the real enforcement; auto-resetting their settings on every refund/lapse/admin-revoke was destroying config.
v0.5.0 — desktop perf + cleanup pass: virtualized unit table (no more 500-row cap), single-pass progress stats, debounced project saves, Settings/ProjectEditor split into focused files, EtaTracker + deriveGroupKey extracted.
Fixed leakage of multi-letter plugin control codes (FFF, FH, MMM, AA) into translated text — these used to show as garbage like "FF[20]", "H[ON]", "MM[no]" because only the first letter after the backslash was masked. Now the whole code (e.g. FFF[20], FH[ON]) is preserved through translation.
Toolbar provider dropdown now sticks across tab switches.
Before: switching to Settings / Home / About and back to the project editor caused the provider dropdown to reset to the default (DeepL). Root cause was the project-editor remount cycle: ProjectEditor unmounts when navigating away, useState reinitializes provider="deepl" on remount, and the load-from-disk effect short-circuits because the project is already in the zustand store (no need to reload). The setProvider call never fires after remount.
Fix: (1) added a sync effect that calls setProvider whenever currentProject.lastProvider changes — including on remount when the project is already in the store. (2) the dropdown onChange now also updates the zustand store, so the user choice survives the mount/unmount cycle even before they click Translate.
No other functional changes from 0.4.10.
auth init now blocks on the first heartbeat (up to 2s).
Before: AuthService.init returned immediately after firing the heartbeat as fire-and-forget, then the main process moved on to createWindow. The window opened with whatever tier was in the cached JWT (often stale), and the heartbeat updated the UI asynchronously when it eventually completed. Users saw a free → pro flash on every cold start.
After: init awaits the heartbeat or a 2s timeout, whichever resolves first. With the admin-override fast-path on the website, real heartbeats are sub-300ms, so init completes well within the timeout and the window opens with the correct tier already baked in. If the network is slow or unreachable, the 2s timeout fires and init returns with cached tier — the heartbeat continues in the background and updates the UI when it completes (single tier transition instead of long-lived flash).
Also: added [auth] /api/me HTTP <status> in <duration>ms timing line to main.log on every heartbeat. Diagnostic visibility for future tier-update issues.
Persist server-decided entitlement document across app restarts.
The AuthService used to cache the server-decided tier (with 6h TTL) in MEMORY only. On every app restart, the cache was empty → tier() fell back to the JWT claim → JWT was minted at the last heartbeat → might be stale if the server later applied an admin override or Patreon detected a change. Users saw a "free → pro" flash for one heartbeat round-trip on launch.
0.4.9 persists the entitlement to <userData>/entitlement.json on every successful heartbeat. On launch the AuthService loads it before emitting the first change event — UI renders the correct tier from the very first paint. Cleared on logout.
This is the launch-flash fix that, combined with the admin-override fast-path in the website (deployed earlier this session, sub-200ms /api/me when an override is active), should fully eliminate the free→pro flicker on app startup for admin-overridden accounts.
No other functional changes from 0.4.8.
Soft-match recovery for dropped glossary placeholders.
Failure pattern in earlier versions: the LLM (typically gpt-4o-mini) translates correctly but forgets to include the [[G#]] placeholder in its output. For source 軽い[[G0]] with G0=Dagger, the LLM produces Light Dagger directly instead of Light [[G0]]. The translation is correct, but the placeholder bookkeeping was strict — unit got marked failed with Provider dropped 1 placeholder for term "短剣" ([[G0]]).
In 0.4.8, when a placeholder is missing from the output BUT its target term appears as a whole word, the restorer accepts the translation. Detection is whole-word, case-insensitive, supports multi-word targets, and tracks per-target budget to handle the edge case where multiple placeholders share a target.
6 new tests cover: simple soft-match, missing-when-target-absent, case-insensitivity, whole-word boundary, multi-word targets, budget tracking across same-target placeholders, budget interaction between restored AND soft-matched placeholders.
Expected impact: significant reduction in the false-failure rate on gpt-4o-mini glossary-heavy projects. The Failed tab on existing projects can be re-translated with this version to recover units that the LLM actually translated correctly but the old strict check rejected.
The "Light Armor Armor" / "Heavy Armor Armor" / "Hunter Hunter" bug pattern is now fixed at the restore step. When the LLM accidentally writes the glossary target word right next to the placeholder, the restorer drops the placeholder instead of duplicating the word.
Examples now produce correct output:
Light Armor [[G0]] (G0=Armor) → "Light Armor" (was "Light Armor Armor")Heavy Armor [[G0]] of doom → "Heavy Armor of doom"[[G0]] Armor of doom → "Armor of doom"Wearing Armor, [[G0]] strong → "Wearing Armor, strong"Heavy Armor [[G0]]\nNext line → "Heavy Armor\nNext line" (newlines preserved)Far-away references are NOT dedup-collapsed. "The Armor protects you. [[G0]] reduces damage." correctly restores to "The Armor protects you. Armor reduces damage." — only IMMEDIATELY adjacent words trigger the dedup.
Supports multi-word targets ("Goblin King"), is case-insensitive, and strips punctuation from the inspected adjacent word.
Reverted the 0.4.3 diagnostic-mode change. Ctrl+Shift+I no longer opens DevTools in packaged builds. The diagnostic infrastructure added in 0.4.3 (failure toasts, expanded main.log error coverage) stays in place — users get actionable error messages without the social-engineering attack surface of DevTools.
9 new tests cover the anti-duplication edge cases (case-sensitivity, punctuation, multi-word targets, newline preservation, distant occurrences not triggering false-positive dedup).
Fix: "Cannot find module bindings" when enabling Translation Memory in 0.4.5.
0.4.5 fixed the first half of the asar.unpacked redirect bug: require("better-sqlite3") works via explicit absolute-path require. But better-sqlite3 internally requires bindings (which locates the native .node binding), and bindings was still INSIDE the asar. Code running at app.asar.unpacked/.../better-sqlite3/lib/database.js walks the filesystem looking for bindings — never crosses back into the asar — fails.
Fix: also unpack bindings and its transitive dep file-uri-to-path so they sit side-by-side with better-sqlite3 in app.asar.unpacked/node_modules/. Node finds them via normal filesystem traversal.
No other functional changes from 0.4.5.
Fix: "Cannot find module better-sqlite3" when enabling Translation Memory in 0.4.0 / 0.4.1 / 0.4.2 / 0.4.3 / 0.4.4.
Root cause: electron-builder auto-detects native modules and force-unpacks the WHOLE package (not just the .node binary) when ANY .node file is present in the module tree. The JS files (lib/index.js, package.json) get physically removed from the asar archive — the header keeps stub entries marked unpacked: true, expecting Electron is runtime to follow the redirect to app.asar.unpacked.
In our specific config — bytenode-compiled main process + asar integrity validation fuse enabled — the redirect did not fire for Module._resolveFilename. Node returned Cannot find module better-sqlite3 even though both the asar listing and the on-disk unpacked dir had the files.
Fix: in packaged builds, require better-sqlite3 by absolute path under process.resourcesPath/app.asar.unpacked/node_modules/better-sqlite3 instead of relying on Node module resolution. Sidesteps the broken redirect.
Affected users: anyone on 0.4.0–0.4.4 who tried to enable Translation Memory and saw "Translation failed: Cannot find module" or stuck "..." in the Settings TM stats badge.
No other functional changes from 0.4.4.
Diagnostic build:
No other functional changes from 0.4.2.
Default LLM system prompt rewritten to be much more refusal-resistant on adult / eroge / doujin content. Frames the model as a professional translator working on an official adult localization, with explicit rules against substituting character names or short safe outputs for sentences the model would rather not engage with. Adds extra examples for non-verbal onomatopoeia (んごぉ → Ngooh, おぶっ → Ohf). Targets the gpt-4o-mini silent-refusal pattern that produced ~167 character-name hallucinations in real user data.
No other changes — same 0.4.0/0.4.1 SQLite migration + contamination filter + project scan + Compact TM button.
Users running 0.4.0 (which had a misplaced i18n key) or 0.4.1 should update — 0.4.2 carries 0.4.1\'s i18n fix forward.
Fix: the "Compact TM" button in Settings was showing the literal i18n key settings.translationMemory.compactCsv as its label. Root cause: when I added the new keys to the 9 locale JSON files, my Edit anchor (the exportedToast line) matched the GLOSSARY block first, not the translation-memory block — both had an exportedToast key. The compact keys ended up at settings.glossary.compactCsv, but the button looks them up under settings.translationMemory.compactCsv. Moved the keys to the correct block in all 9 locales.
No other changes — same 0.4.0 SQLite migration + contamination filter + project scan features.
Provider dropped 1 placeholder for term "敵" ([[G0]]) instead of just (敵).Translation failed.Translation Glossary (Supporter+). Force-substitute source→target term pairs in every translation batch — character names, place names, signature attacks stay consistent across the whole game regardless of provider. Settings → Glossary. Works on DeepL, OpenAI, Anthropic, Google Translate via placeholder masking. Same gating as Translation Memory + Provider Routing.
When the server tells the desktop you are free tier (admin revoke, Patreon refund, sub lapse), the locally-stored paid-feature toggles now auto-reset to defaults. Translation Memory turns off, Provider Routing switches to "off". Settings UI matches actual entitlement instead of showing toggles that secretly do nothing. API keys, custom prompts, language prefs, project list — all untouched.
Faster tier propagation. The desktop now refreshes your account status from the server whenever you focus the app window (debounced to once per 60s). Previously a tier change — admin override, Patreon renewal, refund — could take up to 4h to take effect locally; now it propagates within seconds of you alt-tabbing back to the app. Manual refresh button in Settings → Account also continues to work.
Failed-row indicator on the filter chip. The "failed" filter button now shows a small red 1+ / 10+ / 100+ badge when the project has failed rows, so you can see at a glance that something needs attention without having to click into the tab. Tiered so the chip width stays predictable on big projects.
RPG Maker MV/MZ character name translation. Two fixes: (1) MZ "Show Text" event code 101 now extracts + writes back the speaker name in parameters[4] — that's the name shown above the dialogue box and was previously skipped entirely. (2) Tightened the plugin-key heuristic so dialogue with a trailing colon like "アリス:「やあ」" no longer gets silently marked excluded. Recreate the project to pick up the new units.
Progress-bar fix: excluded units no longer inflate the denominator. A project where every translatable unit is done now reaches 100% even when red rows exist. Sidebar group buttons + home-page project cards + in-flight live progress all use the same definition.
Excluded units are now always visible alongside regular units. The "excluded (N)" button sits inline with the other status filters (all / pending / translated / edited / failed) and shows just the excluded list when clicked. No hide toggle.
The Image Studio now works for Electron games. Their artwork lives inside app.asar, so
the gallery used to come up empty. Images are now listed straight out of the archive — 528
images in well under a second on a 2 GB game — and Cocos Creator titles show each picture under
the name the developer gave it (Texture/mainUi/btn_3) rather than a random id. Edited images
are written back into the archive.
Asset ids are no longer offered as translatable text. Cocos games load audio and artwork by
string, and those strings are often written in Japanese (voice/イベント_006), so they looked
like ordinary text. Translating one breaks loading. They are now shown as red opt-in rows
instead — 564 of them on the test game, with no dialogue affected.
Games often bake the same caption into many pictures. You can now select one or more text
boxes, press Ctrl+C, open another image, and press Ctrl+V — or use the new Copy and
Paste buttons beside Delete. The translation, font, colour, size and rotation all come across,
so a repeated caption only has to be typeset once. Boxes pasted onto a smaller image are kept
inside the canvas.
Settings → workspace size. It could previously grow without ever being cleaned up.
finishing with a silent "Done".
Editor conveniences. Drag a box over the lines to select them — no need to turn on a mode first, and the Select button is gone. The refiner now remembers a model for each engine separately, so switching between a local model and an API model no longer clears what you typed. And reopening a project returns you to the file and line you were last working on instead of resetting to All.
To pick the Ren'Py and Godot changes up on an existing project, use "Re-scan source" in the ⋯ More menu, or create the project again.
To pick the Wolf changes up on an existing project, use "Re-scan source" in the ⋯ More menu, or create the project again.