Gabin
Automate camera switching with OBS, Bitfocus Companion and any audio api.
Install / Use
/learn @miroir-os/GabinREADME
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.
