Windows · 11.5 MB portable exe · no dependencies

See what's inside a .saf.

SAF Explorer opens MX Simulator archives instantly, lists every file with its size and type, and extracts what you need — or packs a folder back into a .saf. One small executable, built from the Python standard library.

No installer · One .exe · Drop a .saf on it to open the archive

SAF Explorer's Extract tab with 2025WinterCupOBJ.saf open: 87 files listed with sizes and types, and Extract all, Extract selected and Select all buttons.
An 89 MB retail archive in the Extract tab — 87 files, read from the header alone.

Screenshots

Built for looking around.

Captured from the running app against a real MX Simulator archive — no mock-ups.

The Extract tab filtered to models/bales in 2025WinterCupOBJ.saf, with a narrowed file list and the archive summary showing how many files are shown.Filter as you type. Narrow a long file list down to the handful you need. Ctrl + A selects every visible row.
The Create tab with a track folder scanned: root name, the list of files that will go into the archive, and the Save as path.Packing a folder. Scan a directory, choose the root name, exclude rows, then build. The archive is written to a temporary file first.

Features

Small tool, complete job.

Opens instantly

Only the header is parsed when an archive is opened, so a 900 MB file lists its contents immediately instead of being read into memory.

Extract all or some

Pull out every file or just the selected rows. Work runs on a background thread with a progress bar and a working Cancel button.

Paths stay contained

Archive names are sanitized before anything is written, so .., absolute paths and drive letters can never escape the destination folder.

Safe by default

Existing files are left alone unless overwriting is enabled, and a build writes to a temporary file before replacing the target — an interrupted build never leaves a broken archive.

Archive layout done right

The root name becomes the first path component, forward slashes are used throughout, and zero-byte entries and LINK stubs round-trip untouched.

Nothing to install

Pure Python standard library for the logic and Tkinter for the UI. The shipped executable is a single file and runs without Python installed.

Checked against 424 retail archives: every one parses, header length plus entry sizes equals the file size exactly, and an 89 MB archive extracts and repacks byte for byte — a case covered by the test suite.

The file format

A text header, then raw bytes.

A .saf is an uncompressed container. One line per file gives the byte count and archive path; a line containing only - ends the header; the file data follows in the same order.

  • Decimal size, one space, forward-slash path, newline.
  • Paths may contain spaces; they are ASCII in practice.
  • No compression, timestamps or checksums.
  • Offsets are the running sum of the sizes above, so the archive is fully seekable.
2025WinterCupOBJ.saf
18216 mphOBJ2025/gates.jm
899712 mphOBJ2025/gatesbg.png
902443 mphOBJ2025/gatesmph.png
30003 mphOBJ2025/models/warning/warning_spec.png
-
<899712 bytes, then 902443 bytes, …>

The same bytes in the same order, nothing else.

Get it

Grab the exe, or run the source.

The release asset is the executable committed in the repository, built from the checked-in PyInstaller spec. The exe is unsigned, so Windows SmartScreen will warn on first launch elsewhere — choose More info → Run anyway.

  1. 1 Download SAF.Explorer.exe
  2. 2 Double-click it, or drop a .saf onto it
  3. 3 Browse the archive — or switch to Create to build one

Prefer Python? Clone the repo and run:

py safgui.py
py safgui.py "C:\MX Simulator\myarchive.saf"