Command-line tools
Everything the GUI does runs through these scripts, and the GUI’s Log tab
shows the exact command for every action. Each tool prints its usage with
--help.
From source, the scripts are in tools/: python tools/lu_lua.py --help.
With the release build, run them through the EXE:
SeamRipper.exe --tool lu_lua.py --help.
Main tools
| Tool | What it does |
|---|---|
lu_lua.py |
Scripts in either game: list, read, ship, export, where. export writes every script to a folder plus an INDEX.txt of which containers have each one |
sr_patch.py |
make, info and apply .srpatch patches |
nblua.py |
The NB1 side of lu_lua.py, with --backend to pick a decompiler |
nbdec.py |
The NB1 decompiler. nbdec_bench.py measures it |
nb_reconstruct.py |
Recovers hashed names from the patterns they follow; only exact hash matches are kept |
lua_repair.py |
Makes luadec output parse as Lua 5.1 again |
naughty_lu.py |
Containers: info, decompress, extract |
lu_convert.py |
Extracted chunks to DDS/PNG and OBJ/GLB |
lu_strings.py |
extract and apply game text. A +HASH line in the strings file adds a new string |
lu_autofix.py |
Spelling and spacing report and fix |
lu_grep.py |
Search game text across files |
lu_sound.py |
bank and streams sound extraction |
lu_repack.py |
Repack a raw image, with verification |
pip_dump.py |
Dump everything from PiP units |
pip_gfx.py |
PiP UI movies and their textures |
pip_scripts.py |
extract and inject PiP Lua source |
xiso_extract.py |
list and extract the files on an Xbox 360 disc image |
Building blocks
Used by the tools above; handy for debugging.
| Tool | What it does |
|---|---|
lua_decompile.py, lua_recompile.py |
360 Lua 5.1 bytecode to source and back |
lua_chunk_swap.py, lu_chunk_replace.py |
Put recompiled chunks into containers |
lua_clean.py, lua_annotate.py, lua_readable.py, lua_readall.py |
Readability passes and bulk decompiling |
nb_read.py, nb_decompile.py, nb_inject.py, nb_ship.py, nb_apply.py |
The stages behind nblua.py |
proto360.py, bccmp.py, rename_luadec.py, widen_sizet.py |
Bytecode helpers |
verify_lzx.py |
Checks every rebuilt container before it’s written |
Bundled third-party tools
luac51.exe: Lua 5.1 compiler (MIT, from the Lua project).unluac.jar: Lua 5.1 decompiler by tehtmi.luadec.exe: decompiler from the luadec project.lzxverify.exe: independent LZX decoder used to check every rebuilt container, built from libmspack (LGPL 2.1) by Stuart Caie and contributors. Source, license and build steps are intools/lzxverify_src/, with the full notice intools/lzxverify_src/NOTICE.md.
Building the EXE
On Windows, from the repo folder:
build_exe.bat
This installs PyInstaller, PySide6 and Pillow and builds
dist\SeamRipper\SeamRipper.exe. Zip the dist\SeamRipper folder to release
it. The EXE icon is seamripper.ico and the window icon is
seamripper_256.png.
It’s a one-folder build on purpose: the GUI runs every tool as
SeamRipper.exe --tool <script>, and a one-file build would unpack itself
again on every run. For a build with a console window, set console=True in
seamripper.spec.