What Are Metal Shaders? How ByteWave Uses Your iPhone's GPU
When you apply a filter in most video editors, something happens behind the scenes that you never see. The app takes each frame of your video, processes it through some algorithm, and gives you the result. In most apps, that algorithm is a black box. In ByteWave, it's a Metal shader you can actually read and edit.
What is Metal?
Metal is Apple's low-level GPU programming framework. It lets developers write code that runs directly on the graphics processor in your iPhone, iPad, or Mac. The GPU is designed to process massive amounts of data in parallel, which makes it perfect for video. While your CPU handles one thing at a time really fast, your GPU handles millions of things at once. A 4K video frame has over 8 million pixels; the GPU processes all of them simultaneously.
Metal replaced OpenGL on Apple platforms and gives developers much more direct control over the hardware. It's the same framework that powers high-end games and professional creative tools on Apple devices.
What is a shader?
A shader is a small program that runs on the GPU. In the context of video editing, a shader takes a pixel's color as input and outputs a new color. That's it at the most basic level. A grayscale shader reads the red, green, and blue values of a pixel and averages them into a single gray value. A color tint shader shifts the hue. A blur shader samples neighboring pixels and blends them together.
Here's what a simple grayscale shader looks like in concept:
vec4 color = texture(inputImage, uv);
// Average the RGB channels
float gray = (color.r + color.g + color.b) / 3.0;
// Output the grayscale pixel
return vec4(gray, gray, gray, color.a);
This runs for every single pixel in every single frame. On a modern iPhone, that's billions of operations per second, and the GPU handles it in real time.
Why this matters for video editing
Most mobile video editors apply filters using pre-compiled code that you can't see or change. You get a "Vintage" filter or a "Warm" preset, and you can maybe adjust its intensity with a slider. That's it. You have no idea what the filter is actually doing, and you can't modify the underlying logic.
ByteWave takes a different approach. Every filter exposes its shader source code. You can open the code view and see exactly what the grayscale filter, the impressionist filter, or any other effect is doing at the pixel level. More importantly, you can change it.
How ByteWave makes shaders accessible
You don't need to be a graphics programmer to use this. ByteWave's workflow is designed around copying the shader reference and pasting it into an AI assistant like ChatGPT or Claude. You describe what you want in plain English, like "make this look like faded Kodachrome film with crushed shadows," and the AI writes the shader code. Paste it back into ByteWave, preview it on your footage, and iterate.
This is also how community filters work. When someone publishes a filter, they're sharing the shader code. You can use it as-is, or open the code and use it as a starting point for something new.
Subject-aware shaders
ByteWave goes a step further by letting shaders access Vision framework data. The app can detect the subject in your video and pass a mask to the shader, which means you can write effects that treat the subject and background differently. An impressionist painting effect on the background while the subject stays sharp. A color grade on the subject while the background is desaturated. A blur that only affects everything except the face. These are effects that traditionally required manual rotoscoping in After Effects.
The technical stack
For the technically curious: ByteWave renders video through a Metal compute pipeline. Each filter is a compute kernel that gets dispatched to the GPU with the current frame as a texture input. The shader reads from this texture, applies its logic per-pixel, and writes to an output texture. Multiple shaders can be chained together in a pipeline. The Vision framework runs on the Neural Engine to generate subject masks, which are passed to shaders as additional texture inputs. All of this happens per-frame in real time during preview, and at full resolution during export.
Because everything runs on the local GPU and Neural Engine, there's no network latency, no upload step, and no dependency on a cloud service. The quality and speed of your effects depends entirely on your hardware, and modern Apple Silicon handles it effortlessly.
See the code. Change the code. Make it yours.
ByteWave is the only mobile editor that lets you hack the GPU pipeline.
Download FreeAlso read: Create Custom Filters with AI · Community Filters