Skip to main content

renpy-capture

Every line of a Ren'Py game, in its scene, in every branch — without playing it.

Tests License: MIT Python 3.9+ Linux Ren'Py 7.8 | 8.2 | 8.3

English · Русский · Українська · 简体中文 · 日本語 · 한국어 · Español · Français

Sylvie says “Hi there! How was class?” in the game's own dialogue window The same moment in the Russian translation: “Привет! Как тебе урок?”

One moment of The Question, the sample game that ships with Ren'Py, in English and in the Russian translation that comes with it: two frames drawn by the game's own engine. The artwork is released under the MIT license.

See the live example →

renpy-capture runs a Ren'Py game in its own engine on a hidden screen, answers every menu every way, and keeps the picture the player sees at every line. What comes out is a small website: read it in a browser, search it, send it to anyone.

What you get

The page of a capture: each picture of the game with the lines spoken over it, and a menu with the option taken
  • The book of the game. Every line beside the picture the player sees, with the speaker and the line of the script. Search it; link to any line.
  • The tree of choices. Every menu and every option, down to how each path ends; each option opens its moment in the book.
  • The translation beside the original. For a game that already has a translation (game/tl/<language>): every translated line as the game itself draws it, in its own dialogue window, beside the original. Does the text fit, does the font have the letters. renpy-capture shows translations; it does not make them.
  • Proof that nothing was missed. After the capture the game's scripts are read, and every scene no path reached is named, with its label, file and line.

Who it's for

You are It gives you
Translators Every line with its context: who speaks, what is on screen, what came before.
Editors and proofreaders The whole translation as the game shows it, behind one link: nothing to install, no routes to replay.
Authors and testers Every route in one run: see a line that overflows the window or a missing picture, find the branches no player can reach, compare two builds line by line.
Guide and wiki writers The tree of choices with every ending, and a picture for every step.
Language learners A game you love and its translation as a bilingual book, line by line.
Reviewers and archivists Every scene of every branch without playing: before an age rating, for research, to keep a game readable.

Try it

pipx install renpy-capture
renpy-capture capture ~/Games/SomeGame work/
xdg-open work/export/index.html

One command does the whole job: it fetches the official Ren'Py SDK of the game's version, plays every branch on a hidden screen, looks for scenes no branch reached, and writes the pages. Run it again to go on after an interruption. The Question takes six seconds; a large commercial game of 22,000 lines, about eight minutes.

A translation the game already has in game/tl/russian: capture the original and the translation, both with the game's dialogue window, and open the translation's book, where the original stands beside every line.

renpy-capture capture ~/Games/SomeGame work/ --text
renpy-capture capture ~/Games/SomeGame work/ --text --language russian
xdg-open work/export-text-russian/index.html

Why you can trust the pictures

  • The game's own engine draws them. The official Ren'Py SDK of the game's version runs the game: its fonts, transitions, layered images, animations and screens. Nothing is rebuilt from the script.
  • Every branch, then a check. Every menu is answered every way; then the scripts are read, and any scene no path reached is named.
  • The same picture, every time. Game time follows frames, not the clock; randomness is seeded; a scene is kept once it has settled. Run it twice and the files are identical, so a difference between two captures is a real one.
  • Your copy stays untouched. The game runs from a separate folder that only links to it; the SDK comes from renpy.org and is checked against its official checksum.

Tested on a large commercial game: 44 branches and 21,945 lines in about eight minutes on four engines, every picture identical, byte for byte, to the run before.

Compared with what you do now

Playing through Translation files and tools renpy-capture
Each line in its scene ✓ — ✓
Every branch, and proof that none was missed by hand, route by route every string, reachable or not ✓
The translation beside the original replay in each language text only ✓ frame beside frame, as the game draws it
Search, a link to any line, one page to share — search ✓
Editing the translation — ✓ —

renpy-capture does not replace your translation tools: it shows what they produce, in the game.

Good to know

  • It answers menus; it does not play mini-games. A map, a quiz or a timed challenge can be guided by the game's config, see the guide.
  • The official SDK has to run the game: a game shipped with a modified engine may not start.
How it works
flowchart LR
    G["Your copy of the game"] --> L["Launch folder<br/>links to the game + capture.rpy"]
    S["Official Ren'Py SDK<br/>from renpy.org, sha256 checked"] --> L
    L -->|every menu, every option| O["Every picture<br/>and a log of every line"]
    O --> E["The book, the tree of choices,<br/>a table of every line"]
    O --> X["Scenes no path reached"]
  • Inside the engine, a small script takes the picture once the scene has settled: animations and transitions are over and nothing asks for a redraw any more. An endless animation is caught at a fixed phase.
  • A job plays the game from a label and answers menus with the options it was given. Every option not taken yet becomes a new job, until none is left; several engines run at once, and a watchdog restarts one that hangs.
  • Mods that draw over the game are left out of the launch folder, so the pictures are the game's own.

More

  • The guide: installing, the hidden screen, translations, every command, what each file holds, games that need help, when something is off.
  • The config and the output, field by field · Changelog

Be kind to the authors

Capture games you own. The pictures and the words are their authors' work: do not publish them without permission.

License

MIT, see LICENSE. Made by Aiken and Claude.

Metadata

Release files for renpy-capture 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for renpy-capture 0.2.1
File Size Uploaded
renpy_capture-0.2.1.tar.gz 90.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for renpy-capture 0.2.1
File Interpreter ABI Platform
renpy_capture-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 157.5 kB

Release files / renpy_capture-0.2.1.tar.gz

Download URL renpy_capture-0.2.1.tar.gz
Size 90.2 kB
Tags Source
SHA-256 checksum
How to use checksums
cce031364c64759d7504ecd9520db5e45ba730342ab3fcdc1af886dfb99e65b8
BLAKE2b-256 checksum
How to use checksums
918105c019147bfdc135a4fccf504d2858562211e65c91a405e3fc05393ff889
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 3, 2026.

Transparency log

Release files / renpy_capture-0.2.1-py3-none-any.whl

Download URL renpy_capture-0.2.1-py3-none-any.whl
Size 67.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
99b2d6c265f31d0e314fdd2bb90ddf09b1705dfdb7c2498334478c083303c635
BLAKE2b-256 checksum
How to use checksums
79568811ed816b9a401d70790e511ae33a8a85e30bce4339daa0392d9c0d6ec0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 3, 2026.

Transparency log

Release history Release notifications | RSS feed

0.3.0

2 release files

This release

0.2.1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page