Repository navigation
Releases: enjoy-digital/camlink_4k
Release list
CamLink 4K 2026_10_12
Fix release: the FX3 firmware now has a 13-character USB serial number descriptor (the stock format), so cl4k-fwtool flash --mcu fx3.img can write the unit serial number into it (install step 2 failed with "expected exactly one serial descriptor, found 0", #1).
Changes since 2026_10_08
- FX3 firmware: 13-character serial number placeholder, personalised with the unit serial number by cl4k-fwtool (first install) and by
camlink.py update/flash-fx3(updates keep the unit serial;--serialto set it). - Bitstream unchanged (byte identical to 2026_10_08).
Files
| File | Content |
|---|---|
camlink_4k_2026_10_12.zip |
All files below + README.txt + SHA256SUMS |
fx3.img |
FX3 firmware (standalone boot image, flash offset 0), version 2026_10_12 |
camlink_4k.bit |
ECP5 bitstream, NV12 variant (same as 2026_10_08) |
csr.csv |
FPGA CSR map of this bitstream |
SHA256SUMS |
Checksums |
Install / update
Linux host, Python 3 + pyusb, udev rules (software/udev/70-camlink.rules), host tools from this tag (git clone --branch 2026_10_12 https://github.com/enjoy-digital/camlink_4k).
- First install (stock device): back up the full SPI flash with cl4k-fwtool, then
cl4k-fwtool.py flash --mcu fx3.img(dry run, then--commit), power cycle, then the update below. Details: README, Getting started. - Update (device running CamLink 4K, or in the FX3 bootloader
04b4:00f3):
python3 software/camlink.py update --fx3 fx3.img --bit camlink_4k.bit
python3 software/camlink.py ident # CamLink 4K FX3 firmware 2026_10_12Validation
fx3.imgchecked with cl4k-fwtool's image code (checksum, single serial descriptor, personalisation).- Hardware: release files flashed with
camlink.py update, standalone boot as2026_10_12, unit serial number kept;software/validate.py: enumeration, capture, first frame, restart, audio, audio+video (bit exact), controls PASS (HDMI input checks: same bitstream as 2026_10_08, validated 12/12 with a 4K30 source).
See the 2026_10_08 release for features and known limitations. This replaces the firmware of your Cam Link 4K: back up the flash first, use at your own risk.
CamLink 4K 2026_10_08
Known issue: this
fx3.imgcannot be flashed with cl4k-fwtool (install step 2: "expected exactly one serial descriptor, found 0", #1). Use 2026_10_12 instead.
First release of CamLink 4K: open gateware (LiteX, ECP5) and bare-metal FX3 firmware for the Elgato Cam Link 4K (1st gen, 0fd9:0066), built with the open toolchain (Yosys, nextpnr-ecp5, Project Trellis).
Features
- 4K30 NV12 through an open DDR3 frame buffer (LiteDRAM, ECP5 DDR3-594 at 1:4), 4K30 M420, 1080p60 YUY2 with scaling/crop/colour controls, HDMI audio (UAC 48 kHz stereo).
- Low latency: lines streamed as they are received (first data on USB ~3.5 ms after the source render, frame delivered to applications in 19 ms at 1080p60 vs 46 ms stock).
- Standalone boot from the SPI flash, FX3 boot watchdog and FPGA watchdog, USB bootloader recovery; the stock bitstream and settings stay in the flash.
Files
| File | Content |
|---|---|
camlink_4k_2026_10_08.zip |
All files below + README.txt + SHA256SUMS |
fx3.img |
FX3 firmware (standalone boot image, flash offset 0), version 2026_10_08 |
camlink_4k.bit |
ECP5 bitstream, NV12 variant (all clocks met, seed 8) |
csr.csv |
FPGA CSR map of this bitstream (debug/validation tools) |
SHA256SUMS |
Checksums |
Install / update
Linux host, Python 3 + pyusb, udev rules (software/udev/70-camlink.rules), host tools from this tag (git clone --branch 2026_10_08 https://github.com/enjoy-digital/camlink_4k).
- First install (stock device): back up the full SPI flash with cl4k-fwtool, write
fx3.imgin place of the stock FX3 image with the same tool, power cycle, then run the update below. Details: README, Getting started. - Update (device running CamLink 4K, or in the FX3 bootloader
04b4:00f3):
python3 software/camlink.py update --fx3 fx3.img --bit camlink_4k.bit
python3 software/camlink.py ident # CamLink 4K FX3 firmware 2026_10_08- Recovery / back to stock:
camlink.py flash-recover(USB bootloader),camlink.py flash-write <backup>.bin --force(whole stock flash), see README.
Validation
- Simulation: 98 tests (
python3 -m pytest test). - Hardware: release binaries flashed with
camlink.py update, standalone boot as2026_10_08;software/validate.py: enumeration, capture, first frame, restart, audio, audio+video (bit exact), controls PASS. The same bitstream (byte identical) passed 12/12 with a 4K30 HDMI source (HDMI, UVC extension unit, 4K30 M420).
Known limitations
- 4K is 30 fps maximum (IT6802 HDMI 1.4 receiver); no HDCP sources.
- USB VID/PID: pid.codes test PID
1209:0001(the host tools select the device by its product string). - Linux host tools; the viewer
--drmpath is untested (--vkdirect display is the tested one).
This replaces the firmware of your Cam Link 4K: back up the flash first, use at your own risk. Elgato and Cam Link are trademarks of Corsair; this project is not affiliated with them.