Mods / VS Map Tools

Tags: #Utility
Author: The_Lunarian
Side: Client
Created: May 21st at 11:23 PM
Last modified: Oct 24th at 2:32 PM
Downloads: 998
Follow Unfollow 82

Latest release:
vsmaptools_2.1.0_windows.zip


🗺️ VS Map Tools

 


! Warning – If you're a MacOS or Linux user, download the latest release on GitHub, as ModDB only accepts a single file per release !

 


 

VS Map Tools is a standalone GUI app that reads color data from your Vintage Story client-side minimap, and exports it as a high-resolution PNG image. You can choose to render a specific region using coordinate bounds, or export the entire explored world.

The output is pixel-perfect: each block in the game is mapped to exactly one pixel in the image. No scaling, no blurring, no interpolation.

Compared to Vintage Story Map Exporter, this tool is:

  • 💻 Cross-platform (runs on Linux, macOS, and Windows)
  • 📏 Not limited to 10,000×10,000 pixels
  • 🌍 Can render the whole explored map automatically, no manual bounds needed
  • 🧭 Supports relative coordinates (the ones you see in-game)

Preview

Preview of the software UI

Preview of exported map
1,500×1,000 blocks

Map colors are from the Medieval Map mod.

Installation

From the Releases page on GitHub, download the latest version corresponding to your operating system.

 

Roadmap

- 👥 Collaborative map sharing — merge several players’ minimap databases into a single world map.
- 🖼️ Improved map preview — display real colors for explored chunks instead of plain white/black placeholders.
- 🚀 Multi-threaded export — significantly faster rendering for large worlds.

License

This project is licensed under the MIT License. See LICENSE for details.

 

Mod Version Downloads Released Changelog Download
2.1.0 377 Oct 24th at 2:32 PM vsmaptools_2.1.0_windows.zip
2.0.0 20 Oct 23rd at 4:36 PM vsmaptools_2.0.0_linux.zip

For Windows and MacOS, see the release page on GitHub.


38 Comments (oldest first | newest first)

💬 Matero, Nov 27th at 12:14 PM (modified Nov 27th at 12:24 PM)

Hi, how are you? I'm trying to export an image, and according to the console, it processes correctly (both PNG and JPG), but then when I try to open the JPG image, it doesn't work, and the PNG doesn't appear. Is this a known bug? How do I fix it?

Thank you very much

 

INFO: 
SO: Win11
Soft Version: v2.1.0 last one from github 

Log:
[09:15:33] [INFO] [main] Vintage Story Map Tools — v2.1.0

[09:15:33] [INFO] [main] Godot version: 4.4.1-stable (official)— https://godotengine.org


[09:15:33] [INFO] [main] Renderer: NVIDIA GeForce RTX 3060
[09:15:43] [INFO] [main] Loading map file at C:/Users/*****/AppData/Roaming/VintagestoryData/Maps/4cdd0947-4f1a-40f5-9b6b-b1c7413c62cf.db
[09:15:52] [INFO] [main] Map loading completed.
[09:16:08] [INFO] [main] Exporting whole map. Bounds: (505120, 501440), (524224, 522976)
[09:16:08] [INFO] [main] Processing image for export...

[09:22:57] [INFO] [main] Image processing completed.
[09:23:17] [INFO] [main] Saving image to file: D:/Descargas/vsmaptools_2.1.0_windows/windows/vintage_story_map2.jpg

image

💬 MoonMan_88, Nov 27th at 9:15 AM

The_Lunarian is there some kind of limit for game map file size?

Because on my main world (which has a lot of area uncovered and in effect is 1.7GB big) it always just exports solid black image no matter what export size I set.

Works as intended on smaller worlds.

💬 captanredbeard, Nov 20th at 1:09 AM (modified Nov 20th at 1:10 AM)

The_Lunarian

I know it would be a bit of work to do, but would you consider a vcdbs to map db converter module? I have a decetly sized map save I need to make a map for.

💬 The_Lunarian , Nov 20th at 12:36 AM

CoZzaBoZza For now you should be able to circumvent the 16k*16k limit by setting manual bounds and doing multiple exports.

💬 CoZzaBoZza, Nov 19th at 11:41 PM (modified Nov 19th at 11:54 PM)

Going off previous comments, it's going to be difficult to print a map that's about 53000x13000...

Really should have set equator to be closer.

Edit: Yes it crashed...

💬 The_Lunarian , Nov 18th at 9:43 PM

CoZzaBoZza I answered you directly on the forum post you made in April. I hope it'll clear things out 🤞
https://www.vintagestory.at/forums/topic/15298-how-do-the-mapdb-files-work

 

💬 CoZzaBoZza, Nov 17th at 9:41 PM

Hey mate, was just wondering how you ended up creating this? I was trying to make one myself but never could get the database to decode...

