Palworld Server Toolkit
April 22, 2024 · View on GitHub
Tools for Palworld servers
简体中文 | English
The world fastest PalWorld server save editor, parse 45MB Level.sav in 1.9s for JSON about 5.1GB, and for convert.py time spent in 4m54s.
-
This toolkit transfers character between worlds in Palworld, which allows friends to transfer their characters to each other's server without losing one's progress.
-
Also can be edit the Player's Item, Pals, Guilds, Money, etc...
GUI

Binaries
Visit Release Pages to download and run.
Manual Install
-
Python 3.9 or newer.
- Windows users: You can install Python 3.12 from the Microsoft Store or from python.org
-
Install
pipPackage manager- For Linux users:
python -m ensurepip --upgrade - For Windows users:
py -m ensurepip --upgrade
- For Linux users:
-
Install by
pippip3 install palworld-server-toolkit -
Execute
python3 -m palworld_server_toolkit.editor [options] <Level.sav>
Source Code Prerequisites
-
Python 3.9 or newer.
- Windows users: You can install Python 3.12 from the Microsoft Store or from python.org
- Ubuntu users:
- for 20.04/22.04
add-apt-repository ppa:deadsnakes/ppa -y; apt update; apt install python3.11-full
- for 20.04/22.04
-
Download source code by
git clone https://github.com/magicbear/palworld-server-toolkit.git -
Execute
git submodule update --init --recursive -
Execute by
python3.11 -i <SRCDIR>/palworld_save_tools/editor.py <Level.sav>
Question?
palworld-save-editor
This tools is for cleanup the unreference item, rename the player name, migrate player and delete the player.
Caution
:warning: This tool is experimental. Be careful of data loss and always make a backup.
Open Level.sav need to be on the SaveGames directory, or copied with Players, the editor will also reference to Players 's file for working, if you didn't may be corrupted the save file.
Warning
Delete user, delete base camp, delete unreference item containers are beta feature, may be cause the server error. Please always backup the file, if have any issue, please provide your Level.sav file to issues.
Note
Without -o params, default save file is Level_fixed.sav
Use source code version just replace below command -m palworld_server_toolkit.editor to palworld_server_toolkit/editor.py
-
For GUI to modify
Level.savfile -python -i -m palworld_server_toolkit.editor -g -o Level.sav Level.sav -
For modify the
Level.savfile, use the follow commandpython -i -m palworld_server_toolkit.editor -o Level.sav Level.savShowPlayers()- List the PlayersFixDuplicateUser()- Remove duplicated user dataShowGuild()- List the Guild and membersBindGuildInstanceId(uid,instance_id)- Update Guild binding instance for userRenamePlayer(uid,new_name)- Rename player to new_nameDeletePlayer(uid,InstanceId=None, dry_run=False)- Wipe player data from save InstanceId: delete specified InstanceIdDeleteGuild(group_id)- Delete GuildDeleteBaseCamp(base_id)- Delete Base CampEditPlayer(uid)- Allocate player base meta data to variableplayerMoveToGuild(uid,guild_id)- Move player to guildguild_idOpenBackup(filename)- Open Backup Level.sav file and assign tobackup_wsdMigratePlayer(old_uid,new_uid)- Migrate the player from old PlayerUId to new PlayerUIdCopyPlayer(old_uid,new_uid, backup_wsd)- Copy the player from old PlayerUId to new PlayerUIdbackup_wsdis the OpenBackup file,wsdis current fileBatchDeleteUnreferencedItemContainers()- Delete Unreference Item ContainersFixBrokenDamageRefItemContainer()- Delete Damage InstanceFindInactivePlayer(day)- Find player thatnot active Save()- Save the file and exit
Operate Sample
Important
ALL OPERATE REQUIRE to STOP SERVER
Finally is replace Level_fixed.sav to Level.sav and start Palworld Server.
Migrate difference server to single server
-
Preparing
- Copy old server
Level.savtoSaveGames/0/<Server ID>/Old-Level.sav - Copy old server
Players/xxxxxxxx000000000000000000000000.savtoSaveGames/0/<Server ID>/Players/xxxxxxxx000000000000000000000000.sav
- Copy old server
-
Operate By GUI
- Item
Source Player Data SourceSelectBackup File - Click
Open Fileto load old serverOld-Level.sav - Item
Source Playerto select player that you want to migrate - Item
Target Playerto select player that will be replaced. (if target player ID is the same, can copy the UUID fromSource Player) - Click
Copy Player - Click
Save & Exit - Replace
Level_fixed.savtoLevel.sav, enjoy it.
- Item
Migrate server to local
-
Operate By GUI
- Item
Source Playerto select player that you want to migrate - Item
Target Playerpaste00000000-0000-0000-0000-000000000001 - Click
Migrate Player - Click
Save & Exit - Replace
Level_fixed.savtoLevel.sav, enjoy it.
- Item
Other Migrate
-
Operate By Command Line
- Use interactive mode
python -i -m palworld_server_toolkit.editor Level.sav - Execute following command and run
CopyPlayerfor each migrate player:warning: UUID can be the same, the user data will be copy from
backup_wsdOpenBackup("Old-Level.sav") CopyPlayer("xxxxxxxx-0000-0000-0000-000000000000", "xxxxxxxx-0000-0000-0000-000000000000", backup_wsd) Save() - (Optional) remove all the old
xxxxxxxx000000000000000000000000.savandOld-Level.sav
- Use interactive mode
-
Migrate Local save to server:
- Copy local save
Level.savtoSaveGames/0/<Server ID>/Old-Level.sav
For co-op saves, they are usually at
C:\Users\<username>\AppData\Local\Pal\Saved\SaveGames\<SteamID>\<World Folder>- Copy local
Players/00000000000000000000000000000001.savtoSaveGames/0/<Server ID>/Players/00000000000000000000000000000001.sav - Use interactive mode
python -i -m palworld_server_toolkit.editor Level.sav - Execute following command
OpenBackup("Old-Level.sav") CopyPlayer("00000000-0000-0000-0000-000000000001", "xxxxxxxx-0000-0000-0000-000000000000", backup_wsd) Save() - remove
00000000000000000000000000000001.savandOld-Level.sav
- Copy local save
-
Migrate User
- Use interactive mode
python -i -m palworld_server_toolkit.editor Level.sav - Execute following command
MigratePlayer("xxxxxxxx-0000-0000-0000-000000000000","yyyyyyyy-0000-0000-0000-000000000000") Save()
- Use interactive mode
-
Clean the player that 7 days not online
- Use interactive mode
python -i -m palworld_server_toolkit.editor Level.sav - Execute following command
for player_uid in FindInactivePlayer(7): DeletePlayer(player_uid) Save()
- Use interactive mode
palworld-player-list
usage: palworld-playey-list [-h] [--host HOST] [--port PORT] [--password PASSWORD] [filename]
List player on the Players Folder
positional arguments:
filename Filename of the player sav
options:
-h, --help show this help message and exit
--host HOST, -H HOST Host for PalWorld Server RCON
--port PORT, -P PORT PalWorld Server RCON Port
--password PASSWORD, -p PASSWORD
RCON Password
- List player -
python3 list.pyin working directory/PalSaved/SaveGames/0/<server id>/Players - Check player detail -
python3 list.py <PLAYER HEX UID>
palworld-server-taskset
Tools for set cpu affinity to CPU performance core (Linux only)
FAQ
-
Copy Player will transfers the character and all its pals on your team and in your inventory, items on the character, and progress. It does not transfer map objects, items in chests and pals working at your base. Move items into your inventory / pals into your team if you want to transfer them.
-
The save files are usually located at C:\Users
\AppData\Local\Pal\Saved\SaveGames for co-op saves. -
For
Xbox Game PassPlayer, save files are usually located atC:\Users\<User>\AppData\Packages\ PocketpairInc.Palworld_ad4psfrxyesvt\SystemAppData\wgs -
For server saves, go to the dedicated server's file location through steam.
-
u need at least 3 files to complete the transfer:
- The source player character save file in Players folder
- The source world's
Level.savfile - The target world's
Level.savfile
-
For co-op saves, the player character save file is always
000000...001.sav -
For another server saves, their
IDwill not change between worlds, so that have the same name in target server, you only need the source world's000000...000.sav -
Windows User present use
Windows Terminalinstance ofcmdfor color -
Data Struct
- Source World
SaveGames └── <steam-id> └── <source-world-id> ├── backup ├── Level.sav ---------- <- The source world save-file ├── LevelMeta.sav ├── Players │ ├── 00000...0001.sav │ └── 12345...6789.sav <- character save-file we want to transfer └── WorldOption.sav- Target World
SaveGames └── <steam-id> └── <destination-world-id> ├── backup ├── Level.sav ---------- <- The target world save-file ├── LevelMeta.sav ├── Players │ ├── 00000...0001.sav <- the target player-placeholder save-file │ └── 98765...4321.sav └── WorldOption.sav
Acknowledgements
Thanks to
- palworld-save-tools for providing save file parsing tool implementation
- PalEdit - GUI for editing Pals
- PalworldCharacterTransfer - Idea for the Dynamic Item Data transfer
- Palworld Host Save Fix - Idea for the first to transfer between server
- palworld-steam-id-to-player-uid
- Buy me a coffee