Topomc
minecraft topographical map generator
Install / Use
/learn @kiwirm/TopomcREADME
TopoMC

TopoMC combines the ecosystem of Python libraries for Minecraft and the extensive spatial support of R to create beautiful topographical maps of your Minecraft worlds. TopoMC supports all Minecraft versions from 1.9 up to the current release (1.20.1).
How to Use
Requirements
- Python >= 3.9: check with
python3 --version- pipenv: check with
pipenv --version
- pipenv: check with
- R >= 4.1.0: check with
R --version- renv: check with
Rscript -e "'renv' %in% rownames(installed.packages())
- renv: check with
MacOS
If using MacOS, the sf package of R requires some extra libraries and options to be installed correctly.
Firstly, install dependencies:
brew install udunits
brew install pkg-config
brew install gdal
Then, install sf from source in R shell: install.packages("sf", type="source", configure.args="--with-proj-lib=$(brew --prefix)/lib/")
See the official sf repo README for more information on installing sf for various linux distrobutions
Instructions
- Make sure you have all requirements installed
- Clone the repo and
cdtoscriptsdirectory (you may need to set the file permissions to be executable,chmod +x *) - Run
./installto install dependencies - Run
./generateto generate the required.tiffiles into thedatafolder - Run
./mapto render the data into a.pngmap image
The map can be opened at any time without re-rendering by opening the map file created in the root directory of the project.
NB: The script can only map chunks that have already been loaded. This means you may have to open the world in-game and walk around in order to load chunks, otherwise you may end up with some holes in your map!
./generate
Usage
./generate world x1 z1 x2 z2 [-d DOWNSAMPLE] [--saves-path SAVES_PATH] [--compress-height-limit]
worldWorld to map (world directory name - not in-game world name!)- (
x1,z1) Top left block of map - (
x2,z2) Bottom right block of map
Options
-d,--downsampleHow much to downsample the generated data (int,>=1). If set to a value other than 1, will only read every nth block from the world. Improves generation speed somewhat for very large areas but reduces detail of map and can create some inaccuracies.--saves-pathPath to non-standard saves location for the current platform. Useful if using a 3rd party launcher such as MultiMC.--compress-height-limitIf the world version is>1.16.5, attempt to fit the increased height limit within a 8-bit.tifinstead of a 16-bit.tif(sets height values<0to0and all height values>=256to 255). If the world vesion is<=1.16.5, this setting has no effect.
./map
Usage
./map [-i INTERVAL] [-s SCALE] [-k SMOOTHING] [--interactive] [--keep-crumbs]
Options
-i,--intervalSet the contour interval of the generated map, in blocks (default=1).-s,--scaleSet the scale ratio (1:scale) for the generated image, if applicable. DPI is always set to 300, so for a higher quality image, set a higher scale ratio (default=5000 (1:5000)).-k,--smoothingFactor of smoothing (generalisation) of the map. Set to 0 to turn smoothing off (default=1). Smoothing is automatically scaled with the amount of downsampling used to generate the data, but this option can be used as a multiplication factor.--interactiveWhether to open an interactive webview, using Leaflet.js. Works better for smaller maps, HTML file generation may break and/or frame rate of website may be low for larger maps.--keep-crumbsWhether to keep very small features on the final map instaed of deleting them.
Example
./generate -255 -255 255 255 --world my_world -d 2 && ./scripts/map -i 2.5 --interactive
Contributing
Feel free to create a PR at any point, or open an issue if you have any problems or suggestions.
How it Works
Chunk data is read by opening the world save directory and reading its region files (.mca). Once the region data is decoded chunks can be iterated through to find surface blocks (can be changed by editing symbols.json). To make this process more efficient, the script takes advantage of precomputed heightmaps, which are also decoded from their binary format. These heightmaps contain info such as the y-level of the first motion-blocking minecraft block, so efficiency of finding the surface is greatly improved.
After the chunks are read several .tif files are saved in a folder called data at the root directory of the project. These files contain the raw data extracted from the minecraft files that is needed to create the topographical map. .tif files are chosen as they are a cross-compatible and effective data matrix format.
The ./map script runs the R spatial processes which translate the data into a presentable map with a well-recognised symbol set.
Related Skills
node-connect
349.2kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
claude-opus-4-5-migration
109.5kMigrate prompts and code from Claude Sonnet 4.0, Sonnet 4.5, or Opus 4.1 to Opus 4.5
frontend-design
109.5kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
model-usage
349.2kUse CodexBar CLI local cost usage to summarize per-model usage for Codex or Claude, including the current (most recent) model or a full model breakdown. Trigger when asked for model-level usage/cost data from codexbar, or when you need a scriptable per-model summary from codexbar cost JSON.
