← Back to Portfolios

DiveCut, The Dive Computer Baked Into Your Video

DiveCut
iOS AVFoundation & Metal Video Freediving Solo Build

The Problem

A freediver surfaces with a beautiful clip and no way to prove the dive. The footage shows blue water and a fin kick, but the number that mattered, how deep, how long, how the heart rate fell, lives on a dive computer that never talked to the camera.

The workaround was ugly. Screenshot the dive computer, drop the image in a corner in a general purpose editor, eyeball the sync against the video, and hope the timestamps roughly lined up. It was slow, it looked bolted on, and it was wrong more often than not, because a still screenshot cannot follow the depth as the diver descends and ascends.

The other half of the problem was color. Water swallows red first, so every underwater clip drifts blue-green and flat with depth. Fixing that by hand in a desktop grader is a skill most divers do not have and do not want to learn between dives.

The Insight

The dive computer already recorded the entire dive as data. A FIT file from a Garmin Descent, Suunto, Shearwater, or an Apple Watch with Oceanic+ holds the full depth profile, timestamped, second by second, plus heart rate and temperature. The information to draw a live, moving HUD was already sitting in the diver’s pocket. Nobody was reading it into the video.

So the product was not a video editor with a dive theme. It was a sync problem with a single hard step: align video time to dive time once, and everything else, the depth tape, the max depth marker, the heart rate, the descent rate, follows automatically for every frame.

The color problem had the same shape. The distortion water applies is predictable, it depends on depth, so a small pack of purpose built LUTs tuned for how light dies underwater beats a general grader for the one job divers actually need.

The Approach

DiveCut is a native iOS app, SwiftUI throughout, iOS 17+, built around an AVVideoComposition and a CIFilter chain, with the export HUD rendered as a CALayer tree composited by AVFoundation’s Core Animation tool. The FIT log is parsed on device with Garmin’s open source FIT SDK. Three decisions shaped it.

Sync happens once, by hand, and then it is locked. There is no continuous tracking to drift out of alignment. The diver scrubs to the exact frame they broke the surface, taps once, and DiveCut pins video time to dive time for good. Every HUD value from then on is a lookup into the FIT profile at the current frame’s dive time, sampled and interpolated between log points.

The DiveCut depth gauge HUD over a dive, a centered depth tape with fading ticks, a red marker at 23.7 m, a bold yellow depth readout, and a bottom bar showing 01:18 dive time and 24.0 m max depth with a small dive profile graph
The synced depth gauge HUD. A centered depth tape reads like a dive watch, a red marker sits at the current depth, and the info bar carries dive time and max depth with the profile drawn underneath.

The HUD reads like a dive watch, not a data overlay. A centered depth tape with softly fading ticks, a red marker at the current depth, a bold yellow readout, and a dashed line that tracks the deepest point reached. An optional info bar shows dive time, max depth, and heart rate; a corner readout shows vertical rate in m/s, colored by descent or ascent.

Nothing leaves the device. No account, no upload, no analytics SDK, no tracking. Footage and FIT files are copied into the app’s sandbox and never transmitted. The only outbound call is to the App Store for the one time purchase. For a tool that handles personal dive data and location bearing video, on device was a product stance, not a limitation.

The Build

The whole flow is one continuous take, annotated, no timeline and no render queue.

  • Import, pick a dive video from Photos, iPhone, GoPro, DJI, and Insta360 clips all work, then drop in the FIT log from a dive computer or fill in a manual entry
  • Sync, scrub to the surface frame and tap once to align video time to dive time permanently
  • Depth gauge HUD, a dive-watch style depth tape with current depth, dive time, heart rate, and a max depth marker, driven by sampled keyframes from the FIT profile
  • Four HUD styles, Gauge, Minimal, Classic, and Bold, four corner anchors, and metric or imperial units
  • Underwater color, a LUT pack tuned per depth, Tropical Reef Shallow, Tropical Reef 10m, Deep Blue, and Kelp Forest, with manual adjustment sliders and custom .cube import for Pro
  • Export, save back to Photos in source, 4K, 1080p, or 720p, H.264 or HEVC, with the HUD baked in, running in the background so the phone can be put down
A before and after split of the underwater color grade, the left half As Shot in flat blue, the right half DiveCut with red and warmth restored and the seabed reading brown instead of grey
Underwater color, restored. The same frame, As Shot on the left drifting blue, the DiveCut LUT on the right bringing back the red that depth swallowed.
Four HUD styles shown one per tile, Gauge with a depth tape, Minimal with a plain depth readout, Classic with a compact data table of depth time HR max and temp, and Bold with a large yellow depth number and an info bar
Four HUD styles, four corners, metric or imperial. Gauge, Minimal, Classic, and Bold, the same synced data dressed for different edits.

Where My Judgment Showed Up

The decisive calls were about scope and where to hold the line.

  • One clip, no timeline, on purpose, most freedivers shoot a single continuous take per dive, so a multi-clip timeline would have turned DiveCut into a general editor, which is exactly what it is not. Combine clips elsewhere first, then bring the result in
  • Sync once and lock, rather than continuous tracking, a single manual alignment at the surface is more robust than trying to auto-track, and it cannot silently drift mid-clip
  • A curated LUT pack over a full grading suite, the distortion water applies is predictable, so four depth-tuned looks plus sliders solve the real problem without asking divers to become colorists, with .cube import left open for those who want it
  • On device and offline as a stance, no account, no upload, no analytics, the only network call is to the App Store, because the trust cost of handling dive data any other way was not worth it

The Outcome

DiveCut is live, with the iOS app and the marketing site at divecut.freediver.space. It ships as a free editor, edit, grade, and preview the full synced HUD before paying, with a single one time purchase that unlocks export. No subscription, no ads, no account.

The DiveCut unlock screen, 'Your edit is ready — unlock DiveCut to export it', a feature list of export up to 4K, dive HUD synced from your FIT log, underwater color tuned per depth, and pay once yours forever, with an Unlock DiveCut $19.99 button
Pay once, yours forever. The full editor is free to try, and a single unlock turns on export, up to 4K, with the synced HUD baked in.

What I Learned

The best feature was the one the diver never has to touch, the sync that just works for the rest of the clip after a single tap. The temptation with dive data is to expose every knob; the win was hiding almost all of it behind one alignment step and letting the FIT profile drive everything downstream.

The second lesson was that constraint is a feature. Saying no to a timeline, no to multi-clip, no to cloud, and no to accounts made the app faster to use and easier to trust, and it kept the whole pipeline on device where dive footage belongs. A tool that does one thing, turns a dive into a shareable clip with the numbers baked in, beats a general editor that does it grudgingly.