Skip to content

3D fitted rendered still (declared poster slot) - #6032

Draft
lukemelia wants to merge 6 commits into
cs-12573-video-fitted-poster-frame-poster-slotfrom
cs-12574-3d-fitted-rendered-still-poster-slot
Draft

3D fitted rendered still (declared poster slot)#6032
lukemelia wants to merge 6 commits into
cs-12573-video-fitted-poster-frame-poster-slotfrom
cs-12574-3d-fitted-rendered-still-poster-slot

Conversation

@lukemelia

Copy link
Copy Markdown
Contributor

What this does

Stacked on #6031 (video poster frame).

ThreeDModelDef (GLB / glTF / STL / 3MF families inherit it) declares a poster screenshot slot (170×250 @ dsf 2, keyBy: 'file-content', useAsThumbnail). The capture-only component (file-formats/model3d-captures) loads the model, frames it, and renders one WebGL frame:

  • Same pinned CDN three.js builds (three@0.160.0 via esm.sh) and per-format loaders the live orbit viewer already uses — loaded only inside the capture render.
  • Determinism guardrails: the viewer's fixed default camera direction (flat prints face the camera) and bounds-derived distance, the viewer's fixed light rig, no OrbitControls, no damping, no animation mixers — one render() call, then the data-screenshot-pending readiness signal drops. Unchanged bytes byte-hash to the same still across reindexes.
  • Failure posture: an unparsable model (or empty geometry) resolves readiness and leaves the fitted cell's cube-glyph fallback in place.
  • No viewer changes: the fitted cell picks the still up through the view model's thumbnail seam.

Test plan

Realm-server e2e (extends the file-capture suite): writes the licensed glb-simple.glb fixture, asserts the poster manifest entry and that the prerendered fitted HTML embeds the durable still URL. CI-validated (the cached-fixture suite doesn't run locally); the capture render fetching three.js from esm.sh inside prerender Chrome is the piece to watch on CI.

🤖 Generated with Claude Code

lukemelia and others added 2 commits September 4, 2026 22:12
ThreeDModelDef (GLB, glTF, STL, 3MF inherit it) declares a poster
screenshot slot whose capture-only component loads the model with the same
pinned three.js CDN builds the live orbit viewer uses, frames it with the
viewer's default camera direction and bounds-derived distance, lights it
with the viewer's fixed rig, and renders exactly one frame — no controls,
no damping, no animation mixers, so unchanged bytes byte-hash to the same
still across reindexes. Readiness flows through the
data-screenshot-pending contract; an unparsable model resolves readiness
and leaves the cube-glyph fallback in place. keyBy 'file-content' +
useAsThumbnail route the still to the fitted cell through the view model's
thumbnail seam.

Part of CS-12574.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Host Test Results

    1 files  ±0      1 suites  ±0   2h 6m 18s ⏱️ + 4m 1s
4 628 tests ±0  4 614 ✅ ±0  14 💤 ±0  0 ❌ ±0 
4 643 runs  ±0  4 629 ✅ ±0  14 💤 ±0  0 ❌ ±0 

Results for commit eed4d8b. ± Comparison against earlier commit 4612ee9.

Realm Server Test Results

    1 files  ±0    202 suites  ±0   1h 12m 48s ⏱️ + 2m 11s
2 633 tests ±0  2 630 ✅ ±0  0 💤 ±0  3 ❌ ±0 
2 672 runs  ±0  2 669 ✅ ±0  0 💤 ±0  3 ❌ ±0 

Results for commit eed4d8b. ± Comparison against earlier commit 4612ee9.

For more details on these errors, see this check.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant