Skip to content

Instantly share code, notes, and snippets.

@catrielmuller
Last active January 30, 2025 09:59
Show Gist options
  • Save catrielmuller/71ae055871893d289476ee570fd953d8 to your computer and use it in GitHub Desktop.
Save catrielmuller/71ae055871893d289476ee570fd953d8 to your computer and use it in GitHub Desktop.
ArchLinux ElGato FaceCam - Chrome V4L2Loopback

ArchLinux ElGato FaceCam - Chrome V4L2Loopback

IMPORTANT

This is not required any more, you need upgrade your firmware to the version +4.09 using ElGato Cammera Hub

https://help.elgato.com/hc/en-us/articles/4406041241997-Elgato-Facecam-Firmware-Update

Changes in firmware 4.09

  • Added MJPEG as a fallback video format. MJPEG requires less USB bandwidth and improves compatibility with programs that cannot handle uncompressed video.

Loopback Config

I'm creating 3 Loopback devices, if you only need do this for the Facecam you can define only one like this:

options v4l2loopback video_nr=11 card_label="ElGato FaceCam"

WebCam Path

I'm using my serial as a path to not conflict with my another input devices /dev/v4l/by-id/usb-Elgato_Elgato_Facecam_FW42K1A07115-video-index0 on the facecam-init.sh.

You can check what is your correct path with this command:

ls /dev/v4l/by-id/

WebCam Config

On my facecam-init.sh, I set some parameters that make sense for my enviroment, this maybe cannot fit for you, so you can remove this line.

v4l2-ctl -d /dev/v4l/by-id/usb-Elgato_Elgato_Facecam_FW42K1A07115-video-index0 --set-ctrl="brightness=180,contrast=3,saturation=35,white_balance_temperature_auto=1,power_line_frequency=2,sharpness=1,exposure_auto=2,zoom_absolute=5"

or adjust the parameters that you want.

Run

You need start the script to create the pipe from the FaceCam Device to the LoopBack Virtual Device

  • Add execution permissions:
chmod +x facecam-init.sh
  • Run
./facecam-init.sh
#!/bin/bash
v4l2-ctl -d /dev/v4l/by-id/usb-Elgato_Elgato_Facecam_FW42K1A07115-video-index0 --set-ctrl="brightness=180,contrast=3,saturation=35,white_balance_temperature_auto=1,power_line_frequency=2,sharpness=1,exposure_auto=2,zoom_absolute=5"
ffmpeg -f v4l2 -input_format uyvy422 -framerate 60 -video_size 1920x1080 -i /dev/v4l/by-id/usb-Elgato_Elgato_Facecam_FW42K1A07115-video-index0 -pix_fmt yuyv422 -f v4l2 /dev/video11
# /etc/modules-load.d/v4l2loopback.conf
v4l2loopback
# /etc/modprobe.d/v4l2loopback.conf
options v4l2loopback video_nr=10,11,12 card_label="OBS Virtual","ElGato FaceCam","V4L2Loopback" exclusive_caps=1,1,1
@HedonisticQ
Copy link

HedonisticQ commented Oct 3, 2024

Any idea about how to upgrade the firmware if we only have Linux computers? Thanks!

I couldn't find any solution for this, so used my friend windows computer.
Maybe someone find a solution and reply...

@farnoy
Copy link

farnoy commented Jan 28, 2025

Is this working consistently for you folks? I'm using obs-studio and its virtual camera, but while it works for a while (and needs an occassional usbreset between sessions), it still hangs/freezes mid-stream. I can't get it to work for an extended period of time. This is regardless if using MJPEG, or the frame rate, etc.

@kouak
Copy link

kouak commented Jan 29, 2025

Is this working consistently for you folks? I'm using obs-studio and its virtual camera, but while it works for a while (and needs an occassional usbreset between sessions), it still hangs/freezes mid-stream. I can't get it to work for an extended period of time. This is regardless if using MJPEG, or the frame rate, etc.

Using it all day with google meet, no issue here.

Sometimes, the camera will appear as unplugged on boot, but a quick physical disconnect/reconnect fixes the issue.

@catrielmuller
Copy link
Author

Is this working consistently for you folks? I'm using obs-studio and its virtual camera, but while it works for a while (and needs an occassional usbreset between sessions), it still hangs/freezes mid-stream. I can't get it to work for an extended period of time. This is regardless if using MJPEG, or the frame rate, etc.

I been using the camera with the new firmware consistently (Without this script) , however as @kouak mention sometimes the camera don't show up on boot (a quick disconnect and connect fix the issue). I think that happen because the cam have in the firmware some logic to detect if is connected to usb2 and show the device as something like "Connect this in a USB 3.0 port".

@farnoy
Copy link

farnoy commented Jan 30, 2025

I'll check out the v4l2loopback method then. I'm already on the latest firmware but maybe this is some interaction with obs-studio.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment