Skip to content

Latest commit

 

History

History
141 lines (119 loc) · 5.04 KB

README.md

File metadata and controls

141 lines (119 loc) · 5.04 KB

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.