[ArtPipe][Bug] Export stage dead on first prod asset — Blender's glTF exporter missing numpy (--no-install-recommends dropped it) + probe chain masked the real error #721

Closed
opened 2026-07-19 13:38:31 +00:00 by spikerj · 1 comment
Owner

Third and final never-run-stage gap from the #719-era pipeline shakeout (after #702 dino and the texturing pass): the first asset to reach export died with "No usable glTF exporter found: Calling operator bpy.ops.wm.gltf_export error, could not be found".

Two defects:

  1. Real cause — numpy missing for Blender's Python. docker/Dockerfile.base installs blender with --no-install-recommends; Ubuntu's blender package only RECOMMENDS python3-numpy, and io_scene_gltf2 imports numpy at export time. Ubuntu blender (4.0.2) uses the SYSTEM python3 (3.12, prefix /usr), which had no numpy → every export_scene.gltf call raised ModuleNotFoundError: No module named 'numpy' wrapped in RuntimeError. Verified by headless probe in the live container; installing python3-numpy makes export produce a valid GLB immediately.
  2. Error masking. gltf_export's candidate loop kept only the LAST error — and on pre-5.1 Blender the last candidate (wm.gltf_export, a 5.1-era name) ALWAYS fails with a bland "could not be found", overwriting the informative ModuleNotFoundError. The failure read as an operator-naming problem when it was a missing dependency.

Fixes (PR incoming): python3-numpy added to the base image apt set (with a comment explaining the recommends trap); probe chain now reports every candidate's error keyed by operator name.

Interim: python3-numpy apt-installed into the LIVE artpipe-modeling container (2026-07-19) — export Retry works NOW, but the patch is container-ephemeral: a service restart re-breaks export until the tier-1→2→3 image chain rebuilds with the merged fix.

Related: #719 (the shakeout), #702/#720/#717 (this asset's greatest hits).

Third and final never-run-stage gap from the #719-era pipeline shakeout (after #702 dino and the texturing pass): the first asset to reach **export** died with "No usable glTF exporter found: Calling operator bpy.ops.wm.gltf_export error, could not be found". **Two defects:** 1. **Real cause — numpy missing for Blender's Python.** `docker/Dockerfile.base` installs `blender` with `--no-install-recommends`; Ubuntu's blender package only RECOMMENDS `python3-numpy`, and `io_scene_gltf2` imports numpy at export time. Ubuntu blender (4.0.2) uses the SYSTEM python3 (3.12, prefix /usr), which had no numpy → every `export_scene.gltf` call raised `ModuleNotFoundError: No module named 'numpy'` wrapped in RuntimeError. Verified by headless probe in the live container; installing `python3-numpy` makes export produce a valid GLB immediately. 2. **Error masking.** `gltf_export`'s candidate loop kept only the LAST error — and on pre-5.1 Blender the last candidate (`wm.gltf_export`, a 5.1-era name) ALWAYS fails with a bland "could not be found", overwriting the informative ModuleNotFoundError. The failure read as an operator-naming problem when it was a missing dependency. **Fixes (PR incoming):** `python3-numpy` added to the base image apt set (with a comment explaining the recommends trap); probe chain now reports every candidate's error keyed by operator name. **Interim:** `python3-numpy` apt-installed into the LIVE artpipe-modeling container (2026-07-19) — export Retry works NOW, but the patch is container-ephemeral: a service restart re-breaks export until the tier-1→2→3 image chain rebuilds with the merged fix. Related: #719 (the shakeout), #702/#720/#717 (this asset's greatest hits).
Author
Owner

Scope extended (same PR #29, second commit): one stage later, ENRICHMENT hit the sibling gap — SIGABRT 'Couldn't open libEGL.so.1'. Enrichment renders EEVEE thumbnails/previews, so it needs the glvnd EGL dispatcher (libegl1+libgles2) that export never touched; the NVIDIA vendor EGL libs were already mounted by the runtime, only the dispatcher was missing from the image. Live container patched interim (headless EEVEE render verified producing a PNG — enrichment Retry works now, same ephemerality caveat) and both libs added to Dockerfile.base in PR #29. That's every Blender-backed stage on this asset's path now exercised in prod: concept/modeling/texturing/export/enrichment.

Scope extended (same PR #29, second commit): one stage later, ENRICHMENT hit the sibling gap — SIGABRT 'Couldn't open libEGL.so.1'. Enrichment renders EEVEE thumbnails/previews, so it needs the glvnd EGL dispatcher (libegl1+libgles2) that export never touched; the NVIDIA vendor EGL libs were already mounted by the runtime, only the dispatcher was missing from the image. Live container patched interim (headless EEVEE render verified producing a PNG — enrichment Retry works now, same ephemerality caveat) and both libs added to Dockerfile.base in PR #29. That's every Blender-backed stage on this asset's path now exercised in prod: concept/modeling/texturing/export/enrichment.
Sign in to join this conversation.