When the pandemic started over a year ago, like most people, I transitioned to working entirely from home. Over the last year I've made some tweaks and improvements to my home office setup to make remote working a better experience.

I have a desktop at home that has a multiple monitor setup, and I knew from the beginning that I was going to want to use the desktop rather than hunching over the laptop. The only downside with the desktop was that I didn't have a webcam. After searching through cupboards and boxes I finally found a webcam from about 10 years ago:

As you'd expect the image quality and resolution wasn't great. The camera was also quite sensitive to light and would easily be too dark or washed out and over exposed.

Image quality from a 10 year old Creative webcam

One of the challenges with the pandemic was that everyone now needed a webcam. So despite working from home on a permenant basis since mid-March 2020, it was only until the end of October 2020 that I finally managed to get my hands on a new webcam – a Logitech C920.

The C920 has a 1080p resolution which is a massive step up in image quality from what I was using before. One of the challenges that still remained was the lighting in my home office. Depending on the time of day the image can be more darker and shadowy than I'd like. The image quality and resolution is much better compared to the old webcam, but I still have a fair amount of shadow on my face.

Logitech C920

I stuck with this setup for a few months, but after a while I started to look at different lighting panels that I could use to improve the light in my home office. I kept getting drawn to the Elgato Key Light. It certainly isn't the cheapest option, but at the end of last year I bought a Stream Deck to use as a productivity tool which has been great. And whilst most LED lighting panels are just lighting panels, the Elgato Key Light has an API that I can integrate with the Stream Deck!

The Elgato Key Light

The Elgato Key Light is a WiFi controllable LED lighting panel. The panel uses 160 LEDs to provide up to 2800 lumens of brightness and a colour range of 2900– 7000K. Both th ebrightness and colour range are adjustable.

Elgato provides a Control Center application for Windows and macOS which can be used to control the device. As a Linux user neither of those work well for me, so instead I used the mobile app (available for Android and iOS) to original pair the device with my WiFi network.

Once I've pair the light with my WiFi network, I can use the app to toggle the light on/off, and use it to adjust the brightness and colour range:

Control Center for controlling the Elgato Key Light, running on Android.

I've setup the Key Light so that it is position behind and slightly above my webcam.

This results in a much better image that isn't heavy with shadows.

Logitech C920 with Elgato Key Light

A side by side comparison shows how the image quality has improved with each tweak to my setup:

Left to Right: Old webcam, Logitech C920, Logitech C920 with Elgato Key Light

DevDeck - Key Light Integration

At the end of 2020, I bought a StreamDeck to use as a productivity tool. I use the StreamDeck to provide quick and easy access to useful shortcuts, such as being able to turn lights on and off via Home Assistant, being able to toggle audio settings which on conference calls, or quickly changing Slack Statuses.

As a Linux user, there isn't any official software for the StreamDeck which lead me to develop DevDeck. It's open source and entirely plugin based. Part of the reasoning behind opting for the Elgato Key Light was so that I could control the light via the StreamDeck.

I first started by using the Command Center app on my phone to adopt the Key Light onto my WiFi network.

Whilst there doesn't appear to be any official documentation for the Key Light API, it's fairly straightforward and has been reverse engineered by a number of people who've developed various API client libraries for controlling the KeyLight.

The API for the KeyLight is hosted on port 9123, here is an example of how you can interrogate the state of the KeyLight:

$ curl -s http://192.168.2.25:9123/elgato/lights | jq .

{
  "numberOfLights": 1,
  "lights": [
    {
      "on": 0,
      "brightness": 25,
      "temperature": 213
    }
  ]
}

A PUT request can then be used to turn the light on or off, as well as adjusting the brightness and colour, for example:

$ curl -s -X PUT -d '{"lights": [{ "on": 1}]}' http://192.168.2.25:9123/elgato/lights | jq 

{
  "numberOfLights": 1,
  "lights": [
    {
      "on": 1,
      "brightness": 25,
      "temperature": 213
    }
  ]
}
Turns on the light without adjusting brightness and temperature
$ curl -s -X PUT -d '{"lights": [{ "on": 1, "temperature": 999}]}' http://192.168.2.25:9123/elgato/lights | jq 

{
  "numberOfLights": 1,
  "lights": [
    {
      "on": 1,
      "brightness": 25,
      "temperature": 213
    }
  ]
}
Turns on the light and sets the temperature to 999 without alternating the brightness

With the API being very simple and straightforward to use, within a few hours I was able to implement and test DevDeck - Key Light which is a plugin for DevDeck that will provide a button for toggling a keylight on and off.

Conclusion

The Logitech C920 and Elgato Key Light has been a great addition to my home office setup. It has allowed me to improve the quality of my video calls and I like the fact that I can control the Key Light directly from my Stream Deck!