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.
NoMapDiscordAdditions WIKI
Updated a week agoNoMapDiscordAdditions
A capture-and-share toolkit for Valheim's large map, built for no-map (and normal) worlds.
It does two things:
- SEND MAP / COPY MAP — snapshot the visible map and post it to a Discord webhook or paste it straight into Discord, Slack, or an image editor.
- MAP COMPILE — walk between cartography tables, add each reading as a tile, and stitch them all into one high-resolution PNG with world coordinates preserved.
Cartography-table pins get distance/bearing-from-spawn captions baked into the image, and almost every visual setting can be server-synced so a host enforces one consistent look for everyone.
Quick start
- Install the dependencies (BepInEx, JsonDotNET, ZenMap ≥ 1.7.3) — the manifest pulls these in automatically through a mod manager.
- Launch the game once so the config file is generated at
BepInEx/config/com.virtualbjorn.nomapdiscordadditions.cfg. - (Optional, for Discord) Create an Incoming Webhook in your Discord server (Channel → Edit → Integrations → Webhooks) and paste the URL into
Discord.Webhook URL. A server admin can instead set it on the server to push it to all clients without writing it to anyone's config. - Open the large map. You'll see capture buttons bottom-right and the compile panel bottom-left.
No webhook? The SEND MAP button stays hidden until a webhook is available, but COPY MAP and the entire MAP COMPILE workflow (including local EXPORT) work without one.
SEND MAP / COPY MAP
The bottom-right of the large map gets a Show Biome Text toggle, SEND MAP (default F10), and COPY MAP (default F11).

| Action | What it does |
|---|---|
| SEND MAP | Posts the capture to your Discord webhook using the configurable message template. |
| COPY MAP | Writes the PNG to the system clipboard — paste straight into Discord, Slack, or an image editor. |
| CTRL + COPY MAP | Hold the modifier key (default Left CTRL) to bypass the Discord-friendly size cap and copy at up to 4096px on the long edge — full quality for image-editor work. |
- The bound hotkey is shown in each button label (
SEND MAP (F10)/COPY MAP (F11)) and updates when you re-bind the keys. - Captures hide every UI overlay (panels, buttons, hints, hotbar). Only the map and — if
Show Biome Textis on — the biome label remain.
| Discord post | Spoiler-tagged |
|---|---|
![]() |
![]() |
MAP COMPILE
A second panel sits bottom-left of the large map. The idea: walk between cartography tables, add each reading as a tile, then COMPILE to composite every tile into a single PNG that preserves world coordinates. The session is never lost when you save/copy/send — pause and resume at the next table or after a restart.
| Idle | Compiling |
|---|---|
![]() |
![]() |
Workflow
- START COMPILE — begins a session (scoped to the current world + character).
- ADD TILE (N) — enabled only when the map was opened at a cartography table (no
M-key opens, no portable map items). Re-adding within ~8m of an existing tile replaces it in place, so you can re-shoot a table without duplicates. - Travel to the next table, open the map, ADD TILE again. The session is saved to disk after every add.
- COMPILE (N) — opens the result panel. This does not end the session.
If you crash, disconnect, or just wander off, the next time you open the map you'll see RESUME COMPILE (N) — click it to drop straight back into compile mode with every tile intact.
Result panel

