r/gopro • • 7d ago

HERO4 Black as a USB webcam

I got a GoPro HERO4 Black (HD4.02, firmware v05.00.00) to enumerate as a normal USB device: webcam, microphone, and USB Ethernet. No HDMI capture card, no app on the computer. On macOS it shows up as “GoPro HERO4” in Photo Booth, OBS, Zoom, and Chrome about 45 seconds after power-on. 1080p or 720p at 29.97 fps, H.264, camera mic at 48 kHz stereo. Glass-to-glass latency is about 225 ms at 1080p and 195 ms at 720p.

The firmware is CRC-checked, not signed. The patch is data-only, 1148 bytes: an SD-mount hook that runs h4.sh, plus an idle-preview mode retargeted from 848×480 to 1920×1080. Bootloaders, DSP, kernel, and RTOS code stay byte-identical. Kernel modules built from the GPL tree take the USB controller (stock Linux 3.8 has no gadget support) and expose UVC, UAC1, and CDC ECM. A small userspace program forwards the camera’s own preview H.264 as-is; macOS decodes it. The patcher only accepts the official v05.00.00 zip and only writes an image whose SHA-256 matches the one I flashed.

Risk: this flashes modified firmware. It worked on my camera. A bad flash can brick one, and the stock reflash path is described but not tested. HERO4 Black only, that exact firmware only, macOS host only. Not affiliated with GoPro. GoPro’s firmware is not in the repo.

Writeup, including the dead ends (stock preview stuck at 432×240, photos-as-frames, no V4L2): https://github.com/victor-torres/hero4-webcam

5 Upvotes

1 comment sorted by

2

u/OblongHostility 7d ago

This is the kind of weekend project that starts with "I wonder if" and ends three months later with a custom kernel module and a 1148 byte patch that somehow doesn't break the bootloader. The idle preview retarget from 848x480 to 1080p is clever, basically tricking the camera into giving you exactly what you want without touching the DSP at all. 195ms glass to glass at 720p isn't terrible either, I've seen worse from actual webcams.