Browser builds of the tools the HDR pipeline runs. Served as static files, so they work identically in the Tauri webview and on a static host.
| Source | Tools |
|---|---|
| radiantlab/Radiance | evalglare getinfo pcomb pcompos pextrem pfilt psign ra_xyze |
| radiantlab/hdrgen | hdrgen |
| radiantlab/LibRaw | dcraw_emu |
falsecolor is absent on purpose: it is a Perl script upstream, so it has no
wasm build. src/lib/pipeline/falsecolor.ts reimplements it by driving
pcomb, pcompos, psign and pextrem.
dcraw_emu converts RAW inputs to TIFF before hdrgen sees them
(#237). It peaks
at 266 MiB on a 5796x3870 CR2, about 6.5% of the wasm32 ceiling, and takes
roughly 2 s per frame. Note the pipeline skips image filtering when the input is
RAW, matching the Rust implementation.
Both repos build these in CI and publish them as artifacts; take them from there, or build locally:
# Radiance
emcmake cmake -S . -B build-web -DBUILD_HEADLESS=ON -DBUILD_QT=OFF \
-DCMAKE_BUILD_TYPE=Release -DRADIANCE_WASM_NODERAWFS=OFF
cmake --build build-web --target evalglare getinfo pcomb pcompos pextrem pfilt psign ra_xyze -j8
# hdrgen
emcmake cmake -S . -B build-web -DCMAKE_BUILD_TYPE=Release -DHDRGEN_WASM_NODERAWFS=OFF
cmake --build build-web --target hdrgen -j8
# LibRaw
emcmake cmake -S . -B build-web -DCMAKE_BUILD_TYPE=Release -DLIBRAW_WASM_NODERAWFS=OFF
cmake --build build-web --target dcraw_emu -j8Then copy the .js and .wasm outputs here. Radiance and hdrgen put theirs in
build-web/bin/; LibRaw puts them in build-web/.
Then regenerate versions.json from the same checkouts:
npm run wasm:versions # writes versions.json
npm run wasm:versions:check # fails if it is staleThe Settings page reads that file to report which Radiance, hdrgen and LibRaw
these artifacts came from. It has to be generated rather than read at runtime:
none of the Radiance tools here prints its own version, and dcraw_emu's usage
banner does not carry LibRaw's. So the file is the only record, and refreshing
the .wasm without it leaves the app confidently reporting the previous
build.
Do not substitute a NODERAWFS build: it targets node, runs main() at
instantiation before inputs can be staged, and does not export FS.
They are build outputs, which usually do not belong in a repository. They are here because the app must be able to load them offline and because the static export has no build step that could fetch them. The repository already carries 29 MB of native binaries for the same reason; these total under 4 MB.