Oculo

plan your shot before you shoot

Oculo is a mobile spatial-cinematography workspace. A filmmaker steps into a photorealistic 3D scene, frames real camera and lens choices, saves annotated shots, and shares a shot plan the crew can read, all on an iPhone.

The problem

Location scouting and shot planning usually mean photos, sketches and long messages, and a collaborator still can't see the exact framing you meant. Oculo lets you walk a captured scene, compose the shot with real lens controls, and hand over a plan that shows exactly what you framed.

What it does

Explore a real place. Import a .spz scene from a real capture, or open one of the bundled photorealistic scenes: Small Garden, La Nuit, Pantheon, The Moon and the International Space Station. The bundled scenes work offline. Compose with real camera controls. Choose the lens (focal length and aperture), set the frame's aspect ratio, and move through the scene by touch. On iPhone, Magic Window turns the phone's motion into a handheld camera. Save annotated shots. Name each shot, add notes, and keep a saved reference frame. Plan camera moves. Build a move from keyframes with a speed curve, then preview it as a short MP4. Share a shot plan. Export printable PNG shot sheets with each frame, its lens and its notes, readable by someone who doesn't have the app. Each sheet includes the credits for the scene. Local-first. Projects live on the device and reopen after a restart. Nothing is uploaded unless you choose to share it.

How RevenueCat powers the app

Oculo is free for one saved project, with the full workflow: import, shots, notes, moves, PNG sheets and video previews. Oculo Pro is a single one-time, non-consumable purchase that removes the project limit.

The RevenueCat SDK loads the default offering and the Oculo_Pro_Lifetime package , and runs the purchase. Unlock is decided by the oculo_pro entitlement. The app checks it and gates only the creation of additional projects. Trying to create a second project opens the paywall. After the purchase, the second project is created straight away. Restore Purchases works without any account or login. Existing projects are never locked or lost if the entitlement changes, so users keep access to their own work.

How we built it

A shared TypeScript codebase using React and Vite in a Capacitor iOS shell, with Three.js and the Spark renderer for the 3D scenes. Scenes are stored in the on-device database (IndexedDB), and the shot sheets and video previews are rendered on the device. The app has 709 automated tests.

Challenges

Keeping large 3D scenes smooth on a phone. We cap each scene's splat count and re-encode scenes for mobile. Making local-first storage reliable: atomic writes, safe imports and deleting shared scene files correctly. Keeping the free tier genuinely useful while giving Pro a clear reason to exist.

What's next

Android support, optional accounts and cloud backup, and generating scenes directly in the app.

Built with: TypeScript, React, Vite, Capacitor, Three.js, Spark, RevenueCat, IndexedDB, Mediabunny

Built With

Share this project:

Updates

Submission history