rpynx v0.1.0pre-release

Importer

Desktop app

The importer window on macOS and Windows: the Library, the Import page and the target.

Desktop onlywindow run on macOS onlySource docs/IMPORTER.md
On this page

The window is a web page (importer/rsl_import_gui.html) shown by pywebview in the system’s own web view: WebKit on macOS, Edge WebView2 on Windows. Every check and copy is done by the same rsl package the command line uses.

Start it

People without Python can use the built app: RSL Importer.app on macOS or RSL Importer.exe on Windows (see Build the app). With Python, install pywebview once:

bash
python3 -m pip install pywebview
bash
python3 importer/rsl_import_gui.py

On Windows: py -m pip install pywebview, then py importer\rsl_import_gui.py.

note

On macOS’s /usr/bin/python3 (3.9), pip may pick a yanked pyobjc 12.0 and compile it, which needs the Xcode Command Line Tools. The built app, or Python 3.10+ from python.org, avoids that.

Target

Where the library is read from and where games go:

  • SD card: choose its top folder, E:\ on Windows or /Volumes/<name> on macOS. A mounted drive that already has a switch/ folder is offered, and chosen if it is the only one.
  • Switch over Wi-Fi (FTP): type the address sphaira shows, for example 192.168.1.20:5000, and press Connect. See Upload over FTP.

Library

Lists the games already on the target, read from each manifest.json. Each card shows the game’s cover as the loader does, and a status chip:

ChipMeaning
ExperimentalNo warnings and no Switch performance issues.
ReviewExperimental, with warnings or performance issues to read first.
UnsupportedThe manifest’s reasons say why.
No manifestCopied by hand, or not by this importer.

Click a card for its report, its background, and:

  • Change cover… and Change background…: pick a picture, and it is converted and written to the target at once. See Covers and backgrounds.
  • Delete…: asks first, then removes games/<id>/. Its saves in switch/renpy-loader/saves/<id>/ stay unless Also delete its saves is ticked. Logs are kept.

Compare with folder… checks a folder of game sources on your computer against the library and changes nothing on either side:

StateMeaning
SameMatches what the manifest recorded from its source.
DifferentFile count, total size, or an .rpa/.rpyc hash differs.
Not on the SwitchNo game in the library matches it.
Only on the SwitchNo source in the folder matches this library game.
Can’t compareA match without a usable manifest.json.
Not a gameThe importer cannot read it as a Ren’Py game.

The file count and total size are compared first; if both match, every .rpa and .rpyc is hashed (SHA-256). A change to images, audio or .rpy files that keeps the count and size is not found.

Import

  1. Drop a game folder, .zip, .7z or .rar on the window, or use Choose folder… / Choose archive…. It is analyzed at once.
  2. Set options: Optimize (--optimize), Recompile (--recompile), Decompile (--decompile, with the decompiler chosen under it), Game id (--id, blank to make it from the title). Changing one clears the report; press Analyze again.
  3. When the analysis finds something an option fixes, an alert under that option says why, and its Turn on button ticks the option and analyzes again.
  4. Tools shows whether 7-Zip, ffprobe, ffmpeg, unrpyc and rpycdec were found. Tools folder… is --tools.
  5. Read the report: status, Ren’Py version, the pictures, warnings, Switch performance issues and the Checked: line.
  6. Replace is --replace. Export copies file by file with a progress bar.

Cancel stops after the current file: the half-made copy is removed, and an existing export stays as it was. Closing the window during an export does the same before the program quits. Export is disabled for unsupported games.

note

Text from a game (title, report, paths) is put on the page as plain text, never as HTML, so a title in options.rpy cannot inject script into a page that can export.

Windows setup

  1. Use RSL Importer.exe (no Python needed), or install Python 3.9+ from python.org and run py -m pip install pywebview. The window uses Microsoft Edge WebView2, which Windows 11 has; on Windows 10, install the “Evergreen” WebView2 Runtime if the window does not open.
  2. Install 7-Zip from 7-zip.org. It is found in C:\Program Files\7-Zip without further setup.
  3. Install FFmpeg: winget install Gyan.FFmpeg puts it on PATH. Or unzip a build and choose its bin folder with Tools folder….
  4. Put the SD card in the PC and choose its drive, for example E:\.

What differs on Windows:

  • Archive entries Windows cannot create under their own name are refused: device names (CON, NUL.txt, COM1), :, <>"|?*, and names ending in a dot or a space.
  • 7-Zip, FFmpeg and the decompilers run without a console window popping up.
  • Paths longer than 260 characters need Windows’ long-path setting; the importer does not work around it.

warning

Windows support is tested on macOS with Windows faked (ntpath, a cp1252 console, mocked tool calls), not on a Windows machine yet. The window has run on macOS only; its WebView2 backend and the one-file .exe are untested.

Build the app

PyInstaller turns the window into one program. It does not cross-compile: build the .exe on Windows and the .app on a Mac.

bash
python -m pip install pyinstaller pywebview
bash
python importer/build_app.py
PlatformOutput
Windowsdist\importer\RSL Importer.exe, a single file
macOSdist/importer/RSL Importer.app (24 MB; built with Python 3.12 and pywebview 6.2.1, launched on macOS 15.7)

The app is not signed. Windows SmartScreen shows “Windows protected your PC”: click More info, then Run anyway. On macOS, right-click the app and choose Open the first time.

7-Zip and FFmpeg are not bundled. They have their own licences, and installing them separately keeps those terms off the app and lets you update them.

↑↓ move↵ openesc close