M.010.07 — Dual-Phone Volumetric Capture (Execution Spec)
Date: 2026-04-04
Owner: Copilot execution lane
Status: Ready for implementation
Goal
Use two phones as a calibrated stereo pair to capture 3D objects and export them into .holo scene assets with usable geometry + texture alignment.
Product behavior
- Primary phone starts capture session and generates pairing QR.
- Secondary phone joins and syncs timestamps.
- Both devices record synchronized multi-view frames while user circles object.
- Reconstruction pipeline fuses depth/stereo + pose streams into mesh.
- Output is packaged as
.holoobject block + referenced texture assets.
Core constraints
- Clock skew budget: < 20ms between capture streams
- Pose drift must be corrected with periodic visual marker relocalization
- Export must include confidence metadata to avoid false precision in Studio
Technical architecture
Capture session
- Session roles:
hostandpeer - Shared session metadata:
sessionId- camera intrinsics
- calibration baseline
- capture framerate target
Synchronization
- Time sync handshake at join + periodic drift correction
- Frame envelope:
ts
interface StereoFrameEnvelope {
sessionId: string;
deviceRole: 'host' | 'peer';
timestampMs: number;
pose: {
position: [number, number, number];
rotation: [number, number, number, number];
};
intrinsics: number[];
imageRef: string;
depthRef?: string;
}Reconstruction pipeline
- Pair frame windows by nearest synchronized timestamps
- Triangulate sparse points using stereo correspondences
- Fuse with depth maps when available
- Build mesh + run hole filling + smoothing (bounded)
- UV unwrap + texture bake
- Emit
.holotemplate/object payload
Export contract
- Geometry output:
model/<sessionId>.glb - Texture output:
textures/<sessionId>_albedo.png .holoreference snippet includes quality/confidence fields
Proposed code touch points
packages/runtime/— capture session orchestrator + sync protocolpackages/core/—.holoexporter extension for volumetric capture metadatapackages/studio/— import panel for dual-phone capture output + confidence badges
Failure taxonomy
PAIRING_TIMEOUTTIME_SYNC_DRIFT_EXCEEDEDINSUFFICIENT_PARALLAXRECONSTRUCTION_LOW_CONFIDENCEEXPORT_SERIALIZATION_FAILED
Acceptance criteria
- Two-device pairing succeeds in < 15s under local network conditions.
- Captured object reconstructs into valid mesh and imports into Studio.
- Exported
.holoscene reference resolves assets without manual patching. - Capture confidence score is exposed and persisted in output metadata.
- Failure modes produce actionable user guidance (reposition, relight, recapture).
Test plan
Unit
- frame pairing logic under timestamp jitter
- sync drift correction math
- export schema validation
Integration
- synthetic dual-stream reconstruction test
- degraded network simulation for pairing/sync resilience
- low-parallax capture failure path
Device validation
- Android + Android pair
- iOS + iOS pair
- mixed pair (feature-flag if unsupported in v1)
Shipping slices
- Slice A: Pairing + sync protocol + schema tests
- Slice B: Reconstruction core + mesh export path
- Slice C: Studio ingestion + confidence UX + end-to-end demo
Metrics
stereo_pair_success_ratecapture_sync_drift_msreconstruction_success_rateexport_success_ratecapture_to_import_latency_ms
Definition of done
- End-to-end dual-phone capture ->
.holoimport demonstrated - acceptance criteria pass
- confidence metadata and error guidance available in Studio
- docs updated for operator workflow and known limitations