Visual NovelRPC docs
DiscordGitHub39Download

Chapters & routes

Many VNs put the current chapter or route in their window title. The app reads it and turns it into a clean label.

How it works

Every few seconds the app reads the title of the game's window. It removes the game's own name and noise like version numbers (ver1.02), resolutions (1280x720), "R18" or "- Steam". What's left is matched against a list of rules, in English, French and Japanese. The first rule that matches gives the label.

If the window title never changes (many VNs just show their name), there's simply no section line on Discord. Nothing to set up.

Examples

Real outputs of the built-in rules:

Window titleShown as
Sanoba Witch - ProloguePrologue
Hapymaher - Chapitre IIIChapter 3
Yosuga no Sora 第3章Chapter 3
Senren * Banka - Chapter 4: YoshinoChapter 4 — Yoshino
Grisaia no Kajitsu - Yumiko RouteYumiko Route
Irotoridori no Sekai - Common RouteCommon Route
Some VN - Jour 3Day 3
Some VN - Good EndingGood Ending
Some VN ~Summer Festival~Summer Festival

Words it understands include:

  • Start and end: prologue, opening, intro, epilogue, ending, good / bad / true / normal end, プロローグ, 序章, エピローグ, エンディング…
  • Chapters: chapter, chapitre, ch., episode, épisode, act, acte, scene, part, partie, volume, 第N章 / 話 / 幕; with numbers, Roman numerals or kanji numbers.
  • Routes: "X Route", route / arc / path X, common route, true route, ルート, 共通, X編.
  • Days: day N, jour N, N日目.

If nothing matches but the title still has some extra text, that text is shown as it is.

Set it by hand

When nothing is read from the title, the Now reading page shows a + Route / chapter button. Type where you are (e.g. Yoshino Route) and click Save: it's shown on Discord like any other section. Click the pill again to change it, or Clear it. As soon as the window title says where you are, that takes over.

Your own rules

For a VN with an unusual title format, add a rule in Settings → Title rules. Your rules run before the built-in ones. Write one JSON object per line:

{"name": "part", "pattern": "part\\s*(?P<n>\\d+)", "label": "Part {n}", "section_type": "chapter"}

With this rule, Some VN - Part 3 shows as Part 3 instead of "Chapter 3".

FieldWhat it is
nameAny name, for you to recognize it.
patternA regular expression, not case-sensitive (named groups are written (?P<name>…)). In JSON, backslashes are doubled: \\s for \s.
labelThe text shown. {n} is replaced by the group named n (a number: Roman numerals and kanji are converted), {label} by the group named label.
section_typechapter, route, prologue, ending or free (default).

Another example, for a game whose title ends with [Scenario: Hanabi]; it shows Hanabi Scenario:

{"name": "scenario", "pattern": "scenario:\\s*(?P<label>[^\\]]+)", "label": "{label} Scenario", "section_type": "route"}

When you click Save rules, each line is checked. A line that isn't valid JSON, or a pattern that isn't a valid regular expression, is reported with its line number and nothing is saved.