Beta 2 — Cross-platform (Windows, macOS, Linux)
Pre-release
⚠️ Superseded by Beta 3Beta 3 is the release to download. No editor code changed between the two —
Beta 3 corrects documentation that shipped inside the Beta 2 APF archive and
was wrong, and adds theLICENSEandNOTICE.mdthat neither Beta 2 archive
contained. The Beta 2 APF asset was also replaced twice under one filename;
Beta 3's is dated so that cannot recur.If you are already running Beta 2, your editors work — you are only missing
corrected docs and the licence text.
Beta 2 — Cross-platform
Release: Beta 2 · Date: 2026-07-25
Tools included
- 2K5 Mod Studio — ESPN NFL 2K5 (original Xbox) —
v1.0-RC29 - APF 2K8 Mod Studio — All-Pro Football 2K8 (Xbox 360) —
v0.1.0-alpha.34
Beta 1 was Linux-only. Beta 2 runs on Windows, macOS and Linux, verified on
every push by CI across all three, on Python 3.11 and 3.12.
Updated twice on 2026-07-25, both times the APF archive only. The 2K5
archive is byte-identical to the original upload and its SHA-256 below has
never changed.
- The APF archive was re-issued to bundle a Windows build of
extract-xiso, so handing the editor a.isonow works on Windows out of
the box — the first upload required an already-extracted game folder there.- It was re-issued once more because the
APF2K8-README.mdinside that
archive still said the opposite: that the ISO path would not work on
Windows, and that the test suite did not yet pass on Windows or macOS.
Neither was true any more. That file now matches what actually ships, and
the build receipt for both bundled binaries
(tools/vendor/extract-xiso/BUILDING-THE-BUNDLED-BINARIES.md) is bundled
alongside them instead of only being referenced from here.If you downloaded the APF archive before 2026-07-25 19:10 UTC, re-download
it (the current bytes were uploaded at 19:08 UTC). Its current hash isf047682430…— the full value is in the integrity
table below, and the.sha256sidecar next to the asset is authoritative.
Nothing in the editor itself changed between the second and third uploads;
only documentation and that bundled receipt.
Install — read the section for your system
Both editors are pure Python. You need Python 3.11+, PyQt5 and Pillow.
Neither editor ships game data, and neither will ever write to your original disc
or disc image.
Windows
- Install Python 3.12 and tick
"Add python.exe to PATH" in the installer. - Install the two dependencies:
py -m pip install --upgrade PyQt5 Pillow - Download the archive for the editor you want (below), and extract it. Windows
Explorer does not open.tar.gzdirectly — use
7-Zip or, on Windows 10 1803+, the built-intar:tar -xzf 2K5-Mod-Studio-v1.0-RC29-20260725.tar.gz - Start it from that folder:
or, for APF:
cd 2K5-Mod-Studio-v1.0-RC29 py -m mod_editor --studiocd apf2k8-mod-studio-0.1.0-alpha.34 py -m mod_editor.apf_studio
Point either editor at your .iso/XISO or at an already-extracted game folder —
both work. The APF archive bundles extract-xiso.exe (PE32+ x86-64), built from
the same vendored 2.7.1 source as the Linux binary, so ISO input needs nothing
extra from you.
The .sh launchers and the .desktop files in these archives are Linux desktop
integration; on Windows ignore them and use the py -m ... commands above.
macOS
- Install Python 3.12 — python.org
orbrew install python@3.12. - Install the dependencies:
On Apple Silicon, if
python3 -m pip install --upgrade PyQt5 Pillowpipcannot find a PyQt5 wheel,brew install pyqt@5
works and exposes it to the Homebrew Python. - Extract and start it (Finder opens
.tar.gzon double-click):or, for APF:tar -xzf 2K5-Mod-Studio-v1.0-RC29-20260725.tar.gz cd 2K5-Mod-Studio-v1.0-RC29 python3 -m mod_editor --studiocd apf2k8-mod-studio-0.1.0-alpha.34 python3 -m mod_editor.apf_studio
macOS is the one platform with no bundled extractor. Bundling one would mean
vendoring a third architecture that cannot be built or tested from the build
host, so rather than ship something unverified: point APF at an
already-extracted game folder, or build extract-xiso yourself
(brew install extract-xiso, or cmake on the vendored source — see
tools/vendor/extract-xiso/BUILDING-THE-BUNDLED-BINARIES.md) and pass it as
SourceManager(extract_xiso=...). 2K5 Mod Studio is unaffected: it reads the
.xiso.iso directly and needs no extractor at all.
These archives are unsigned and not notarised, so Gatekeeper will complain if you
try to run anything from them by double-clicking. Launching through python3 from
Terminal, as above, is the supported path and avoids that entirely.
Linux
The original and most exercised target — the desktop app has been smoke-tested
end to end here.
- Debian / Ubuntu / Linux Mint:
sudo apt install python3 python3-pyqt5 python3-pil - Extract and start it:
or, for APF:
tar -xzf 2K5-Mod-Studio-v1.0-RC29-20260725.tar.gz cd 2K5-Mod-Studio-v1.0-RC29 ./tools/launch_2k5_mod_studio.shThe launchers check your Python/PyQt5/Pillow and show a desktop error dialogcd apf2k8-mod-studio-0.1.0-alpha.34 ./tools/launch_apf2k8_mod_studio.sh
rather than a terminal trace if something is missing.python3 -m mod_editor --studioandpython3 -m mod_editor.apf_studiowork too.
For a menu entry, install packaging/*.desktop and packaging/*.svg as
described in packaging/README.md.
What is new since Beta 1
Cross-platform support
Windows and macOS are now first-class. Every OS difference is concentrated in one
shim (mod_editor/core/platform_compat.py) so the editors behave the same way on
each, and where a platform genuinely cannot provide a guarantee the tools say
so rather than pretending. Concretely, that meant real fixes rather than
if windows: skip:
- Positional file I/O, directory transactions, atomic no-clobber publication,
private-cache privacy, ownership, and durable flushes all have real Windows and
macOS implementations. - Windows file locking, which refuses to rename a file that has an open handle,
is handled by opening staged files withFILE_SHARE_DELETE— so the writer
keeps the descriptor it verified through, instead of dropping the proof to
satisfy the OS. - Binary-mode reads, CRLF translation and 8.3 short names no longer corrupt
byte-exact artifacts. - The APF archive bundles
extract-xisofor both Linux and Windows, built
from the same vendored 2.7.1 source and each pinned by exact size and SHA-256
in the release gate.
APF 2K8 — new editable capabilities
- Team logos on helmets and the score bug.
- Field art / endzones.
- Both proven bit-exact by an independent verifier, taking the capability
registry to 65.
Release integrity
Each editor ships as a deterministic, byte-for-byte reproducible archive with an
adjacent SHA-256 sidecar. Rebuilding from the same staged tree reproduces the same
bytes — verified for this release, not merely asserted.
The two scripts that produce these assets are now in the repository rather than
being described only in prose: packaging/stage_release.py copies exactly the
allowlisted paths, and packaging/build_archive.py writes the tarball with
mtimes, ownership, modes and the gzip header all pinned. Staging from the
allowlist and rebuilding at epoch 2026-07-25T00:00:00Z reproduces the hashes
below, so the reproducibility claim is something you can run rather than take on
trust. Build from commit 071e7a0, not from the beta-2 tag: the tag still
points at d5a012f, one commit earlier, and the APF archive's documents changed
between the two — so a rebuild from the tag will not match the published APF
hash. The 2K5 archive is identical from either commit. STATUS.md records the same identities, including the two superseded APF
uploads, so an early download can be identified instead of left ambiguous.
| Editor | Archive | SHA-256 |
|---|---|---|
2K5 Mod Studio v1.0-RC29 |
2K5-Mod-Studio-v1.0-RC29-20260725.tar.gz |
4c293e609ce15df55a2b7dd870ad13eefe419e9db2a88ae8bb4b82e01c2230e4 |
APF 2K8 Mod Studio v0.1.0-alpha.34 |
apf2k8-mod-studio-0.1.0-alpha.34.tar.gz |
f047682430f4cc5be868b586b875fbf602c62799130cbd5623b128a6219676f1 |
Verify before extracting:
sha256sum -c 2K5-Mod-Studio-v1.0-RC29-20260725.tar.gz.sha256 # Linux / macOS
certutil -hashfile 2K5-Mod-Studio-v1.0-RC29-20260725.tar.gz SHA256 # Windows
Both archives pass an automated retail-free gate (no game bytes, decoded
pixels or audio, private paths, symlinks or undeclared files) and a
runtime-closure check (every shipped module imports from the clean stage).
Both gates were run again against the extracted archives, not only the staging
tree, so what you download is what was checked.
The two bundled extract-xiso binaries are pinned by exact size and SHA-256, and
each must still be the image format its platform can run (ELF / PE). .exe
remains a forbidden file type everywhere else in the release — the extractor is
one named, reviewed exception, not a relaxed category. The Windows build is
reproducible (-Wl,--no-insert-timestamp), and the exact build commands,
toolchain and hashes are recorded in
tools/vendor/extract-xiso/BUILDING-THE-BUNDLED-BINARIES.md so you can rebuild
the bytes yourself rather than trust them.
Verification
- CI: all six jobs — Windows, macOS and Linux × Python 3.11 and 3.12 — report
an identical 107 of 126 files, 1304 tests. The 19 that do not pass need
retail game data, which never touches CI, so they fail the same way on every OS. - Independent security review: the Windows/macOS port was audited by a
different model (GPT-5.6) across ten passes. It rejected the port nine times.
The first round found four genuine blockers, including a pinned directory handle
opened without the access right needed to answer its own ownership query, and a
DACL check blind toWRITE_DAC. Later rounds found documentation that claimed
more than the code enforced. The final verdict is ACCEPT, with every remaining
platform limitation disclosed in the code where a caller meets it.
Known limits
- 19 test files need retail game data and cannot run in CI on any OS. They are
exercised locally against real discs. - macOS has no bundled
extract-xiso. See the macOS section above. - APF: XMA1 audio encoding still needs a user-supplied encoder, on every
platform. - The audio panel needs a wider minimum window on Windows, because the default
UI font there is considerably wider. Cosmetic; no effect on any guarantee. - Three privacy tests are skipped on Windows. They express "unsafe" by
chmod-ing something world-readable, and Windows mode bits confer no privacy at
all — a directory always reports0o777. Privacy there is the DACL, which is
covered by other checks. Each skip states this rather than quietly passing. - The GUI has not been manually driven on Windows or macOS. The suite passes
identically on all three, but treat the window itself as less exercised there. - Both editors remain beta / alpha. Always keep a backup of your original disc
image; the tools only ever write to a copy, but back it up anyway.
These tools ship no game data and require your own legally obtained disc.