VRecord · iPhone

Two cameras.
One take. No tape.

A professional contribution camera for iPhone. It runs both rear cameras simultaneously, encodes each eye in hardware, and sends the pair live to a destination you configure.

Nothing is written to the phone. Without a destination there is a viewfinder and nothing else to do.

  • iPhone XS or later
  • iOS 17+
  • No third-party SDKs
The VRecord app icon: a white head-mounted display, lit blue, with a red record indicator.

The hard part

Two eyes that agree.

Running two cameras is straightforward. Making the pair watchable is not — and almost everything that goes wrong is invisible on a flat screen and obvious the moment someone puts on a headset.

The VRecord viewfinder: a left and right eye side by side with a dashed divider, a LIVE indicator, a capture-settings readout reading Stereo SBS, 4K60, 40 Mbps, a right-eye trim of plus 1.5 EV, and a large shutter.

Paired by timestamp

The two cameras interleave their frames, so whichever arrives second completes the pair. Hold only one side and you are forever comparing a stale buffer against a half-frame tolerance, and nothing ever pairs.

Lens matching

Only the wide camera's auto-exposure is allowed to run; the ultra-wide is driven to match it four times a second. ISO is scaled by the square of the aperture ratio, and white balance travels as temperature and tint rather than as raw channel gains.

Right eye trim

Lens transmission and sensor sensitivity differ per model and nobody publishes the numbers. The residual is a manual trim in stops, settable by eye and adjustable while live.

Cropped, not resized

The two eyes are cropped to a common field of view, and the crop factor is a ratio of tangents rather than of degrees — 120° down to 73° keeps 43% of the width, not 61%. Done on the transfer session, so it costs no CPU.

Graceful in the dark

When the ultra-wide runs out of gain, ISO goes first, then exposure time up to one frame interval, then the left eye comes down to meet the right. A matched dim pair is watchable; a mismatched bright one is not.

Counted audio clocks

An AAC-LC access unit is exactly 1024 frames, so the encoder advances by frames consumed rather than by when a buffer arrived. Timestamps taken from arrival time are fine for a minute and a second out after twenty.

Getting connected

Five ways in, all doing one thing.

Every route fills in the same three fields — a host, a port and a stream key — and every one of them shows you the result for confirmation before anything connects.

Scan a code The primary route, which is why the scan button sits beside the shutter rather than two screens deep in Settings. It reads a pairing link from a QR code.
Pairing link A URL issued by the destination fills in everything at once. Paste it, or open it on the device.
By hand Type the address, port and key. Kept because camera access can be off, and a screen whose only way in is the camera is a dead end for exactly the person who most needs another.
A destination file A crew's configuration document, on the same path again.
Discovery A UDP probe finds compatible servers on the local subnet. It returns an address but deliberately never a stream key — discovery tells you a door exists, pairing gives you the key.

A destination with no key is refused outright. That is what lets the shutter be a single boolean: it is disabled until there is somewhere to send to, so it never looks armed and then refuses.

Stated plainly

What it does not do.

Each of these looks like an oversight unless it is said out loud. None of them is.

No local recording Nothing is written to the device at all. The target contains no asset writer and no file write of any kind. This is the single biggest gap between what the app sounds like and what it is.
No playback It shows the camera in front of it and the state of its own connection. It does not browse or play back whatever the destination does with the stream.
No account No sign-in, no catalogue, no feed. The app ships with no destination and goes back to having none every time it closes.
No analytics Nothing is collected by the developer. No crash reporting service, no advertising identifier, no third-party SDK in the binary.
No locked features Nothing in any of the five pairing routes unlocks, enables or reveals anything. There is no locked functionality in the binary to unlock.

Requirements

What it runs on.

Device iPhone XS or later (A12 and up) for Stereo Side-by-Side. Simultaneous two-camera capture does not exist before that.
iOS17.0 and later.
CaptureStandard single-camera, or Stereo Side-by-Side from both rear cameras.
VideoOne hardware encode per eye, parameter sets prepended to every keyframe so a receiver can join mid-broadcast.
AudioOne AAC-LC track, or none. Sound is off or it is absent — never muted.
TransportA framed TCP protocol, published for anyone writing a destination.

Not yet on the App Store. VRecord is in pre-submission. The capture, encode and ingest path has been run end to end on real hardware; the submission itself is still open work. There is no download link here yet because there is nothing honest to link to.