How did you install WebODM (docker, installer, etc.)?
Windows installer, version 3.2.8
What's your browser and operating system? (Copy/paste the output of https://www.whatismybrowser.com/)
Chrome 152 on Windows 11
glbopti.js
What is the problem?
Clicking "Show Texture" on the 3D model view shows a white screen for any task whose GLB output exceeds 150 MB. CPU briefly spikes, the progress bar moves, then
the model area goes blank. Smaller models display correctly.
glbopti.js (which optimizes large GLBs before browser delivery) fails to load because of a broken native binary bundled in a transitive dependency. The
dependency chain is:
@gltf-transform/functions → ndarray-pixels → ndarray-pixels/node_modules/sharp@0.35.4
→ ndarray-pixels/node_modules/@img/sharp-win32-x64/sharp-win32-x64-0.35.4.node
That .node binary fails with ERR_DLOPEN_FAILED: The specified procedure could not be found under Node.js v24 on Windows. Because it is loaded eagerly at module
level, require('@gltf-transform/functions') throws before main() runs, causing glbopti.js to exit with an error. task.py catches the failure and falls back to
serving the raw unoptimized GLB, which is too large for the browser to render — hence the white screen.
A secondary issue: even after working around the load crash, compressTexture() from @gltf-transform/functions triggers a libvips error on ODM-generated textures:
GLib-GObject-CRITICAL: value "32" of type 'gint' is invalid or out of range for property 'space' of type 'VipsInterpretation'
Error: colourspace: parameter space not set
This is caused by getTextureColorSpace() returning a value that leads libvips 8.15.3 (bundled with sharp 0.33.5) into an invalid colorspace conversion path.
How can we reproduce this? (What steps trigger the problem? What parameters are you using for processing? Does it work with the default settings? Include
screenshots. If you are having issues processing a dataset, you must include a copy of your dataset uploaded on Dropbox, Google Drive or https://dronedb.app)
- Run WebODM on Windows with Node.js v24
- Process any dataset that produces a GLB larger than 150 MB
- Click "Show Texture" on the 3D model view → white screen
Fix: Two changes to app/scripts/glbopti.js resolve both issues:
- Delete node_modules/ndarray-pixels/node_modules/ so ndarray-pixels falls back to the top-level compatible sharp 0.33.5 instead of its bundled incompatible
0.35.4 binary.
- Replace the compressTexture() call with direct sharp calls (texture.getImage() → resize → .jpeg() → texture.setImage()), bypassing the broken colorspace
detection path.
A corrected glbopti.js is attached. After applying it and deleting app/scripts/node_modules/ndarray-pixels/node_modules/, a 567 MB GLB with three 24576×24576
textures processes and displays correctly.
How did you install WebODM (docker, installer, etc.)?
Windows installer, version 3.2.8
What's your browser and operating system? (Copy/paste the output of https://www.whatismybrowser.com/)
Chrome 152 on Windows 11
glbopti.js
What is the problem?
Clicking "Show Texture" on the 3D model view shows a white screen for any task whose GLB output exceeds 150 MB. CPU briefly spikes, the progress bar moves, then
the model area goes blank. Smaller models display correctly.
glbopti.js (which optimizes large GLBs before browser delivery) fails to load because of a broken native binary bundled in a transitive dependency. The
dependency chain is:
@gltf-transform/functions → ndarray-pixels → ndarray-pixels/node_modules/sharp@0.35.4
→ ndarray-pixels/node_modules/@img/sharp-win32-x64/sharp-win32-x64-0.35.4.node
That .node binary fails with ERR_DLOPEN_FAILED: The specified procedure could not be found under Node.js v24 on Windows. Because it is loaded eagerly at module
level, require('@gltf-transform/functions') throws before main() runs, causing glbopti.js to exit with an error. task.py catches the failure and falls back to
serving the raw unoptimized GLB, which is too large for the browser to render — hence the white screen.
A secondary issue: even after working around the load crash, compressTexture() from @gltf-transform/functions triggers a libvips error on ODM-generated textures:
GLib-GObject-CRITICAL: value "32" of type 'gint' is invalid or out of range for property 'space' of type 'VipsInterpretation'
Error: colourspace: parameter space not set
This is caused by getTextureColorSpace() returning a value that leads libvips 8.15.3 (bundled with sharp 0.33.5) into an invalid colorspace conversion path.
How can we reproduce this? (What steps trigger the problem? What parameters are you using for processing? Does it work with the default settings? Include
screenshots. If you are having issues processing a dataset, you must include a copy of your dataset uploaded on Dropbox, Google Drive or https://dronedb.app)
Fix: Two changes to app/scripts/glbopti.js resolve both issues:
0.35.4 binary.
detection path.
A corrected glbopti.js is attached. After applying it and deleting app/scripts/node_modules/ndarray-pixels/node_modules/, a 567 MB GLB with three 24576×24576
textures processes and displays correctly.