| Button | Behaviour |
|---|---|
| SAVE | Writes a full native-resolution PNG to disk — the sharpest tile maps 1:1, nothing is downscaled below capture resolution. Capped at 8192px on the longest axis; the filename includes the dimensions and the status line says whether you got native res or hit the clamp. After saving, the button becomes COPY DIR so a second click puts the containing folder on the clipboard. |
| COPY | Writes the PNG to the clipboard at the Discord-safe size. CTRL+COPY raises the cap to 4096px. |
| SEND TO DISCORD | Posts the composed image (Discord-safe size) with the compile message template. |
| DONE | Returns to compile mode with every tile intact — keep adding tables. |
| DISCARD | The only button that deletes the session (along with CANCEL while compiling). |
SAVE / COPY / SEND / DONE are all non-destructive. Your session stays on disk and resumable.
| Composed (4 tables) | Sent to Discord | Spoiler-tagged |
|---|---|---|
![]() |
![]() |
![]() |
Sharing tiles between players
In a no-map world each player only reveals what they personally explore. SHARE lets a group pool coverage:
- SHARE (N) (shows EXPORT (N) with no webhook) exports every session tile as a self-describing PNG with its world rectangle embedded in a standard PNG
tEXtchunk (still a normal, viewable image). With a webhook configured, tiles are posted to Discord (batched, up to 5 per message). Copies are always written to:BepInEx/config/NoMapDiscordAdditions/compile-share/out/<world>/ - To receive: drop the PNGs a teammate shared into:
The next time you open the large map during a compile session, tiles for your current world are merged into your active session automatically. Then COMPILE composites yours and theirs together.BepInEx/config/NoMapDiscordAdditions/compile-share/incoming - Re-importing or re-sharing the same tile updates it in place; tiles for a different world are skipped. Handled files move into
incoming/processedorincoming/ignored. - Set
Map Compile.Enable Map Sharingtofalse(server-syncable) to turn this off entirely — the SHARE/EXPORT button disappears and nothing auto-imports.
Naming a cartography table
Every visible table pin in a capture is decorated with {distance}m {Direction} ({bearing}°) — e.g. 1240m NorthEast (45°). Labels render only during the capture, never in the live UI.
A table can also carry a human-readable name that flows into the Discord message ({table}) and the compiled-map captions ({name} — {distance}m {Direction}). There's no naming UI — the mod reads the closest named map pin sitting on the table (within ~8m):
- ZenMap auto-pins every cartography table with the vanilla "house" icon. Rename that pin and you've named the table.
- Or drop a Town pin on the table and name that.
Leave the pin unnamed and nothing changes — captions fall back to just the direction. The name is captured the moment you add a tile in MAP COMPILE, so it stays correct even when the table is far away or unloaded at compile time.
Configuration reference
Config file: BepInEx/config/com.virtualbjorn.nomapdiscordadditions.cfg
Discord
| Key | Default | Notes |
|---|---|---|
Webhook URL |
(empty) | Discord incoming webhook. Set on the server to push to clients in-memory without writing it to their config files. |
Message Template |
{player} shared a map update from {biome}{spawnDir}{table} |
Supports {player}, {biome}, {spawnDir}, {table}. Missing {spawnDir}/{table} are auto-appended. Server-synced. |
Spoiler Image Data |
false |
Tag attachments as Discord spoilers. Server-synced. |
Send Max Dimension |
2560 (512–8192) |
Caps the longest pixel dimension of anything sent to Discord or copied via COPY. Keeps 4K screens under Discord's 10MB free-tier limit. Server-synced. |
General
| Key | Default | Notes |
|---|---|---|
Capture Method |
ScreenCapture |
ScreenCapture or TextureCapture. Server-synced. |
Capture Super Size |
2 (1–4) |
Screen-capture quality multiplier. Higher = sharper but heavier. Server-synced. |
Normalize Capture Lighting |
true |
Texture-capture renders the map as if at noon so tiles captured at different times don't seam. Client-only. |
Enable Logs |
false |
Print info/warning/error to the BepInEx console and Player.log. Turn on to investigate problems. |
UI
| Key | Default | Notes |
|---|---|---|
Hide Clouds |
true |
Strip the cloud overlay before capture. Server-synced. |
Show Biome Text |
false |
Include the biome label in captures. Client-only; also toggled by the in-map Show Biome Text checkbox. |
Map Compile
| Key | Default | Notes |
|---|---|---|
Max Output Dimension |
2560 (512–8192) |
Longest dimension for the preview, COPY and SEND TO DISCORD composite. Does not affect SAVE (always native, hard-capped at 8192px). Server-synced. |
Compile Message Template |
{player} compiled a map from {tileCount} cartography tables. |
Used by SEND TO DISCORD in the result panel. Supports {player}, {tileCount}. Server-synced. |
Enable Map Sharing |
true |
Master toggle for cross-player tile sharing. Server-synced. |
Share Message Template |
(points teammates at the incoming folder) | Sent once with the first SHARE attachment. Supports {player}, {tileCount}. Server-synced. |
Pin Label
| Key | Default | Notes |
|---|---|---|
Enabled |
true |
Master toggle for the per-pin captions baked into the screenshot. Server-synced. |
Include Distance |
true |
Prepend the meters from spawn. Server-synced. |
Include Direction from Spawn |
false |
Append the compass direction/bearing. If both distance and direction are off, no label is drawn. Server-synced. |
Include Map Item Sources |
false |
Also label captures opened from a portable map item (e.g. ZenMap parchment). Server-synced. |
Show on Compile Mode |
true |
Stamp captions onto the MAP COMPILE composite (still gated by Enabled). Server-synced. |
Controls
| Key | Default | Notes |
|---|---|---|
Screenshot Key |
F10 |
SEND MAP hotkey while the large map is open. Client-only. |
Copy Key |
F11 |
COPY MAP hotkey while the large map is open. Client-only. |
Copy Full Resolution Modifier |
LeftControl |
Hold while clicking COPY to raise the cap to 4096px. Client-only. |
When ServerSync is installed, Discord.Lock Configuration is also available (standard ServerSync lock behavior).
Server behavior
Built-in RPC sync (no ServerSync installed)
These settings are pushed from the server to all clients on connect: Capture Method, Capture Super Size, Spoiler Image Data, Hide Clouds, Send Max Dimension, Message Template, all four Map Compile keys, all Pin Label keys, and Webhook URL (stored in memory only — never written to client config files).
The RPC protocol is versioned; mismatched client/server versions silently fall back to local config.
ServerSync
When ServerSync is installed it manages the synced settings above (except Webhook URL, which stays local to each client under that workflow).
Show Biome Text, Enable Logs, hotkey bindings, the modifier key, and Normalize Capture Lighting are always local to each client.
Troubleshooting
| Symptom | Fix |
|---|---|
| SEND MAP button missing | No webhook is available. Set Discord.Webhook URL locally, or have the server push one. COPY MAP and EXPORT still work without it. |
| ADD TILE is greyed out | The map must be opened at a cartography table. M-key opens and portable map items can't add tiles. |
| Compile mode "lost" after compiling | It isn't — reopen the large map and click RESUME COMPILE (N), then COMPILE again for a fresh result panel. (Fixed properly in 1.0.6.) |
Graphics.CopyTexture called with mismatching texture sizes error |
Update ZenMap to ≥ 1.7.3 — it self-heals this on expanded/4× worlds. |
| Discord upload fails / image too big | Lower Discord.Send Max Dimension (default 2560 keeps 4K under Discord's 10MB free-tier limit). |
| Dark/light seams between compiled tiles | Keep General.Normalize Capture Lighting on (default) and use TextureCapture. |
| Need to report a bug | Set General.Enable Logs = true, reproduce, and attach BepInEx/LogOutput.log. |
Dependencies
- BepInEx Pack for Valheim 5.4.2333
- JsonDotNET 13.0.4 — persists compile sessions to disk
- ZenMap ≥ 1.7.3 — required for MAP COMPILE; ≥ 1.7.3 also fixes the
CopyTexturesize-mismatch error on expanded worlds
Optional: ServerSync for the preferred config sync and lock workflow.
Support & questions
Reach me as virtualbjorn on the Valheim modding Discords:
- OdinPlus — https://discord.gg/mbkPcvu9ax
- ValheimModding — https://discord.gg/MJWtxQs
Ping virtualbjorn in the relevant support channel with your BepInEx/LogOutput.log if you're reporting an issue, or open an issue on the GitHub repo.





