1.2.8
Changed
- Middle-page Point Cloud mode shows the live RGB camera — no on-screen point overlay. The LiDAR compute kernel still runs and PLY streaming is unchanged; geometry is meant to be visualized receiver-side. The 60-slot ring buffer (~70 MB GPU memory) is gone
- Gaussian Capture Rate picker is now 30 / 15 / ~7 Hz (was 60 / 30 / 15). iPhone LiDAR runs at 30 Hz; the old "60 Hz" option processed duplicate ARFrames for no extra coverage.
GaussianRecorder.recordFramefilters duplicate-buffer ARFrames before striding, so the picker now reflects unique LiDAR scans/sec. Stored 60 values migrate to 30 on load - Backpressure on the PLY TCP transport —
TCPTransport.sendRaw(PLY only) gates on a ~1.5 MB inflight-bytes counter and drops new frames when the receiver lags rather than queueing them. Phone-side memory and CPU stay flat under a stall; the receiver gets fresh frames when it recovers instead of a backlog. Also enablesnoDelayon the PLY socket. Video TCP transport unaffected
Removed
- Frame Window slider in Point Cloud Settings — drove the now-deleted ring buffer; nothing downstream consumed it after the camera-only middle page change. Setting +
UserDefaultskey + UI row + renderer wiring all deleted - Dead GPU point-accumulation API in `MetalRenderer` —
startAccumulation/stopAccumulation/appendAccumulationPointsand the matchingGaussianRecorder.onPointsExtractedcallback had no callers anywhere; ~100 lines of unreachable code removed. CPU-side accumulation inGaussianRecorder.allPositions(the actual driver of Gaussian / COLMAP / Nerfstudio / PLY exports) is untouched
Fixed
- Compute Quality's Balanced and Efficient options were silently dropping all or most PLY frames —
drawPointCloudincremented its frame counter on every ARFrame but gated compute ondepthChanged && (counter % skip == 0). At skip=2 (Balanced, the default), the% 2 == 0phase landed on duplicate-buffer ARFrames wheredepthChangedwas false, so the two filters never both passed and compute never ran. Full worked by luck (% 1is always true). Fixed by moving the counter increment inside theif depthChangedbranch so the stride counts unique LiDAR scans. Users on Balanced (the default) were effectively getting no PLY stream - Receiver IP field accepts commas as periods — locales that use comma as the decimal separator (de_DE, fr_FR, es_ES, most of continental Europe) show a comma key on iOS's
.decimalPadwhere US users see a period. The field now intercepts the comma viaonChangeand replaces it before it lands inreceiverHost. Invisible to US users; immediate fix for users on comma-locale keyboards who were silently getting bogus IPs. Also handles paste-from-clipboard with comma-separated addresses