shotMod — third-party notice ============================ GridSlice (/image-toolkit/) can decode HEIC/HEIF photos in browsers that cannot decode them natively. That decoding is done by libheif, compiled to WebAssembly and distributed as libheif-js. Component : libheif-js 1.23.2 (libheif compiled with Emscripten) Licence : GNU Lesser General Public License v3.0 or later Full text : ./LICENSE.txt Upstream : https://github.com/catdad-experiments/libheif-js libheif : https://github.com/strukturag/libheif WHAT SHIPS, EXACTLY ------------------- Nothing here is linked into a shotMod bundle. Both files are fetched only when you open a HEIC file, through a dynamic import of a chunk nothing else pulls in: /assets/heic-.wasm The compiled library, byte for byte the upstream artefact. Verified 2026-09-06 against libheif-js 1.23.2's own libheif-wasm/libheif.wasm — 1,422,377 bytes, SHA-256 e4aa8333fbe55ec7c6c776f735236f40bed9103188498f8131d4e52b73cdfee8, identical. This is the replaceable component. /assets/heic-.js NOT an upstream file. It is a minified bundle of libheif-js 1.23.2's Emscripten glue (upstream libheif-wasm/libheif.js, 91,255 bytes) together with a thin shotMod wrapper around it, and it exports decodeHeicToImageData / preloadHeicDecoder, which is what the tool calls. Dropping upstream's stock libheif.js in its place would therefore break the tool rather than relink it. The unmodified glue is obtainable from the pinned dependency: npm pack libheif-js@1.23.2, then package/libheif-wasm/libheif.js. EXERCISING THE LGPL's RELINKING RIGHT ------------------------------------- Two paths, both of which actually work: 1. Replace the .wasm. Build libheif 1.23.2 yourself (or modify it), produce the Emscripten wasm, and overwrite /assets/heic-.wasm with it, keeping the file name. The .js glue loads the wasm by that URL, so a compatible replacement is picked up with no other change. 2. Rebuild the chunk. Clone this site's source, install libheif-js@1.23.2 (or your own build of it under the same package name) and rebuild; the chunk is regenerated from whatever libheif-js resolves to. shotMod's own source is licensed Apache-2.0 (see README.md in the repository). The LGPL applies to libheif and to the Emscripten glue derived from it, not to the rest of this site. Everything still happens in your browser. No image is uploaded to decode it.