.nanodlp) is a ZIP-based container format that stores slice data as PNG images along with JSON metadata. It’s the native format for the NanoDLP software and is one of the most human-readable printer formats.
Overview
Unlike binary formats like CTB and GOO, NanoDLP uses a ZIP archive containing standard PNG images and JSON configuration files. This makes it easy to inspect, debug, and modify sliced files.Key Features
- Container: ZIP archive
- Layer Storage: PNG images (1.png, 2.png, …)
- Metadata: JSON files (human-readable)
- Compression: PNG deflate compression
- Preview: Single 3D preview image
- Open Format: Fully documented
File Structure
A.nanodlp file is a ZIP archive with the following contents:
JSON Files
All JSON files are pretty-printed for readability.Metadata Files
meta.json (Optional)
Fromformat/nanodlp_format/src/types.rs:
plate.json
Contains print statistics and bounding box:info.json
Array of per-layer information:profile.json
Print profile with exposure and movement settings:options.json / slicer.json
Slicer configuration and platform settings:NanoDLP software recognizes
options.json while UVtools expects slicer.json. Mslicer writes both files for maximum compatibility.G-code Templates
NanoDLP uses G-code templates for printer control:shield_before_layer (from format/nanodlp_format/src/types.rs)
shield_after_layer
[[LayerPosition]]- Current Z height[[ZSpeed]]- Z-axis speed[[Delay]]- Calculated delay time
Layer Images
PNG Format
Each layer is stored as a grayscale PNG:- Filename:
{layer_number}.png(1-indexed) - Format: Grayscale PNG
- Compression: Deflate (optimized for RLE data)
- Pixel values: 0x00 (black) to 0xFF (white)
Custom PNG Encoder
From the crate documentation (format/nanodlp_format/src/lib.rs:1-4):
Implementation of the .nanodlp format.
With a custom PNG encoder (deflate implementation) optimized for writing run length encoded layer data.
Mslicer includes an optimized PNG encoder that takes advantage of the run-length structure of layer data for better compression.
Preview Image
The3d.png file contains a preview of the sliced model:
- Filename:
3d.png - Format: RGBA PNG
- Size: Variable (typically matches platform resolution)
- Content: Rendered preview of the model
Compression
The NanoDLP format uses two levels of compression:- PNG Deflate: Each layer image is compressed using PNG’s deflate algorithm
- ZIP Compression: The entire archive can optionally use ZIP compression
Compatibility
Supported Software
- NanoDLP: Native format (primary use case)
- UVtools: Full read/write support
- DIY Printers: Widely supported for custom builds
Printer Support
The NanoDLP format is primarily used with:- Raspberry Pi-based DLP printers
- Custom MSLA printer builds
- DIY projection printers
- Any printer running NanoDLP software
Advantages
Human-Readable
Unlike binary formats, you can:- Extract the ZIP file
- View layer images in any image viewer
- Edit JSON settings with a text editor
- Debug issues by inspecting individual layers
Easy to Modify
You can post-process sliced files:Format Conversion
Easy to convert to/from other formats:- Extract PNGs for analysis
- Convert to video for visualization
- Generate time-lapses
File Size
NanoDLP files are typically larger than CTB/GOO due to PNG overhead:- Small models: 2-10 MB
- Medium models: 10-40 MB
- Large models: 40-200 MB
- Full-plate prints: 200 MB - 1 GB
Implementation in Mslicer
Mslicer’s NanoDLP implementation (format/nanodlp_format/):
- ZIP archive creation/extraction
- Custom optimized PNG encoder
- JSON serialization/deserialization
- Bounding box calculation
- Preview image generation
- Both options.json and slicer.json output
Creating NanoDLP Files
Reading NanoDLP Files
Performance
Despite the larger file size, Mslicer’s optimized PNG encoder provides fast serialization:- Parallel layer encoding
- Optimized deflate compression for RLE data
- Efficient ZIP writing
Documentation
See Also
- Chitu CTB Format - Binary encrypted alternative
- Elegoo GOO Format - Binary open alternative
- Format Overview - Compare all supported formats