46 KiB
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
- Install the packages:
1.2. Running
Naomi uses a bash script to run the program. Put this in ~/Documents/scripts/osf.sh
.
#!/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
.
[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. 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
.
#!/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
.
[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.
Show file
{
"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": {}
}
]
}
3.3. Profile
This configuration file sets up the OBS profile.
[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
.
[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