💬 Matrokles, Nov 7th at 1:52 AM

The_Lunarian - I did end up just spitting out a few maps of areas I cared about and then stopped to await your reply.

 

Would be awesome if you managed a workaround, but knowing 16k x 16k is the size, for now at least, lets me break it up in a more orderly fashion.

 

Keep pluggin away, many thanks for your hard work!

💬 The_Lunarian , Nov 6th at 7:11 PM (modified Nov 6th at 7:16 PM)

Matrokles Crap, I just realized the image is actually limited to 16384×16384...
I'll need to find a way to work around that, maybe splitting images in 16k pieces instead of exporting a single one.

 

Did you succeed in exporting it as multiple parts, by setting the bounds manually? As you said, you can always stitch the PNGs together after the export.

💬 Matrokles, Nov 6th at 4:57 AM

The_Lunarian - after a certain size my maps stop generating. Maybe a bit over 7mb in jpg. Which admittedly puts it at a very impressive 20k x 9k. so please don't take this as criticism.

 

Do you know the size limit or is there a way to remove it or get around it perhaps?

 

Love the work you have done and will piece the maps together myself if necessary but thought I'd ask. Cheers!

💬 Laerinok, Oct 27th at 8:20 AM

Zellith

After the map export process, you get a window asking you where to save the file. So the image is where you put it. And the path is shown in the log.

💬 Zellith, Oct 27th at 8:10 AM

Where does the GUI store the image it exported? It doesn't seem to tell me. A simple "Open Image File Location" button would be nice.

💬 The_Lunarian , Oct 24th at 5:24 PM

DUCATISLO Thanks! Have you had a chance to try it out?

💬 DUCATISLO, Oct 24th at 3:55 PM

gg

💬 The_Lunarian , Oct 18th at 10:03 AM

Hi Pavadigan !
Sadly there's not an easy way to overlay the waypoints. If I'm not mistaken, they are not stored in the map, which is client-side, but in playerdata inside the world save. For a server, you wouldn't have access to it. For a singleplayer world, I guess you would, but I have no idea how the world save file is structured :\

https://www.vintagestory.at/forums/topic/16110-how-do-i-transfer-my-player-data-from-a-singleplayer-world/#comment-75175

💬 The_Lunarian , Oct 18th at 9:49 AM

Hi Xaeleus !

How big is the map you're trying to render, from the 6GB world ? Did you set whole_map to true or did you set bounds yourself ?  

💬 Xaeleus, Sep 19th at 9:35 PM (modified Sep 19th at 9:36 PM)

Laerinok
ok i hate this edit and ping feature it deleted my message

Im still running the process from an hour ago incase it is still orking ill keep it running for a few more hours. 6gb may just take forever.

💬 Laerinok, Sep 19th at 9:19 PM

Xaeleus

I remember waiting for a very long time for a map. The larger the map, the longer it takes. I had suggested adding a progress bar, because it can indeed seem frozen, but it's always working in the background.

I'm almost sure your map was still generating.

💬 Xaeleus, Sep 19th at 8:37 PM

So ive run into a limitation i think.
the map fiel im trying to convert is 6GB and when it tries to process, the progress bar seems to never appear. even waiting 5 minutes.

💬 Laerinok, Sep 17th at 7:45 PM (modified Sep 17th at 7:56 PM)

Eluce

This is a quick guide.I hope this could help you.

quick guide for Windows

Installing Python on Windows and Using `requirements.txt` in a Virtual Environment

This guide will walk you through the process of installing Python on a Windows machine, creating a virtual environment, and installing project dependencies from a `requirements.txt` file.

-----

Step 1: Install Python

1.Download the installer:Go to the official Python website and download the latest version for Windows. Be sure to choose the correct version for your system (32-bit or 64-bit).
2. Run the installer: Double-click the downloaded `.exe` file.
3. Crucial step. On the first installation screen, make sure you check the box that says "Add Python.exe to PATH". This will allow you to use Python from the command line without any extra configuration.
4. Complete the installation: Click "Install Now" and follow the prompts.

-----

Step 2: Verify the Installation

1. Open the Command Prompt: Press the Windows key, type `cmd`, and press Enter.
2. Check Python version: In the command prompt, type the following command and press Enter:

python --version

If the installation was successful, you should see the version number of Python displayed.

-----

Step 3: Create a Virtual Environment

A virtual environment is a isolated space for your project, which prevents conflicts between different projects' dependencies.

1. Navigate to your project directory: Use the `cd` command to move to the folder where you want to create your project. For example:

cd C:\Users\YourUsername\downloads\vsmaptools

2. Create the virtual environment: Once inside your project folder, run the following command. This creates a new directory (here, named `venv`) that will contain the virtual environment.

python -m venv venv

