Galene

Galene is a self-hosted video conferencing server. It features advanced networking and video algorithms and automatic subtitling.

Try the service in a VM

  1. Install Nix
    Arch Linux
    Bash
    $ pacman --sync --refresh --noconfirm curl git jq nix
    Debian
    Bash
    $ apt install --yes curl git jq nix
    Ubuntu
    Bash
    $ apt install --yes curl git jq nix
  2. Download a configuration file
    # default.nix
    {
      ngipkgs ? import (fetchTarball "https://github.com/ngi-nix/ngipkgs/tarball/main") { },
    }:
    ngipkgs.demo-vm (
      {
        lib,
        pkgs,
        ...
      }:
      let
        galeneTestGroupsDir = "/var/lib/galene/groups";
        galeneTestGroupFile = "galene-test-config.json";
        galenePort = 8443;
        galeneTestGroupAdminName = "admin";
        galeneTestGroupAdminPassword = "1234";
      in
      {
        services.galene = {
          enable = true;
          insecure = true;
          openFirewall = true;
          httpPort = galenePort;
          groupsDir = galeneTestGroupsDir;
        };
    
        # https://galene.org/INSTALL.html
        environment.etc.${galeneTestGroupFile}.source =
          (pkgs.formats.json { }).generate galeneTestGroupFile
            {
              op = [
                {
                  username = galeneTestGroupAdminName;
                  password = galeneTestGroupAdminPassword;
                }
              ];
              other = [ { } ];
            };
    
        environment.systemPackages = with pkgs; [
          ffmpeg
          galene-stream
        ];
      }
    
    )
    
  3. Enable binary substituters
    Bash
    $ export NIX_CONFIG='substituters = https://cache.nixos.org/ https://ngi.cachix.org/
    trusted-public-keys = cache.nixos.org-1:6nchdd59x431o0gwypbmraurkbj16zpmqfgspcdshjy= ngi.cachix.org-1:n+cal72roc3qqulxihpv+tw5t42whxmmhpragkrsrow='
  4. Build and run a virtual machine
    Arch Linux, Debian Sid and Ubuntu 25.04
    Bash
    $ nix-build ./default.nix && ./result
    Debian 12 and Ubuntu 24.04/24.10
    Bash
    $ rev=$(nix-instantiate --eval --attr sources.nixpkgs.rev https://github.com/ngi-nix/ngipkgs/archive/master.tar.gz | jq --raw-output)
    $ nix-shell -I nixpkgs=https://github.com/NixOS/nixpkgs/archive/$rev.tar.gz --packages nix --run "nix-build ./default.nix && ./result"
  5. Usage Instructions

    A demo VM for testing Galène.

    To use Galène, you have to set up a group, and permissions & users within this group. For full details, take a look at: https://galene.org/README.html#group-definitions

    After Galène has finished starting up, the on-screen text in the VM will inform you about the exact directory that your group configs need to be put into.

    An example config is available within the VM under /etc/galene-test-config.json. If you copy this file to the group directory and name it test.json, then a group named test will be available in the web interface for you to use.

    A known issue with specifically this demo is that WebRTC doesn't seem to be working: You can join the group and get familiar with the interface, but audio and video is unlikely to work. Installing Galène properly on a local system will get rid of this issue.

Options

services.galene
services.galene.certFile

Path to the server's certificate. The file is copied at runtime to Galene's data directory where it needs to reside.

Type:
null or absolute path
Default:
null
services.galene.dataDir

Data directory.

Type:
absolute path
Default:
"${config.services.galene.stateDir}/data"
services.galene.enable

Whether to enable Galene Service.

Type:
boolean
Default:
false
services.galene.group

Group under which galene runs.

Type:
string
Default:
"galene"
services.galene.groupsDir

Web server directory.

Type:
absolute path
Default:
"${config.services.galene.stateDir}/groups"
services.galene.httpAddress

HTTP listen address for galene.

Type:
string
Default:
""
services.galene.httpPort

HTTP listen port.

Type:
16 bit unsigned integer; between 0 and 65535 (both inclusive)
Default:
8443
services.galene.insecure

Whether Galene should listen in http or in https. If left as the default value (false), Galene needs to be fed a private key and a certificate.

Type:
boolean
Default:
false
services.galene.keyFile

Path to the server's private key. The file is copied at runtime to Galene's data directory where it needs to reside.

Type:
null or absolute path
Default:
null
services.galene.openFirewall

Whether to open the service's ports in the firewall.

Type:
boolean
Default:
false
services.galene.package

The galene package to use.

Type:
package
Default:
pkgs.galene
services.galene.recordingsDir

Recordings directory.

Type:
absolute path
Default:
"${config.services.galene.stateDir}/recordings"
services.galene.stateDir

The directory where Galene stores its internal state. If left as the default value this directory will automatically be created before the Galene server starts, otherwise the sysadmin is responsible for ensuring the directory exists with appropriate ownership and permissions.

Type:
absolute path
Default:
"/var/lib/galene"
services.galene.staticDir

Web server directory.

Type:
absolute path
Default:
"${package.static}/static"
services.galene.turnAddress

Built-in TURN server listen address and port. Set to "" to disable.

Type:
string
Default:
"auto"
services.galene.user

User account under which galene runs.

Type:
string
Default:
"galene"

Examples

Enable Galene
{
  lib,
  pkgs,
  ...
}:
let
  galeneTestGroupsDir = "/var/lib/galene/groups";
  galeneTestGroupFile = "galene-test-config.json";
  galenePort = 8443;
  galeneTestGroupAdminName = "admin";
  galeneTestGroupAdminPassword = "1234";
in
{
  services.galene = {
    enable = true;
    insecure = true;
    openFirewall = true;
    httpPort = galenePort;
    groupsDir = galeneTestGroupsDir;
  };

  # https://galene.org/INSTALL.html
  environment.etc.${galeneTestGroupFile}.source =
    (pkgs.formats.json { }).generate galeneTestGroupFile
      {
        op = [
          {
            username = galeneTestGroupAdminName;
            password = galeneTestGroupAdminPassword;
          }
        ];
        other = [ { } ];
      };

  environment.systemPackages = with pkgs; [
    ffmpeg
    galene-stream
  ];
}

This project is funded by NLnet through these subgrants: