
This is the repository for Silicate, a GPU-accelerated, cross-platform native/web viewer for .procreate files.
release-{insert your OS here} zip and unpack to obtain the binary.xattr -d com.apple.quarantine <file_path>Don't have a Procreate file? There is a reference.procreate file in the base directory for you to try.
.procreate files at once..procreate files to png, jpeg, tga, tiff, webp, bmp formats.wgpu integration.The web viewer only works on modern browsers that support WebGPU and WebAssembly. It is also significantly slower than the native viewer due to the additional overhead of the web environment and single-threaded execution. Unlike the native viewer, the web viewer does not support exporting for now.
Compositing is driven by the UI thread, which means that the compositor will block the UI thread. This is not a problem for the native viewer, as the compositor runs on its own thread. However, for the web viewer, this means that the UI can be unresponsive during compositing for large files.
In addition, the web viewer cannot leverage multithreaded decoding of the Procreate file, which makes larger files take a longer time to load.
The renderer produces slightly different results from the reference render by
Procreate's engine. The compositor produces accurate blending results except for
Saturation and Hue, both of which resembles Photoshop's blending style instead
of the style used by Procreate.
The compositor is relatively modular, but it is completely written from scratch with no reference to existing research. If you are willing to contribute improvements to the existing design or design a completely new compositor, feel free to do so.
All .procreate files are standard ZIP files with the following structure.
- {UUID} [Folder]
- Contains .chunk files, presumably the actual pixel canvas data for the document.
- QuickLook [Folder]
- Thumbnail.png - Low-quality screenshot generated by Procreate.
- video [Folder]
- segments [Folder]
- segment-X.mp4, where X is a number starting from 1.
- Document.archive - NSKeyedArchive containing layer information along with other document information like canvas size.
This is Apple's format for serializing Objective-C/Swift instances. It is basically
a giant dictionary containing 4 items:
* version - Irrelevant
* archiver - Irrelevant
* top - Top-level structure of the instance.
* In this case, we are interested in the SilicaDocument instance.
* It contains a plethora of key-value pairs that will not be enumerated here.
However, the structure is interesting. The key is a simple string, and
the value is oftentimes an id index that points to an object in objects.
* This object in objects is the true value of that key.
* objects - The universe of values used in the archive.
Each layer in a Procreate file has a uuid associated with it. It's raw RGBA data is located
under {uuid}/. The folder contain chunks with the naming convention {col}~{row}.chunk,
which are tile_size * tile_size raw RGBA data that has been compressed with LZO.
Recombine these chunks together to obtain the raw layer data.
* It is important to note that the raw layer data is premultiplied RGBA.
$ claude mcp add silicate \
-- python -m otcore.mcp_server <graph>