Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
A ren'py script decompiler
branch: master

Handle non-Unicode strings better

Apparently, Ren'Py sometimes allows characters above 127 in non-Unicode
strings. Keep that from breaking everything.
latest commit 684adb46d8
jackmcbarn jackmcbarn authored
Failed to load latest commit information.
un.rpyc more minimization was possible
.gitignore Publish the tools used to create un.rpyc
LICENSE Added screen support, fixed pickle newer versions
README Rework comparable


Unrpyc is a script to decompile Ren'Py ( compiled .rpyc
script files. It will not extract files from .rpa archives. For that, use
rpatool (, or UnRPA

Thanks to recent changes, unrpyc no longer needs internal renpy structures to

Usage options:

  --version      show program's version number and exit

  -h, --help     show this help message and exit

  -c, --clobber  overwrites existing output files

  -d, --dump     Instead of decompiling, pretty print the contents
                 of the AST in a human readable format.
                 This is mainly useful for debugging.
                 Only dumping and for decompiling screen language 1
                 screens. Convert SL1 Python AST to Python code instead
                 of dumping it or converting it to screenlang.
  --comparable   Only for dumping, remove several false differences when
                 comparing dumps. This suppresses attributes that are
                 different even when the code is identical, such as file
                 modification times. Line numbers are also suppressed unless
                 the --line-numbers option is used.
  --line-numbers Allow line numbers to be compared. When decompiling, this
                 causes extra lines to be printed to make line numbers
                 match. When dumping the ast, this causes line numbers to be
                 printed even when using --comparable.

Usage: [python2] [options] script1 script2 ...

You can give several .rpyc files on the command line. Each script will be
decompiled to a corresponding .rpy on the same directory. By default, the
program will not overwrite existing files, use -c to do that.

This script will try to disassemble all AST nodes. In the case it encounters an
unknown node type, which may be caused by an update to Ren'Py somewhere in the
future, a warning will be printed and a placeholder inserted in the script when
it finds a node it doesn't know how to handle. If you encounter this, please
open an issue to alert us of the problem.

For the script to run correctly it is required for the file to be in
the same directory as the modules directory.

You can also import the module from python and call
unrpyc.decompile_rpyc(filename, ...) directly

As of renpy version 6.18 the way renpy handles screen language changed
significantly. Due to this significant changes had to be made, and the script
might be less stable for older renpy versions. If you encounter any problems
due to this, please report them.

Alternatively there is an experimental version of the decompiler packed into
one file available at
This version will decompile a game from inside the renpy runtime. Simply copy
the un.rpyc file into the "game" directory inside the game files and everything
will be decompiled.

renpy version 6 up to 6.18.3
Windows, OSX and Linux

Python version 2.7
Something went wrong with that request. Please try again.