Importing Games
Spark supports multiple methods for importing Ren’Py games to your iOS device.
Supported Archive Formats
Section titled “Supported Archive Formats”- ZIP (.zip) — Most common
- APK (.apk) — Android packages
- 7-Zip (.7z) — High compression
- RAR (.rar) — Legacy support
- TAR (.tar) — Uncompressed archives
- Gzip (.gz) — Gzip-compressed TAR archives
- BZ2 (.bz2) — Bzip2-compressed TAR archives
- IPA (.ipa) — iOS application archives
- APP (.app) — Application bundles
Import Methods
Section titled “Import Methods”Built-in Import Menu (Recommended)
Section titled “Built-in Import Menu (Recommended)”- Open Spark and tap the Import button in the library
- Browse to your game archive using the system file picker
- Select the file and wait for extraction to complete
What Happens During Import
Section titled “What Happens During Import”1. Pre-Scan & Validation
Section titled “1. Pre-Scan & Validation”Spark checks the archive before extraction:
- Calculates the uncompressed size to verify you have enough free space
- Detects whether the archive is password-protected and prompts you to enter the password if needed
- Scans the archive contents to locate the
game/folder
If multiple game folders are found inside the archive, you’ll be asked to select which one to import.
2. Extraction
Section titled “2. Extraction”The archive is extracted to a temporary staging directory. Spark monitors disk space during extraction and will stop if storage becomes critically low. macOS artifact folders (__MACOSX) are automatically removed.
For double-packaged APK files (a ZIP containing an APK inside), Spark detects this and automatically extracts both layers.
3. Game Folder Setup
Section titled “3. Game Folder Setup”After extraction, Spark organizes the files into the final game directory:
- Game folder — The
game/folder containing scripts, assets, and archives is moved to its final location - Game name — Determined from
android.json(APK imports), a.pyfile next to the game folder, or the archive filename as a fallback - Unique naming — If a game with the same name already exists, a numeric suffix is appended
4. Engine Detection
Section titled “4. Engine Detection”Spark searches the extracted files for the bundled Ren’Py engine folder (renpy/). If found:
- The engine is saved to the game’s
advanced/renpy/directory for use with Advanced Mode - The Ren’Py version is read from version files inside the engine folder (e.g.
vc_version.py,__init__.py,script_version.txt, or their compiled equivalents) - The detected version is stored in the game’s metadata for engine matching
- For Android APK imports, a bundled file (
private.mp3) is extracted to recover the engine and detect the Python version
5. Additional Detection
Section titled “5. Additional Detection”- Custom fonts — If the game’s bundled engine includes modified fonts (different from Ren’Py’s defaults), they are copied to the game folder so the game can use them at runtime
- Live2D support — The archive is scanned for Live2D libraries. If found, a marker is created so Spark loads the Live2D framework when the game launches
6. Metadata & Cleanup
Section titled “6. Metadata & Cleanup”- An
info.jsonfile is written with the game name, detected engine version, original archive filename, and import timestamp - Staging directories are cleared and temporary files are removed
- The game library is refreshed and the new game appears in your library
- Large games (1 GB+) may take a while to extract
- Some archive formats such as 7z can take an extremely long time to extract if the archive contains thousands of loose files. Games should ideally be packaged using
.rpaarchives or similar consolidated formats. Some of the extraction libraries are not optimized for these scenarios - If a game appears but won’t launch, try changing the engine version in Game Settings
- APK files may be hidden by the file filter — disable it in Settings > Game Library