gabin icon indicating copy to clipboard operation
gabin copied to clipboard

Automate camera switching with OBS, Bitfocus Companion and any audio api.

Gabin

Automate camera switching with OBS, Bitfocus Companion and any audio api.

Screenshot 2023-01-18 at 10 08 19

Download

You can download the latest version of Gabin here.

Features

  • ⚡️ Vue 3, pnpm - born with fastness
  • 🖌️ unocss for ultra-fast tailwind-compatible styling
  • 💬 socketIo for main/renderer communication
  • 🚀 GitHub Actions to build & release app

Usage

Development

pnpm i
pnpm dev

Build

pnpm build

Known issues

  • ASIO is not working with XR32 audio mixer

Documentation

CLI

Gabin can be called in command line with several options :

  • -h, --help : Display this message
  • -d, --debug : Enable debug mode
  • -v, --version : Display version
  • --no-auto-open : Disable auto open in browser

Environment variables

You can add environment variables :

  • GABIN_HOST : Hostname to use (default: localhost)
  • GABIN_HTTP_PORT : Port to use (default: 1510)
  • GABIN_OSC_PORT : Port to use (default: 32123)
  • GABIN_BASE_URL : Base url to use (default: /)
  • GABIN_LOGS_FOLDER : Folder to store logs (default: $appdata/gabin/gabin.log)
  • GABIN_CONFIG_FOLDER : Folder to store config (default: $appdata/gabin/database.json)

Video mixers options

  • OBS : Gabin communicates directly with OBS via websocket to trigger shots and listen to scene change (needs OBS v28+)
  • VMIX : Gabin communicates directly with VMIX via TCP socket to trigger shots and listen to scene change
  • OSC : Gabin will triggers the paths you indicate for each shot and listen to scene change on his OSC port (more details below)

OSC API/module

By default, Gabin listen OSC on localhost:32123

API

Even if you don't choose OSC as video mixer, you can control Gabin through OSC

Command :

path params description
/gabin/on none power Gabin on
/gabin/off none power Gabin off
/gabin/config config: string add or edit this config
/gabin/profile profileName: string set this profile as active
/scene/$NAME_OF_YOUR_SCENE none tell Gabin what the current scene is
/source/$NAME_OF_YOUR_SOURCE none trigger a specific shot
/mic/$NAME_OF_YOUR_MIC availabe: 1,0 toggle mic availability
/autocam autocam: 1,0 toggle autocam

Request :

path params description
/gabin/is-ready host: string, port: number, path: string get TRUE if Gabin is connected
/gabin/profiles host: string, port: number, path: string get all profiles
/gabin/devices host: string, port: number, path: string get all audio devices

Register :

path params description
/register/shot host: string, port: number, path: string get updated on each triggered shot
/register/autocam host: string, port: number, path: string get updated when play/pause Gabin
/register/defaultProfile host: string, port: number, path: string get updated when new default profile is set

Other options

  • allow shot to be in scene but prevent from showing automatically

In the json database, go under profiles > settings > autocam > containers > mics > cams > source > options. There you can add a noIllu options, a boolean (true or false)

  • allow/forbid some shots depending on which mics are availables

In the json database, go under profiles > settings > autocam > containers > mics > cams > source > options. There you can add a matching options, the value must be a array of strings. You have to specify for each mics either :

  • the mic number : it has to be available
  • - : it has to be not available
  • * : the availability does not matter

E.g.:

profiles > settings > autocam > containers > mics > cams > source > options
[...]
{
  "source": {
    "name": "large shot 1",
    "options": {
      "matching": ["1234"]
    }
  },
  "weight": 5
},
{
  "source": {
    "name": "large shot 2",
    "options": {
      "matching": ["1*3-"]
    }
  },
  "weight": 10
},
[...]

The "large shot 1" may be shot if all the 4 mics are availables. Here, the "large shot 2" may be shot if :

  • the 1st and the 3rd mics are availables
  • the 4th mic is not available

Made in 🇫🇷 by OneClickStudio.