# Goal Create a PNG file from a glb (= glTF binary = Graphics Library Transmission Format https://en.wikipedia.org/wiki/GlTF). ## Introduction This exercise will walk thorugh the creation of a PNG from the included glb. The purpose is to show the steps taken to create the PNG which can be duplicated in a mass conversion script. You will be using the command console. The scripts run will create a small server; however, it will automatically select a port needed for the process so you do not have to be concerned of a port conflict, e.g. 3001, if you have another server running elsewhere on the system. The kernel selects a currently unused high-numbered port (typically in the 32768–60999 range on Linux). ## Prerequisites Node package: puppeteer ## Steps Open a command console and change to the following subdirectory: cd web/batch_glb_png/glbs for this exercise, create a soft link within glbs to just one file, we're only goint to perform a single PNG to demonstrate the scripts. Normally, directory glbs will have links to the actual glbs staged (how those links are created is another exercise) ln -s ../../'[o]_stealthburner_LED_carrier.stl.glb' . Note: remember to unlink this test file after this exercise so you do not pollute a future attempt to mass produce PNGs Example: ~/work/Voron/voronstl/web/batch_glb_png/glbs $ ln -s ../../'[o]_stealthburner_LED_carrier.stl.glb' . Change to to the upper directory from within ```web/batch_glb_png``` and then launch the conversion script. Note the run will use the job.json I created, when time comes when you want to use yours, then specify the path and filename to your PNG profile: cd ../batch_glb_png date;time node batch_render.js job.json Example: jlpoole@jp ~/work/Voron/voronstl/web/batch_glb_png $ date;time node batch_render.js job.json Wed Mar 4 18:17:13 PST 2026 PAGE console: error Failed to load resource: the server responded with a status of 404 (Not Found) PAGE console: warn [.WebGL-0x7a40014ea00]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels PAGE console: warn [.WebGL-0x7a40014ea00]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels PAGE console: warn [.WebGL-0x7a40014ea00]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels WROTE /home/jlpoole/work/Voron/voronstl/web/batch_glb_png/pngs/[o]_stealthburner_LED_carrier.stl.png real 0m1.667s user 0m1.327s sys 0m0.423s jlpoole@jp ~/work/Voron/voronstl/web/batch_glb_png $ Result: a PNG 1227 × 994: ![]([o]_stealthburner_LED_carrier.stl.png) Cleanup the link you created: cd web/batch_glb_png/glbs unlink '[o]_stealthburner_LED_carrier.stl.glb' # Conclusion Using the steps above, you created a single PNG from a glb. The next step is to fill the glbs directory with links to the glbs perviously generated by Blender and then execute the same/similar command from within the '''web/batch_glb_png ''' directory: node batch_render.js [your PNG specification, if you want] that will create a PNG for every glb. Note: the names of the links created by the ```create_glb_links.sh``` has the files path built in to assure uniqueness and provide a provenance. Since these links are used only by the glb->PNG process, I've gone the extra step of including the original project and directory path in the file name to help identify the file. The PNGs will just use the file's name and not the additional prepended path characters.