Jump to content

OBS Studio: Difference between revisions

From NixOS Wiki
Using the Virtual Camera: Adding a note on how to modify your v4l2loopback module config to have additional virtual devices such as you might use to use a DSLR as a webcam with gphoto2
m Added information about the OBS module added to NixOS in 24.11.
Line 5: Line 5:
Plugins are available from the <code>obs-studio-plugins</code> package set.
Plugins are available from the <code>obs-studio-plugins</code> package set.


They can be installed by either wrapping the package with <code>wrapOBS</code>:
They can be installed by using either the [[NixOS]] or [[Home Manager]] module:


<syntaxhighlight lang="nix">
<syntaxhighlight lang="nix">
environment.systemPackages = [
{ config, pkgs, ... }:
   (pkgs.wrapOBS {
{
   programs.obs-studio = {
    enable = true;
     plugins = with pkgs.obs-studio-plugins; [
     plugins = with pkgs.obs-studio-plugins; [
       wlrobs
       wlrobs
Line 15: Line 17:
       obs-pipewire-audio-capture
       obs-pipewire-audio-capture
     ];
     ];
   })
   };
];
}
</syntaxhighlight>
</syntaxhighlight>


or using [[Home Manager]]:
or by wrapping the package with <code>wrapOBS</code>:


<syntaxhighlight lang="nix">
<syntaxhighlight lang="nix">
{ config, pkgs, ... }:
environment.systemPackages = [
{
   (pkgs.wrapOBS {
   programs.obs-studio = {
    enable = true;
     plugins = with pkgs.obs-studio-plugins; [
     plugins = with pkgs.obs-studio-plugins; [
       wlrobs
       wlrobs
Line 31: Line 31:
       obs-pipewire-audio-capture
       obs-pipewire-audio-capture
     ];
     ];
   };
   })
}
];
</syntaxhighlight>
</syntaxhighlight>


Line 39: Line 39:
=== Using the Virtual Camera ===
=== Using the Virtual Camera ===


The virtual camera requires the <code>v4l2loopback</code> [[Linux kernel#Custom kernel modules|kernel module]] to be installed, a loopback device configured, and polkit enabled so OBS can access the virtual device:
The virtual camera requires the <code>v4l2loopback</code> [[Linux kernel#Custom kernel modules|kernel module]] to be installed, a loopback device configured, and polkit enabled so OBS can access the virtual device.


<syntaxhighlight lang="nix">
This can be done in NixOS with:<syntaxhighlight lang="nixos">
programs.obs-studio.enableVirtualCamera = true;
</syntaxhighlight>Or by setting the kernel options manually, this is useful if you need to add an additional loopback device as shown below:<syntaxhighlight lang="nix">
{ config, ... }:
{ config, ... }:
{
{

Revision as of 07:41, 26 February 2025

OBS Studio is free and open-source software for video recording and live streaming, licensed under the GNU GPLv2 license.

Installing Plugins

Plugins are available from the obs-studio-plugins package set.

They can be installed by using either the NixOS or Home Manager module:

{ config, pkgs, ... }:
{
  programs.obs-studio = {
    enable = true;
    plugins = with pkgs.obs-studio-plugins; [
      wlrobs
      obs-backgroundremoval
      obs-pipewire-audio-capture
    ];
  };
}

or by wrapping the package with wrapOBS:

environment.systemPackages = [
  (pkgs.wrapOBS {
    plugins = with pkgs.obs-studio-plugins; [
      wlrobs
      obs-backgroundremoval
      obs-pipewire-audio-capture
    ];
  })
];

Including both obs-studio and (pkgs.wrapOBS {... in environment.systemPackages will result in a package collision; if plugins are needed, only include the "wrapped" version, which sets the plugins directory to include Nix-managed plugins (see pkgs/applications/video/obs-studio/wrapper.nix.

Using the Virtual Camera

The virtual camera requires the v4l2loopback kernel module to be installed, a loopback device configured, and polkit enabled so OBS can access the virtual device.

This can be done in NixOS with:

programs.obs-studio.enableVirtualCamera = true;

Or by setting the kernel options manually, this is useful if you need to add an additional loopback device as shown below:

{ config, ... }:
{
  boot.extraModulePackages = with config.boot.kernelPackages; [
    v4l2loopback
  ];
  boot.kernelModules = [ "v4l2loopback" ];
  boot.extraModprobeConfig = ''
    options v4l2loopback devices=1 video_nr=1 card_label="OBS Cam" exclusive_caps=1
  '';
  security.polkit.enable = true;
}

It is possible to use Droidcam as virtual camera.

If you use a digital camera as a webcam via gphoto2 you will need an additional loopback device to use this camera as a virtual camera. For a setup like this you may wish to change the above v4l2loopback module config to something like this:

boot.extraModprobeConfig = ''
  options v4l2loopback devices=2 video_nr=1,2 card_label="OBS Cam, Virt Cam" exclusive_caps=1
'';

For more the arch wiki entry on v4l2loopback is a good reference. In addition to gphoto2 you will need the v4l-utils and ffmpeg packages so that you can use gphoto2 to send the raw feed from your camera to the virtual camera via ffmpeg for example using a command like this[1]:

gphoto2 --stdout autofocusdrive=1 --capture-movie | ffmpeg -i - -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 /dev/video2