docs/docs/vtubing.md

1794 lines
46 KiB
Markdown

# VTubing
**Effective 14 July 2024**
Naomi uses her VTuber model for all of her client meetings, as well as streaming. Getting the software to work on Linux is a bit of a nightmare, so this page documents how she does so.
## 1. OpenSeeFace
In order to track her webcamera, OpenSeeFace needs to be run independently as a native script.
### 1.1. Installation
This should all be done in your home `~` directory.
- Begin by cloning the repository:
- `git clone https://github.com/emilianavt/OpenSeeFace`
- `cd OpenSeeFace`
- You will need to prepare Python
- Install the packages: `yay -Sy python python-virtualenv`
- Prepare the environment: `virtualenv -p python3 env`
- Source the environment: `source env/bin/activate`
- Install the dependencies: `pip3 install onnxruntime opencv-python pillow numpy`
### 1.2. Running
Naomi uses a bash script to run the program. Put this in `~/Documents/scripts/osf.sh`.
```bash
#!/bin/bash
cd ~/OpenSeeFace && \
source env/bin/activate && \
python facetracker.py -c 0 -W 1280 -H 720 --discard-after 0 --scan-every 0 --no-3d-adapt 1 --max-feature-updates 900
```
### 1.3. Desktop Shortcut
The `.desktop` file allows this to run from the application tray. Put this in `~/.local/share/applications/osf.desktop`.
```ini
[Desktop Entry]
Name=OpenSeeFace
Exec=/home/naomi/Documents/scripts/osf.sh
Icon=/home/naomi/Documents/scripts/osf.png
Terminal=true
Type=Application
```
## 2. VSeeFace
VSeeFace does not run natively, and will need to run with Wine.
### 2.1. Installation
[Download and run the installer](https://www.vseeface.icu/#download). When selecting a directory, put it in `~/VSeeFace`.
### 2.2. Running
Naomi uses a bash script to run the program. Put this in `~/Documents/scripts/vsf.sh`.
```bash
#!/bin/bash
wine ~/VSeeFace/VSeeFace.exe --background-color "#00FF00"
```
The `--background-color` flag creates a green screen background to be chroma-keyed out by OBS.
### 1.3. Desktop Shortcut
The `.desktop` file allows this to run from the application tray. Put this in `~/.local/share/applications/osf.desktop`.
```ini
[Desktop Entry]
Name=VSeeFace
Exec=/home/naomi/Documents/scripts/vsf.sh
Icon=/home/naomi/Documents/scripts/vsf.png
Terminal=true
Type=Application
```
## 3. OBS
OBS allows for virtual camera, as well as for streaming.
### 3.1. Installation
The `obs-studio-liberty` package bundles everything together, offering both virtual camera and browser source support. These are essential for the setup.
### 3.2. Scenes
You can import this JSON file to get Naomi's list of scenes.
<details>
<summary>Show file</summary>
```json
{
"DesktopAudioDevice1": {
"prev_ver": 503447552,
"name": "Desktop Audio",
"uuid": "3cf343c8-94fa-4e7e-999a-c682a2fee814",
"id": "pulse_output_capture",
"versioned_id": "pulse_output_capture",
"settings": {
"device_id": "default"
},
"mixers": 255,
"sync": 0,
"flags": 0,
"volume": 1.0,
"balance": 0.5,
"enabled": true,
"muted": false,
"push-to-mute": false,
"push-to-mute-delay": 0,
"push-to-talk": false,
"push-to-talk-delay": 0,
"hotkeys": {
"libobs.mute": [],
"libobs.unmute": [],
"libobs.push-to-mute": [],
"libobs.push-to-talk": []
},
"deinterlace_mode": 0,
"deinterlace_field_order": 0,
"monitoring_type": 0,
"private_settings": {}
},
"AuxAudioDevice1": {
"prev_ver": 503447552,
"name": "Mic/Aux",
"uuid": "a1c8fff9-1d45-467a-b647-73711e02e915",
"id": "pulse_input_capture",
"versioned_id": "pulse_input_capture",
"settings": {
"device_id": "Remap-Source"
},
"mixers": 255,
"sync": 0,
"flags": 0,
"volume": 1.0,
"balance": 0.5,
"enabled": true,
"muted": false,
"push-to-mute": false,
"push-to-mute-delay": 0,
"push-to-talk": false,
"push-to-talk-delay": 0,
"hotkeys": {
"libobs.mute": [],
"libobs.unmute": [],
"libobs.push-to-mute": [],
"libobs.push-to-talk": []
},
"deinterlace_mode": 0,
"deinterlace_field_order": 0,
"monitoring_type": 0,
"private_settings": {}
},
"current_scene": "Virtual Cam",
"current_program_scene": "Virtual Cam",
"scene_order": [
{
"name": "Virtual Cam"
},
{
"name": "Stream"
},
{
"name": "Start"
},
{
"name": "BRB"
},
{
"name": "End"
}
],
"name": "Naomi",
"groups": [],
"quick_transitions": [
{
"name": "Cut",
"duration": 300,
"hotkeys": [],
"id": 1,
"fade_to_black": false
},
{
"name": "Fade",
"duration": 300,
"hotkeys": [],
"id": 2,
"fade_to_black": false
},
{
"name": "Fade",
"duration": 300,
"hotkeys": [],
"id": 3,
"fade_to_black": true
}
],
"transitions": [
{
"name": "Transition",
"id": "obs_stinger_transition",
"settings": {
"path": "/home/naomi/Documents/stream/stinger.webm",
"track_matte_enabled": true,
"audio_monitoring": 2
}
}
],
"saved_projectors": [],
"current_transition": "Transition",
"transition_duration": 300,
"preview_locked": false,
"scaling_enabled": false,
"scaling_level": 0,
"scaling_off_x": 0.0,
"scaling_off_y": 0.0,
"virtual-camera": {
"type2": 3
},
"modules": {
"scripts-tool": [],
"output-timer": {
"streamTimerHours": 0,
"streamTimerMinutes": 0,
"streamTimerSeconds": 30,
"recordTimerHours": 0,
"recordTimerMinutes": 0,
"recordTimerSeconds": 30,
"autoStartStreamTimer": false,
"autoStartRecordTimer": false,
"pauseRecordTimer": true
},
"auto-scene-switcher": {
"interval": 300,
"non_matching_scene": "",
"switch_if_not_matching": false,
"active": false,
"switches": []
}
},
"resolution": {
"x": 1920,
"y": 1080
},
"sources": [
{
"prev_ver": 503447552,
"name": "Alerts",
"uuid": "f1d0e2a1-3bbf-4a75-80ab-91243c5590d4",
"id": "browser_source",
"versioned_id": "browser_source",
"settings": {
"url": "https://streamlabs.com/alert-box/v3/<redacted>"
},
"mixers": 255,
"sync": 0,
"flags": 0,
"volume": 1.0,
"balance": 0.5,
"enabled": true,
"muted": false,
"push-to-mute": false,
"push-to-mute-delay": 0,
"push-to-talk": false,
"push-to-talk-delay": 0,
"hotkeys": {
"libobs.mute": [],
"libobs.unmute": [],
"libobs.push-to-mute": [],
"libobs.push-to-talk": [],
"ObsBrowser.Refresh": []
},
"deinterlace_mode": 0,
"deinterlace_field_order": 0,
"monitoring_type": 0,
"private_settings": {}
},
{
"prev_ver": 503447552,
"name": "BRB",
"uuid": "bccd5453-1e6e-4335-8111-b01adf3e9541",
"id": "scene",
"versioned_id": "scene",
"settings": {
"id_counter": 4,
"custom_size": false,
"items": [
{
"name": "Slide Background",
"source_uuid": "7f03fc0d-6d95-4e9e-b4e7-2e43967b2488",
"visible": true,
"locked": false,
"rot": 0.0,
"pos": {
"x": 0.0,
"y": 0.0
},
"scale": {
"x": 1.0,
"y": 1.0
},
"align": 5,
"bounds_type": 0,
"bounds_align": 0,
"bounds_crop": false,
"bounds": {
"x": 0.0,
"y": 0.0
},
"crop_left": 0,
"crop_top": 0,
"crop_right": 0,
"crop_bottom": 0,
"id": 1,
"group_item_backup": false,
"scale_filter": "disable",
"blend_method": "default",
"blend_type": "normal",
"show_transition": {
"duration": 0
},
"hide_transition": {
"duration": 0
},
"private_settings": {}
},
{
"name": "Text BRB",
"source_uuid": "6f46d696-d2f1-49b4-957d-1f06a9392cdc",
"visible": true,
"locked": false,
"rot": 0.0,
"pos": {
"x": 582.0,
"y": 364.0
},
"scale": {
"x": 1.0,
"y": 1.0
},
"align": 5,
"bounds_type": 0,
"bounds_align": 0,
"bounds_crop": false,
"bounds": {
"x": 0.0,
"y": 0.0
},
"crop_left": 0,
"crop_top": 0,
"crop_right": 0,
"crop_bottom": 0,
"id": 3,
"group_item_backup": false,
"scale_filter": "disable",
"blend_method": "default",
"blend_type": "normal",
"show_transition": {
"duration": 0
},
"hide_transition": {
"duration": 0
},
"private_settings": {}
},
{
"name": "Alerts",
"source_uuid": "f1d0e2a1-3bbf-4a75-80ab-91243c5590d4",
"visible": true,
"locked": false,
"rot": 0.0,
"pos": {
"x": 0.0,
"y": 0.0
},
"scale": {
"x": 1.7999999523162842,
"y": 1.7999999523162842
},
"align": 5,
"bounds_type": 0,
"bounds_align": 0,
"bounds_crop": false,
"bounds": {
"x": 0.0,
"y": 0.0
},
"crop_left": 0,
"crop_top": 0,
"crop_right": 0,
"crop_bottom": 0,
"id": 4,
"group_item_backup": false,
"scale_filter": "disable",
"blend_method": "default",
"blend_type": "normal",
"show_transition": {
"duration": 0
},
"hide_transition": {
"duration": 0
},
"private_settings": {}
}
]
},
"mixers": 0,
"sync": 0,
"flags": 0,
"volume": 1.0,
"balance": 0.5,
"enabled": true,
"muted": false,
"push-to-mute": false,
"push-to-mute-delay": 0,
"push-to-talk": false,
"push-to-talk-delay": 0,
"hotkeys": {
"OBSBasic.SelectScene": [],
"libobs.show_scene_item.1": [],
"libobs.hide_scene_item.1": [],
"libobs.show_scene_item.3": [],
"libobs.hide_scene_item.3": [],
"libobs.show_scene_item.4": [],
"libobs.hide_scene_item.4": []
},
"deinterlace_mode": 0,
"deinterlace_field_order": 0,
"monitoring_type": 0,
"private_settings": {}
},
{
"prev_ver": 503447552,
"name": "Cam Background",
"uuid": "6bd1ef08-a91e-4b0b-bb1a-d3ee2387f5f5",
"id": "ffmpeg_source",
"versioned_id": "ffmpeg_source",
"settings": {
"close_when_inactive": true,
"local_file": "/home/naomi/Documents/stream/virtual-cam-bg.webm",
"looping": true
},
"mixers": 255,
"sync": 0,
"flags": 0,
"volume": 1.0,
"balance": 0.5,
"enabled": true,
"muted": false,
"push-to-mute": false,
"push-to-mute-delay": 0,
"push-to-talk": false,
"push-to-talk-delay": 0,
"hotkeys": {
"libobs.mute": [],
"libobs.unmute": [],
"libobs.push-to-mute": [],
"libobs.push-to-talk": [],
"MediaSource.Restart": [],
"MediaSource.Play": [],
"MediaSource.Pause": [],
"MediaSource.Stop": []
},
"deinterlace_mode": 0,
"deinterlace_field_order": 0,
"monitoring_type": 0,
"private_settings": {}
},
{
"prev_ver": 503447552,
"name": "Cam Overlay",
"uuid": "bf638a3c-5133-406c-a3d2-541723f715f9",
"id": "ffmpeg_source",
"versioned_id": "ffmpeg_source",
"settings": {
"close_when_inactive": true,
"local_file": "/home/naomi/Documents/stream/virtual-cam-overlay.webm",
"looping": true
},
"mixers": 255,
"sync": 0,
"flags": 0,
"volume": 1.0,
"balance": 0.5,
"enabled": true,
"muted": false,
"push-to-mute": false,
"push-to-mute-delay": 0,
"push-to-talk": false,
"push-to-talk-delay": 0,
"hotkeys": {
"libobs.mute": [],
"libobs.unmute": [],
"libobs.push-to-mute": [],
"libobs.push-to-talk": [],
"MediaSource.Restart": [],
"MediaSource.Play": [],
"MediaSource.Pause": [],
"MediaSource.Stop": []
},
"deinterlace_mode": 0,
"deinterlace_field_order": 0,
"monitoring_type": 0,
"private_settings": {}
},
{
"prev_ver": 503447552,
"name": "Chat",
"uuid": "005e5143-427d-405c-84aa-b50210ad015f",
"id": "browser_source",
"versioned_id": "browser_source",
"settings": {
"url": "https://streamlabs.com/widgets/chat-box/v1/<redacted>",
"width": 500,
"css": "body { background: white }"
},
"mixers": 255,
"sync": 0,
"flags": 0,
"volume": 1.0,
"balance": 0.5,
"enabled": true,
"muted": false,
"push-to-mute": false,
"push-to-mute-delay": 0,
"push-to-talk": false,
"push-to-talk-delay": 0,
"hotkeys": {
"libobs.mute": [],
"libobs.unmute": [],
"libobs.push-to-mute": [],
"libobs.push-to-talk": [],
"ObsBrowser.Refresh": []
},
"deinterlace_mode": 0,
"deinterlace_field_order": 0,
"monitoring_type": 0,
"private_settings": {}
},
{
"prev_ver": 503447552,
"name": "End",
"uuid": "74d15386-4a95-4a1e-90ce-6b4f4c77615f",
"id": "scene",
"versioned_id": "scene",
"settings": {
"id_counter": 4,
"custom_size": false,
"items": [
{
"name": "Slide Background",
"source_uuid": "7f03fc0d-6d95-4e9e-b4e7-2e43967b2488",
"visible": true,
"locked": false,
"rot": 0.0,
"pos": {
"x": 0.0,
"y": 0.0
},
"scale": {
"x": 1.0,
"y": 1.0
},
"align": 5,
"bounds_type": 0,
"bounds_align": 0,
"bounds_crop": false,
"bounds": {
"x": 0.0,
"y": 0.0
},
"crop_left": 0,
"crop_top": 0,
"crop_right": 0,
"crop_bottom": 0,
"id": 1,
"group_item_backup": false,
"scale_filter": "disable",
"blend_method": "default",
"blend_type": "normal",
"show_transition": {
"duration": 0
},
"hide_transition": {
"duration": 0
},
"private_settings": {}
},
{
"name": "Text End",
"source_uuid": "e84200d5-b7bf-4230-afff-ff7cbae8a8d3",
"visible": true,
"locked": false,
"rot": 0.0,
"pos": {
"x": 586.0,
"y": 363.0
},
"scale": {
"x": 1.0,
"y": 1.0
},
"align": 5,
"bounds_type": 0,
"bounds_align": 0,
"bounds_crop": false,
"bounds": {
"x": 0.0,
"y": 0.0
},
"crop_left": 0,
"crop_top": 0,
"crop_right": 0,
"crop_bottom": 0,
"id": 3,
"group_item_backup": false,
"scale_filter": "disable",
"blend_method": "default",
"blend_type": "normal",
"show_transition": {
"duration": 0
},
"hide_transition": {
"duration": 0
},
"private_settings": {}
},
{
"name": "Alerts",
"source_uuid": "f1d0e2a1-3bbf-4a75-80ab-91243c5590d4",
"visible": true,
"locked": false,
"rot": 0.0,
"pos": {
"x": 0.0,
"y": 0.0
},
"scale": {
"x": 1.7999999523162842,
"y": 1.7999999523162842
},
"align": 5,
"bounds_type": 0,
"bounds_align": 0,
"bounds_crop": false,
"bounds": {
"x": 0.0,
"y": 0.0
},
"crop_left": 0,
"crop_top": 0,
"crop_right": 0,
"crop_bottom": 0,
"id": 4,
"group_item_backup": false,
"scale_filter": "disable",
"blend_method": "default",
"blend_type": "normal",
"show_transition": {
"duration": 0
},
"hide_transition": {
"duration": 0
},
"private_settings": {}
}
]
},
"mixers": 0,
"sync": 0,
"flags": 0,
"volume": 1.0,
"balance": 0.5,
"enabled": true,
"muted": false,
"push-to-mute": false,
"push-to-mute-delay": 0,
"push-to-talk": false,
"push-to-talk-delay": 0,
"hotkeys": {
"OBSBasic.SelectScene": [],
"libobs.show_scene_item.1": [],
"libobs.hide_scene_item.1": [],
"libobs.show_scene_item.3": [],
"libobs.hide_scene_item.3": [],
"libobs.show_scene_item.4": [],
"libobs.hide_scene_item.4": []
},
"deinterlace_mode": 0,
"deinterlace_field_order": 0,
"monitoring_type": 0,
"private_settings": {}
},
{
"prev_ver": 503447552,
"name": "Game",
"uuid": "b4b086c6-2733-4c66-b833-b0546d8d928f",
"id": "xcomposite_input",
"versioned_id": "xcomposite_input",
"settings": {
"capture_window": ""
},
"mixers": 0,
"sync": 0,
"flags": 0,
"volume": 1.0,
"balance": 0.5,
"enabled": true,
"muted": false,
"push-to-mute": false,
"push-to-mute-delay": 0,
"push-to-talk": false,
"push-to-talk-delay": 0,
"hotkeys": {},
"deinterlace_mode": 0,
"deinterlace_field_order": 0,
"monitoring_type": 0,
"private_settings": {}
},
{
"prev_ver": 503447552,
"name": "Model",
"uuid": "61587530-1788-4a8a-9854-55d7ab8643c1",
"id": "xcomposite_input",
"versioned_id": "xcomposite_input",
"settings": {
"capture_window": "",
"show_cursor": false
},
"mixers": 0,
"sync": 0,
"flags": 0,
"volume": 1.0,
"balance": 0.5,
"enabled": true,
"muted": false,
"push-to-mute": false,
"push-to-mute-delay": 0,
"push-to-talk": false,
"push-to-talk-delay": 0,
"hotkeys": {},
"deinterlace_mode": 0,
"deinterlace_field_order": 0,
"monitoring_type": 0,
"private_settings": {},
"filters": [
{
"prev_ver": 503447552,
"name": "Chroma Key",
"uuid": "3c3151f6-95cf-431c-8f9d-d0c4d0276265",
"id": "chroma_key_filter",
"versioned_id": "chroma_key_filter_v2",
"settings": {},
"mixers": 0,
"sync": 0,
"flags": 0,
"volume": 1.0,
"balance": 0.5,
"enabled": true,
"muted": false,
"push-to-mute": false,
"push-to-mute-delay": 0,
"push-to-talk": false,
"push-to-talk-delay": 0,
"hotkeys": {},
"deinterlace_mode": 0,
"deinterlace_field_order": 0,
"monitoring_type": 0,
"private_settings": {}
}
]
},
{
"prev_ver": 503447552,
"name": "Slide Background",
"uuid": "7f03fc0d-6d95-4e9e-b4e7-2e43967b2488",
"id": "ffmpeg_source",
"versioned_id": "ffmpeg_source",
"settings": {
"close_when_inactive": true,
"local_file": "/home/naomi/Documents/stream/slide-bg.webm",
"looping": true
},
"mixers": 255,
"sync": 0,
"flags": 0,
"volume": 1.0,
"balance": 0.5,
"enabled": true,
"muted": false,
"push-to-mute": false,
"push-to-mute-delay": 0,
"push-to-talk": false,
"push-to-talk-delay": 0,
"hotkeys": {
"libobs.mute": [],
"libobs.unmute": [],
"libobs.push-to-mute": [],
"libobs.push-to-talk": [],
"MediaSource.Restart": [],
"MediaSource.Play": [],
"MediaSource.Pause": [],
"MediaSource.Stop": []
},
"deinterlace_mode": 0,
"deinterlace_field_order": 0,
"monitoring_type": 0,
"private_settings": {}
},
{
"prev_ver": 503447552,
"name": "Start",
"uuid": "527629ef-79c9-4b1a-a006-738220d3e68f",
"id": "scene",
"versioned_id": "scene",
"settings": {
"id_counter": 4,
"custom_size": false,
"items": [
{
"name": "Slide Background",
"source_uuid": "7f03fc0d-6d95-4e9e-b4e7-2e43967b2488",
"visible": true,
"locked": false,
"rot": 0.0,
"pos": {
"x": 0.0,
"y": 0.0
},
"scale": {
"x": 1.0,
"y": 1.0
},
"align": 5,
"bounds_type": 0,
"bounds_align": 0,
"bounds_crop": false,
"bounds": {
"x": 0.0,
"y": 0.0
},
"crop_left": 0,
"crop_top": 0,
"crop_right": 0,
"crop_bottom": 0,
"id": 1,
"group_item_backup": false,
"scale_filter": "disable",
"blend_method": "default",
"blend_type": "normal",
"show_transition": {
"duration": 0
},
"hide_transition": {
"duration": 0
},
"private_settings": {}
},
{
"name": "Text Start",
"source_uuid": "f8ec5105-3e0e-44df-925e-1de60b69aac9",
"visible": true,
"locked": false,
"rot": 0.0,
"pos": {
"x": 557.0,
"y": 413.0
},
"scale": {
"x": 1.0,
"y": 1.0
},
"align": 5,
"bounds_type": 0,
"bounds_align": 0,
"bounds_crop": false,
"bounds": {
"x": 0.0,
"y": 0.0
},
"crop_left": 0,
"crop_top": 0,
"crop_right": 0,
"crop_bottom": 0,
"id": 3,
"group_item_backup": false,
"scale_filter": "disable",
"blend_method": "default",
"blend_type": "normal",
"show_transition": {
"duration": 0
},
"hide_transition": {
"duration": 0
},
"private_settings": {}
},
{
"name": "Alerts",
"source_uuid": "f1d0e2a1-3bbf-4a75-80ab-91243c5590d4",
"visible": true,
"locked": false,
"rot": 0.0,
"pos": {
"x": 0.0,
"y": 0.0
},
"scale": {
"x": 1.7999999523162842,
"y": 1.7999999523162842
},
"align": 5,
"bounds_type": 0,
"bounds_align": 0,
"bounds_crop": false,
"bounds": {
"x": 0.0,
"y": 0.0
},
"crop_left": 0,
"crop_top": 0,
"crop_right": 0,
"crop_bottom": 0,
"id": 4,
"group_item_backup": false,
"scale_filter": "disable",
"blend_method": "default",
"blend_type": "normal",
"show_transition": {
"duration": 0
},
"hide_transition": {
"duration": 0
},
"private_settings": {}
}
]
},
"mixers": 0,
"sync": 0,
"flags": 0,
"volume": 1.0,
"balance": 0.5,
"enabled": true,
"muted": false,
"push-to-mute": false,
"push-to-mute-delay": 0,
"push-to-talk": false,
"push-to-talk-delay": 0,
"hotkeys": {
"OBSBasic.SelectScene": [],
"libobs.show_scene_item.1": [],
"libobs.hide_scene_item.1": [],
"libobs.show_scene_item.3": [],
"libobs.hide_scene_item.3": [],
"libobs.show_scene_item.4": [],
"libobs.hide_scene_item.4": []
},
"deinterlace_mode": 0,
"deinterlace_field_order": 0,
"monitoring_type": 0,
"private_settings": {}
},
{
"prev_ver": 503447552,
"name": "Stream",
"uuid": "7936741f-a3a3-478d-acdc-ca0e25fc1da1",
"id": "scene",
"versioned_id": "scene",
"settings": {
"id_counter": 6,
"custom_size": false,
"items": [
{
"name": "Stream Background",
"source_uuid": "d9b7efee-1348-4d0f-9b2d-f7ea0ecad7e7",
"visible": true,
"locked": false,
"rot": 0.0,
"pos": {
"x": 1222.0,
"y": 403.0
},
"scale": {
"x": 1.0,
"y": 1.0
},
"align": 5,
"bounds_type": 0,
"bounds_align": 0,
"bounds_crop": false,
"bounds": {
"x": 0.0,
"y": 0.0
},
"crop_left": 0,
"crop_top": 0,
"crop_right": 0,
"crop_bottom": 0,
"id": 1,
"group_item_backup": false,
"scale_filter": "disable",
"blend_method": "default",
"blend_type": "normal",
"show_transition": {
"duration": 0
},
"hide_transition": {
"duration": 0
},
"private_settings": {}
},
{
"name": "Game",
"source_uuid": "b4b086c6-2733-4c66-b833-b0546d8d928f",
"visible": true,
"locked": false,
"rot": 0.0,
"pos": {
"x": 54.0,
"y": 98.0
},
"scale": {
"x": 0.71406251192092896,
"y": 0.71428573131561279
},
"align": 5,
"bounds_type": 0,
"bounds_align": 0,
"bounds_crop": false,
"bounds": {
"x": 0.0,
"y": 0.0
},
"crop_left": 0,
"crop_top": 0,
"crop_right": 0,
"crop_bottom": 0,
"id": 3,
"group_item_backup": false,
"scale_filter": "disable",
"blend_method": "default",
"blend_type": "normal",
"show_transition": {
"duration": 0
},
"hide_transition": {
"duration": 0
},
"private_settings": {}
},
{
"name": "Model",
"source_uuid": "61587530-1788-4a8a-9854-55d7ab8643c1",
"visible": true,
"locked": false,
"rot": 0.0,
"pos": {
"x": 1266.0,
"y": 607.0
},
"scale": {
"x": 0.58046877384185791,
"y": 0.58055555820465088
},
"align": 5,
"bounds_type": 0,
"bounds_align": 0,
"bounds_crop": false,
"bounds": {
"x": 0.0,
"y": 0.0
},
"crop_left": 0,
"crop_top": 0,
"crop_right": 0,
"crop_bottom": 0,
"id": 4,
"group_item_backup": false,
"scale_filter": "disable",
"blend_method": "default",
"blend_type": "normal",
"show_transition": {
"duration": 0
},
"hide_transition": {
"duration": 0
},
"private_settings": {}
},
{
"name": "Stream Overlay",
"source_uuid": "26865859-0f4d-4e3f-8285-e7567de6ab80",
"visible": true,
"locked": false,
"rot": 0.0,
"pos": {
"x": 0.0,
"y": 0.0
},
"scale": {
"x": 1.0,
"y": 1.0
},
"align": 5,
"bounds_type": 0,
"bounds_align": 0,
"bounds_crop": false,
"bounds": {
"x": 0.0,
"y": 0.0
},
"crop_left": 0,
"crop_top": 0,
"crop_right": 0,
"crop_bottom": 0,
"id": 2,
"group_item_backup": false,
"scale_filter": "disable",
"blend_method": "default",
"blend_type": "normal",
"show_transition": {
"duration": 0
},
"hide_transition": {
"duration": 0
},
"private_settings": {}
},
{
"name": "Alerts",
"source_uuid": "f1d0e2a1-3bbf-4a75-80ab-91243c5590d4",
"visible": true,
"locked": false,
"rot": 0.0,
"pos": {
"x": 0.0,
"y": 0.0
},
"scale": {
"x": 1.7999999523162842,
"y": 1.7999999523162842
},
"align": 5,
"bounds_type": 0,
"bounds_align": 0,
"bounds_crop": false,
"bounds": {
"x": 0.0,
"y": 0.0
},
"crop_left": 0,
"crop_top": 0,
"crop_right": 0,
"crop_bottom": 0,
"id": 5,
"group_item_backup": false,
"scale_filter": "disable",
"blend_method": "default",
"blend_type": "normal",
"show_transition": {
"duration": 0
},
"hide_transition": {
"duration": 0
},
"private_settings": {}
},
{
"name": "Chat",
"source_uuid": "005e5143-427d-405c-84aa-b50210ad015f",
"visible": true,
"locked": false,
"rot": 0.0,
"pos": {
"x": 1420.0,
"y": 0.0
},
"scale": {
"x": 1.0,
"y": 1.0
},
"align": 5,
"bounds_type": 0,
"bounds_align": 0,
"bounds_crop": false,
"bounds": {
"x": 0.0,
"y": 0.0
},
"crop_left": 0,
"crop_top": 0,
"crop_right": 0,
"crop_bottom": 0,
"id": 6,
"group_item_backup": false,
"scale_filter": "disable",
"blend_method": "default",
"blend_type": "normal",
"show_transition": {
"duration": 0
},
"hide_transition": {
"duration": 0
},
"private_settings": {}
}
]
},
"mixers": 0,
"sync": 0,
"flags": 0,
"volume": 1.0,
"balance": 0.5,
"enabled": true,
"muted": false,
"push-to-mute": false,
"push-to-mute-delay": 0,
"push-to-talk": false,
"push-to-talk-delay": 0,
"hotkeys": {
"OBSBasic.SelectScene": [],
"libobs.show_scene_item.1": [],
"libobs.hide_scene_item.1": [],
"libobs.show_scene_item.3": [],
"libobs.hide_scene_item.3": [],
"libobs.show_scene_item.4": [],
"libobs.hide_scene_item.4": [],
"libobs.show_scene_item.2": [],
"libobs.hide_scene_item.2": [],
"libobs.show_scene_item.5": [],
"libobs.hide_scene_item.5": [],
"libobs.show_scene_item.6": [],
"libobs.hide_scene_item.6": []
},
"deinterlace_mode": 0,
"deinterlace_field_order": 0,
"monitoring_type": 0,
"private_settings": {}
},
{
"prev_ver": 503447552,
"name": "Stream Background",
"uuid": "d9b7efee-1348-4d0f-9b2d-f7ea0ecad7e7",
"id": "ffmpeg_source",
"versioned_id": "ffmpeg_source",
"settings": {
"close_when_inactive": true,
"local_file": "/home/naomi/Documents/stream/stream-bg.webm",
"looping": true
},
"mixers": 255,
"sync": 0,
"flags": 0,
"volume": 1.0,
"balance": 0.5,
"enabled": true,
"muted": false,
"push-to-mute": false,
"push-to-mute-delay": 0,
"push-to-talk": false,
"push-to-talk-delay": 0,
"hotkeys": {
"libobs.mute": [],
"libobs.unmute": [],
"libobs.push-to-mute": [],
"libobs.push-to-talk": [],
"MediaSource.Restart": [],
"MediaSource.Play": [],
"MediaSource.Pause": [],
"MediaSource.Stop": []
},
"deinterlace_mode": 0,
"deinterlace_field_order": 0,
"monitoring_type": 0,
"private_settings": {}
},
{
"prev_ver": 503447552,
"name": "Stream Overlay",
"uuid": "26865859-0f4d-4e3f-8285-e7567de6ab80",
"id": "ffmpeg_source",
"versioned_id": "ffmpeg_source",
"settings": {
"close_when_inactive": true,
"local_file": "/home/naomi/Documents/stream/stream-overlay.webm",
"looping": true
},
"mixers": 255,
"sync": 0,
"flags": 0,
"volume": 1.0,
"balance": 0.5,
"enabled": true,
"muted": false,
"push-to-mute": false,
"push-to-mute-delay": 0,
"push-to-talk": false,
"push-to-talk-delay": 0,
"hotkeys": {
"libobs.mute": [],
"libobs.unmute": [],
"libobs.push-to-mute": [],
"libobs.push-to-talk": [],
"MediaSource.Restart": [],
"MediaSource.Play": [],
"MediaSource.Pause": [],
"MediaSource.Stop": []
},
"deinterlace_mode": 0,
"deinterlace_field_order": 0,
"monitoring_type": 0,
"private_settings": {}
},
{
"prev_ver": 503447552,
"name": "Text BRB",
"uuid": "6f46d696-d2f1-49b4-957d-1f06a9392cdc",
"id": "ffmpeg_source",
"versioned_id": "ffmpeg_source",
"settings": {
"local_file": "/home/naomi/Documents/stream/slide-text-brb.webm",
"close_when_inactive": true,
"looping": true
},
"mixers": 255,
"sync": 0,
"flags": 0,
"volume": 1.0,
"balance": 0.5,
"enabled": true,
"muted": false,
"push-to-mute": false,
"push-to-mute-delay": 0,
"push-to-talk": false,
"push-to-talk-delay": 0,
"hotkeys": {
"libobs.mute": [],
"libobs.unmute": [],
"libobs.push-to-mute": [],
"libobs.push-to-talk": [],
"MediaSource.Restart": [],
"MediaSource.Play": [],
"MediaSource.Pause": [],
"MediaSource.Stop": []
},
"deinterlace_mode": 0,
"deinterlace_field_order": 0,
"monitoring_type": 0,
"private_settings": {}
},
{
"prev_ver": 503447552,
"name": "Text End",
"uuid": "e84200d5-b7bf-4230-afff-ff7cbae8a8d3",
"id": "ffmpeg_source",
"versioned_id": "ffmpeg_source",
"settings": {
"local_file": "/home/naomi/Documents/stream/slide-text-end.webm",
"looping": true
},
"mixers": 255,
"sync": 0,
"flags": 0,
"volume": 1.0,
"balance": 0.5,
"enabled": true,
"muted": false,
"push-to-mute": false,
"push-to-mute-delay": 0,
"push-to-talk": false,
"push-to-talk-delay": 0,
"hotkeys": {
"libobs.mute": [],
"libobs.unmute": [],
"libobs.push-to-mute": [],
"libobs.push-to-talk": [],
"MediaSource.Restart": [],
"MediaSource.Play": [],
"MediaSource.Pause": [],
"MediaSource.Stop": []
},
"deinterlace_mode": 0,
"deinterlace_field_order": 0,
"monitoring_type": 0,
"private_settings": {}
},
{
"prev_ver": 503447552,
"name": "Text Start",
"uuid": "f8ec5105-3e0e-44df-925e-1de60b69aac9",
"id": "ffmpeg_source",
"versioned_id": "ffmpeg_source",
"settings": {
"local_file": "/home/naomi/Documents/stream/slide-text-start.webm",
"close_when_inactive": true,
"undo_uuid": "f8ec5105-3e0e-44df-925e-1de60b69aac9",
"looping": true
},
"mixers": 255,
"sync": 0,
"flags": 0,
"volume": 1.0,
"balance": 0.5,
"enabled": true,
"muted": false,
"push-to-mute": false,
"push-to-mute-delay": 0,
"push-to-talk": false,
"push-to-talk-delay": 0,
"hotkeys": {
"libobs.mute": [],
"libobs.unmute": [],
"libobs.push-to-mute": [],
"libobs.push-to-talk": [],
"MediaSource.Restart": [],
"MediaSource.Play": [],
"MediaSource.Pause": [],
"MediaSource.Stop": []
},
"deinterlace_mode": 0,
"deinterlace_field_order": 0,
"monitoring_type": 0,
"private_settings": {}
},
{
"prev_ver": 503447552,
"name": "Virtual Cam",
"uuid": "251f1f3f-846d-475d-a496-9c9afd69125a",
"id": "scene",
"versioned_id": "scene",
"settings": {
"id_counter": 3,
"custom_size": false,
"items": [
{
"name": "Cam Background",
"source_uuid": "6bd1ef08-a91e-4b0b-bb1a-d3ee2387f5f5",
"visible": true,
"locked": false,
"rot": 0.0,
"pos": {
"x": 0.0,
"y": 0.0
},
"scale": {
"x": 1.0,
"y": 1.0
},
"align": 5,
"bounds_type": 0,
"bounds_align": 0,
"bounds_crop": false,
"bounds": {
"x": 0.0,
"y": 0.0
},
"crop_left": 0,
"crop_top": 0,
"crop_right": 0,
"crop_bottom": 0,
"id": 1,
"group_item_backup": false,
"scale_filter": "disable",
"blend_method": "default",
"blend_type": "normal",
"show_transition": {
"duration": 0
},
"hide_transition": {
"duration": 0
},
"private_settings": {}
},
{
"name": "Model",
"source_uuid": "61587530-1788-4a8a-9854-55d7ab8643c1",
"visible": true,
"locked": false,
"rot": 0.0,
"pos": {
"x": 0.0,
"y": 0.0
},
"scale": {
"x": 1.0,
"y": 1.0
},
"align": 5,
"bounds_type": 2,
"bounds_align": 0,
"bounds_crop": false,
"bounds": {
"x": 1920.0,
"y": 1080.0
},
"crop_left": 0,
"crop_top": 0,
"crop_right": 0,
"crop_bottom": 0,
"id": 3,
"group_item_backup": false,
"scale_filter": "disable",
"blend_method": "default",
"blend_type": "normal",
"show_transition": {
"duration": 0
},
"hide_transition": {
"duration": 0
},
"private_settings": {}
},
{
"name": "Cam Overlay",
"source_uuid": "bf638a3c-5133-406c-a3d2-541723f715f9",
"visible": true,
"locked": false,
"rot": 0.0,
"pos": {
"x": 0.0,
"y": 0.0
},
"scale": {
"x": 1.0,
"y": 1.0
},
"align": 5,
"bounds_type": 0,
"bounds_align": 0,
"bounds_crop": false,
"bounds": {
"x": 0.0,
"y": 0.0
},
"crop_left": 0,
"crop_top": 0,
"crop_right": 0,
"crop_bottom": 0,
"id": 2,
"group_item_backup": false,
"scale_filter": "disable",
"blend_method": "default",
"blend_type": "normal",
"show_transition": {
"duration": 0
},
"hide_transition": {
"duration": 0
},
"private_settings": {}
}
]
},
"mixers": 0,
"sync": 0,
"flags": 0,
"volume": 1.0,
"balance": 0.5,
"enabled": true,
"muted": false,
"push-to-mute": false,
"push-to-mute-delay": 0,
"push-to-talk": false,
"push-to-talk-delay": 0,
"hotkeys": {
"OBSBasic.SelectScene": [],
"libobs.show_scene_item.1": [],
"libobs.hide_scene_item.1": [],
"libobs.show_scene_item.3": [],
"libobs.hide_scene_item.3": [],
"libobs.show_scene_item.2": [],
"libobs.hide_scene_item.2": []
},
"deinterlace_mode": 0,
"deinterlace_field_order": 0,
"monitoring_type": 0,
"private_settings": {}
}
]
}
```
</details>
### 3.3. Profile
This configuration file sets up the OBS profile.
```ini
[General]
Name=Naomi
[Output]
Mode=Simple
FilenameFormatting=%CCYY-%MM-%DD %hh-%mm-%ss
DelayEnable=false
DelaySec=20
DelayPreserve=true
Reconnect=true
RetryDelay=2
MaxRetries=25
BindIP=default
IPFamily=IPv4+IPv6
NewSocketLoopEnable=false
LowLatencyEnable=false
[Stream1]
IgnoreRecommended=false
[SimpleOutput]
FilePath=/home/naomi
RecFormat2=mkv
VBitrate=2500
ABitrate=160
UseAdvanced=false
Preset=veryfast
NVENCPreset2=p5
RecQuality=Stream
RecRB=false
RecRBTime=20
RecRBSize=512
RecRBPrefix=Replay
StreamAudioEncoder=aac
RecAudioEncoder=aac
RecTracks=1
StreamEncoder=nvenc
RecEncoder=nvenc
[AdvOut]
ApplyServiceSettings=true
UseRescale=false
TrackIndex=1
VodTrackIndex=2
Encoder=obs_x264
RecType=Standard
RecFilePath=/home/naomi
RecFormat2=mkv
RecUseRescale=false
RecTracks=1
RecEncoder=none
FLVTrack=1
StreamMultiTrackAudioMixes=1
FFOutputToFile=true
FFFilePath=/home/naomi
FFExtension=mp4
FFVBitrate=2500
FFVGOPSize=250
FFUseRescale=false
FFIgnoreCompat=false
FFABitrate=160
FFAudioMixes=1
Track1Bitrate=160
Track2Bitrate=160
Track3Bitrate=160
Track4Bitrate=160
Track5Bitrate=160
Track6Bitrate=160
RecSplitFileTime=15
RecSplitFileSize=2048
RecRB=false
RecRBTime=20
RecRBSize=512
AudioEncoder=libfdk_aac
RecAudioEncoder=libfdk_aac
[Video]
BaseCX=1920
BaseCY=1080
OutputCX=1920
OutputCY=1080
FPSType=0
FPSCommon=30
FPSInt=30
FPSNum=30
FPSDen=1
ScaleType=bicubic
ColorFormat=NV12
ColorSpace=709
ColorRange=Partial
SdrWhiteLevel=300
HdrNominalPeakLevel=1000
[Audio]
MonitoringDeviceId=default
MonitoringDeviceName=Default
SampleRate=48000
ChannelSetup=Stereo
MeterDecayRate=23.53
PeakMeterType=0
[Panels]
CookieId=#redacted
```
### 3.4. Docks
This configuration file loads Naomi's standard dock layout. Sensitive information has been redacted. This specifically goes in `~/.config/obs-studio/global.ini`.
```ini
[General]
Pre19Defaults=false
Pre21Defaults=false
Pre23Defaults=false
Pre24.1Defaults=false
MaxLogs=10
InfoIncrement=1
ProcessPriority=Normal
EnableAutoUpdates=true
ConfirmOnExit=true
HotkeyFocusType=NeverDisableHotkeys
FirstRun=true
InstallGUID=#Redacted
CurrentTheme3=Light
LastVersion=503382018
InfoLastVersion=32993938767872
[Video]
Renderer=OpenGL
[BasicWindow]
PreviewEnabled=true
PreviewProgramMode=false
SceneDuplicationMode=true
SwapScenesMode=true
SnappingEnabled=true
ScreenSnapping=true
SourceSnapping=true
CenterSnapping=false
SnapDistance=10
SpacingHelpersEnabled=true
RecordWhenStreaming=false
KeepRecordingWhenStreamStops=false
SysTrayEnabled=true
SysTrayWhenStarted=false
SaveProjectors=false
ShowTransitions=true
ShowListboxToolbars=true
ShowStatusBar=true
ShowSourceIcons=true
ShowContextToolbars=true
StudioModeLabels=true
VerticalVolControl=false
MultiviewMouseSwitch=true
MultiviewDrawNames=true
MultiviewDrawAreas=true
MediaControlsCountdownTimer=true
WarnBeforeStartingStream=false
WarnBeforeStoppingStream=false
WarnBeforeStoppingRecord=false
geometry=AdnQywADAAAAAA8AAAAAAAAAFn8AAAQ3AAARNgAAACAAABVsAAAC2AAAAAICAAAAB4AAAA8AAAAAIAAAFn8AAAQ3
DockState=AAAA/wAAAAD9AAAAAwAAAAAAAAB0AAAC1/wCAAAAAfsAAAAiAEMAaABhAHQAXwBlAHgAdAByAGEAQgByAG8AdwBzAGUAcgEAAAAXAAAC1wAAAFAA////AAAAAQAAAY4AAALX/AIAAAAB/AAAABcAAALXAAAAUAD////8AQAAAAL7AAAAMABSAGUAZABlAG0AcAB0AGkAbwBuAHMAXwBlAHgAdAByAGEAQgByAG8AdwBzAGUAcgEAAAXyAAAAwwAAAFAA////+wAAACgAQQBjAHQAaQBvAG4AcwBfAGUAeAB0AHIAYQBCAHIAbwB3AHMAZQByAQAABrkAAADHAAAAUAD///8AAAADAAAHgAAAAQT8AQAAAAf7AAAAFABzAGMAZQBuAGUAcwBEAG8AYwBrAQAAAAAAAAE1AAAAoAD////7AAAAFgBzAG8AdQByAGMAZQBzAEQAbwBjAGsBAAABOQAAATIAAACgAP////sAAAASAG0AaQB4AGUAcgBEAG8AYwBrAQAAAm8AAAGSAAAA3gD////7AAAAHgB0AHIAYQBuAHMAaQB0AGkAbwBuAHMARABvAGMAawEAAAQFAAABHwAAAIIA////+wAAACIARgBlAGUAZABfAGUAeAB0AHIAYQBCAHIAbwB3AHMAZQByAQAABSgAAAExAAAAUAD////7AAAAGABjAG8AbgB0AHIAbwBsAHMARABvAGMAawEAAAZdAAABIwAAAJ4A////+wAAABIAcwB0AGEAdABzAEQAbwBjAGsCAAACYgAAAbgAAAK8AAAAyAAABXYAAALXAAAABAAAAAQAAAAIAAAACPwAAAAA
ExtraBrowserDocks=[{"title": "Redemptions", "url": "https://www.twitch.tv/popout/naomilgbt/reward-queue", "uuid": "redacted"}, {"title": "Feed", "url": "https://dashboard.twitch.tv/popout/u/naomilgbt/stream-manager/activity-feed?uuid=redacted", "uuid": "redacted"}, {"title": "Chat", "url": "https://dashboard.twitch.tv/popout/u/naomilgbt/stream-manager/chat?uuid=redacted", "uuid": "redacted"}, {"title": "Actions", "url": "https://dashboard.twitch.tv/popout/u/naomilgbt/stream-manager/quick-actions?uuid=redacted", "uuid": "redacted"}]
AlwaysOnTop=false
EditPropertiesMode=false
DocksLocked=false
SideDocks=false
[Basic]
Profile=Naomi
ProfileDir=Naomi
SceneCollection=Naomi
SceneCollectionFile=Naomi
ConfigOnNewProfile=true
[OBSWebSocket]
[Accessibility]
SelectRed=255
SelectGreen=65280
SelectBlue=16744192
MixerGreen=2522918
MixerYellow=2523007
MixerRed=2500223
MixerGreenActive=5046092
MixerYellowActive=5046271
MixerRedActive=5000447
[PropertiesWindow]
cx=720
cy=580
[ScriptLogWindow]
geometry=AdnQywADAAAAAAABAAAAGQAAAlgAAAGoAAAAAQAAABkAAAJYAAABqAAAAAEAAAAAB4AAAAABAAAAGQAAAlgAAAGo
[Appearance]
Theme=com.obsproject.Yami.Light
```