MapToPng Tool (A way to create a 2d map of your 3d world) (linux supported technically)

For linux users! The program found in the Source/Github, can instead be ran as a raw python file, which is provided in a bash script for ease of access. You will however have to find a way to run studio on your linux os…

Get it on Roblox Get it on GitHub

Good day, I’ve created a relatively simple and small program that takes a preselected area of the map, and generates a detailed photo/png with shadows and some extra effects. Hopefully, within the near future, as I update this tool and optimize it, since it’s relatively in an alpha stage, there will be more lighting options and effects.

  1. Release can be found here → GitHub - paswa-dev/ViewspaceToPng: Takes a Viewspace/Plane area, and creates a roblox image out of it. This is a work in progress and is not fully optimized, so feel free to assist in optimizing it..
  2. New Update! See latest release for more information → Releases · paswa-dev/ViewspaceToPng · GitHub
  3. Video Usage Tutorial/Tour → Watch Screen Recording 2025-08-23 165608 | Streamable

Explanation of settings

  • Resolution, essentially upscaling the image as the number goes down, 1 is a 1:1, 0.5 is a 1:0.5.
  • SunObjectName, name of the sun within the workspace.
  • SunColor, color of the sun, default is white.
  • SampleExtents. The literal stud offset between sample points when doing Bilinear Smoothing between 4 neighboring points. Creates smoother colors by spreading the colors, can remove jagged edges.
  • ShadowSamplingLimit, how many times the shadow occlusion samples random nearby points, would keep at 1 for performance; however, you can make shadows more “soft” with this.
  • Ambient, simply how dark a shadow can be. 0 = complete darkness, 1 = utter brightness.
  • LightIntensity, How bright the sun is; added because the angle of the sun correlates to its darkness, therefore, if you don’t want it to go dark, simply change this value!
  • IndicesPerFrame, reduces load per frame. I recommend around 400; the default is 1,000.
  • LowerPlaneHeight/UpperPlaneHeight (x), raycast spawns between these 2 planes, used to cut off certain pieces
  • LowerPlaneSize (x,y), size of the lower plane, upper plane copies this size
  • LowerPlanePosition(x, y, z), 3d position of the origin of the plane.



Different angle of the sun, more direct = more brightness.

How to use this! Download the .zip file from the most recent release. Launch the .exe provided, source code provided in master branch. A web server should be started. Go into roblox, add the plugin, follow the instructions provided through the plugin interface, then click Start Scan, wait a bit, and the .exe should deposit the image locally.

If you wish to contribute and/or recommend optimizations, please message me. You can view the master branch for the source code of the server-side of things. The plugin can be viewed by simply installing it and viewing it in the explorer.

For my more advanced fellas, this supports base64 encoding, but that’s for you to implement.

Planned Updates:

  • Optimization via Thread Pooling and Parallel Scheduling (Completed)
  • Cieve ImGizmo support (Completed)
  • Planar Slicing to scan the inside of buildings (Completed)
  • Auto IndicesPerFrame option. Will probably run a test raycast and pick the best number for you.
  • Dynamic IndicesPerFrame option. As the program is running it will change its IndicesPerFrame until your FPS is above 20.
  • Volumetric lighting and volumetric volumes for fog/transparency.
  • Updating the bilinear interpolating algorithm to account for more than 4 corners.
  • Whatever ideas you guys make.

New Updates:

  1. Parallel Lua added (exaggerated due to me opening MicroProfiler and it causing lag),
  2. New UI Update, (opening the plugin creates debugging tools!)
  3. Linux support added, check README.md in the repo

Credits to Iris and Ceive ImGizmo!

  • Side info, this is not 100% error-proof and is subject to random errors.
  • I did not develop this professionally, so some code may look scruffy! It’s an alpha product
19 Likes

If you are having issues running this, let me know and I will assist you with making it a bit better for yourself until I do the next release tmrw..

Just a side note, there is a “bug”. Not really a bug just a design flaw, when you first setup everything make sure you hit update.

New Update!

Removed need for BasePart plane, that is now virtual.

Added visualizers, thank you Jakey (Ceive ImGizmo Library)!

  • LowerPlane/UpperPlane (Raycast goes from Upper to Lower)
  • Sun Plane
  • Sun Reflection Line
  • LowerPlane Volume (Size + Position)
    New modifiers:
  • LightIntensity (How bright the sun is, added because the angle of the sun correlates to its darkness, therefore if you dont want it to go dark, simply change this value!)
  • IndicesPerFrame (Reduces load per frame)
    These can be clicked on and then dragged on the main viewport to quickly position them. For more info see, Drag | Iris
  • LowerPlaneHeight/UpperPlaneHeight
  • LowerPlaneSize (x,y)
  • LowerPlanePosition(x, y, z)

Sorry for any typos.

is this avaliable for linux? pls add it

I’ll look into that today. But yes it should be, just not the .exe i provided, ill make a bash script for your guys.

1 Like

New update! → Release Release v.0.2.1-alpha · paswa-dev/ViewspaceToPng · GitHub

New release: Release v.0.2.1-alpha,

  • Added performance enhancement. Allows buffers to be computed separately in their own threads, then joined together at the end!
  • Added Ceive ImGizmo and more Iris updates.
  • Unlimited Scan Size
  • UpperPlane Slicing allows you to get inside of rooms or only scan a specific level of the world if levels are stacked.
  • new IgnoreScanContainer instance in workspace, drop anything in this folder, and all raycasts will ignore it. By default, the baseplate and Terrain are a part of that.
1 Like

Been looking for an alternative to RoRender and this seems to have potential, will look in to it, thanks for sharing :clap:

4 Likes

Linux support added. Check the repo for more info. GitHub - paswa-dev/ViewspaceToPng: Takes a Viewspace/Plane area, and creates a roblox image out of it. This is a work in progress and is not fully optimized, so feel free to assist in optimizing it.

1 Like

Sorry false alarm, linux IS supported through the program. However I don’t think studio is on linux, so you could not run the plugin. When roblox decices to support linux you could use this, simply follow the instructions upon roblox adding support

1 Like

New Update, Release Release v.0.3.1-alpha · paswa-dev/ViewspaceToPng · GitHub

  • Plugin can now be downloaded via and auto-updated, https://create.roblox.com/store/asset/82181009933158/MapToPng
  • Buffer and parallel scheduler algorithm changed
  • Slight performance optimization
  • Fixed small artifacts being created on certain maps
  • Allows transparent background, will add a setting to add a specific color background if wanted.
1 Like

New Release, v0.4.1

  1. Updated Instructions for everyone,
  2. Fixed resolution not scaling the actual image but the physical coords, MY MISTAKE…
  3. Small tweaks to the default settings to help people with performance
  4. Added in depth notes and instructions on how to use the plugin properly and tips when using it.
  5. I did not add this earlier, and I’m sorry. But the roblox terminal will now output 3 values which will be needed when actually using the map for an in-game map. The bottom-left corner (x, y, z) and the top right corner positions (x, y, z) in world space, and the size in pixels of the map (x, y).
1 Like

Quick Plugin Patch/Hotfix for v0.4.1

  • Ensure you update your plugin now.
  1. Removed the 3 outputs, it now outputs 4 numbers, they are marked accordingly.

  2. Added new tab, Extra Information where you can view that info everytime you hit UPDATE.

Another HotFix for v0.4.1

Probably the last hotfix.

  • The images were being generated incorrectly due to the way the Pillow Image API stores the image. Required me to simply inverse the scan direction.
1 Like