Skip to content

feat(web): support more devices and actual 3D bodies - #12803

Closed
juliusmarminge wants to merge 11 commits into
playful-device-panelfrom
device-panel/device-profiles
Closed

juliusmarminge wants to merge 11 commits into
playful-device-panelfrom
device-panel/device-profiles

Conversation

@juliusmarminge

@juliusmarminge juliusmarminge commented Sep 20, 2026 •

Copy link
Copy Markdown
Member

The 3D viewer currently uses the same procedural phone shell for every device. This follow-up to #12787 gives iPads and Android devices appropriate family silhouettes and loads actual Apple device bodies for iPhone 18 Pro, iPhone 18 Pro Max, and the 13-inch iPad Pro M5.

Expo Device Hub still owns discovery, streaming, and input. The shared client runtime selects exact supported hardware, owns abortable model loading and cleanup, replaces the marketing screen with the live framebuffer, and projects input onto that display. Loaded geometry survives orientation, framebuffer-size, and panel-size changes. Missing, failed, or invalid models keep the procedural body.

The web bundle includes converted GLBs, fetched only in 3D mode. Each is about 1.7–2.3 MB. The conversion script preserves body proportions, removes accessories, normalizes the display, and compresses textures. Source URLs, checksums, and Apple authorship are recorded beside the assets. Apple asset redistribution rights remain unconfirmed.

Scope: web only. Android and the 11-inch iPad use procedural family bodies; no borrowed model is stretched to represent unsupported hardware. Existing flat mode and compact viewers remain available.

Validation: 37 focused tests passed for hardware selection, cancellation and late results, fallback and resource ownership, imported screen projection and UV generation, orientation changes, retained geometry, atomic resize, procedural families, gestures, and stream fallback. Scoped web/client-runtime typechecks, targeted lint, and the web production build passed. React Doctor found no errors. A live browser pass verified iPhone and 13-inch iPad rendering, screen input, rotation, orbit, pinch zoom, and 3D/flat switching. The Android emulator subsequently exited; a fresh Android browser pass is still pending.

Before and after show the same 13-inch iPad, landscape orientation, rear orbit gesture, and 1280×800 viewport. The baseline viewer files are from the parent branch.

Before: shared procedural phone body

Before: procedural phone body on the 13-inch iPad

After: actual iPad Pro body

After: authentic iPad proportions and attached rear camera

iPhone and iPad orbit, zoom, and flat view demo

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c50cda5756701d7b/apple-model-demo.mp4

Actual iPhone rear camera and body

Built with GPT-6-Astra in the Codex harness.

@juliusmarminge
juliusmarminge added this pull request to stack #12804 September 20, 2026 22:51
@github-actions github-actions Bot added the vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. label Sep 20, 2026
@juliusmarminge juliusmarminge changed the title device panel/device profiles feat(web): support more devices and actual 3D bodies Sep 20, 2026
@github-actions github-actions Bot added the size:XL 500-999 changed lines (additions + deletions). label Sep 20, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ℹ️ No successful main baseline artifact is available yet. This run establishes the initial measurement.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire — 13.5 KiB — 15.1 KiB ✅
Codex Thread snapshot wire — 7.1 KiB — 7.3 KiB ✅
Codex Live turn WebSocket wire — 6.4 KiB — 7.8 KiB ✅
Codex Live turn WebSocket decoded — 56.2 KiB — 66.4 KiB ✅
Codex Live turn messages — 9 — 21 ✅
Claude Total thread wire — 13.5 KiB — 15.1 KiB ✅
Claude Thread snapshot wire — 7.1 KiB — 7.3 KiB ✅
Claude Live turn WebSocket wire — 6.4 KiB — 7.8 KiB ✅
Claude Live turn WebSocket decoded — 57.0 KiB — 66.4 KiB ✅
Claude Live turn messages — 9 — 21 ✅

Baseline: unavailable · PR result: ac62940 · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 114.0 KiB
  • Claude decoded thread snapshot: 114.6 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

@macroscopeapp macroscopeapp Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All clear

Posted via Macroscope — Effect Service Conventions

@juliusmarminge
juliusmarminge removed this pull request from stack #12804 September 20, 2026 22:53
@macroscopeapp

macroscopeapp Bot commented Sep 20, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This PR adds a substantial GLTF-based 3D device capability, bundled Apple-derived assets, asynchronous model loading, and new default device silhouettes with changed interaction behavior. It also introduces a static-analysis suppression and records unresolved asset redistribution rights, so the scope requires human review.

You can add or adjust custom eligibility rules. Learn more.

@juliusmarminge

Copy link
Copy Markdown
Member Author

Consolidated into #12787 at the maintainer’s request. All viewer, device-family, and actual-model changes are now in that single PR as one squashed commit.

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

Labels

size:XL 500-999 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant