Turn your iPhone into a window to another dimension.
Real-time head-tracked parallax depth illusion — like peering through a portal on your phone.
Splat Frame uses your iPhone's TrueDepth front-facing camera to track your head position in real time and creates a 3D parallax "window" effect — the perspective inside the screen shifts naturally as you move, making it look like you're looking through a real portal into a 3D room.
Place your photos and videos from your photo library onto the 5 inner walls of the room. Move your head. Watch them come alive.
The same off-axis projection math used in real 3D window displays and museum installations — running at 60fps on your iPhone.
┌─────────────────────┐
│ ╔═══════════╗ │
│ ╱│ ceiling │╲ │
│ ╱ ╚═══════════╝ ╲ │
│ │left│ back │right│
│ ╲ ╔═══════════╗ ╱ │
│ ╲│ floor │╱ │
│ ╚═══════════╝ │
└─────────────────────┘
Your iPhone Screen
Move your head → perspective shifts
Like looking through a real window
| Feature | Description |
|---|---|
| Photo & Video Walls | Place media from your library on any of the 5 cube faces |
| Cube or Portrait | Switch between square and tall rectangular room shapes |
| Real-Time Head Tracking | ARKit face tracking at 60fps for precise parallax |
| Gyroscope Tracking | Phone tilt also drives the perspective — works together with face tracking |
| Adjustable Sensitivity | Fine-tune smoothing, movement scale, and gyro sensitivity |
| Physics Effects | Wobble/jello, inertia/slide, and bounce effects on the cube and wireframe edges |
| Screen Recording | Built-in recording to capture and share your creations |
| Pinch to Zoom | Scale the room depth to your preference |
| One-Tap Calibration | Reset head tracking origin instantly |
┌──────────────────┐ ┌────────────────────┐ ┌──────────────────┐
│ TrueDepth │ │ Off-Axis │ │ SceneKit │
│ Camera │───▶│ Projection │───▶│ Renderer │
│ │ │ │ │ │
│ ARKit face │ │ Asymmetric frustum │ │ 5-plane room │
│ tracking │ │ from head position │ │ + camera │
│ (x, y, z) │ │ (like a real │ │ override │
│ │ │ 3D window) │ │ @ 60fps Metal │
└──────────────────┘ └────────────────────┘ └──────────────────┘
▲ │
│ ┌────────────────────┐ │
└──────────────│ Gyroscope + │◀─────────── │
│ Motion Effects │
│ (wobble, inertia, │
│ bounce) │
└────────────────────┘
The parallax illusion uses an asymmetric frustum — the projection shifts inversely to your head movement:
nearOverDist = near / headZ
left = (-halfScreenWidth - headX) × nearOverDist
right = ( halfScreenWidth - headX) × nearOverDist
bottom = (-halfScreenHeight - headY) × nearOverDist
top = ( halfScreenHeight - headY) × nearOverDist| Requirement |
|---|
| iPhone X or later (TrueDepth camera required) |
| iOS 26+ |
| Xcode 26.2+ to build from source |
Splat Frame is built on top of these open source packages:
| Package | Description | Link |
|---|---|---|
| MetalSplatter | High-performance Gaussian splat renderer for Metal. Provides SplatRenderer, SplatChunk, and scene file I/O. |
scier/MetalSplatter |
| spz-swift | Swift bindings for the .spz compressed splat format — fast loading of Gaussian splat files on Apple platforms. |
scier/spz-swift |
| swift-argument-parser | Apple's library for straightforward, type-safe command-line argument parsing in Swift. Transitive dependency of MetalSplatter. | apple/swift-argument-parser |
All packages are managed via Swift Package Manager.
This project is open source. See the LICENSE file for details.
Website · App Store · Report Bug · Request Feature
Built with off-axis projection math