You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Viewer: show real decode progress, and say clearly when a model is too large for the browser #1195
Two improvements to how the browser viewer opens models: showing real progress, and handling models too large for the browser.
Checklist
Real progress. While a model decodes, the progress bar stays indeterminate and the loading card shows an "about N s" estimate from the file size, because the viewer cannot get progress from the decoder (viewer/src/main.ts, near DECODE_BYTES_PER_SECOND). Since feat(cli): rvt-gltf --progress, with saved-graphics stages in WalkerControl #1072 the decoder's WalkerControl reports progress stages for rvt-gltf --progress. Done when the wasm binding passes those stages through viewer/src/worker.ts to the page and the bar shows them, with the estimate kept as a fallback and the Playwright suite covering it.
Models too large for the browser. WebAssembly can address at most 4 GiB, and a model's decode needs about ten times its file size (Core Interior's 32 MiB file peaks at 324 MiB, feat(viewer): draw doors and windows from their saved meshes, with a toggle #1150). A model like the one behind Bug: models with a partition stream over 256 MiB open empty, with no error #1075 (a 1,057 MiB partition) can fail even after "Retry with large-model limits", and the browser reports only RuntimeError: unreachable. Done when the viewer tells the user plainly that the model is too large for the browser and points them to the CLI. The options for opening larger models (wasm64/memory64, streaming partitions, reading fewer streams) are measured and the choice documented.
Where to start
viewer/src/worker.ts, viewer/src/main.ts, rvt-wasm/src/lib.rs, docs/viewer-api.md, and viewer/tests/saved-meshes-measure.spec.ts, which measures wasm memory per model.
#1297 (merged) does the first item here and the message half of the second:
The loading card shows the decoder's own stages (reading the schema, reading partition streams, scanning for elements, decoding elements) with their counts, from the same WalkerControl reports rvt-gltf --progress prints, and falls back to the size estimate while a stage has no count. viewer/tests/load-progress.spec.ts checks the bar against the recorded reports.
A model that runs out of wasm memory now says it is too large for a browser tab, names the step it stopped in, and points to rvt-ifc and rvt-gltf with --large-model and to the Python package's limits, including the 2 GiB whole-file cap. Firefox's and Safari's wording are recognised too, and a small file that stops early gets a hedged message rather than "too large".
Still open here: measuring the options for opening larger models in the browser (wasm64/memory64, streaming partitions, reading fewer streams).
Activity
feat(viewer): the partition scan reports one step per stream, and the…
feat(viewer): the partition progress comes from the inflate, which ev…
fix(viewer): the too-large note sits above the empty state, and Revit…
fix(viewer): determinate-progress checks read the recorded reports, t…
fix(viewer): the load-progress test counts a report as the card does,…
fix(viewer): the failure tests serve the patched worker by route, sin…
test(viewer): the Core Interior screenshot is taken with the worker's…
fix(viewer): a failure after the large-model retry says nothing about…
feat(viewer): the loading card shows the decoder's own progress, and …
chore(release): prepare v0.13.0 (#1303)
DrunkOnJava commentedon Nov 4, 2026
#1297 (merged) does the first item here and the message half of the second:
WalkerControlreportsrvt-gltf --progressprints, and falls back to the size estimate while a stage has no count.viewer/tests/load-progress.spec.tschecks the bar against the recorded reports.rvt-ifcandrvt-gltfwith--large-modeland to the Python package's limits, including the 2 GiB whole-file cap. Firefox's and Safari's wording are recognised too, and a small file that stops early gets a hedged message rather than "too large".Still open here: measuring the options for opening larger models in the browser (wasm64/memory64, streaming partitions, reading fewer streams).