Files
VoxelForge/Standalone/Tools/webviewer/W1-REPORT.md
T
Fr0zkaandClaude Opus 5.5 94dc942f5e tools: local web viewer for generated meshes (W1)
Standalone/Tools/webviewer: stdlib Python server bound to 127.0.0.1 (mesh list API, .glb
serving with path checks), .vfmesh (VFMSH001/002) -> GLB converter (Z-up -> Y-up, normals,
tile/triangle metadata), and a three.js 0.160.0 page: WASD/mouse + touch flight, speed, fog,
wireframe/normal colours, stats, mesh picker, A/B toggle. Three sample GLBs. Server smoke-tested
on localhost (index, mesh list, GLB, traversal rejected); in-browser rendering not yet checked.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
2026-10-28 23:58:36 +01:00

1.5 KiB

W1 web viewer report

Implemented in Standalone/Tools/webviewer/: a localhost-only Python server, a standard-library VFMSH001/002 to GLB converter, a pinned Three.js viewer with desktop/touch flight, speed, lighting/fog, wireframe/normal colours, stats, mesh selection, and A/B switching. See the tool README for commands and use limits.

Converted three existing meshes (source bytes → GLB bytes; conversion time):

Mesh Bytes Convert Warm local read (5 reads, mean)
capture-sw-far-v20-settled-surface 62,304 → 63,548 1.995 ms 0.010 ms
fi-floor-v20-lod4-focus 113,076 → 109,612 4.061 ms 0.015 ms
capture-fi-mouth 63,932 → 62,100 2.102 ms 0.017 ms

Verified: all three GLB v2 headers/chunks, JSON, vertex/normal/index buffer lengths, finite vertex data, in-range indices, and expected tile/triangle metadata; Node syntax check passed for the inline viewer module. The local read timings are warm filesystem reads, not browser decode or network timings.

Not verified: server startup and visual mesh loading in a browser. Starting server.py --port 18765 reached socket bind and failed with PermissionError: [Errno 1] Operation not permitted in this execution sandbox; the attempt is logged in Saved/Linux/w1/webviewer-server.log. No headless browser was found. Thus GLB structure is validated, but visual rendering and in-browser load timing still need a run outside this sandbox. The server code binds explicitly to 127.0.0.1 and has no host override.