Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
WorldSnapshot
Client-side: save the zones you have loaded on a server as a new local world (seed + builds + chests).
By iTerrorBilly
| Date uploaded | 2 weeks ago |
| Version | 1.2.1 |
| Download link | iTerrorBilly-WorldSnapshot-1.2.1.zip |
| Downloads | 49 |
| Dependency string | iTerrorBilly-WorldSnapshot-1.2.1 |
This mod requires the following mods to function
denikson-BepInExPack_Valheim
BepInEx pack for Valheim. Preconfigured with the correct entry point for mods and preferred defaults for the community.
Preferred version: 5.4.2360README
World Snapshot
Save a copy of the parts of a multiplayer world you have actually visited, as a new local world, without needing the server's files.
World Snapshot is a client-side BepInEx plugin. While you play on a dedicated server or a friend's hosted game, it keeps track of which zones the server has fully streamed to your game. When you run the snapshot command it writes those zones, together with the world seed, world modifiers and boss progression, as a brand new world in your worlds_local folder. The game's own save code does the writing, so the result is a normal Valheim world you can host or play in single player.
Zones you never visited are left ungenerated. When you load the snapshot they are created fresh from the seed, so the map still looks like the original world, it just won't have anyone's builds in places you never went.
Nothing is installed on the server. The server cannot tell the plugin is running.
Please ask the server owner before copying a world you don't own. Their builds are their work.
Requirements
- Valheim (built and tested against version 1.0.21, world save format 42)
- BepInExPack Valheim
- The in-game console. If F5 does nothing, add
-consoleto the game's launch parameters (Steam: right-click Valheim > Properties > Launch Options, mod managers have a launch parameter setting too).
Install on your own game only. Other players and the server do not need it.
Quick start
- Join the server.
- Walk, sail or ride through every area you want to keep. A zone counts as captured once you have been within sync range of it for 5 seconds. Standing in the middle of a base for half a minute captures the whole base.
- Press F5 and type
snapstatusat any time to see how many zones and objects you have. - When you're done, type
snapshot. The new world is saved as<server title>-snapshot, for exampleMy Server-snapshot. - Leave the server. The world now appears in Start Game > Select World, and a dedicated server can host it with
-world "<server title>-snapshot".
Capture and save in the same session. Your game forgets everything it received from the server the moment you disconnect.
Console commands
| Command | What it does |
|---|---|
snapshot |
Save a snapshot named <server title>-snapshot. If that exists already, -2, -3 and so on are appended. Existing worlds are never overwritten. |
snapshot My Name |
Save with a custom name (spaces allowed). Refuses if a world with that name exists. |
snapstatus |
Show the server title, world file name and seed, the name the next snapshot would get, how many zones are captured or pending, how many objects you hold, and the current sync range. |
snapmark |
Mark every zone currently in sync range as captured right now, skipping the wait. Useful for a quick grab, but see "Partially loaded zones" below. |
snapreset |
Forget all captured zones and start over. |
snapdwell |
Show the current dwell time and the allowed range. |
snapdwell <seconds> |
Set the dwell time. Any number from 0 to 600 seconds, decimals allowed (for example snapdwell 5 or snapdwell 2.5). Saved to the config file, so it sticks between sessions. |
None of these are cheat commands, so devcommands is not required.
Configuration
The config file is BepInEx/config/com.iterrorbilly.worldsnapshot.cfg.
| Setting | Default | Meaning |
|---|---|---|
NameSource |
ServerName |
What the default snapshot name is based on. ServerName is the server's title in the server browser, with the world file name as fallback when the title is unknown (for example when joining by IP). WorldName always uses the world file name. |
DwellSeconds |
5 |
Seconds you must stay in sync range of a zone before it counts as captured. Raise it for very dense bases on a slow connection. Lower it if you are mostly sailing past things you only need roughly. Accepts 0 to 600. Can also be changed in-game with snapdwell <seconds>. |
What ends up in the snapshot
Inside captured zones
- Every building piece, with its damage and support state
- Chests, with their contents
- Item stands, armor stands, signs, wards, beds, portals
- Smelters, kilns, fermenters, beehives, cooking stations, with whatever is in them
- Terrain modifications: flattening, raising, paths, cultivated soil
- Planted crops and trees, tamed and wild creatures, dropped items, carts and ships
- Dungeon interiors and other location contents, if you entered or stood near them
World-wide
- The seed, so terrain and biomes match
- World modifiers (combat difficulty, raids, portal rules, etc.)
- Boss kills and other progression keys
- The world ID. Because it matches the original, your character's explored map and pins carry over when you load the snapshot.
Not included
- Anything in zones you never loaded. Those regenerate from the seed with default spawns.
- Other players' characters, inventories and skills. Those live in player files, not the world.
- Admin, ban and permitted lists. Copy those from the server yourself if you need them.
Known limitations
Partially loaded zones. The server streams objects to you over a few seconds. If you mark a zone before that finishes, the snapshot will be missing whatever hadn't arrived. The dwell timer is there to avoid this. Prefer letting the timer do its job over using snapmark.
Stale objects. You hold whatever version of an object you last received. If a friend empties a chest while you are far away, your copy still shows it full. Revisit areas shortly before taking the snapshot if freshness matters.
Zones around the edge. The plugin only keeps zones the server sent in full. Objects you could see in the distance but never walked up to are dropped on purpose, so they don't get doubled when the game regenerates that zone later.
Location markers. Boss altar and trader locations are placed again from the seed when the snapshot first loads. For worlds created on a similar game version they land in the same spots as the original.
Memory. Your game keeps every object it has ever received during the session. Long capture runs across a huge world will use more RAM than a normal play session. This is the game's normal behavior, the plugin just makes use of it.
Troubleshooting
snapstatus says "Not in a world." You are on the main menu or still loading. Try again once your character is standing in the world.
"You are hosting this world yourself." The world is already yours. It is in worlds_local already and nothing needs copying.
"No zones captured yet." You haven't stood still long enough anywhere. Wait a few seconds or run snapmark.
The command is unknown. The plugin did not load. Check BepInEx/LogOutput.log for a line containing World Snapshot. If the line says the game API changed, the plugin needs an update for your game version.
"Snapshot FAILED" or missing files. Look in Player.log (in %USERPROFILE%\AppData\LocalLow\IronGate\Valheim) for Error saving world and include the lines around it, plus your game version, when reporting the problem in the mod page comments.
I don't see it in my mod manager's list. If you copied the DLL in by hand, mod managers won't list it. Install through the mod manager instead so you can toggle it on and off.
How it works, for the curious
Valheim sends every networked object (ZDO) inside your sync range to your client, and your client keeps them until you disconnect. The plugin:
- Tracks which zones have been in the near sync range long enough, using the server's own simulation distance setting.
- On
snapshot, temporarily swaps in a new World record with the server's seed and ID, marks the captured zones as already generated, and calls the game's regular world save routine. - Filters the save data so only objects inside captured zones are written. Everything else is dropped, which prevents duplicate trees and rocks when the hosting server generates those zones later.
Because the game's own serializer is used, the output is always in the save format of the game version you are running.
CHANGELOG
Changelog
1.2.1
- Fixed the HUD save icon staying on screen after taking a snapshot (introduced in 1.2.0).
1.2.0
- Snapshots are now named after the server's title from the server browser (e.g.
My Server-snapshot). The world file name is used as a fallback, or always if you setNameSource = WorldNamein the config. - Custom names given to
snapshotkeep their spaces instead of turning them into underscores. - Taking a snapshot no longer shows the "World saved" message to other players on the server.
snapstatusshows the server title, world file name and the name the next snapshot would get.
1.1.2
- Documentation update. No gameplay changes.
1.1.1
- Package metadata cleanup. No gameplay changes.
1.1.0
- Default dwell time is 5 seconds. New
snapdwell <seconds>console command shows or changes it and saves it to the config file. - Default snapshot name is now
<worldname>-snapshot. If that world exists,-2,-3, ... are appended so nothing is overwritten. - Packaged as a Thunderstore mod so mod managers can install, update and toggle it.
1.0.0
- First release. Tracks fully synced zones while connected to a server and writes them as a new local world using the game's own chunked save pipeline.
- Console commands:
snapshot [name],snapstatus,snapmark,snapreset. - Carries over seed, world ID, world modifiers and progression keys.