Initial commit

This commit is contained in:
2026-03-27 11:16:39 -07:00
commit 67d5c9ca5f
8 changed files with 470 additions and 0 deletions

View File

@@ -0,0 +1,86 @@
#Requires -Version 5.1
<#
.SYNOPSIS
Launches OBS Studio hidden with the replay buffer running, then starts the tray icon.
Intended to be called by DEM as a logon task (fire and forget — do not wait for completion).
.NOTES
Reads settings from config.psd1 one level above this script.
Writes the OBS profile basic.ini dynamically so the correct UNC path and buffer
duration are baked in at session start.
#>
$ErrorActionPreference = 'Stop'
$configPath = Join-Path $PSScriptRoot '..\config.psd1'
$config = Import-PowerShellDataFile -Path $configPath
# --- Skip if OBS is already running (handles reconnect scenarios) ---
if (Get-Process -Name 'obs64' -ErrorAction SilentlyContinue) {
exit 0
}
# --- Create user capture subfolder on UNC share ---
$userCapturePath = Join-Path $config.UNCPath $env:USERNAME
if (-not (Test-Path -Path $userCapturePath)) {
New-Item -ItemType Directory -Path $userCapturePath -Force | Out-Null
}
# --- Detect primary monitor resolution ---
Add-Type -AssemblyName System.Windows.Forms
$screen = [System.Windows.Forms.Screen]::PrimaryScreen
$width = $screen.Bounds.Width
$height = $screen.Bounds.Height
# --- Write OBS profile (basic.ini) ---
$profileDir = "$env:APPDATA\obs-studio\basic\profiles\$($config.ProfileName)"
New-Item -ItemType Directory -Path $profileDir -Force | Out-Null
@"
[General]
Name=$($config.ProfileName)
[Output]
Mode=Simple
FilenameFormatting=%CCYY-%MM-%DD_%hh-%mm-%ss
[SimpleOutput]
FilePath=$userCapturePath
RecFormat2=mkv
RecQuality=HQ
RecRBTime=$($config.BufferSeconds)
RecRBSize=512
[Video]
BaseCX=$width
BaseCY=$height
OutputCX=$width
OutputCY=$height
FPSType=1
FPSNum=30
FPSDen=1
ScaleType=bicubic
ColorFormat=NV12
ColorSpace=709
ColorRange=Partial
"@ | Set-Content -Path "$profileDir\basic.ini" -Encoding UTF8
# --- Launch OBS hidden ---
$obsArgs = @(
'--minimize-to-tray'
'--startreplaybuffer'
'--disable-updater'
"--profile `"$($config.ProfileName)`""
"--collection `"$($config.SceneCollection)`""
)
Start-Process -FilePath $config.OBSExecutable -ArgumentList $obsArgs -WindowStyle Hidden
# --- Launch tray icon as a separate background process ---
$trayScript = Join-Path $PSScriptRoot 'Show-ReplayTray.ps1'
Start-Process -FilePath 'powershell.exe' -ArgumentList @(
'-ExecutionPolicy', 'Bypass'
'-NonInteractive'
'-WindowStyle', 'Hidden'
'-File', $trayScript
) -WindowStyle Hidden