RuneTranslate now translates YU-RIS visual novels
RuneTranslate now translates YU-RIS-engine (raiL-soft) visual novels into English and 30+ languages. It reads the .ypf packages in pure TypeScript and the compiled YSTB scripts inside ysbin.ypf, recovers each script's XOR key automatically, extracts the Japanese dialogue, and exports the translated scripts loose so the game loads them with no repack. Newly added and not yet verified on many real games — report any game that doesn't open.
RuneTranslate now reads another engine that has long been a wall for fan translators: YU-RIS, the Windows scripting engine by raiL-softbehind hundreds of doujin and commercial Japanese visual novels. If you've ever opened a YU-RIS game folder, found a pac/ directory full of .ypf archives and a ysbin.ypfwith nothing readable inside, and given up — that's the engine. RuneTranslate now detects it, opens those packages in pure TypeScript, reads the dialogue out of the compiled scripts, and exports a translated copy the game loads on its own. It's the latest engine RuneTranslate supports.
This is a brand-new engine and the honest part comes first: YU-RIS support is freshly built and has notyet been verified across many real games. So before anything else — if you point RuneTranslate at a YU-RIS game and it doesn't detect, doesn't open, or exports something the game won't load, please tell us. More on how, at the end.
What the YU-RIS engine actually is
YU-RIS (sometimes written ゆーりす) is a Japanese visual-novel scripting engine by raiL-soft. A finished YU-RIS game is a Windows .exe plus a set of .ypfpackage archives — usually in a pac/folder — that hold the art, audio, and scripts. The scenario itself is compiled: the readable script a developer writes is built into a binary format called YSTB, stored as the .ybn files inside ysbin.ypf (at internal paths like ysbin/yst00000.ybn). That “compiled scenario inside a packed archive” combination is exactly what has kept the engine's big back catalogue out of reach for ordinary machine-translation tools.
Why YU-RIS games have been so hard to translate
Compared to a source-driven engine like Ren'Py, YU-RIS hides its text behind several layers:
- Everything lives inside
.ypfpackages.The scripts aren't loose on disk — they're packed into YU-RIS's own.ypfcontainer, with obfuscated filenames and zlib-compressed entries. Without a reader for that format, there is nothing to edit in the first place. - The scenario is compiled, not text. A
.ybnisn't a script you can open in Notepad — it's a binaryYSTBcontainer split into four sections (an instruction stream, an argument-descriptor table, a string table, and line numbers). The actual Japanese lives in the string table, referenced by the descriptors. - The scripts are XOR-encrypted. Each
YSTBscript's four data sections are scrambled with a 4-byte key. You have to recover that key before any of the text is readable — and the key varies per game. - Not every string is dialogue.The string table also holds variable names, asset paths, and expression operands the script logic compares against. Translate one of those by accident and the game's flow quietly breaks.
The net effect: even a fluent reader first has to unpack a proprietary archive, then parse a compiled binary, then break the XOR, then tell the dialogue apart from the engine's internal strings — before a single line gets translated. That's the work RuneTranslate now does for you.
What RuneTranslate does now
RuneTranslate treats YU-RIS as a first-class engine and handles the whole pipeline in pure TypeScript — no external tools, no Python sidecar, nothing to install:
- Reads
.ypfpackages directly.It opens the archives in-house, decompresses the entries, and recovers the obfuscated filenames — no GARbro or separate unpacker. Already extracted the game yourself? A looseysbin/folder of.ybnscripts is detected too. - Parses the compiled
YSTBscripts and breaks the encryption. It recovers each script's 4-byte XOR key automatically from the argument-descriptor table, decodes the Shift-JIS string table, and lists every Japanese line in the editor, grouped by script file. - Knows dialogue from machinery. Variable names, asset paths, and expression operands are surfaced but excluded by default— shown as red opt-in rows — so you never accidentally translate a string the story logic compares against.
- Preserves the inline control codes. Backslash codes (newline, colour, ruby) and bracketed tags woven through the message text are masked behind numeric placeholders before anything reaches the provider, then restored exactly on the way out.
- Exports without repacking.On export it rebuilds each translated script — patching the string-table offsets so a longer or shorter translation fits, and re-applying the same XOR key — then writes the
.ybnloose at its original archive path. The YU-RIS runtime prefers a loose file over the same path packed in a.ypf, so the game simply reads your translation. There is no repack. (It's the same loose-file override approach as our Kirikiri patch flow and our Artemis support.)
Japanese → English is the sweet spot, but you can target any of 30+ languages— Spanish, French, German, Portuguese, Russian, Chinese, Italian, Turkish, Vietnamese, and more.
What you need
- RuneTranslate for Windows— free; every engine and provider is unlocked (the free tier is throttled on speed, not features).
- A YU-RIS game folder. This is the directory containing the game's
yu-ris.exeand its.ypfpackages (typically in apac/subfolder, with the scripts inysbin.ypf). - A target language — English, Spanish, French, German, Portuguese, Russian, Chinese, Italian, Turkish, Vietnamese, and 20+ more.
- One translation provider. Free Google Translate works out of the box; DeepL has a free tier; OpenAI, Anthropic, a local model (Ollama / LM Studio), and any OpenAI-compatible API are bring-your-own-key. YU-RIS games are dialogue-heavy, so an LLM (OpenAI / Anthropic) or DeepL usually reads best.
Step 1: Open the game folder
Launch RuneTranslate, click New project, and point it at the YU-RIS game directory. Engine detection runs automatically — when it sees a .ypf package (or a loose ysbin/ folder of .ybn scripts), it recognises the project as YU-RIS. Your original game folder is never modified.
Step 2: How the scripts get read
RuneTranslate opens the .ypf packages, pulls the compiled YSTB scripts out of ysbin.ypf, recovers each script's XOR key, and decodes the Shift-JIS string table — listing every Japanese line in the editor, grouped by file. The engine's internal strings (variable names, asset paths, expression operands) are shown but excluded by default, and the inline control codes are masked behind numeric placeholders so the provider never mangles them.
Step 3: Translate
Pick a provider and run. For a visual novel, an LLM (OpenAI / Anthropic) is best for character voice and tone, DeepL is fast and clean for narration, and free Google Translateis fine for short menu strings and choices. Glossary your cast and recurring terms up front so names render identically across the whole game — see Glossary 101. When you're done, an optional pass with the AI refiner re-reads each line in context and tightens up the stiff, literal phrasing machine translation tends to leave behind.
Step 4: Export a ready-to-run copy
Click Export. RuneTranslate writes a translated copy of the game with each rebuilt .ybn placed loose at its original archive path, alongside the untouched .ypf packages. There's no repack— YU-RIS loads the loose scripts in preference to the packed originals, so the game just reads your translations. Run it, and it plays in your target language.
Known limitations
- YU-RIS strings are Shift-JIS (cp932).English and other cp932-representable targets export cleanly. Targets with characters outside cp932 — extended Cyrillic, Korean, Traditional Chinese — need a game-font/encoding hack that isn't automated yet.
- The loose-file override is the expected load path, and on most YU-RIS games it works because the engine prefers a loose script over the packed copy. On the rare title that doesn't honour that, the export may need adjusting — exactly the kind of real-game behaviour we're still confirming.
- Text baked into image art— a title screen or menu button drawn as a bitmap — is pixels, not script text. For that, see image-text translation.
- The exact archive and script variant can differ between releases. Always verify on your specific copy.
It's brand new — tell us what breaks
Worth repeating plainly: YU-RIS support is a fresh addition and has not yet been tested across many real games. The .ypf reader, the YSTBparser, and the key recovery are built and unit-tested, but the engine has years of per-studio variation we haven't all seen. So if you point RuneTranslate at a YU-RIS game and it doesn't detect, doesn't open the archives, extracts nothing, or exports something the game won't load, please report it on our Discord — the game's name and how it's packaged is exactly what helps us harden it fastest.
Download RuneTranslate, point it at that YU-RIS VN you've been wanting to read, and try it. For a look at how we handle another archive-based VN engine, read the Artemis walkthrough next.
Ready to try RuneTranslate?
Free tier unlocks every engine + every translation provider. Supporter ($3/mo) unlocks full speed.
Download for Windows