Technology

CUDA, Metal, and CPU: Cross-Platform GPU Acceleration in a Desktop Video App

FrameQuery uses NVIDIA CUDA on Windows and Linux, Apple Metal on macOS, and falls back to CPU when no GPU is available. All from a single Rust codebase.

FrameQuery Team12 February 20262 min read

FrameQuery runs on Windows, macOS, and Linux. On each platform, it needs to decode professional video formats as fast as possible. That means GPU acceleration, and every platform has a different GPU API: NVIDIA CUDA on Windows and Linux, Apple Metal on macOS. Some machines have no suitable GPU.

We handle all three cases from a single Rust codebase.

Why GPU acceleration matters for video

Professional cinema RAW formats like RED R3D, ARRI ARRIRAW, and Blackmagic BRAW store raw sensor data that must be debayered before it becomes a viewable image. Debayering is computationally expensive. At full 8K resolution, a single frame can take hundreds of milliseconds on CPU. Across thousands of frames, on-device frame extraction becomes slow.

Debayering is a per-pixel operation that parallelises well. A GPU kernel processes a full 8K frame in a fraction of the CPU time.

Three platforms, three GPU backends

Rust's compile-time platform features let us include platform-specific GPU code only where it belongs. CUDA code compiles on Windows and Linux. Metal code compiles on macOS. If neither is available, the application still works, just without GPU acceleration.

At runtime, FrameQuery probes the GPU before committing to a decode path. A Windows machine might not have an NVIDIA GPU. A Mac might have integrated graphics that does not support the Metal features we need. The app detects what is available and selects the best option automatically.

NVIDIA GPUs (Windows and Linux)

On machines with NVIDIA GPUs, FrameQuery uses CUDA to overlap CPU and GPU work during decode. While the GPU is processing one frame, the CPU is already preparing the next. This pipelining keeps both the CPU and GPU busy.

Apple Silicon and AMD (macOS)

On macOS, FrameQuery uses Metal for GPU-accelerated decode. With Apple Silicon's unified memory, data decoded by the CPU is accessible to the GPU without a copy across a bus.

CPU fallback

When no supported GPU is available, FrameQuery falls back to CPU decode. The RED, ARRI, and Blackmagic SDKs all support this natively. CPU decode is slower and produces identical output. For single-frame operations like thumbnail generation, the CPU path is sometimes preferable.

Performance you can feel

With GPU acceleration enabled, processing a day's worth of RED or Blackmagic footage takes a fraction of the shooting time.

The decoded frames stream directly into hardware-accelerated encoding where available (NVENC on NVIDIA, Quick Sync on Intel, AMF on AMD), with software encoding as a universal fallback.

For editors

When you drop R3D, ARRIRAW, or BRAW files into FrameQuery, the app uses the fastest decode path your hardware supports. There are no GPU settings to configure and no CUDA toolkit to install.

A single install works on a high-end workstation with dual NVIDIA GPUs and on a MacBook Air.

Download FrameQuery to try FrameQuery on your own hardware.