A Python CLI tool to download, edit, and upload save data for Gacha World (v1.3.6) via the Lunime servers.
Gacha World stores cloud saves through a simple HTTP-based transfer system (username + password). This tool reverse-engineers that protocol, letting you pull your save from the server, modify it locally, and push it back — all from the command line.
- Download your cloud save as a JSON file
- Upload a modified save back to the Lunime servers
- Interactive editor with shortcuts to max out gold, gems, level, unlock all characters, etc.
- Round-trip test (register + login on the same TCP connection) to verify server status
- Create a blank save template for a new account
- Zero dependencies — pure Python 3.6+ standard library
# Download your save
python3 gacha_tool.py download <account> <password>
# Edit it interactively
python3 gacha_tool.py edit save_<account>.json
# Upload the modified save
python3 gacha_tool.py upload save_<account>.json --verify| Command | Description |
|---|---|
download <account> <password> |
Download save from the Lunime server |
upload <file.json> [--verify] |
Upload save to the server (optionally verify via login) |
edit <file.json> [--output file] |
Open the interactive save editor |
create <account> <password> [--name Name] |
Create a blank save template |
roundtrip <account> <password> |
Register + login test on same connection |
| Command | Effect |
|---|---|
set <field> <value> |
Set any field to a custom value |
get <field> |
Show current value of a field |
list |
Show main fields |
listall |
Show all fields |
chars |
List owned characters with levels |
unlockall |
Unlock all 90 characters |
maxgold |
Set gold to 999,999 |
maxgems |
Set gems & tickets to 999,999 |
maxlevel |
Set player level to 999 |
maxall |
Max out gold, gems, tickets, level, XP |
maxchars |
Set all owned characters to level 999 |
summary |
Print save summary |
save |
Save changes and exit |
quit |
Exit without saving |
# 1. Create a blank save
python3 gacha_tool.py create my_account my_password --name "MyName"
# 2. Edit it
python3 gacha_tool.py edit save_my_account.json
# 3. Upload to server
python3 gacha_tool.py upload save_my_account.json --verify
# 4. In-game: use "Data Transfer" with the same account & passwordGacha World's "Data Transfer" feature uses two PHP endpoints on lunime.com:
| Endpoint | Purpose |
|---|---|
registerworldreplacex.php |
Upload (register/overwrite) save data |
loginworldx.php |
Download (login) save data |
The protocol is plain POST over HTTPS with URL-encoded form data. The response from login is also URL-encoded, containing all save fields. Register and login must happen on the same TCP connection (HTTP keep-alive).
| Code | Meaning |
|---|---|
| 1 | Success — data found, password correct |
| 2 | Account not found / data empty |
| 3 | Missing parameters / connection error |
The save contains ~400+ fields covering:
- Account: username, password, display name
- Player: level, XP, gold, gems, tickets
- Appearance: gender, skin color, hair, eyes, equipment
- Characters: 90 character slots with owned/level/XP data
- Equipment: 50 weapons, 50 armors, 50 capes, 90 hats, 90 shades
- Progress: achievements, bosses, tower, events, quests, arena stats
- Gacha: total pulls by rarity (3★–6★)
See FINDINGS.md for the full protocol analysis and complete field reference.
loginworldx.php— ONLINE, responds correctlyregisterworldreplacex.php— ONLINE, accepts requests (200 OK)- The database appears to be empty/reset: register returns 200 but data may not persist
redeem.php— HTTP 500getfaction1.php— HTTP 500
- Python 3.6+
- No external packages needed
This tool is provided for educational and personal use only. Use it responsibly.
MIT