Skip to content
PapyrusCS renders maps of Minecraft: Bedrock Edition worlds using C#, LevelDB and leaflet.
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
Benchmark Merge from database Jun 16, 2019
Imazen.WebP-std Linux webp support Jun 15, 2019
Imports WebP working! (Windows only) Jun 2, 2019
MapLoader.NUnitTests speed Jul 1, 2019
PapyrusCs.Tests.Core Putting stuff together Jun 10, 2019
PapyrusCs.Tests Bulks Jun 7, 2019
PapyrusCs Performance Update for webp Jul 6, 2019
leveldb-sharp-std Buffers... Jul 6, 2019
textures Add project files. Apr 1, 2019
.gitattributes Add .gitignore and .gitattributes. Apr 1, 2019
.gitignore Load Error Handling Jun 17, 2019
LICENSE Create LICENSE Apr 27, 2019
Mcpe.sln Linux webp support Jun 15, 2019
Mcpe.sln.DotSettings GraphicExtensions May 5, 2019 Update Jun 19, 2019

Chat: Discord
Windows: Build status
Linux: Build status

Contribute xor support

If you want to help improving Papyrus please consider forking the repository.

Want to buy me a coffee (I love coffee)? Donate via PayPal ♥

Version 0.3.2

Texture fixes
--brillouin_offset x parameter for worlds with low/high ground level
--forceoverwrite parameter to force reender everything\

Version 0.3

What's new:

New folder structure:

The new folder structure is:

|   |-dim0
|   |-dim1
|   |-dim2
|   |-map.html
|   |-dim0
|   |-dim1
|   |-dim2
|   |-map.html

Incremental Rendering:

With strategy Dataflow (default) PapyrusCs creates a sqlite database with chunk CRCs to check if a update rendering is necessary. PapyrusCs creates an update folder, which contains only the files that were updated (it will be copied to the map folder as well) So you just have to upload the content of the update folder after an update of the map.

With the option


the current dimension update folder to be rendered (dim0/1/2) will be deleted before the next update will be rendered. This is useful if you don't want to upload previous updated files again. Of course you can delete this folder by hand yourself.


PapyrusCs supports dimensions now: Overworld, Nether, The End
To render another dimension, add the --dim parameter (default --dim 0):\

--dim 0 (=Overworld)
--dim 1 (=Nether)
--dim 2 (=The End)

To render all dimensions in one map with layers See papyrus bedrock server, you have to call PapyrusCs three times. Example:\

PapyrusCs -w <yourworld> -o <youroutputfolder> -dim 0
PapyrusCs -w <yourworld> -o <youroutputfolder> -dim 1
PapyrusCs -w <yourworld> -o <youroutputfolder> -dim 2

This will generate all dimensions as maps.\


Multiple formats are now supported: jpg, png, webp
You now can select the output format with -f jpg or -f png or -f webp
For jpg and webp, you can select the quality:\

jpg: 0-100 (100 best)
webp: 0-100 (100 best but lossy. Value -1 is lossless and usually smaller than 100, -1 is also default)\

You can set that value with the parameter -q


-f webp -q -1
-f png
-f jpg -q 20


Papyrus is a tool to render Minecraft: Bedrock Edition (from now on referenced as "MCBE") worlds using Leaflet. It is written in C# and powered by .NET Core 2.2. It currently runs only under windows, but support for linux is planned.

You can view an example here.


Since MCBE worlds don't use the Anvil format like in the Java Edition, but rather a by Mojang modified version of Google's LevelDB to save, the goal of Papyrus is to read these worlds and assemble a render of every pre-generated chunk.


  • Render a top-down map of every already explored chunk
  • Windows and Linux Support


  • Nether/ The End support
  • Isometric renders
  • Auto-Updating renders


Otherwise, just grab one of the pre-built binaries. Just unpack the zip-file.


Make sure that your graphics libs are up-to-date: (Syntax may vary in other distros)

sudo apt-get update
sudo apt-get install libgdiplus
sudo apt-get install llibc6-dev

And give PapyrusCs execution rights: chmod +x PapyrusCs

For own compilation: Requires .NET Core 2.2. You may need to install additional dependencies.


For Linux: give the extracted PapyrusCs file execution rights! See installation notes above.

papyruscs --world "My World/db" --output "C:\papyrus"

  -w, --world                     Required. Sets the path the Minecraft Bedrock Edition Map

  -o, --output                    (Default: generatedmap) Sets the output path for the generated map tiles

  --htmlfile                      (Default: map.html) Sets name of html map file

  -s, --strategy                  (Default: Dataflow) Sets the render strategy. Valid are Dataflow, SingleFor and
                                  ParallelFor (Multithreaded)

  --coords                        (Default: false) Render text coordinates in each chunk

  --limitx                        Limits the chunk rendering in the x dimension (inclusive). Provide two values with
                                  comma separated, eg: -10,10

  --limitz                        Limits the chunk rendering in the z dimension (inclusive). Provide two values with
                                  comma separated, eg: -10,10

  -y, --limity                    (Default: -1) Limits the chunk rendering in the y dimension (inclusive). For y
                                  provide just one positive value, eg: 10. -1 means: all

  --threads                       (Default: 16) Set maximum of used threads

  -r, --rendermode                (Default: Heightmap) RenderMode: Basic - Render without brightness adjustment.
                                  Heightmap - Render with brightness adjustment based on brillouin function and height
                                  of block

  --brillouin_j                   (Default: 10000) Sets factor j for heightmap brightness formula brillouin:
                                  brightness = 1+brillouin((height-offset) / divider): See
                         for a diagram of the function.

  --brillouin_divider             (Default: 20) Sets divider for heightmap brightness formula brillouin: brightness =
                                  1+brillouin((height-offset) / divider). See
                         for a diagram of the function.

  --brillouin_offset              (Default: 64) Sets the offset for heightmap brightness formula brillouin: brightness
                                  = 1+brillouin((height-offset) / divider). See
                         for a diagram of the function.

  -f                              (Default: png) Sets the output file format

  -q                              (Default: -1) Sets quality for jpg or web format (0-100, -1 for lossless webp)

  --forceoverwrite                (Default: false) Forces PapyrusCs to render every chunk again

  -d, --dim                       (Default: 0) Selects the dimension. 0: Overworld, 1: Nether, 2: End

  --trimceiling                   (Default: false) Removes the ceiling starting from y-max. Automatically activated
                                  for nether

  --notrimceiling                 (Default: false) Disables auto ceiling removal for Nether

  --deleteexistingupdatefolder    (Default: false) Delete an existing update/dimX folder right before creating a
                                  possible new update

  --use_leaflet_legacy            (Default: false) Use the legacy leaflet.js map renderer instead of the new
                                  OpenLayers version
  --help                          Display this help screen.

  --version                       Display version information.

The vanilla resource pack with the default textures can be downloaded from here.


To compile for windows use either Visual Studio or run: dotnet publish PapyrusCs -c Release --self-contained --runtime win-x64

To compile for Linux run: dotnet publish PapyrusCs -c Debug --self-contained --runtime linux-x64

Additional dependencies

The source for the modified versions is included in this repository. All needed depencies are already included in this repository or automatically downloaded via NuGet.

Special thanks to...

... clarkx86 for his team work and idea giving and his port in node.js.


Papyrus is in no way affiliated with Mojang or Minecraft.


You can’t perform that action at this time.