{"id":21531491,"url":"https://github.com/avarel/silicate","last_synced_at":"2026-03-01T20:02:14.134Z","repository":{"id":59697634,"uuid":"472528349","full_name":"Avarel/silicate","owner":"Avarel","description":"Pure Rust GPU image compositor for Procreate file format.","archived":false,"fork":false,"pushed_at":"2024-02-09T20:16:44.000Z","size":14553,"stargazers_count":19,"open_issues_count":1,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-02-09T21:27:02.077Z","etag":null,"topics":["compositing","egui","procreate","webgpu","wgpu","wgsl"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Avarel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2022-03-21T22:08:09.000Z","updated_at":"2024-02-09T21:27:05.445Z","dependencies_parsed_at":"2024-02-09T21:37:16.415Z","dependency_job_id":null,"html_url":"https://github.com/Avarel/silicate","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Avarel%2Fsilicate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Avarel%2Fsilicate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Avarel%2Fsilicate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Avarel%2Fsilicate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Avarel","download_url":"https://codeload.github.com/Avarel/silicate/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":226116087,"owners_count":17575930,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["compositing","egui","procreate","webgpu","wgpu","wgsl"],"created_at":"2024-11-24T02:14:19.271Z","updated_at":"2026-03-01T20:02:14.128Z","avatar_url":"https://github.com/Avarel.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Silicate - Procreate File Renderer\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"media/clean.png\" width=\"400\"/\u003e\n  \u003cimg src=\"media/editor.png\" width=\"400\"/\u003e\n\u003c/p\u003e\n\nCross-platform native viewer for `.procreate` files. There is a\n`reference.procreate` file in the base directory for users to try.\n\n## Downloads\n* Latest builds are available through CI [here](https://github.com/Avarel/procreate-rs/actions/).\n  * Download the `release-{insert your OS here}` zip and unpack to obtain the binary.\n    * macOS users: You will need to unpack the zip and the dmg file to access\n      the binary. You might also need to go to System Preferences and allow the\n      application to run, since there is no code signing.\n\n## Features\n* Native desktop app for Windows, macOS, and Linux.\n* Load and view multiple `.procreate` files at once.\n* Export `.procreate` files to `png`, `jpeg`, `tga`, `tiff`, `webp`, `bmp` formats.\n* Change layer settings and live-preview the final result.\n  * Currently supports blending modes, clipping masks, masks, opacity, hiding, and groups.\n* Drag and drop loading.\n* GPU rendering, leveraging cross-platform `wgpu` integration.\n  * Rotate and flip the canvas at orthogonal angles and orientations.\n  * Rotate the view arbitrarily.\n  * Smooth or pixelated sampling in the viewer.\n\n### Wishlist\nThe following features will probably be added sometime in the future.\n* Documentation.\n* More utilization of `async` mechanics.\n* PSD export.\n* PSD preview (limited).\n\n## Notes\n### Accuracy\nThe renderer produces slightly different results from the reference render by\nProcreate's engine. The compositor produces accurate blending results except for\n`Saturation` and `Hue`, both of which resembles Photoshop's blending style instead\nof the style used by Procreate.\n\n### Efficiency\nThe compositor is relatively modular, but it is completely written from scratch\nwith no reference to existing research. If you are willing to contribute\nimprovements to the existing design or design a completely new compositor,\nfeel free to do so.\n\n## Procreate File Format\nAll `.procreate` files are standard ZIP files with the following structure.\n```\n- {UUID} [Folder]\n  - Contains .chunk files, presumably the actual pixel canvas data for the document.\n- QuickLook [Folder]\n  - Thumbnail.png - Low-quality screenshot generated by Procreate.\n- video [Folder]\n  - segments [Folder]\n    - segment-X.mp4, where X is a number starting from 1.\n- Document.archive - NSKeyedArchive containing layer information along with other document information like canvas size.\n```\n\n### NS Keyed Archive\nThis is Apple's format for serializing Objective-C/Swift instances. It is basically\na giant dictionary containing 4 items:\n* `version` - Irrelevant\n* `archiver` - Irrelevant\n* `top` - Top-level structure of the instance.\n  * In this case, we are interested in the SilicaDocument instance.\n  * It contains a plethora of key-value pairs that will not be enumerated here.\n    However, the structure is interesting. The key is a simple string, and\n    the value is oftentimes an `id` index that points to an object in `objects`.\n  * This object in `objects` is the true value of that key.\n* `objects` - The universe of values used in the archive.\n\n### Raster Canvas Data\nEach layer in a Procreate file has a `uuid` associated with it. It's raw RGBA data is located\nunder `{uuid}/`. The folder contain chunks with the naming convention `{col}~{row}.chunk`,\nwhich are `tile_size * tile_size` raw RGBA data that has been compressed with LZO.\nRecombine these chunks together to obtain the raw layer data.\n* It is important to note that the raw layer data is **premultiplied** RGBA.\n\n## Attribution\n* [Silica Viewer](https://git.sr.ht/~redstrate/silica-viewer) Base code for understanding the Procreate format.\n* [Prospect](https://github.com/jaromvogel/prospect) Another Procreate viewer, but only final composite. Supports timelapse playback.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Favarel%2Fsilicate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Favarel%2Fsilicate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Favarel%2Fsilicate/lists"}