High-performance, multi-client Linux driver for the Elgato 4K60 Pro MK.2 and Elgato 4K Pro PCI-e capture cards. Engineered for stability on modern kernels (6.12 through 7.0+).
For older kernels, use the original stoth68000/sc0710 repository (MK.2 only).
| Card | Subsystem ID | Notes |
|---|---|---|
| Elgato 4k60 Pro MK.2 | 1cfa:000e |
Plug-and-play after driver load. No FPGA firmware step. |
| Elgato 4K Pro | 1cfa:0012 |
Requires ECP5 FPGA firmware programming on every cold boot. Handled automatically by the installer and the AUR package; manual insmod builds need extra steps (see below). |
Both cards share the same 12ab:0710 Magewell chipset but use different board profiles in the driver.
| Distribution | Status | Notes |
|---|---|---|
| Arch Linux | Stable | DKMS via AUR (sc0710-dkms-git) or manual build. Includes sc0710-cli and 4K Pro firmware helpers (see below). |
| Fedora / RHEL | Stable | DKMS via the automatic installer. |
| Debian / Ubuntu | Stable | Warning: distro OBS packages may crash; prefer Flatpak OBS. |
| Fedora Atomic (Bazzite, Bluefin, Aurora, Silverblue) | Stable | Boot-time build service at /var/lib/sc0710. No DKMS. 4K Pro ECP5 stack included. |
| NixOS | Supported | Flake module available; firmware stack is simpler than the bash installer (see below). |
Tested on kernel 6.12 through 7.0+. Newer kernels may work but are not guaranteed until tested.
Unified installer — auto-detects atomic vs standard distros. Supported on Arch, Debian/Ubuntu, Fedora, and Fedora Atomic (Bazzite, Silverblue, Bluefin, Aurora).
sudo bash -c "$(curl -fsSL https://raw.githubusercontent.com/Nakildias/sc0710/main/scripts/install-sc0710.sh)"Standard distros get DKMS (optional) or a manual module build, sc0710-cli, and boot-time module loading via modules-load.d.
Atomic distros get:
- Driver source at
/var/lib/sc0710/(persists acrossrpm-ostreeupdates) sc0710-build.service— rebuilds and loads the module on each bootsc0710-cliwith atomic-specific commands (--rebuild, etc.)
4K Pro on any distro additionally gets:
- Automatic download/extraction of
SC0710.FWI.HEXfrom the Elgato Windows driver sc0710-firmware.service— prepares firmware files and symlinks before driver loadsc0710-firmware-verify.service— verifies ECP5 programming after the module loads, with automatic retries
The 4K Pro has a Lattice ECP5 FPGA whose configuration is volatile — it is lost on full power-off / cold boot. Windows programs it on every boot; this driver does the same.
Symptoms when ECP5 is not programmed:
- HDMI input shows as locked/detected
- Video is black
dmesghas noECP5 FPGA programmedmessage
After automatic install, boot services handle programming. If video is still black:
sudo sc0710-cli --restart
# or
sudo bash /var/lib/sc0710/sc0710-firmware.sh --verify # atomic
sudo bash /usr/local/libexec/sc0710-firmware.sh --verify # standardExisting atomic installs can pick up the latest firmware stack with:
sudo sc0710-cli --updateyay -S sc0710-dkms-gitThe AUR package installs:
- DKMS kernel module — rebuilds automatically on kernel updates
sc0710-cliat/usr/bin/sc0710-cli— same management tool as the automatic installer- 4K Pro firmware helpers under
/usr/lib/sc0710/(extract-firmware.sh,sc0710-firmware.sh,sc0710-firmware-lib.sh)
MK.2 users can load with sudo modprobe sc0710 (or enable /etc/modules-load.d/sc0710.conf for boot load) and manage the driver with sc0710-cli.
4K Pro users — if a 4K Pro card (1cfa:0012) is present at install/upgrade time, the package hook automatically:
- Extracts
SC0710.FWI.HEXwhen it is not already on disk (needs network; installsp7zipif required) - Creates and enables
sc0710-firmware.serviceandsc0710-firmware-verify.service - Configures boot module loading via
modules-load.dandmodprobe.dsoftdeps - Starts the firmware services and loads the driver
After a cold boot, the same systemd units handle ECP5 programming before and after module load. If video is black:
sudo sc0710-cli --restart
# or
sudo bash /usr/lib/sc0710/sc0710-firmware.sh --verifyIf the card was added after the AUR install, run sudo sc0710-cli --update to refresh firmware services, or extract firmware manually:
sudo /usr/lib/sc0710/extract-firmware.sh
sudo sc0710-cli --restartRemoving the AUR package — yay -R sc0710-dkms-git stops, disables, and deletes sc0710-firmware.service and sc0710-firmware-verify.service when the installed package includes the current install hook. If you are on an older AUR build, upgrade once first so the hook is present. Firmware files under /lib/firmware/sc0710/ are not removed by yay -R; use sc0710-cli --remove for a full cleanup.
4K Pro on Arch — the maintainer primarily tests on MK.2 hardware. Cold-boot ECP5 reports from 4K Pro users are especially welcome (open an issue with sc0710-cli --dump).
Add github:Nakildias/sc0710 as a flake input and import sc0710.nixosModules.default:
{
inputs = {
# ...
sc0710.url = "github:Nakildias/sc0710";
};
outputs = { self, nixpkgs, sc0710 }: {
nixosConfigurations.<your-hostname> = nixpkgs.lib.nixosSystem {
modules = [
# ...
sc0710.nixosModules.default
];
};
};
}Host configuration:
hardware.sc0710.enable = true; # kernel module + sc0710-cli
hardware.sc0710.enableFirmware = true; # basic firmware oneshot service
# hardware.sc0710.kernel = pkgs.linuxPackages_6_19.kernel; # optional overrideNote: The NixOS module builds the driver and installs sc0710-cli, but its firmware service is a single oneshot unit — it does not include the full ECP5 verify/retry stack that the bash installer provides for atomic distros. 4K Pro users on NixOS may need manual intervention after cold boot until the Nix module is brought up to parity.
For development or unsupported distros.
-
Install dependencies
- Arch:
sudo pacman -S base-devel linux-headers git - Debian/Ubuntu:
sudo apt install build-essential linux-headers-$(uname -r) git - Fedora/RHEL:
sudo dnf install kernel-modules-$(uname -r) kernel-devel kernel-headers gcc make git
- Arch:
-
Build and load
git clone https://github.com/Nakildias/sc0710 cd sc0710 make sudo insmod build/sc0710.ko -
4K Pro only —
insmodalone is not enough on cold boot. You also need:SC0710.FWI.HEXin/lib/firmware/sc0710/(extract withscripts/extract-firmware.sh)- Reload the module after cold boot so the driver can program the ECP5, or use the automatic installer
Installed by the automatic installer, the AUR package, and the NixOS module. Provides real-time control on both atomic and standard distros.
| Command | Alias | Description |
|---|---|---|
--status |
-s |
Module state, card info, signal format, scaler, ECP5 status (4K Pro), DKMS or build service status |
--load |
-l |
Load the module. On 4K Pro, verifies ECP5 programming after load |
--unload |
-u |
Unload the module (stops PipeWire consumers if the module is busy) |
--restart |
Full reload. On 4K Pro, runs ECP5 programming with retries | |
--debug |
-d |
Toggle verbose dmesg logging |
--image-toggle |
-it |
Toggle No Signal images vs colorbars |
--software-scaler |
-ss |
Toggle software scaler modes (all cards) |
--toggle-auto-scalar |
-as |
Toggle automatic safety scaler |
--procedural-timings |
-pt |
Cycle timing mode: merge → procedural-only → static-only |
--update |
-U |
Pull latest source, rebuild, reload. Refreshes firmware services on 4K Pro |
--rebuild |
(Atomic only) Force rebuild the module for the running kernel | |
--dump |
Save a debug report to the Desktop (dump-DD-MM-YYYY.txt) for GitHub issues |
|
--remove |
-r, -R |
Uninstall driver, CLI, services, config files, and 4K Pro firmware |
--version |
-v |
Show installed driver version |
--help |
-h |
Show all options |
After sc0710-cli --remove, verify everything is gone:
bash -c "$(curl -fsSL https://raw.githubusercontent.com/Nakildias/sc0710/main/scripts/check-sc0710-removal.sh)"Same command as above — checks module, DKMS, CLI, systemd units, config files, logs, and 4K Pro firmware. No clone or sudo required. Exits 0 when fully clean.
- Multi-client support — multiple apps (e.g. OBS + Discord) can open the device simultaneously
- DKMS integration — automatic rebuilds on kernel updates (standard distros)
- Atomic / immutable support — boot-time rebuild via
sc0710-build.service(Bazzite, Silverblue, etc.) - 4K Pro ECP5 auto-programming — firmware extraction, cold-boot programming, verify service, and CLI retries
- Status images — storage-efficient No Signal / No Device screens
- Connection sensing — distinguishes unplugged cables from signal loss (not 100% reliable)
- Video formats — 4K60, 1440p144, 1080p240 (EDID changes require Windows)
- Mode-switch stability — DMA resync, restart validation, and watchdog recovery during resolution/refresh changes
- Safety scaling — auto-scaler and dynamic-resolution paths reduce crash-prone transitions
- Timing controls — runtime modes (
merge,procedural-only,static-only) via CLI - Debug dumps —
sc0710-cli --dumpcollects distro, kernel,lspci, driver version, and service state for issue reports
| Problem | What to try |
|---|---|
| 4K Pro: signal locked, black video (cold boot) | sudo sc0710-cli --restart or sudo sc0710-cli --update then reboot |
4K Pro: ECP5 warning in --status |
sudo bash …/sc0710-firmware.sh --verify (atomic: /var/lib/sc0710/; AUR: /usr/lib/sc0710/; standard installer: /usr/local/libexec/) |
| Module won't unload (app in use) | sc0710-cli --unload stops PipeWire first; close OBS/etc. |
| Atomic: module not built after kernel update | sudo sc0710-cli --rebuild or check journalctl -u sc0710-build.service -b |
Driver still present after --remove |
Run sudo sc0710-cli --remove again, then the removal check script |
| 4K60 tearing / frame shifts at max bandwidth | Under investigation; try lower resolution/refresh or close extra consumers in the meantime |
For GitHub issues, attach output from sc0710-cli --dump.
- 4K60 DMA tearing — horizontal tears or frame shifts at 4K60 (~995 MB/s) under heavy load; under active investigation
- HDR tonemapping (on hold) — requires opaque I2C commands to the onboard ARM MCU
- 10-bit pixel format (on hold) — P010/P016 register map unknown
- EDID switching (on hold) — EEPROM write protocol unknown; set EDID in Windows first
Maintainer Nakildias only has an Elgato 4k60 Pro MK.2 available for hands-on testing. That limits how much can be validated on other hardware.
Contributions and testing help are especially welcome for:
- Elgato 4K Pro — ECP5 cold-boot behavior, atomic/Bazzite installs, and general capture stability
- Unsupported cards — other
12ab:0710subsystem IDs (e.g. HD60 Pro) that are not yet fully supported - Open issues — bugs that need reproduction on hardware the maintainer does not own (4K60 tearing, edge-case distros, etc.)
If you can test, debug, or submit patches for any of the above, please open an issue or a pull request. Include sc0710-cli --dump output when reporting problems.
This fork is maintained by Nakildias (nakildiaspro@gmail.com).
- Based on original reverse engineering by Steven Toth (@stoth68000) and subsequent work by @Subtixx.
- Thanks to Onhil (@Onhil) for work on the Elgato 4K Pro.
The kernel module is a derivative of Steven Toth's sc0710 driver (GPL v2). Original copyright notices are preserved in source files; modifications in this fork are attributed separately. Installer scripts are original work in this repository. See COPYRIGHT for details.
This project is not affiliated with or endorsed by Elgato, Magewell, or Kernel Labs.