© 2020-2026 Muza, All Rights Reserved
Extending a photo editor to handle video sounds, from the outside, like a smaller step than it actually is. A video is just a sequence of photos, after all – apply the same edit to each frame, play them back fast enough, and the job should be done. That reasoning is correct in exactly the way that "a car is just a bicycle with more wheels" is correct: technically related, but missing the part that actually makes it hard.

The assumption that breaks first is the idea that a video edit is a photo edit applied many times. In practice, a single frame of video is not a self-contained problem the way a single photo is – it's one moment in a sequence where the previous frame and the next frame both constrain what the current one is allowed to look like. Edit each frame in isolation, optimizing only for how good that one frame looks, and you get a video that flickers: skin smoothing that subtly shifts intensity from frame to frame, a jawline adjustment that wobbles by a pixel or two as the tracking recalculates, a color grade that very slightly pulses because each frame's lighting analysis came out marginally different from its neighbor's.
None of these errors would be visible in a still photo pulled from that video. They're only visible in motion, which is exactly why a photo-editing pipeline extended naively to video can pass every single-frame quality check and still look wrong the moment it plays back. The problem isn't in any individual frame. It's in the relationship between frames, and a system built to evaluate frames one at a time has no way to see that relationship at all.

Once that assumption breaks, the actual shape of the problem becomes clearer, and it splits into four distinct stages that a photo pipeline never had to handle.
Detect finds the face or body in a given frame – a problem photo editing already solves well, since a single photo only ever needs this done once. Track is new: it has to follow that same face or body as it moves, turns, and gets partially obscured across dozens or hundreds of subsequent frames, maintaining a consistent identification of "this is the same person's jawline" even as the angle, lighting, and distance from camera all shift continuously. Apply does the actual edit, but has to do it in a way that produces the same relative adjustment across every frame rather than an independently optimized one – the smoothing strength that looked perfect on frame one has to still be the right amount on frame two hundred, not a value recalculated from scratch. Stabilize is the cleanup pass that catches whatever inconsistency slipped through anyway, smoothing out the frame-to-frame variation that would otherwise read as flicker.
Photo editing only ever needed the middle step. Video needs all four, running continuously, for every second of footage – which is the actual, mundane reason a video feature took meaningfully longer to build than the photo tools it's extending, and why "just apply it to every frame" undersells the problem by exactly the two hardest parts of it.
Tracking turned out to be the stage that caused the most rework, for a specific reason: detection failures and tracking failures look similar in a bug report but come from completely different root causes, and fixing the wrong one wastes real time. A detection failure means the system couldn't find a face in a given frame at all – usually because of bad lighting, an extreme angle, or partial occlusion, and the fix is almost always about improving the detection model itself.
A tracking failure is subtler and, in an odd way, more disruptive: the system finds a face just fine in every individual frame, but loses continuity of which face is which as it moves – most visibly when someone turns their head quickly, or another person briefly crosses in front of the camera. The edit doesn't disappear in these cases; it does something worse, which is to snap or drift, applying a slightly different adjustment as tracking re-anchors itself. A user watching this back doesn't see "the tool failed to detect a face." They see the person's face subtly change shape for a fraction of a second, which reads as far more unsettling than a clean failure would, precisely because it's almost imperceptible on a single frame and obvious in motion.
Solving this meant treating tracking as its own problem with its own failure modes, rather than as a solved side effect of running detection more often – a distinction that sounds obvious written down and was genuinely easy to underestimate before we'd actually shipped a version that got it wrong.

The Stabilize stage exists because Detect, Track, and Apply, even when each one works correctly in isolation, don't automatically add up to a flicker-free result – small, individually reasonable variations compound across frames in ways that are only visible once you're watching thirty of them a second. This stage is the one most tempting to treat as optional or as a later optimization, because a video that's slightly wrong in this specific way still basically works. It plays. The edit is visibly there. It's just subtly, distractingly unstable in a way that's hard to describe precisely but easy to notice.
We didn't treat it as optional, because the alternative – shipping a video feature that technically works but flickers under real-world conditions – would have undermined the actual point of extending editing to video in the first place. A photo that's ninety percent right still looks like a finished photo. A video that's ninety percent right looks unfinished, because the missing ten percent is exactly the kind of temporal consistency human perception is unusually good at noticing, even when it can't say precisely what's wrong.

Not everything about the photo pipeline needed to be rebuilt from scratch. The actual editing logic – what a good skin adjustment looks like, how far a body correction should reasonably go, what "recognizably you, on your best day" means for a given face – carried over directly, because that judgment doesn't change based on whether the output is a single frame or one of thousands. What changed was everything around that judgment: how consistently it gets applied, how it's re-evaluated across time, and how failures get caught before they reach someone's finished video rather than after.
This turned out to be a useful way to think about extending any tool from a simpler medium to a more complex one: the core judgment usually transfers, and the actual engineering work is almost entirely in the layer that maintains consistency of that judgment over whatever new dimension – in this case, time – the new medium introduces. Underestimating that layer is exactly how "just apply it to every frame" turns into a timeline that takes several times longer than it looked like it should.

It would have been possible to ship a faster, cruder version of video editing months earlier – one that applied per-frame adjustments without dedicated tracking or stabilization, accepted some amount of visible flicker as a known limitation, and improved it incrementally after launch. We considered that path seriously, because shipping something usable sooner has real value, and no version of a new feature is ever finished on day one regardless of how long you wait.
We didn't take it, because a video feature that visibly flickers on the first real use isn't a rough version of the same product – it's a different, worse product that happens to share a name with the one we wanted to build. The extra months went into Track and Stabilize specifically because those are the two stages a photo pipeline never needed and a video pipeline can't function without, and shortening that work would have shown up immediately, in motion, in exactly the way that's hardest to fix after the fact with a quick patch.