A dead-simple MacOS USB Video Class device visualizer.
  • Objective-C 49.8%
  • Zig 26.5%
  • C 17.8%
  • Nix 5.9%
Find a file
2026-02-24 17:55:31 -08:00
.envrc [chore] Dev flake and more robust gitignore. 2026-02-24 17:41:09 -08:00
.gitignore [chore] Dev flake and more robust gitignore. 2026-02-24 17:41:09 -08:00
build.zig [feat] First working version. 2026-02-24 17:42:34 -08:00
flake.lock [chore] Dev flake and more robust gitignore. 2026-02-24 17:41:09 -08:00
flake.nix [chore] Dev flake and more robust gitignore. 2026-02-24 17:41:09 -08:00
LICENSE Initial commit 2026-01-23 15:04:25 -08:00
main.c [feat] First working version. 2026-02-24 17:42:34 -08:00
README.md [chore] Add more details to the README. 2026-02-24 17:55:31 -08:00
screenshot.png [chore] Add screenshot to the readme. 2026-02-24 17:45:23 -08:00
shim.h [feat] First working version. 2026-02-24 17:42:34 -08:00
shim.m [feat] First working version. 2026-02-24 17:42:34 -08:00
UVZ.icns [feat] First working version. 2026-02-24 17:42:34 -08:00

UVZ

A dead-simple MacOS USB Video Class device visualizer.

MacOS exposes UVC devices as AVCaptureDeviceInputs. AVFoundation provides AVCaptureVideoPreviewLayer to let you render a preview of a capture session onto a UI view layer.

This code is mostly based on Setting up a capture session and AVCaptureVideoPreviewLayer.

The initial idea was to write the whole thing in C. However, the Objective-C runtime API is cumbersome and verbose. In the end, I took the opportunity to refresh my Objective-C knowledge and wrote a shim for the Apple APIs that's called from a C entrypoint.

MacOS packaging is clunky, but it can all be done from a build.zig script if you're not signing & notarizing.

App screenshot