Supported engine · YU-RIS
YU-RIS (by raiL-soft) is a long-running Windows scripting engine behind hundreds of doujin and commercial Japanese visual novels. Its resources live in .ypf package archives, and the scenario is compiled into YSTB scripts (the .ybn files inside ysbin.ypf, at internal paths like ysbin/yst00000.ybn). RuneTranslate reads the .ypf packages in pure TypeScript — no GARbro or external tools — decompressing entries and recovering each archive's filename key, then parses the compiled YSTB scripts: it splits the four sections (instructions, argument descriptors, string values, line numbers) and recovers the script's 4-byte XOR key automatically from the descriptor table, so encrypted scripts open without a key hunt. From there it pulls the Japanese dialogue out of the string table and lists every line in the editor, while leaving the engine's command operands, variable names and asset paths excluded by default so you never translate something the script logic compares against. On export it rebuilds the string table — patching every offset so longer or shorter translations fit — re-applies the same XOR key, and writes the translated .ybn loose at its archive path. Because the YU-RIS runtime reads a loose file on disk in preference to the same path packed in a .ypf, the game simply loads your translation — there is no repack. This is a brand-new, best-effort engine still being verified across real games, so test the exported build before redistributing.
Visual novels lean on a fixed cast and recurring terminology across thousands of lines, and machine translation will spell a heroine's name three different ways across three chapters. Glossary your characters, place names, and recurring terms up front so every line of dialogue renders them identically. Glossary 101 →
Point RuneTranslate at the game directory — the folder with the game's yu-ris.exe and its .ypf packages (usually in a pac/ subfolder, with the scripts in ysbin.ypf). If you've already unpacked the game with GARbro, a loose ysbin/ folder of .ybn scripts is detected too. Engine detection recognises the YU-RIS layout automatically; your original folder is never modified.
RuneTranslate opens the .ypf packages in pure TypeScript, decompresses the entries, and parses the compiled YSTB scripts inside. It recovers each script's 4-byte XOR key automatically from the argument-descriptor table — no key hunt — decodes the Shift-JIS string table, and lists every Japanese line in the editor grouped by script file. Engine command operands, variable names and asset paths are surfaced but excluded by default so the story logic stays intact.
These games are dialogue-heavy and tone-sensitive, so an LLM (OpenAI GPT-4o / Anthropic Claude) or DeepL usually reads best; free Google Translate or a local model (Ollama / LM Studio) covers short menu strings and choices, and you can point the OpenAI-compatible provider at OpenRouter or NanoGPT. An optional AI-refiner second pass tightens the literal phrasing.
YU-RIS message text threads backslash control codes (newline, colour, ruby) and bracketed tags through the dialogue. RuneTranslate freezes every one of them as numeric placeholders during translation and restores them on the way out, so the translated line keeps the same formatting and pacing as the original.
On export, RuneTranslate copies the game and rebuilds each translated YSTB script — patching the string-table offsets so any-length translation fits and re-applying the same XOR key — then writes it loose at its original archive path (e.g. ysbin/yst00000.ybn). The YU-RIS runtime prefers a loose file over the same path packed in a .ypf, so the game just reads your translation with no repack. Run the exported copy and it plays in your language.