Skip to content

Releases: enjoy-digital/camlink_4k

CamLink 4K 2026_10_12

Choose a tag to compare

@enjoy-digital enjoy-digital released this 12 Oct 06:51

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; --serial to 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_12

Validation

  • fx3.img checked with cl4k-fwtool's image code (checksum, single serial descriptor, personalisation).
  • Hardware: release files flashed with camlink.py update, standalone boot as 2026_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

Choose a tag to compare

@enjoy-digital enjoy-digital released this 08 Oct 08:15

Known issue: this fx3.img cannot 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.img in 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 as 2026_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 --drm path is untested (--vk direct 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.