Beauty as it was.
I love travel and diving for the beauty you get to see, and I love sharing it. What I don't love is spending evenings grading and polishing clips. I don't think beauty needs improving: it's already there. When cameras and screens couldn't hold it all, it had to be squeezed into what they could show, and that took creative decisions. Not anymore: with log and HDR, technology is capable enough to carry beauty to the screen as it was. It just has to be used that way.
Better cameras, harder files.
Over the years cameras got better, and their files stopped being ordinary videos. Use everything a camera can do, and you get a grey log picture, gyro data, telemetry and highlight marks that ordinary players can't read. Turn it all off, and the video is plainer than the camera could have made it.
In between there's only the maker's app: on a phone, like watching through a keyhole. You're tied to it for good, often with an account, a cloud or a subscription you never asked for.
Colors as the eye remembers them.
Under water, the colors were never right. In the camera's normal mode they came out too purple, too brown or too green: not what the eye remembers. Then I came across the cameras' log mode. Seen through a player that understands log, it looked better, if still not perfect. But only the makers' own phone apps read log: the keyhole again.
The makers publish how to turn their log into an ordinary SDR picture, never into HDR. The community, though, had measured it. Zeb Gardner had worked out how GoPro's and DJI's log really behave, and made free LUTs that convert it accurately. When I took my dives through them into HDR on my MacBook, the look was neutral and true, and at first I couldn't believe my eyes: finally, it looked like what I'd seen. I wanted everyone to have that. So I wrote to Zeb, and he kindly agreed to let the player use his LUTs.
It's not what the makers' apps give you. Exported from DJI's app, my dives have their shadows crushed into black, so the corals turn harsh and gothic, and the blues come out too blue, oversaturated. I wanted the neutral look, and Zeb's measurements gave it to me.
But applying LUTs takes professional software like DaVinci Resolve or Final Cut Pro, which you have to buy first. Loading clips into an editor just to see what I'd filmed felt like using a sledgehammer to crack a nut. That became the first reason for this player: double-click a log clip, and it plays in HDR, beautifully, right away.
Shaky under water.
Under water, everything shakes. When cameras got their own stabilization I was thrilled, until I saw it doesn't work there. And I never wanted a big two-handed rig. For me the dive comes first: being there, looking around, feeling the place. The camera is one hand, no more, or the joy goes.
The divers I talked to were sure of it: digital stabilization doesn't work under water, and can't. I studied physics, so I looked for the reason. A camera's stabilization from its gyroscope assumes how the lens bends light, and water changes that: the lens behaves like a longer one, by about a third. So every turn of the camera moves the picture about a third more than the stabilization expects, and what it misses shows as shake. Correct the lens for water's refraction, and the shake goes.
For a while I used a dome port: a housing with a dome-shaped window over the lens. Light then crosses from water to air straight on, so it isn't bent, and even the camera's own stabilization works. But the dome is plastic and scratches easily, it's big, and the air inside it pulls you toward the surface. It worked as a stop-gap. It wasn't what I wanted.
In April 2024 I took the math to Gyroflow, the open-source stabilization project. With its developers, we worked it out in a few days, and Gyroflow got an underwater setting: tick Lens is underwater, and dives come out steady. The same day I asked GoPro for it in GoPro Labs, their experimental features. About half a year later, Labs got Dive Mode, which adapts HyperSmooth to water's refraction. I've used it ever since, and it works. It hasn't made it into the cameras' regular settings, though.
Then my wife gave me an Osmo Action 6. Its large sensor catches far more light under water, but its stabilization has the same problem. In May 2026 I asked DJI for the same fix. Until it comes, this player does it.
A lucky mix, I think: physics, technology, and a love of diving.
A player that does it all.
I follow technology closely, AI most of all. At some point I saw that it had become good enough for someone with my limited programming knowledge to build a real app. So I built the player I wanted, with Claude, Anthropic's AI, as my programming partner. Double-click a clip, and it plays right away: log in color and in HDR, steady, the lens corrected for water, the color fringes at the edges taken out. Nothing to render, nothing to import.
I made it for myself. Then I saw how many people have the same footage and the same problem. So I made it work for more cameras, tested it on my old GoPro clips, and opened it up. Along the way I've also been giving improvements back to Gyroflow itself.
Open source, and what's next.
This is my first open-source project, and I'm curious myself where it goes. It's free, and it stays free. It does take my time, though. If you find it useful and want to support it, I'd be glad and grateful: support means more time for it, and for more cameras.
Found a bug, or have a camera it doesn't know yet? Tell me in GitHub Issues.