-----

Step 4: Activate the Virtual Environment

1. Go to (if you are not already in)  C:\Users\YourUsername\downloads\vsmaptools (in fact it is the same as in step 3)

2. Activate it: To start using the virtual environment, you need to activate it. The command for this on Windows is:

venv\Scripts\activate

You will know it's active when the command prompt's line is prefixed with `(venv)`.

-----

 Step 5: Install `requirements.txt`

The `requirements.txt` file lists all the Python libraries (dependencies) that your project needs.

1. Make sure the file exists: Ensure there is a file named `requirements.txt` in your project directory. It should contain a list of packages and their versions, one per line.

2. Install the dependencies: With the virtual environment active, run the following command to install all the packages listed in your `requirements.txt` file:

pip install -r requirements.txt

This will download and install each package directly into your virtual environment.

-----

Step 6: Run the script

C:\Users\YourUsername\downloads\vsmaptools\python3 vsmaptools.py

-----

Step 7: Deactivate the Virtual Environment

When you are done working on your project, you can deactivate the virtual environment.

1. Deactivate: Simply type the following command and press Enter:

deactivate

The `(venv)` prefix will disappear from your command prompt.

By following these steps, you can set up a clean, isolated Python environment for any project, ensuring that your dependencies are managed effectively.



But if you prefer, I've compiled the program into an .exe file to avoid the need for Python.
It should always work. See this post below

💬 Eluce, Sep 17th at 2:59 PM

Hey there. Thanks for the mod! 😃
I'm having some trouble though. I'm totally new to coding, but I've done step 1 and step 2.
Could you provide more detail on how to do step 3?
It says to install the required python package, but how do you do this with just the line of text?
When I copy and paste that line of text into python, nothing happens. It's probably obvious for coders, but I can't think of what else to do.
Would be grateful for a bit of help on this step. Thanks!

💬 Pavadigan, Sep 16th at 12:21 AM (modified Sep 16th at 12:30 AM)

  The_Lunarian First of all, Thank you! this works awesome!

Any way to overlay the waypoints from the in game map? What about from mutliplayer server?

 

 

💬 clovenhoof, Sep 13th at 1:33 AM

Just wanted to say, thank you for making this mod! It works perfectly, and the directions are very straightforward if you read the readme.

💬 Laerinok, Aug 29th at 6:28 AM

Redleg

I've made an exe version if you want. Have a look two comments below.

💬 Redleg, Aug 19th at 9:57 PM

This is exactly what I was looking for but as a non-python user, this feels like a different language. 

💬 The_Lunarian , May 23rd at 6:04 PM

Ok, I'm gonna do executable binaries ASAP lol.

💬 Laerinok, May 23rd at 8:51 AM

Werka eerino

For those interested, here's the Windows executable for the release, along with its VirusTotal scan result. I used the same library that I used for ModsUpdater, so it should not make issues.

Releases: VS_Map_Renderer
Direct link: VS_Map_Renderer_v1.2.1.zip / SHA-256: 5450ba7e888adfd9e7370307ff0c10ac80c7186f03c79522ccfdc8c13f820757 (Virustotal scan)

 

Usage is straightforward:

  • Download the zip file.
  • Extract the folder to your desired location.

 

Configuration:

  • Open your Vintage Story maps folder. By default, it's located at: C:\Users\\AppData\Roaming\VintagestoryData\Maps
  • While you can use files directly from this folder, it might be safer to copy the map file and place it in the same directory as VS_Map_Renderer.exe. This helps prevent potential file corruption issues.
  • Copy the name of the map file (e.g., f33d92de-dd29-44ef-9d25-1568eb965b9d.db).
  • Edit the config.json file with any text editor.
  • Specify the map name to export: "map_file": "3a882c23-bb4e-4571-9950-976055ef3673.db". Replace 3a882c23-bb4e-4571-9950-976055ef3673.db with the name you just copied. - If you only have one map, it's simple: you'll have a single file. Otherwise, you'll need to determine which file corresponds to your game save. (Personally, I rely on the file modification date; the most recent one is usually the world I played last.)
  • You can modify other options as needed.
  • Save your changes and exit.

 

Use:

  • Launch VS_Map_Renderer.exe and wait for the process to complete.
  • The program may sometimes appear frozen, but it's working in the background. Please be patient.
  • The generated map will be found in the VS_Map_Renderer.exe folder, with the name specified in the config.json file under the "output" key.
💬 eerino, May 22nd at 11:07 PM

Damn, the beginnings of the description gave me the impression I wouldn't need to do much to get the mod working. Every mod I've tried is just too involved for my level of knowledge and patience and time. 

💬 Laerinok, May 22nd at 7:02 PM

Werka

The script is written in Python, a programming language. You need to have Python installed on your PC to use the script.

