HEIC / HEIF decoding on moreless.tools -------------------------------------- When your browser cannot decode HEIC by itself, the image tools load libheif.wasm (libheif 1.23.7 + libde265 1.1.3, GNU LGPL-3.0-or-later) into a Web Worker and decode there. Nothing is uploaded; the decoder runs on your device. The library is fetched only when native decoding cannot handle the file, or when the caller requests all images in a multi-image HEIC file. Licences: COPYING-libheif.txt, COPYING-libde265.txt, LICENSE-emscripten.txt LICENSE-musl.txt, LICENSE-libcxx.txt, LICENSE-libcxxabi.txt, LICENSE-compiler-rt.txt Notices: NOTICE.txt Corresponding Source (LGPL v3 section 4(d)(0)), unmodified upstream releases: src/libheif-1.23.7.tar.gz sha256 f7483e818503ea6224c8863e4a56ac02c7089021a98472c811c12aa19faf2475 origin https://github.com/strukturag/libheif/releases/tag/v1.23.7 src/libde265-1.1.3.tar.gz sha256 554228bd17788c99a7e63b37ab5634722190e6e2bf60c1dcb01cef328e133905 origin https://github.com/strukturag/libde265/releases/tag/v1.1.3 src/libheif-container-build.sh the exact recipe; run inside the container image emscripten/emsdk:3.1.61-arm64@sha256:c8c7a4e913d36ea1a46908153cbd992d9251f10a910fb129064ce78a54fbf0c6 platform linux/arm64 Shipped binaries: libheif.wasm sha256 c2db515bd9b94178fe7c3ceb08feb0c3d3733b39e24f904b5485070eb6d1e612 libheif.js sha256 207d38f6ac094d6a3579bfd8a1088dff30e3a32ce3260f2cdba9e3f95abf2aad Rebuilding and replacing the library (source supplied for LGPL v3 section 4(d)(0)): the library is the separate file libheif.wasm plus its glue libheif.js. heic-decode.js and heic-decode.worker.js are shipped unminified and talk to it only through the documented HeifDecoder API, so you can drop in your own build of the library by replacing those two files. To rebuild without a MORELESS checkout, download both source archives and all four build files (SHA256SUMS, libheif-container-build.sh, libheif.env, rebuild.sh) from src/ into one directory, then run: LIBHEIF_NATIVE_ARM64=1 bash rebuild.sh Docker downloads the pinned compiler image if needed. Compilation itself runs with networking disabled. The output is written to ../rebuilt/ by default. Pass another directory as the first argument to rebuild.sh if needed. The command above selects the ARM64 compiler used for the shipped checksums. Without the override the wrapper selects the native host architecture. LIBHEIF_NATIVE_ARM64=0 selects the pinned AMD64 compiler, whose output may have different bytes. To build modified library sources, recreate the relevant archive and update SHA256SUMS. Replace libheif.js and libheif.wasm together, keeping the HeifDecoder interface. For local use, serve the files over HTTP under /assets/libs/libheif/ and serve the loader/worker at the same paths. No signature or MORELESS key is required. The musl, libc++, libc++abi and compiler-rt licence files are copied unchanged from the pinned Emscripten 3.1.61 build image. Upstream source paths and hashes are recorded in RUNTIME-SOURCES.json. LLVM's licence includes its compilation exceptions and legacy terms; these files do not change the LGPL terms above. These materials cover software redistribution. They do not establish patent clearance for distributing an HEVC decoder or grant third-party patent rights. Source on another medium, relink questions, or a notice you think is wrong: hello@moreless.tools The previous libheif-1.23.3.tar.gz and libheif-1.23.4.tar.gz source archives remain in src/ for recipients of earlier builds, together with libde265-1.1.2.tar.gz. SHA256SUMS-1.23.3 and SHA256SUMS-1.23.4 record those original source hashes. The current decoder uses the 1.23.7 and 1.1.3 archives listed above.