I just got back, I'm tired. I asked GPT to make a quick guide if that helps. I've checked and fixed some things. I hope I didn"t miss any error...

 

The_Lunarian

This case perfectly illustrates what we were saying about the necessity of having a binary.
(Feel free to use/modify the guide to suit your needs.)

# Quick Guide: Exporting Maps from .db to .png

This guide will walk you through converting your `.db` map files into `.png` images using a Python script. Don't worry if you're new to Python; we'll cover everything step-by-step.

 

Spoiler!

 

💬 The_Lunarian , May 22nd at 6:15 PM

@Werka Could you please tell me exactly what you didn’t understand or which part was unclear? I’ll do my best to improve it and help you use the tool properly.


Czy mógłbyś dokładnie powiedzieć, czego nie zrozumiałeś lub która część była niejasna? Postaram się to poprawić i pomóc Ci korzystać z narzędzia we właściwy sposób.

💬 propaneko, May 22nd at 4:57 PM

Werka to się naumij albo nie korzystaj

💬 Werka, May 22nd at 4:07 PM

2/10 nie rozumieju

 

💬 The_Lunarian , May 22nd at 11:50 AM

Thanks a lot everyone for the feedback and kind words!

 

Laerinok

  1. Given the interest in a more accessible format, I'm also looking into bundling the tool as a standalone app with a GUI and embedded Python (so no terminal or setup required).
  2. Also agreed on the loading feedback. I’ll be adding a clearer visual cue during both the DB loading and image export steps, so it doesn’t feel like the program is frozen.
  3. You're right, map markers aren’t stored in the minimap database but supposedly in the world save files (*.vcdbs). This means access is limited, especially on multiplayer servers. It's definitely a feature I’d love to explore, but not a priority right now.

 

Nicklos

Thanks for trying it out! In version 1.2.1, the script now prints the target image size before attempting to allocate memory, so it’s easier to debug this kind of issue.

For reference: on my 2013 MacBook (8 GB RAM), I can generate up to ~100,000 × 100,000 px images before the OS itself kills the process (I don't get the MemoryError from Python like you do). If your map is even larger, that would explain the issue.

At that point, a single PNG might not even be usable by image viewers or web browsers. I’m considering adding an option to render one pixel per chunk (32×32 blocks), which would massively reduce image size while still giving a useful overview.

💬 Laerinok, May 22nd at 7:58 AM

Nicklos

A MemoryError typically happens when the requested image is too large for your system's available RAM.

I guess you have a big map...


Possible Solutions:

  • Reduce the size of the map you're trying to process.
  • Increase your system's available RAM 😅
  • The_Lunarian could process the image in chunks. But I have no idea what's possible or not.
💬 Nicklos, May 22nd at 7:24 AM

Traceback (most recent call last):
File "vsmaptools.py", line 330, in <module>
main()
File "vsmaptools.py", line 281, in main
image = Image.new("RGB", (bounds.width, bounds.height))
File "PIL\Image.py", line 3108, in new
return im._new(core.fill(mode, size, color))
MemoryError

Struck out trying to map the world at once unfortunately.

💬 Laerinok, May 22nd at 6:54 AM

Salut !
Beau projet bien pratique 😀

I just tested it and I like the result. A nice map. I agree with the comment below; I think the Python script will deter many users. A binary would be useful.

A small suggestion perhaps: "Loading map pieces" and "Processed" take a relatively long time (depending on the map size). I expected this, it's logical, but it gives the impression of a freeze. Maybe indicate more explicitly that this is normal and that it's working in the background.

And a question/request: Is it possible to have an option to add map markers? I don't know if they are accessible, but having also an annotated version as an option would be a plus.

💬 The_Lunarian , May 22nd at 12:03 AM

SiiMeR

Thanks a lot! Your codebase was a great reference when figuring out the structure of the DB, so kudos for blazing the trail. 😁

As for prebuilt binaries, I haven’t made a decision yet... But I totally agree it would help make the tool more accessible. I’ll definitely keep it in mind depending on how many users ask for it.

💬 SiiMeR, May 21st at 11:53 PM

Excellent. I was wondering when you'd finish this :D 

Will there be an option to download a prebuilt binary in the future? I feel like that would help this tool reach a wider audience.  

 (edit comment delete)
Основной веб-сайт | Почтовый сервер | FTP сервер | Административная панель | API интерфейс | Content Delivery Network | Статические файлы | Ресурсы сайта | Изображения | Файловое хранилище | Блог | Интернет-магазин | Техническая поддержка | Справочная система | Документация | Форум | Новости | Загрузки | Демонстрация | Тестовая среда | Приложение | Медиа контент | Разработка | Промежуточная среда | Бета версия | Безопасная зона | Вход в систему | Панель управления | Портал | Система управления контентом