diff --git a/README.md b/README.md index f83b714..66ce8a4 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Live Stream Manager -A professional [Next.js](https://nextjs.org) web application for managing live streams and controlling multiple OBS [Source Switchers](https://github.com/exeldro/obs-source-switcher) with real-time WebSocket integration and modern glass morphism UI. +A professional [Next.js](https://nextjs.org) web application for managing live streams and controlling multiple OBS [Source Switchers](https://obsproject.com/forum/resources/source-switcher.941/) with real-time WebSocket integration and modern glass morphism UI. ![alt text](image.png) diff --git a/Testers2 b/Testers2 deleted file mode 100644 index e69de29..0000000 diff --git a/app/api/addStream/route.ts b/app/api/addStream/route.ts index 9347106..4bb22d6 100644 --- a/app/api/addStream/route.ts +++ b/app/api/addStream/route.ts @@ -4,7 +4,7 @@ import { connectToOBS, getOBSClient, disconnectFromOBS, addSourceToSwitcher, cre import { open } from 'sqlite'; import sqlite3 from 'sqlite3'; import path from 'path'; -import { getTableName, BASE_TABLE_NAMES, SOURCE_SWITCHER_NAMES } from '../../../lib/constants'; +import { getTableName, BASE_TABLE_NAMES } from '../../../lib/constants'; interface OBSClient { call: (method: string, params?: Record) => Promise>; @@ -18,7 +18,15 @@ inputName: string; interface GetInputListResponse { inputs: OBSInput[]; } -const screens = SOURCE_SWITCHER_NAMES; +const screens = [ + 'ss_large', + 'ss_left', + 'ss_right', + 'ss_top_left', + 'ss_top_right', + 'ss_bottom_left', + 'ss_bottom_right', +]; async function fetchTeamInfo(teamId: number) { const FILE_DIRECTORY = path.resolve(process.env.FILE_DIRECTORY || './files'); diff --git a/app/api/getTeamName/route.ts b/app/api/getTeamName/route.ts index c4c7cd9..d364306 100644 --- a/app/api/getTeamName/route.ts +++ b/app/api/getTeamName/route.ts @@ -1,32 +1,38 @@ import { NextRequest, NextResponse } from 'next/server'; import { getDatabase } from '../../../lib/database'; -import { TABLE_NAMES } from '../../../lib/constants'; -import { createErrorResponse, createSuccessResponse, createDatabaseError, withErrorHandling } from '../../../lib/apiHelpers'; - -async function getTeamNameHandler(request: NextRequest) { - // Extract the team_id from the query string - const { searchParams } = new URL(request.url); - const teamId = searchParams.get('team_id'); - - if (!teamId) { - return createErrorResponse('Missing team_id', 400, 'team_id parameter is required'); - } +export async function GET(request: NextRequest) { try { + // Extract the team_id from the query string + const { searchParams } = new URL(request.url); + const teamId = searchParams.get('team_id'); + + if (!teamId) { + return NextResponse.json( + { error: 'Missing team_id' }, + { status: 400 } + ); + } + const db = await getDatabase(); const team = await db.get( - `SELECT team_name FROM ${TABLE_NAMES.TEAMS} WHERE team_id = ?`, + 'SELECT team_name FROM teams_2025_spring_adr WHERE team_id = ?', [teamId] ); if (!team) { - return createErrorResponse('Team not found', 404, `No team found with ID: ${teamId}`); + return NextResponse.json( + { error: 'Team not found' }, + { status: 404 } + ); } - return createSuccessResponse({ team_name: team.team_name }); + return NextResponse.json({ team_name: team.team_name }); } catch (error) { - return createDatabaseError('fetch team name', error); + console.error('Error fetching team name:', error instanceof Error ? error.message : String(error)); + return NextResponse.json( + { error: 'Failed to fetch team name' }, + { status: 500 } + ); } } - -export const GET = withErrorHandling(getTeamNameHandler); diff --git a/app/api/streams/route.ts b/app/api/streams/route.ts index ab368e3..000106f 100644 --- a/app/api/streams/route.ts +++ b/app/api/streams/route.ts @@ -2,16 +2,17 @@ import { NextResponse } from 'next/server'; import { getDatabase } from '../../../lib/database'; import { Stream } from '@/types'; import { TABLE_NAMES } from '../../../lib/constants'; -import { createSuccessResponse, createDatabaseError, withErrorHandling } from '../../../lib/apiHelpers'; -async function getStreamsHandler() { - try { +export async function GET() { +try { const db = await getDatabase(); const streams: Stream[] = await db.all(`SELECT * FROM ${TABLE_NAMES.STREAMS}`); - return createSuccessResponse(streams); - } catch (error) { - return createDatabaseError('fetch streams', error); - } + return NextResponse.json(streams); +} catch (error) { + console.error('Error fetching streams:', error); + return NextResponse.json( + { error: 'Failed to fetch streams' }, + { status: 500 } + ); +} } - -export const GET = withErrorHandling(getStreamsHandler); diff --git a/files/SaT.json b/files/SaT.json index 48782c8..d898caf 100644 --- a/files/SaT.json +++ b/files/SaT.json @@ -1,7 +1,10 @@ { - "current_scene": "1-Screen", - "current_program_scene": "1-Screen", + "current_scene": "Scene", + "current_program_scene": "Scene", "scene_order": [ + { + "name": "Scene" + }, { "name": "1-Screen" }, @@ -12,19 +15,7 @@ "name": "4-Screen" }, { - "name": "Starting" - }, - { - "name": "Ending" - }, - { - "name": "Audio" - }, - { - "name": "Movies" - }, - { - "name": "Scene" + "name": "Testers" } ], "name": "SaT", @@ -59,7 +50,7 @@ "transition_duration": 300, "preview_locked": false, "scaling_enabled": false, - "scaling_level": -10, + "scaling_level": -8, "scaling_off_x": 0.0, "scaling_off_y": 0.0, "modules": { @@ -98,76 +89,21 @@ "id": "scene", "versioned_id": "scene", "settings": { - "id_counter": 4, + "id_counter": 1, "custom_size": false, "items": [ - { - "name": "bg1.png", - "source_uuid": "3e5dee8a-230f-427a-9971-9747dbc90dc0", - "visible": true, - "locked": true, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 2, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 2, - "group_item_backup": false, - "pos": { - "x": 0.0, - "y": 0.0 - }, - "pos_rel": { - "x": -1.7777777910232544, - "y": -1.0 - }, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_rel": { - "x": 1.0, - "y": 1.0 - }, - "bounds": { - "x": 1920.0, - "y": 1080.0 - }, - "bounds_rel": { - "x": 3.555555582046509, - "y": 2.0 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, { "name": "ss_large", "source_uuid": "e5727f76-0f05-4747-93fe-190d0e27fad8", "visible": true, - "locked": true, + "locked": false, "rot": 0.0, "scale_ref": { "x": 1920.0, "y": 1080.0 }, "align": 5, - "bounds_type": 2, + "bounds_type": 0, "bounds_align": 0, "bounds_crop": false, "crop_left": 0, @@ -177,122 +113,12 @@ "id": 1, "group_item_backup": false, "pos": { - "x": 186.0, - "y": 118.5 - }, - "pos_rel": { - "x": -1.4333332777023315, - "y": -0.7805555462837219 - }, - "scale": { - "x": 0.8333333134651184, - "y": 0.8333333134651184 - }, - "scale_rel": { - "x": 0.8333333134651184, - "y": 0.8333333134651184 - }, - "bounds": { - "x": 1548.0, - "y": 871.0 - }, - "bounds_rel": { - "x": 2.866666555404663, - "y": 1.6129629611968994 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, - { - "name": "tiltify-compact", - "source_uuid": "7bca2003-cac0-4356-acd0-26c661a4a1d7", - "visible": false, - "locked": true, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 0, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 3, - "group_item_backup": false, - "pos": { - "x": -13.0, - "y": 994.0 - }, - "pos_rel": { - "x": -1.8018518686294556, - "y": 0.8407407999038696 - }, - "scale": { - "x": 1.4672000408172607, - "y": 1.5 - }, - "scale_rel": { - "x": 1.4672000408172607, - "y": 1.5 - }, - "bounds": { "x": 0.0, "y": 0.0 }, - "bounds_rel": { - "x": 0.0, - "y": 0.0 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, - { - "name": "tiltify_2", - "source_uuid": "d518742b-bb00-403f-ab9e-060ff9c78733", - "visible": true, - "locked": true, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 0, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 4, - "group_item_backup": false, - "pos": { - "x": 0.0, - "y": 1016.0 - }, "pos_rel": { "x": -1.7777777910232544, - "y": 0.8814815282821655 + "y": -1.0 }, "scale": { "x": 1.0, @@ -336,14 +162,8 @@ "push-to-talk-delay": 0, "hotkeys": { "OBSBasic.SelectScene": [], - "libobs.show_scene_item.2": [], - "libobs.hide_scene_item.2": [], "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.hide_scene_item.1": [] }, "deinterlace_mode": 0, "deinterlace_field_order": 0, @@ -357,1642 +177,6 @@ "uuid": "e3fa43b2-84ff-46cf-b56c-6110a31df1ad", "id": "scene", "versioned_id": "scene", - "settings": { - "id_counter": 4, - "custom_size": false, - "items": [ - { - "name": "bg1.png", - "source_uuid": "3e5dee8a-230f-427a-9971-9747dbc90dc0", - "visible": true, - "locked": false, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 1, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 3, - "group_item_backup": false, - "pos": { - "x": 0.0, - "y": 0.0 - }, - "pos_rel": { - "x": -1.7777777910232544, - "y": -1.0 - }, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_rel": { - "x": 1.0, - "y": 1.0 - }, - "bounds": { - "x": 1920.0, - "y": 1080.0 - }, - "bounds_rel": { - "x": 3.555555582046509, - "y": 2.0 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, - { - "name": "ss_left", - "source_uuid": "0f02c57d-41fd-40c3-8e05-de44edc52361", - "visible": true, - "locked": false, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 0, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 1, - "group_item_backup": false, - "pos": { - "x": 960.0, - "y": 250.0 - }, - "pos_rel": { - "x": 0.0, - "y": -0.5370370149612427 - }, - "scale": { - "x": 0.5, - "y": 0.5 - }, - "scale_rel": { - "x": 0.5, - "y": 0.5 - }, - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_rel": { - "x": 0.0018518518190830946, - "y": 0.0018518518190830946 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, - { - "name": "ss_right", - "source_uuid": "a90a0e5b-4443-4ac1-981c-6598b92c47fe", - "visible": true, - "locked": false, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 0, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 2, - "group_item_backup": false, - "pos": { - "x": 0.0, - "y": 250.0 - }, - "pos_rel": { - "x": -1.7777777910232544, - "y": -0.5370370149612427 - }, - "scale": { - "x": 0.5, - "y": 0.5 - }, - "scale_rel": { - "x": 0.5, - "y": 0.5 - }, - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_rel": { - "x": 0.0018518518190830946, - "y": 0.0018518518190830946 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, - { - "name": "tiltify_2", - "source_uuid": "d518742b-bb00-403f-ab9e-060ff9c78733", - "visible": true, - "locked": false, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 0, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 4, - "group_item_backup": false, - "pos": { - "x": 0.0, - "y": 1016.0 - }, - "pos_rel": { - "x": -1.7777777910232544, - "y": 0.8814815282821655 - }, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_rel": { - "x": 1.0, - "y": 1.0 - }, - "bounds": { - "x": 0.0, - "y": 0.0 - }, - "bounds_rel": { - "x": 0.0, - "y": 0.0 - }, - "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.3": [], - "libobs.hide_scene_item.3": [], - "libobs.show_scene_item.1": [], - "libobs.hide_scene_item.1": [], - "libobs.show_scene_item.2": [], - "libobs.hide_scene_item.2": [], - "libobs.show_scene_item.4": [], - "libobs.hide_scene_item.4": [] - }, - "deinterlace_mode": 0, - "deinterlace_field_order": 0, - "monitoring_type": 0, - "canvas_uuid": "6c69626f-6273-4c00-9d88-c5136d61696e", - "private_settings": {} - }, - { - "prev_ver": 520159233, - "name": "4-Screen", - "uuid": "ec2099f7-a728-49fc-95ee-c19ca5987bda", - "id": "scene", - "versioned_id": "scene", - "settings": { - "id_counter": 5, - "custom_size": false, - "items": [ - { - "name": "ss_bottom_right", - "source_uuid": "c2164d12-5a03-4372-acdd-f93a7db2a166", - "visible": true, - "locked": true, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 0, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 2, - "group_item_backup": false, - "pos": { - "x": 960.0, - "y": 540.0 - }, - "pos_rel": { - "x": 0.0, - "y": 0.0 - }, - "scale": { - "x": 0.5, - "y": 0.5 - }, - "scale_rel": { - "x": 0.5, - "y": 0.5 - }, - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_rel": { - "x": 0.0018518518190830946, - "y": 0.0018518518190830946 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, - { - "name": "ss_bottom_left", - "source_uuid": "e3c901fa-60da-4e62-9104-f6e5c8c2dabd", - "visible": true, - "locked": true, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 0, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 1, - "group_item_backup": false, - "pos": { - "x": 0.0, - "y": 540.0 - }, - "pos_rel": { - "x": -1.7777777910232544, - "y": 0.0 - }, - "scale": { - "x": 0.5, - "y": 0.5 - }, - "scale_rel": { - "x": 0.5, - "y": 0.5 - }, - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_rel": { - "x": 0.0018518518190830946, - "y": 0.0018518518190830946 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, - { - "name": "ss_top_right", - "source_uuid": "b38b1134-7040-44b4-a397-1a1385911403", - "visible": true, - "locked": false, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 0, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 4, - "group_item_backup": false, - "pos": { - "x": 960.0, - "y": 0.0 - }, - "pos_rel": { - "x": 0.0, - "y": -1.0 - }, - "scale": { - "x": 0.5, - "y": 0.5 - }, - "scale_rel": { - "x": 0.5, - "y": 0.5 - }, - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_rel": { - "x": 0.0018518518190830946, - "y": 0.0018518518190830946 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, - { - "name": "ss_top_left", - "source_uuid": "cd24ff7b-7e4b-4aef-a224-6af032de6247", - "visible": true, - "locked": false, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 0, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 3, - "group_item_backup": false, - "pos": { - "x": 0.0, - "y": 0.0 - }, - "pos_rel": { - "x": -1.7777777910232544, - "y": -1.0 - }, - "scale": { - "x": 0.5, - "y": 0.5 - }, - "scale_rel": { - "x": 0.5, - "y": 0.5 - }, - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_rel": { - "x": 0.0018518518190830946, - "y": 0.0018518518190830946 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, - { - "name": "Shield.png", - "source_uuid": "cc86a455-807e-4be8-bcc0-2e775fdd416f", - "visible": true, - "locked": false, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 0, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 5, - "group_item_backup": false, - "pos": { - "x": 763.5, - "y": 343.5 - }, - "pos_rel": { - "x": -0.3638888895511627, - "y": -0.36388885974884033 - }, - "scale": { - "x": 0.32749998569488525, - "y": 0.32749998569488525 - }, - "scale_rel": { - "x": 0.32749998569488525, - "y": 0.32749998569488525 - }, - "bounds": { - "x": 0.0, - "y": 0.0 - }, - "bounds_rel": { - "x": 0.0, - "y": 0.0 - }, - "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.2": [], - "libobs.hide_scene_item.2": [], - "libobs.show_scene_item.1": [], - "libobs.hide_scene_item.1": [], - "libobs.show_scene_item.4": [], - "libobs.hide_scene_item.4": [], - "libobs.show_scene_item.3": [], - "libobs.hide_scene_item.3": [], - "libobs.show_scene_item.5": [], - "libobs.hide_scene_item.5": [] - }, - "deinterlace_mode": 0, - "deinterlace_field_order": 0, - "monitoring_type": 0, - "canvas_uuid": "6c69626f-6273-4c00-9d88-c5136d61696e", - "private_settings": {} - }, - { - "prev_ver": 520159233, - "name": "Audio", - "uuid": "c3baebaf-ed48-4eec-b4a8-066cd3d7739e", - "id": "scene", - "versioned_id": "scene", - "settings": { - "id_counter": 9, - "custom_size": false, - "items": [ - { - "name": "Shield.png", - "source_uuid": "cc86a455-807e-4be8-bcc0-2e775fdd416f", - "visible": true, - "locked": true, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 0, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 1, - "group_item_backup": false, - "pos": { - "x": 0.0, - "y": 0.0 - }, - "pos_rel": { - "x": -1.7777777910232544, - "y": -1.0 - }, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_rel": { - "x": 1.0, - "y": 1.0 - }, - "bounds": { - "x": 0.0, - "y": 0.0 - }, - "bounds_rel": { - "x": 0.0, - "y": 0.0 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, - { - "name": "EK_Cover-Sequence.mp4", - "source_uuid": "c18afc0c-5e96-406e-a6ec-f2716d9ea213", - "visible": true, - "locked": true, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 1, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 2, - "group_item_backup": false, - "pos": { - "x": 0.0, - "y": 0.0 - }, - "pos_rel": { - "x": -1.7777777910232544, - "y": -1.0 - }, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_rel": { - "x": 1.0, - "y": 1.0 - }, - "bounds": { - "x": 1920.0, - "y": 1080.0 - }, - "bounds_rel": { - "x": 3.555555582046509, - "y": 2.0 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, - { - "name": "Starting_Soon-overlay.png", - "source_uuid": "be349117-620b-4595-afcc-36ffd4771077", - "visible": false, - "locked": true, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 1, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 3, - "group_item_backup": false, - "pos": { - "x": 0.0, - "y": 0.0 - }, - "pos_rel": { - "x": -1.7777777910232544, - "y": -1.0 - }, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_rel": { - "x": 1.0, - "y": 1.0 - }, - "bounds": { - "x": 1920.0, - "y": 1080.0 - }, - "bounds_rel": { - "x": 3.555555582046509, - "y": 2.0 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, - { - "name": "MAW_International_REV.png", - "source_uuid": "9d0f8fd0-edfe-4fee-b011-a97ad7a8aa4c", - "visible": true, - "locked": false, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 2, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 4, - "group_item_backup": false, - "pos": { - "x": 263.5, - "y": 179.0 - }, - "pos_rel": { - "x": -1.289814829826355, - "y": -0.6685185432434082 - }, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_rel": { - "x": 1.0, - "y": 1.0 - }, - "bounds": { - "x": 1393.0, - "y": 389.0 - }, - "bounds_rel": { - "x": 2.57962965965271, - "y": 0.720370352268219 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, - { - "name": "MAW_International_RGB.png", - "source_uuid": "83aea6c1-44be-409a-afa7-755eac726808", - "visible": false, - "locked": false, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 1, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 5, - "group_item_backup": false, - "pos": { - "x": 0.0, - "y": 0.0 - }, - "pos_rel": { - "x": -1.7777777910232544, - "y": -1.0 - }, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_rel": { - "x": 1.0, - "y": 1.0 - }, - "bounds": { - "x": 1920.0, - "y": 1080.0 - }, - "bounds_rel": { - "x": 3.555555582046509, - "y": 2.0 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, - { - "name": "Ending-overlay.png", - "source_uuid": "7322ab7b-c19d-420c-9533-d6eea6ffe1af", - "visible": false, - "locked": false, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 1, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 6, - "group_item_backup": false, - "pos": { - "x": 0.0, - "y": 0.0 - }, - "pos_rel": { - "x": -1.7777777910232544, - "y": -1.0 - }, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_rel": { - "x": 1.0, - "y": 1.0 - }, - "bounds": { - "x": 1920.0, - "y": 1080.0 - }, - "bounds_rel": { - "x": 3.555555582046509, - "y": 2.0 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, - { - "name": "Olympus - Fallen.m4a", - "source_uuid": "abbfbb57-10ed-4132-b2a1-2482469c109a", - "visible": true, - "locked": false, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 0, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 7, - "group_item_backup": false, - "pos": { - "x": 0.0, - "y": 0.0 - }, - "pos_rel": { - "x": -1.7777777910232544, - "y": -1.0 - }, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_rel": { - "x": 1.0, - "y": 1.0 - }, - "bounds": { - "x": 0.0, - "y": 0.0 - }, - "bounds_rel": { - "x": 0.0, - "y": 0.0 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, - { - "name": "Paradigm - Aithee.m4a", - "source_uuid": "fc88454b-db74-456d-9c41-a62fef5d8cf2", - "visible": true, - "locked": false, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 0, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 8, - "group_item_backup": false, - "pos": { - "x": 0.0, - "y": 0.0 - }, - "pos_rel": { - "x": -1.7777777910232544, - "y": -1.0 - }, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_rel": { - "x": 1.0, - "y": 1.0 - }, - "bounds": { - "x": 0.0, - "y": 0.0 - }, - "bounds_rel": { - "x": 0.0, - "y": 0.0 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, - { - "name": "Vanir - Hyde.m4a", - "source_uuid": "3e95bbed-76b4-4f46-b20d-26461854ea4b", - "visible": true, - "locked": false, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 0, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 9, - "group_item_backup": false, - "pos": { - "x": 0.0, - "y": 0.0 - }, - "pos_rel": { - "x": -1.7777777910232544, - "y": -1.0 - }, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_rel": { - "x": 1.0, - "y": 1.0 - }, - "bounds": { - "x": 0.0, - "y": 0.0 - }, - "bounds_rel": { - "x": 0.0, - "y": 0.0 - }, - "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.2": [], - "libobs.hide_scene_item.2": [], - "libobs.show_scene_item.3": [], - "libobs.hide_scene_item.3": [], - "libobs.show_scene_item.4": [], - "libobs.hide_scene_item.4": [], - "libobs.show_scene_item.5": [], - "libobs.hide_scene_item.5": [], - "libobs.show_scene_item.6": [], - "libobs.hide_scene_item.6": [], - "libobs.show_scene_item.7": [], - "libobs.hide_scene_item.7": [], - "libobs.show_scene_item.8": [], - "libobs.hide_scene_item.8": [], - "libobs.show_scene_item.9": [], - "libobs.hide_scene_item.9": [] - }, - "deinterlace_mode": 0, - "deinterlace_field_order": 0, - "monitoring_type": 0, - "canvas_uuid": "6c69626f-6273-4c00-9d88-c5136d61696e", - "private_settings": {} - }, - { - "prev_ver": 520159233, - "name": "bg1.png", - "uuid": "3e5dee8a-230f-427a-9971-9747dbc90dc0", - "id": "image_source", - "versioned_id": "image_source", - "settings": { - "file": "C:/Users/derek/OBS/SaT Summer 2025/bg1.png" - }, - "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": 520159233, - "name": "EK_Cover-Sequence.mp4", - "uuid": "c18afc0c-5e96-406e-a6ec-f2716d9ea213", - "id": "ffmpeg_source", - "versioned_id": "ffmpeg_source", - "settings": { - "local_file": "C:/Users/derek/OBS/SaT Summer 2025/EK_Cover-Sequence.mp4", - "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": 520159233, - "name": "Ending", - "uuid": "cac02bc5-c5bf-4e8d-a0a2-e390598ee48c", - "id": "scene", - "versioned_id": "scene", - "settings": { - "id_counter": 6, - "custom_size": false, - "items": [ - { - "name": "Shield.png", - "source_uuid": "cc86a455-807e-4be8-bcc0-2e775fdd416f", - "visible": true, - "locked": true, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 0, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 1, - "group_item_backup": false, - "pos": { - "x": 0.0, - "y": 0.0 - }, - "pos_rel": { - "x": -1.7777777910232544, - "y": -1.0 - }, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_rel": { - "x": 1.0, - "y": 1.0 - }, - "bounds": { - "x": 0.0, - "y": 0.0 - }, - "bounds_rel": { - "x": 0.0, - "y": 0.0 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, - { - "name": "EK_Cover-Sequence.mp4", - "source_uuid": "c18afc0c-5e96-406e-a6ec-f2716d9ea213", - "visible": true, - "locked": true, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 1, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 2, - "group_item_backup": false, - "pos": { - "x": 0.0, - "y": 0.0 - }, - "pos_rel": { - "x": -1.7777777910232544, - "y": -1.0 - }, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_rel": { - "x": 1.0, - "y": 1.0 - }, - "bounds": { - "x": 1920.0, - "y": 1080.0 - }, - "bounds_rel": { - "x": 3.555555582046509, - "y": 2.0 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, - { - "name": "Starting_Soon-overlay.png", - "source_uuid": "be349117-620b-4595-afcc-36ffd4771077", - "visible": false, - "locked": true, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 1, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 3, - "group_item_backup": false, - "pos": { - "x": 0.0, - "y": 0.0 - }, - "pos_rel": { - "x": -1.7777777910232544, - "y": -1.0 - }, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_rel": { - "x": 1.0, - "y": 1.0 - }, - "bounds": { - "x": 1920.0, - "y": 1080.0 - }, - "bounds_rel": { - "x": 3.555555582046509, - "y": 2.0 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, - { - "name": "MAW_International_REV.png", - "source_uuid": "9d0f8fd0-edfe-4fee-b011-a97ad7a8aa4c", - "visible": true, - "locked": false, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 2, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 4, - "group_item_backup": false, - "pos": { - "x": 263.5, - "y": 179.0 - }, - "pos_rel": { - "x": -1.289814829826355, - "y": -0.6685185432434082 - }, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_rel": { - "x": 1.0, - "y": 1.0 - }, - "bounds": { - "x": 1393.0, - "y": 389.0 - }, - "bounds_rel": { - "x": 2.57962965965271, - "y": 0.720370352268219 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, - { - "name": "MAW_International_RGB.png", - "source_uuid": "83aea6c1-44be-409a-afa7-755eac726808", - "visible": false, - "locked": false, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 1, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 5, - "group_item_backup": false, - "pos": { - "x": 0.0, - "y": 0.0 - }, - "pos_rel": { - "x": -1.7777777910232544, - "y": -1.0 - }, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_rel": { - "x": 1.0, - "y": 1.0 - }, - "bounds": { - "x": 1920.0, - "y": 1080.0 - }, - "bounds_rel": { - "x": 3.555555582046509, - "y": 2.0 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, - { - "name": "Ending-overlay.png", - "source_uuid": "7322ab7b-c19d-420c-9533-d6eea6ffe1af", - "visible": true, - "locked": false, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 1, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 6, - "group_item_backup": false, - "pos": { - "x": 0.0, - "y": 0.0 - }, - "pos_rel": { - "x": -1.7777777910232544, - "y": -1.0 - }, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_rel": { - "x": 1.0, - "y": 1.0 - }, - "bounds": { - "x": 1920.0, - "y": 1080.0 - }, - "bounds_rel": { - "x": 3.555555582046509, - "y": 2.0 - }, - "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.2": [], - "libobs.hide_scene_item.2": [], - "libobs.show_scene_item.3": [], - "libobs.hide_scene_item.3": [], - "libobs.show_scene_item.4": [], - "libobs.hide_scene_item.4": [], - "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, - "canvas_uuid": "6c69626f-6273-4c00-9d88-c5136d61696e", - "private_settings": {} - }, - { - "prev_ver": 520159233, - "name": "Ending-overlay.png", - "uuid": "7322ab7b-c19d-420c-9533-d6eea6ffe1af", - "id": "image_source", - "versioned_id": "image_source", - "settings": { - "file": "C:/Users/derek/OBS/SaT Summer 2025/Ending-overlay.png" - }, - "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": 520159233, - "name": "MAW_International_REV.png", - "uuid": "9d0f8fd0-edfe-4fee-b011-a97ad7a8aa4c", - "id": "image_source", - "versioned_id": "image_source", - "settings": { - "file": "C:/Users/derek/OBS/SaT Summer 2025/MAW_International_REV.png" - }, - "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": 520159233, - "name": "MAW_International_RGB.png", - "uuid": "83aea6c1-44be-409a-afa7-755eac726808", - "id": "image_source", - "versioned_id": "image_source", - "settings": { - "file": "C:/Users/derek/OBS/SaT Summer 2025/MAW_International_RGB.png" - }, - "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": 520159233, - "name": "Movies", - "uuid": "febea7b7-8d2a-447a-939a-10a657d02ec2", - "id": "scene", - "versioned_id": "scene", "settings": { "id_counter": 0, "custom_size": false, @@ -2020,72 +204,91 @@ }, { "prev_ver": 520159233, - "name": "Olympus - Fallen.m4a", - "uuid": "abbfbb57-10ed-4132-b2a1-2482469c109a", - "id": "ffmpeg_source", - "versioned_id": "ffmpeg_source", + "name": "4-Screen", + "uuid": "ec2099f7-a728-49fc-95ee-c19ca5987bda", + "id": "scene", + "versioned_id": "scene", "settings": { - "local_file": "C:/Users/derek/OBS/SaT Summer 2025/Audio/Olympus - Fallen.m4a" + "id_counter": 1, + "custom_size": false, + "items": [ + { + "name": "ss_bottom_left", + "source_uuid": "e3c901fa-60da-4e62-9104-f6e5c8c2dabd", + "visible": true, + "locked": false, + "rot": 0.0, + "scale_ref": { + "x": 1920.0, + "y": 1080.0 + }, + "align": 5, + "bounds_type": 0, + "bounds_align": 0, + "bounds_crop": false, + "crop_left": 0, + "crop_top": 0, + "crop_right": 0, + "crop_bottom": 0, + "id": 1, + "group_item_backup": false, + "pos": { + "x": 0.0, + "y": 0.0 + }, + "pos_rel": { + "x": -1.7777777910232544, + "y": -1.0 + }, + "scale": { + "x": 1.0, + "y": 1.0 + }, + "scale_rel": { + "x": 1.0, + "y": 1.0 + }, + "bounds": { + "x": 0.0, + "y": 0.0 + }, + "bounds_rel": { + "x": 0.0, + "y": 0.0 + }, + "scale_filter": "disable", + "blend_method": "default", + "blend_type": "normal", + "show_transition": { + "duration": 0 + }, + "hide_transition": { + "duration": 0 + }, + "private_settings": {} + } + ] }, - "mixers": 255, + "mixers": 0, "sync": 0, "flags": 0, "volume": 1.0, "balance": 0.5, "enabled": true, - "muted": 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": 520159233, - "name": "Paradigm - Aithee.m4a", - "uuid": "fc88454b-db74-456d-9c41-a62fef5d8cf2", - "id": "ffmpeg_source", - "versioned_id": "ffmpeg_source", - "settings": { - "local_file": "C:/Users/derek/OBS/SaT Summer 2025/Audio/Paradigm - Aithee.m4a" - }, - "mixers": 255, - "sync": 0, - "flags": 0, - "volume": 1.0, - "balance": 0.5, - "enabled": true, - "muted": true, - "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": [] + "OBSBasic.SelectScene": [], + "libobs.show_scene_item.1": [], + "libobs.hide_scene_item.1": [] }, "deinterlace_mode": 0, "deinterlace_field_order": 0, "monitoring_type": 0, + "canvas_uuid": "6c69626f-6273-4c00-9d88-c5136d61696e", "private_settings": {} }, { @@ -2095,14 +298,14 @@ "id": "scene", "versioned_id": "scene", "settings": { - "id_counter": 8, + "id_counter": 7, "custom_size": false, "items": [ { "name": "ss_top_left", "source_uuid": "cd24ff7b-7e4b-4aef-a224-6af032de6247", "visible": true, - "locked": true, + "locked": false, "rot": 0.0, "scale_ref": { "x": 1920.0, @@ -2157,7 +360,7 @@ "name": "ss_top_right", "source_uuid": "b38b1134-7040-44b4-a397-1a1385911403", "visible": true, - "locked": true, + "locked": false, "rot": 0.0, "scale_ref": { "x": 1920.0, @@ -2212,7 +415,7 @@ "name": "ss_bottom_left", "source_uuid": "e3c901fa-60da-4e62-9104-f6e5c8c2dabd", "visible": true, - "locked": true, + "locked": false, "rot": 0.0, "scale_ref": { "x": 1920.0, @@ -2267,7 +470,7 @@ "name": "ss_bottom_right", "source_uuid": "c2164d12-5a03-4372-acdd-f93a7db2a166", "visible": true, - "locked": true, + "locked": false, "rot": 0.0, "scale_ref": { "x": 1920.0, @@ -2322,7 +525,7 @@ "name": "ss_large", "source_uuid": "e5727f76-0f05-4747-93fe-190d0e27fad8", "visible": true, - "locked": true, + "locked": false, "rot": 0.0, "scale_ref": { "x": 1920.0, @@ -2377,7 +580,7 @@ "name": "ss_left", "source_uuid": "0f02c57d-41fd-40c3-8e05-de44edc52361", "visible": true, - "locked": true, + "locked": false, "rot": 0.0, "scale_ref": { "x": 1920.0, @@ -2432,7 +635,7 @@ "name": "ss_right", "source_uuid": "a90a0e5b-4443-4ac1-981c-6598b92c47fe", "visible": true, - "locked": true, + "locked": false, "rot": 0.0, "scale_ref": { "x": 1920.0, @@ -2519,32 +722,6 @@ "canvas_uuid": "6c69626f-6273-4c00-9d88-c5136d61696e", "private_settings": {} }, - { - "prev_ver": 520159233, - "name": "Shield.png", - "uuid": "cc86a455-807e-4be8-bcc0-2e775fdd416f", - "id": "image_source", - "versioned_id": "image_source", - "settings": { - "file": "C:/Users/derek/OBS/SaT Summer 2025/Shield.png" - }, - "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": 520159233, "name": "ss_bottom_left", @@ -2552,8 +729,7 @@ "id": "source_switcher", "versioned_id": "source_switcher", "settings": { - "current_index": -1, - "sources": [] + "current_index": -1 }, "mixers": 0, "sync": 0, @@ -2587,8 +763,7 @@ "id": "source_switcher", "versioned_id": "source_switcher", "settings": { - "current_index": -1, - "sources": [] + "current_index": -1 }, "mixers": 0, "sync": 0, @@ -2624,12 +799,8 @@ "settings": { "current_index": -1, "current_source_file": true, - "current_source_file_interval": 1000, - "current_source_file_path": "C:/OBS/source-switching/large.txt", - "sources": [], - "canvas_height": 900, - "canvas_width": 1600, - "scale_to_inner_bounds": true + "current_source_file_path": "C:/Users/derek/OBS/SaT Summer 2025/ss/ss-large.txt", + "current_source_file_interval": 1000 }, "mixers": 0, "sync": 0, @@ -2663,8 +834,7 @@ "id": "source_switcher", "versioned_id": "source_switcher", "settings": { - "current_index": -1, - "sources": [] + "current_index": -1 }, "mixers": 0, "sync": 0, @@ -2698,8 +868,7 @@ "id": "source_switcher", "versioned_id": "source_switcher", "settings": { - "current_index": -1, - "sources": [] + "current_index": -1 }, "mixers": 0, "sync": 0, @@ -2733,10 +902,7 @@ "id": "source_switcher", "versioned_id": "source_switcher", "settings": { - "current_index": -1, - "sources": [], - "current_source_file": true, - "current_source_file_path": "C:/OBS/source-switching/top_left.txt" + "current_index": -1 }, "mixers": 0, "sync": 0, @@ -2770,8 +936,7 @@ "id": "source_switcher", "versioned_id": "source_switcher", "settings": { - "current_index": -1, - "sources": [] + "current_index": -1 }, "mixers": 0, "sync": 0, @@ -2800,290 +965,14 @@ }, { "prev_ver": 520159233, - "name": "Starting", - "uuid": "08c33b2a-500c-4216-85d6-4ef43d0b1658", + "name": "Testers", + "uuid": "10ab7435-3634-4d18-ab64-18385c68a106", "id": "scene", "versioned_id": "scene", "settings": { - "id_counter": 5, + "id_counter": 0, "custom_size": false, - "items": [ - { - "name": "Shield.png", - "source_uuid": "cc86a455-807e-4be8-bcc0-2e775fdd416f", - "visible": true, - "locked": true, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 0, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 1, - "group_item_backup": false, - "pos": { - "x": 0.0, - "y": 0.0 - }, - "pos_rel": { - "x": -1.7777777910232544, - "y": -1.0 - }, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_rel": { - "x": 1.0, - "y": 1.0 - }, - "bounds": { - "x": 0.0, - "y": 0.0 - }, - "bounds_rel": { - "x": 0.0, - "y": 0.0 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, - { - "name": "EK_Cover-Sequence.mp4", - "source_uuid": "c18afc0c-5e96-406e-a6ec-f2716d9ea213", - "visible": true, - "locked": true, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 1, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 2, - "group_item_backup": false, - "pos": { - "x": 0.0, - "y": 0.0 - }, - "pos_rel": { - "x": -1.7777777910232544, - "y": -1.0 - }, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_rel": { - "x": 1.0, - "y": 1.0 - }, - "bounds": { - "x": 1920.0, - "y": 1080.0 - }, - "bounds_rel": { - "x": 3.555555582046509, - "y": 2.0 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, - { - "name": "Starting_Soon-overlay.png", - "source_uuid": "be349117-620b-4595-afcc-36ffd4771077", - "visible": true, - "locked": true, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 1, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 3, - "group_item_backup": false, - "pos": { - "x": 0.0, - "y": 0.0 - }, - "pos_rel": { - "x": -1.7777777910232544, - "y": -1.0 - }, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_rel": { - "x": 1.0, - "y": 1.0 - }, - "bounds": { - "x": 1920.0, - "y": 1080.0 - }, - "bounds_rel": { - "x": 3.555555582046509, - "y": 2.0 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, - { - "name": "MAW_International_REV.png", - "source_uuid": "9d0f8fd0-edfe-4fee-b011-a97ad7a8aa4c", - "visible": true, - "locked": false, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 2, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 4, - "group_item_backup": false, - "pos": { - "x": 263.5, - "y": 179.0 - }, - "pos_rel": { - "x": -1.289814829826355, - "y": -0.6685185432434082 - }, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_rel": { - "x": 1.0, - "y": 1.0 - }, - "bounds": { - "x": 1393.0, - "y": 389.0 - }, - "bounds_rel": { - "x": 2.57962965965271, - "y": 0.720370352268219 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, - { - "name": "MAW_International_RGB.png", - "source_uuid": "83aea6c1-44be-409a-afa7-755eac726808", - "visible": false, - "locked": false, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 1, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 5, - "group_item_backup": false, - "pos": { - "x": 0.0, - "y": 0.0 - }, - "pos_rel": { - "x": -1.7777777910232544, - "y": -1.0 - }, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_rel": { - "x": 1.0, - "y": 1.0 - }, - "bounds": { - "x": 1920.0, - "y": 1080.0 - }, - "bounds_rel": { - "x": 3.555555582046509, - "y": 2.0 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - } - ] + "items": [] }, "mixers": 0, "sync": 0, @@ -3097,153 +986,13 @@ "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.2": [], - "libobs.hide_scene_item.2": [], - "libobs.show_scene_item.3": [], - "libobs.hide_scene_item.3": [], - "libobs.show_scene_item.4": [], - "libobs.hide_scene_item.4": [], - "libobs.show_scene_item.5": [], - "libobs.hide_scene_item.5": [] + "OBSBasic.SelectScene": [] }, "deinterlace_mode": 0, "deinterlace_field_order": 0, "monitoring_type": 0, "canvas_uuid": "6c69626f-6273-4c00-9d88-c5136d61696e", "private_settings": {} - }, - { - "prev_ver": 520159233, - "name": "Starting_Soon-overlay.png", - "uuid": "be349117-620b-4595-afcc-36ffd4771077", - "id": "image_source", - "versioned_id": "image_source", - "settings": { - "file": "C:/Users/derek/OBS/SaT Summer 2025/Starting_Soon-overlay.png" - }, - "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": 520159233, - "name": "tiltify-compact", - "uuid": "7bca2003-cac0-4356-acd0-26c661a4a1d7", - "id": "browser_source", - "versioned_id": "browser_source", - "settings": { - "url": "https://overlays.tiltify.com/ONwlqFDf_20k8Ejh-uNZldWfKh0cD-61", - "width": 1250, - "height": 160 - }, - "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": 520159233, - "name": "tiltify_2", - "uuid": "d518742b-bb00-403f-ab9e-060ff9c78733", - "id": "browser_source", - "versioned_id": "browser_source", - "settings": { - "undo_uuid": "d518742b-bb00-403f-ab9e-060ff9c78733", - "url": "https://overlays.tiltify.com/lg_Tg8HhuHb__5GM2CZ1u-9Lo49iWN8h", - "width": 1920, - "height": 64 - }, - "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": 520159233, - "name": "Vanir - Hyde.m4a", - "uuid": "3e95bbed-76b4-4f46-b20d-26461854ea4b", - "id": "ffmpeg_source", - "versioned_id": "ffmpeg_source", - "settings": { - "local_file": "C:/Users/derek/OBS/SaT Summer 2025/Audio/Vanir - Hyde.m4a" - }, - "mixers": 255, - "sync": 0, - "flags": 0, - "volume": 1.0, - "balance": 0.5, - "enabled": true, - "muted": true, - "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": {} } ] } \ No newline at end of file diff --git a/files/SaT.json.bak b/files/SaT.json.bak deleted file mode 100644 index b1a1956..0000000 --- a/files/SaT.json.bak +++ /dev/null @@ -1,1258 +0,0 @@ -{ - "current_scene": "1-Screen", - "current_program_scene": "1-Screen", - "scene_order": [ - { - "name": "Scene" - }, - { - "name": "1-Screen" - }, - { - "name": "2-Screen" - }, - { - "name": "4-Screen" - } - ], - "name": "SaT", - "groups": [], - "quick_transitions": [ - { - "name": "Cut", - "duration": 300, - "hotkeys": [], - "id": 4, - "fade_to_black": false - }, - { - "name": "Fade", - "duration": 300, - "hotkeys": [], - "id": 5, - "fade_to_black": false - }, - { - "name": "Fade", - "duration": 300, - "hotkeys": [], - "id": 6, - "fade_to_black": true - } - ], - "transitions": [], - "saved_projectors": [], - "canvases": [], - "current_transition": "Fade", - "transition_duration": 300, - "preview_locked": false, - "scaling_enabled": false, - "scaling_level": -8, - "scaling_off_x": 0.0, - "scaling_off_y": 0.0, - "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": [] - }, - "captions": { - "source": "", - "enabled": false, - "lang_id": 1033, - "provider": "mssapi" - } - }, - "version": 2, - "sources": [ - { - "prev_ver": 520159233, - "name": "1-Screen", - "uuid": "a147f8e6-092d-4271-b1f6-8677b0644699", - "id": "scene", - "versioned_id": "scene", - "settings": { - "id_counter": 1, - "custom_size": false, - "items": [ - { - "name": "ss_large", - "source_uuid": "e5727f76-0f05-4747-93fe-190d0e27fad8", - "visible": true, - "locked": true, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 2, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 1, - "group_item_backup": false, - "pos": { - "x": 160.0, - "y": 90.0 - }, - "pos_rel": { - "x": -1.4814814329147339, - "y": -0.8333333134651184 - }, - "scale": { - "x": 0.8333333134651184, - "y": 0.8333333134651184 - }, - "scale_rel": { - "x": 0.8333333134651184, - "y": 0.8333333134651184 - }, - "bounds": { - "x": 1600.0, - "y": 900.0 - }, - "bounds_rel": { - "x": 2.9629628658294678, - "y": 1.6666666269302368 - }, - "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": [] - }, - "deinterlace_mode": 0, - "deinterlace_field_order": 0, - "monitoring_type": 0, - "canvas_uuid": "6c69626f-6273-4c00-9d88-c5136d61696e", - "private_settings": {} - }, - { - "prev_ver": 520159233, - "name": "2-Screen", - "uuid": "e3fa43b2-84ff-46cf-b56c-6110a31df1ad", - "id": "scene", - "versioned_id": "scene", - "settings": { - "id_counter": 0, - "custom_size": false, - "items": [] - }, - "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": [] - }, - "deinterlace_mode": 0, - "deinterlace_field_order": 0, - "monitoring_type": 0, - "canvas_uuid": "6c69626f-6273-4c00-9d88-c5136d61696e", - "private_settings": {} - }, - { - "prev_ver": 520159233, - "name": "4-Screen", - "uuid": "ec2099f7-a728-49fc-95ee-c19ca5987bda", - "id": "scene", - "versioned_id": "scene", - "settings": { - "id_counter": 2, - "custom_size": false, - "items": [ - { - "name": "ss_bottom_left", - "source_uuid": "e3c901fa-60da-4e62-9104-f6e5c8c2dabd", - "visible": true, - "locked": true, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 0, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 1, - "group_item_backup": false, - "pos": { - "x": 0.0, - "y": 540.0 - }, - "pos_rel": { - "x": -1.7777777910232544, - "y": 0.0 - }, - "scale": { - "x": 0.5, - "y": 0.5 - }, - "scale_rel": { - "x": 0.5, - "y": 0.5 - }, - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_rel": { - "x": 0.0018518518190830946, - "y": 0.0018518518190830946 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, - { - "name": "ss_bottom_right", - "source_uuid": "c2164d12-5a03-4372-acdd-f93a7db2a166", - "visible": true, - "locked": true, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 0, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 2, - "group_item_backup": false, - "pos": { - "x": 960.0, - "y": 540.0 - }, - "pos_rel": { - "x": 0.0, - "y": 0.0 - }, - "scale": { - "x": 0.5, - "y": 0.5 - }, - "scale_rel": { - "x": 0.5, - "y": 0.5 - }, - "bounds": { - "x": 1.0, - "y": 1.0 - }, - "bounds_rel": { - "x": 0.0018518518190830946, - "y": 0.0018518518190830946 - }, - "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.2": [], - "libobs.hide_scene_item.2": [] - }, - "deinterlace_mode": 0, - "deinterlace_field_order": 0, - "monitoring_type": 0, - "canvas_uuid": "6c69626f-6273-4c00-9d88-c5136d61696e", - "private_settings": {} - }, - { - "prev_ver": 520159233, - "name": "Scene", - "uuid": "9a7e85d1-30bd-4e1a-8836-2d20b385820c", - "id": "scene", - "versioned_id": "scene", - "settings": { - "id_counter": 7, - "custom_size": false, - "items": [ - { - "name": "ss_top_left", - "source_uuid": "cd24ff7b-7e4b-4aef-a224-6af032de6247", - "visible": true, - "locked": false, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 0, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 1, - "group_item_backup": false, - "pos": { - "x": 0.0, - "y": 0.0 - }, - "pos_rel": { - "x": -1.7777777910232544, - "y": -1.0 - }, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_rel": { - "x": 1.0, - "y": 1.0 - }, - "bounds": { - "x": 0.0, - "y": 0.0 - }, - "bounds_rel": { - "x": 0.0, - "y": 0.0 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, - { - "name": "ss_top_right", - "source_uuid": "b38b1134-7040-44b4-a397-1a1385911403", - "visible": true, - "locked": false, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 0, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 2, - "group_item_backup": false, - "pos": { - "x": 0.0, - "y": 0.0 - }, - "pos_rel": { - "x": -1.7777777910232544, - "y": -1.0 - }, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_rel": { - "x": 1.0, - "y": 1.0 - }, - "bounds": { - "x": 0.0, - "y": 0.0 - }, - "bounds_rel": { - "x": 0.0, - "y": 0.0 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, - { - "name": "ss_bottom_left", - "source_uuid": "e3c901fa-60da-4e62-9104-f6e5c8c2dabd", - "visible": true, - "locked": false, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 0, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 3, - "group_item_backup": false, - "pos": { - "x": 0.0, - "y": 0.0 - }, - "pos_rel": { - "x": -1.7777777910232544, - "y": -1.0 - }, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_rel": { - "x": 1.0, - "y": 1.0 - }, - "bounds": { - "x": 0.0, - "y": 0.0 - }, - "bounds_rel": { - "x": 0.0, - "y": 0.0 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, - { - "name": "ss_bottom_right", - "source_uuid": "c2164d12-5a03-4372-acdd-f93a7db2a166", - "visible": true, - "locked": false, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 0, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 4, - "group_item_backup": false, - "pos": { - "x": 0.0, - "y": 0.0 - }, - "pos_rel": { - "x": -1.7777777910232544, - "y": -1.0 - }, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_rel": { - "x": 1.0, - "y": 1.0 - }, - "bounds": { - "x": 0.0, - "y": 0.0 - }, - "bounds_rel": { - "x": 0.0, - "y": 0.0 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, - { - "name": "ss_large", - "source_uuid": "e5727f76-0f05-4747-93fe-190d0e27fad8", - "visible": true, - "locked": false, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 0, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 5, - "group_item_backup": false, - "pos": { - "x": 0.0, - "y": 0.0 - }, - "pos_rel": { - "x": -1.7777777910232544, - "y": -1.0 - }, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_rel": { - "x": 1.0, - "y": 1.0 - }, - "bounds": { - "x": 0.0, - "y": 0.0 - }, - "bounds_rel": { - "x": 0.0, - "y": 0.0 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, - { - "name": "ss_left", - "source_uuid": "0f02c57d-41fd-40c3-8e05-de44edc52361", - "visible": true, - "locked": false, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 0, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 6, - "group_item_backup": false, - "pos": { - "x": 0.0, - "y": 0.0 - }, - "pos_rel": { - "x": -1.7777777910232544, - "y": -1.0 - }, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_rel": { - "x": 1.0, - "y": 1.0 - }, - "bounds": { - "x": 0.0, - "y": 0.0 - }, - "bounds_rel": { - "x": 0.0, - "y": 0.0 - }, - "scale_filter": "disable", - "blend_method": "default", - "blend_type": "normal", - "show_transition": { - "duration": 0 - }, - "hide_transition": { - "duration": 0 - }, - "private_settings": {} - }, - { - "name": "ss_right", - "source_uuid": "a90a0e5b-4443-4ac1-981c-6598b92c47fe", - "visible": true, - "locked": false, - "rot": 0.0, - "scale_ref": { - "x": 1920.0, - "y": 1080.0 - }, - "align": 5, - "bounds_type": 0, - "bounds_align": 0, - "bounds_crop": false, - "crop_left": 0, - "crop_top": 0, - "crop_right": 0, - "crop_bottom": 0, - "id": 7, - "group_item_backup": false, - "pos": { - "x": 0.0, - "y": 0.0 - }, - "pos_rel": { - "x": -1.7777777910232544, - "y": -1.0 - }, - "scale": { - "x": 1.0, - "y": 1.0 - }, - "scale_rel": { - "x": 1.0, - "y": 1.0 - }, - "bounds": { - "x": 0.0, - "y": 0.0 - }, - "bounds_rel": { - "x": 0.0, - "y": 0.0 - }, - "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.2": [], - "libobs.hide_scene_item.2": [], - "libobs.show_scene_item.3": [], - "libobs.hide_scene_item.3": [], - "libobs.show_scene_item.4": [], - "libobs.hide_scene_item.4": [], - "libobs.show_scene_item.5": [], - "libobs.hide_scene_item.5": [], - "libobs.show_scene_item.6": [], - "libobs.hide_scene_item.6": [], - "libobs.show_scene_item.7": [], - "libobs.hide_scene_item.7": [] - }, - "deinterlace_mode": 0, - "deinterlace_field_order": 0, - "monitoring_type": 0, - "canvas_uuid": "6c69626f-6273-4c00-9d88-c5136d61696e", - "private_settings": {} - }, - { - "prev_ver": 520159233, - "name": "ss_bottom_left", - "uuid": "e3c901fa-60da-4e62-9104-f6e5c8c2dabd", - "id": "source_switcher", - "versioned_id": "source_switcher", - "settings": { - "current_index": 0, - "sources": [ - { - "hidden": false, - "selected": false, - "value": "ali_stream" - }, - { - "hidden": false, - "selected": false, - "value": "wa_stream" - }, - { - "hidden": false, - "selected": false, - "value": "deco_stream" - }, - { - "hidden": false, - "selected": false, - "value": "ali_stream" - }, - { - "hidden": false, - "selected": false, - "value": "deco_stream" - }, - { - "hidden": false, - "selected": false, - "value": "deco_stream" - } - ] - }, - "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": { - "none": [], - "next": [], - "previous": [], - "random": [], - "shuffle": [], - "first": [], - "last": [], - "deco_stream": [] - }, - "deinterlace_mode": 0, - "deinterlace_field_order": 0, - "monitoring_type": 0, - "private_settings": {} - }, - { - "prev_ver": 520159233, - "name": "ss_bottom_right", - "uuid": "c2164d12-5a03-4372-acdd-f93a7db2a166", - "id": "source_switcher", - "versioned_id": "source_switcher", - "settings": { - "current_index": 0, - "sources": [ - { - "hidden": false, - "selected": false, - "value": "ali_stream" - }, - { - "hidden": false, - "selected": false, - "value": "wa_stream" - }, - { - "hidden": false, - "selected": false, - "value": "deco_stream" - }, - { - "hidden": false, - "selected": false, - "value": "ali_stream" - }, - { - "hidden": false, - "selected": false, - "value": "deco_stream" - }, - { - "hidden": false, - "selected": false, - "value": "deco_stream" - } - ] - }, - "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": { - "none": [], - "next": [], - "previous": [], - "random": [], - "shuffle": [], - "first": [], - "last": [], - "deco_stream": [] - }, - "deinterlace_mode": 0, - "deinterlace_field_order": 0, - "monitoring_type": 0, - "private_settings": {} - }, - { - "prev_ver": 520159233, - "name": "ss_large", - "uuid": "e5727f76-0f05-4747-93fe-190d0e27fad8", - "id": "source_switcher", - "versioned_id": "source_switcher", - "settings": { - "current_index": -1, - "current_source_file": true, - "current_source_file_interval": 1000, - "current_source_file_path": "C:/OBS/source-switching/large.txt", - "sources": [], - "canvas_height": 900, - "canvas_width": 1600, - "scale_to_inner_bounds": true - }, - "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": { - "none": [], - "next": [], - "previous": [], - "random": [], - "shuffle": [], - "first": [], - "last": [] - }, - "deinterlace_mode": 0, - "deinterlace_field_order": 0, - "monitoring_type": 0, - "private_settings": {} - }, - { - "prev_ver": 520159233, - "name": "ss_left", - "uuid": "0f02c57d-41fd-40c3-8e05-de44edc52361", - "id": "source_switcher", - "versioned_id": "source_switcher", - "settings": { - "current_index": 0, - "sources": [ - { - "hidden": false, - "selected": false, - "value": "ali_stream" - }, - { - "hidden": false, - "selected": false, - "value": "wa_stream" - }, - { - "hidden": false, - "selected": false, - "value": "deco_stream" - }, - { - "hidden": false, - "selected": false, - "value": "ali_stream" - }, - { - "hidden": false, - "selected": false, - "value": "deco_stream" - }, - { - "hidden": false, - "selected": false, - "value": "deco_stream" - } - ] - }, - "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": { - "none": [], - "next": [], - "previous": [], - "random": [], - "shuffle": [], - "first": [], - "last": [], - "deco_stream": [] - }, - "deinterlace_mode": 0, - "deinterlace_field_order": 0, - "monitoring_type": 0, - "private_settings": {} - }, - { - "prev_ver": 520159233, - "name": "ss_right", - "uuid": "a90a0e5b-4443-4ac1-981c-6598b92c47fe", - "id": "source_switcher", - "versioned_id": "source_switcher", - "settings": { - "current_index": 0, - "sources": [ - { - "hidden": false, - "selected": false, - "value": "ali_stream" - }, - { - "hidden": false, - "selected": false, - "value": "wa_stream" - }, - { - "hidden": false, - "selected": false, - "value": "deco_stream" - }, - { - "hidden": false, - "selected": false, - "value": "ali_stream" - }, - { - "hidden": false, - "selected": false, - "value": "deco_stream" - }, - { - "hidden": false, - "selected": false, - "value": "deco_stream" - } - ] - }, - "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": { - "none": [], - "next": [], - "previous": [], - "random": [], - "shuffle": [], - "first": [], - "last": [], - "deco_stream": [] - }, - "deinterlace_mode": 0, - "deinterlace_field_order": 0, - "monitoring_type": 0, - "private_settings": {} - }, - { - "prev_ver": 520159233, - "name": "ss_top_left", - "uuid": "cd24ff7b-7e4b-4aef-a224-6af032de6247", - "id": "source_switcher", - "versioned_id": "source_switcher", - "settings": { - "current_index": 0, - "sources": [ - { - "hidden": false, - "selected": false, - "value": "ali_stream" - }, - { - "hidden": false, - "selected": false, - "value": "wa_stream" - }, - { - "hidden": false, - "selected": false, - "value": "deco_stream" - }, - { - "hidden": false, - "selected": false, - "value": "ali_stream" - }, - { - "hidden": false, - "selected": false, - "value": "deco_stream" - }, - { - "hidden": false, - "selected": false, - "value": "deco_stream" - } - ] - }, - "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": { - "none": [], - "next": [], - "previous": [], - "random": [], - "shuffle": [], - "first": [], - "last": [], - "deco_stream": [] - }, - "deinterlace_mode": 0, - "deinterlace_field_order": 0, - "monitoring_type": 0, - "private_settings": {} - }, - { - "prev_ver": 520159233, - "name": "ss_top_right", - "uuid": "b38b1134-7040-44b4-a397-1a1385911403", - "id": "source_switcher", - "versioned_id": "source_switcher", - "settings": { - "current_index": 0, - "sources": [ - { - "hidden": false, - "selected": false, - "value": "ali_stream" - }, - { - "hidden": false, - "selected": false, - "value": "wa_stream" - }, - { - "hidden": false, - "selected": false, - "value": "deco_stream" - }, - { - "hidden": false, - "selected": false, - "value": "ali_stream" - }, - { - "hidden": false, - "selected": false, - "value": "deco_stream" - }, - { - "hidden": false, - "selected": false, - "value": "deco_stream" - } - ] - }, - "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": { - "none": [], - "next": [], - "previous": [], - "random": [], - "shuffle": [], - "first": [], - "last": [], - "deco_stream": [] - }, - "deinterlace_mode": 0, - "deinterlace_field_order": 0, - "monitoring_type": 0, - "private_settings": {} - }, - { - "prev_ver": 520159233, - "name": "the_pros_text", - "uuid": "94e6bf77-e593-4e5d-bc62-10158adf7826", - "id": "text_ft2_source", - "versioned_id": "text_ft2_source_v2", - "settings": { - "color": 4294967295, - "outline_color": 4278190080, - "outline_size": 4, - "text": "The Pros", - "font": { - "face": "Arial", - "size": 72, - "style": "Bold" - }, - "outline": true - }, - "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": {} - } - ] -} \ No newline at end of file diff --git a/lib/constants.ts b/lib/constants.ts index e756185..c67808e 100644 --- a/lib/constants.ts +++ b/lib/constants.ts @@ -40,29 +40,3 @@ export const TABLE_NAMES = { TEAMS: getTableName(BASE_TABLE_NAMES.TEAMS), } as const; -// Screen position constants -export const SCREEN_POSITIONS = [ - 'large', - 'left', - 'right', - 'topLeft', - 'topRight', - 'bottomLeft', - 'bottomRight' -] as const; - -export const SOURCE_SWITCHER_NAMES = [ - 'ss_large', - 'ss_left', - 'ss_right', - 'ss_top_left', - 'ss_top_right', - 'ss_bottom_left', - 'ss_bottom_right' -] as const; - -// OBS utility functions -export function cleanObsName(name: string): string { - return name.toLowerCase().replace(/\s+/g, '_'); -} - diff --git a/lib/obsClient.js b/lib/obsClient.js index 9adfe80..9193964 100644 --- a/lib/obsClient.js +++ b/lib/obsClient.js @@ -1,5 +1,4 @@ const { OBSWebSocket } = require('obs-websocket-js'); -const { cleanObsName, SOURCE_SWITCHER_NAMES, SCREEN_POSITIONS } = require('./constants'); let obs = null; let isConnecting = false; @@ -244,21 +243,6 @@ async function getAvailableTextInputKind() { } } -async function inspectTextSourceProperties(inputKind) { - try { - const obsClient = await getOBSClient(); - - // Get the default properties for this input kind - const { inputProperties } = await obsClient.call('GetInputDefaultSettings', { inputKind }); - console.log(`Default properties for ${inputKind}:`, JSON.stringify(inputProperties, null, 2)); - - return inputProperties; - } catch (error) { - console.error('Error inspecting text source properties:', error.message); - return null; - } -} - async function createTextSource(sceneName, textSourceName, text) { try { const obsClient = await getOBSClient(); @@ -266,59 +250,13 @@ async function createTextSource(sceneName, textSourceName, text) { // Check if text source already exists globally in OBS const { inputs } = await obsClient.call('GetInputList'); const existingInput = inputs.find(input => input.inputName === textSourceName); - const colorSourceName = `${textSourceName}_bg`; if (!existingInput) { - console.log(`Creating text source "${textSourceName}" with color background in scene "${sceneName}"`); - - // First, create a color source for the background - const colorSourceExists = inputs.some(input => input.inputName === colorSourceName); - - if (!colorSourceExists) { - console.log(`Creating color source background "${colorSourceName}"`); - await obsClient.call('CreateInput', { - sceneName, - inputName: colorSourceName, - inputKind: 'color_source_v3', // Use v3 if available, fallback handled below - inputSettings: { - color: 0xFF4B2B00, // Background color #002b4b in ABGR format - width: 800, // Width to accommodate text - height: 100 // Height for text background - } - }).catch(async (error) => { - // If v3 doesn't exist, try v2 - console.log('color_source_v3 failed, trying color_source_v2:', error.message); - await obsClient.call('CreateInput', { - sceneName, - inputName: colorSourceName, - inputKind: 'color_source_v2', - inputSettings: { - color: 0xFF4B2B00, - width: 800, - height: 100 - } - }).catch(async (fallbackError) => { - // Final fallback to basic color_source - console.log('color_source_v2 failed, trying color_source:', fallbackError.message); - await obsClient.call('CreateInput', { - sceneName, - inputName: colorSourceName, - inputKind: 'color_source', - inputSettings: { - color: 0xFF4B2B00, - width: 800, - height: 100 - } - }); - }); - }); - console.log(`Created color source background "${colorSourceName}"`); - } + console.log(`Creating text source "${textSourceName}" in scene "${sceneName}"`); // Get the correct text input kind for this OBS installation const inputKind = await getAvailableTextInputKind(); - // Create text source with simple settings (no background needed) const inputSettings = { text, font: { @@ -329,12 +267,9 @@ async function createTextSource(sceneName, textSourceName, text) { color: 0xFFFFFFFF, // White text outline: true, outline_color: 0xFF000000, // Black outline - outline_size: 2 + outline_size: 4 }; - console.log(`Creating text source with inputKind: ${inputKind}`); - console.log('Input settings:', JSON.stringify(inputSettings, null, 2)); - await obsClient.call('CreateInput', { sceneName, inputName: textSourceName, @@ -358,9 +293,7 @@ async function createTextSource(sceneName, textSourceName, text) { color: 0xFFFFFFFF, // White text outline: true, outline_color: 0xFF000000, // Black outline - outline_size: 4, - bk_color: 0xFF4B2B00, // Background color #002b4b in ABGR format - bk_opacity: 255 // Full opacity background + outline_size: 4 }; await obsClient.call('SetInputSettings', { @@ -384,11 +317,11 @@ async function createStreamGroup(groupName, streamName, teamName, url) { // Ensure team scene exists await createGroupIfNotExists(groupName); - const cleanGroupName = cleanObsName(groupName); - const cleanStreamName = cleanObsName(streamName); + const cleanGroupName = groupName.toLowerCase().replace(/\s+/g, '_'); + const cleanStreamName = streamName.toLowerCase().replace(/\s+/g, '_'); const streamGroupName = `${cleanGroupName}_${cleanStreamName}_stream`; const sourceName = `${cleanGroupName}_${cleanStreamName}`; - const textSourceName = cleanObsName(teamName) + '_text'; + const textSourceName = teamName.toLowerCase().replace(/\s+/g, '_') + '_text'; // Create a nested scene for this stream (acts as a group) try { @@ -448,25 +381,12 @@ async function createStreamGroup(groupName, streamName, teamName, url) { } } - // Add text source and its background to nested scene - const colorSourceName = `${textSourceName}_bg`; - - try { - await obsClient.call('CreateSceneItem', { - sceneName: streamGroupName, - sourceName: colorSourceName - }); - console.log(`Added color source background "${colorSourceName}" to nested scene`); - } catch (e) { - console.log('Color source background might already be in nested scene'); - } - + // Add text source to nested scene try { await obsClient.call('CreateSceneItem', { sceneName: streamGroupName, sourceName: textSourceName }); - console.log(`Added text source "${textSourceName}" to nested scene`); } catch (e) { console.log('Text source might already be in nested scene'); } @@ -474,59 +394,80 @@ async function createStreamGroup(groupName, streamName, teamName, url) { // Get the scene items in the nested scene const { sceneItems: nestedSceneItems } = await obsClient.call('GetSceneItemList', { sceneName: streamGroupName }); - // Find the browser source, text source, and color background items in nested scene + // Find the browser source and text source items in nested scene const browserSourceItem = nestedSceneItems.find(item => item.sourceName === sourceName); const textSourceItem = nestedSceneItems.find(item => item.sourceName === textSourceName); - const colorSourceItem = nestedSceneItems.find(item => item.sourceName === colorSourceName); // Position the sources properly in the nested scene - if (browserSourceItem && textSourceItem && colorSourceItem) { + if (browserSourceItem && textSourceItem) { try { - // Position text overlay centered horizontally using center alignment + // Position text overlay at top, then center horizontally await obsClient.call('SetSceneItemTransform', { - sceneName: streamGroupName, + sceneName: streamGroupName, // In the nested scene sceneItemId: textSourceItem.sceneItemId, sceneItemTransform: { - positionX: 960, // Center of 1920px canvas - positionY: 50, // Move down from top + positionX: 0, // Start at left + positionY: 10, // Keep at top scaleX: 1.0, scaleY: 1.0, - alignment: 0 // Center alignment (0 = center, 1 = left, 2 = right) + alignment: 5 // Center alignment } }); - // Get the actual text width after positioning - const { sceneItemTransform: textTransform } = await obsClient.call('GetSceneItemTransform', { + // Apply center horizontally transform (like clicking "Center Horizontally" in OBS UI) + const { sceneItemTransform: currentTransform } = await obsClient.call('GetSceneItemTransform', { sceneName: streamGroupName, sceneItemId: textSourceItem.sceneItemId }); - const actualTextWidth = textTransform.width || textTransform.sourceWidth || (teamName.length * 40); - console.log('Actual text width:', actualTextWidth); + console.log('Current text transform before centering:', JSON.stringify(currentTransform, null, 2)); - // Calculate color source width with padding - const colorSourceWidth = Math.max(actualTextWidth + 40, 200); // Add 40px padding, minimum 200px - console.log('Color source width:', colorSourceWidth); + // Get the actual scene dimensions + let sceneWidth = 1920; // Default assumption + let sceneHeight = 1080; - // Adjust the color source settings to match the text's actual width and height - await obsClient.call('SetInputSettings', { - inputName: colorSourceName, - inputSettings: { - width: Math.floor(colorSourceWidth), // Ensure it's a whole number - height: 90 // Slightly shorter height to better match text - } - }); - - // Position color source background centered, same position as text + try { + const sceneInfo = await obsClient.call('GetSceneItemList', { sceneName: streamGroupName }); + console.log(`Scene dimensions check for "${streamGroupName}":`, sceneInfo); + } catch (e) { + console.log('Could not get scene info:', e.message); + } + + // Manual positioning: Calculate where to place text so its center is at canvas center + const canvasWidth = sceneWidth; + const canvasCenter = canvasWidth / 2; + const textWidth = currentTransform.width || currentTransform.sourceWidth || 0; + + // Since we know the scene is bounded to 1600x900 from earlier logs, try that + const boundedWidth = 1600; + const boundedCenter = boundedWidth / 2; // 800 + const alternatePosition = boundedCenter - (textWidth / 2); + + console.log(`Manual centering calculation:`); + console.log(`- Scene/Canvas width: ${canvasWidth}`); + console.log(`- Canvas center: ${canvasCenter}`); + console.log(`- Text width: ${textWidth}`); + console.log(`- Position for 1920px canvas: ${canvasCenter - (textWidth / 2)}`); + console.log(`- Bounded scene width: ${boundedWidth}`); + console.log(`- Bounded center: ${boundedCenter}`); + console.log(`- Position for 1600px bounded scene: ${alternatePosition}`); + + // Set the position with left alignment (0) for predictable positioning await obsClient.call('SetSceneItemTransform', { sceneName: streamGroupName, - sceneItemId: colorSourceItem.sceneItemId, + sceneItemId: textSourceItem.sceneItemId, sceneItemTransform: { - positionX: 960, // Same center position as text - positionY: 50, // Same Y position as text for perfect alignment - scaleX: 1.0, - scaleY: 1.0, - alignment: 0 // Same center alignment as text + positionX: alternatePosition, // Use 1600px scene width calculation + positionY: 10, // Keep at top + alignment: 0, // Left alignment for predictable positioning + rotation: currentTransform.rotation || 0, + scaleX: currentTransform.scaleX || 1, + scaleY: currentTransform.scaleY || 1, + cropBottom: currentTransform.cropBottom || 0, + cropLeft: currentTransform.cropLeft || 0, + cropRight: currentTransform.cropRight || 0, + cropTop: currentTransform.cropTop || 0, + cropToBounds: currentTransform.cropToBounds || false } }); @@ -595,11 +536,11 @@ async function deleteStreamComponents(streamName, teamName, groupName) { try { const obsClient = await getOBSClient(); - const cleanGroupName = cleanObsName(groupName); - const cleanStreamName = cleanObsName(streamName); + const cleanGroupName = groupName.toLowerCase().replace(/\s+/g, '_'); + const cleanStreamName = streamName.toLowerCase().replace(/\s+/g, '_'); const streamGroupName = `${cleanGroupName}_${cleanStreamName}_stream`; const sourceName = `${cleanGroupName}_${cleanStreamName}`; - const textSourceName = cleanObsName(teamName) + '_text'; + const textSourceName = teamName.toLowerCase().replace(/\s+/g, '_') + '_text'; console.log(`Starting comprehensive deletion for stream "${streamName}"`); console.log(`Components to delete: scene="${streamGroupName}", source="${sourceName}"`); @@ -651,7 +592,15 @@ async function deleteStreamComponents(streamName, teamName, groupName) { } // 5. Remove from all source switchers - const screens = SOURCE_SWITCHER_NAMES; + const screens = [ + 'ss_large', + 'ss_left', + 'ss_right', + 'ss_top_left', + 'ss_top_right', + 'ss_bottom_left', + 'ss_bottom_right' + ]; for (const screen of screens) { try { @@ -716,7 +665,15 @@ async function clearTextFilesForStream(streamGroupName) { try { const FILE_DIRECTORY = path.resolve(process.env.FILE_DIRECTORY || './files'); - const screens = SCREEN_POSITIONS; + const screens = [ + 'large', + 'left', + 'right', + 'topLeft', + 'topRight', + 'bottomLeft', + 'bottomRight' + ]; let clearedFiles = []; @@ -770,7 +727,7 @@ async function deleteTeamComponents(teamName, groupName) { } // 2. Delete the team text source (shared across all team streams) - const textSourceName = cleanObsName(teamName) + '_text'; + const textSourceName = teamName.toLowerCase().replace(/\s+/g, '_') + '_text'; try { const { inputs } = await obsClient.call('GetInputList'); const textSource = inputs.find(input => input.inputName === textSourceName); @@ -786,7 +743,7 @@ async function deleteTeamComponents(teamName, groupName) { // 3. Get all scenes to check for nested stream scenes try { const { scenes } = await obsClient.call('GetSceneList'); - const cleanGroupName = cleanObsName(groupName || teamName); + const cleanGroupName = (groupName || teamName).toLowerCase().replace(/\s+/g, '_'); // Find all nested stream scenes for this team const streamScenes = scenes.filter(scene => @@ -812,7 +769,7 @@ async function deleteTeamComponents(teamName, groupName) { // 4. Remove any browser sources associated with this team try { const { inputs } = await obsClient.call('GetInputList'); - const cleanGroupName = cleanObsName(groupName || teamName); + const cleanGroupName = (groupName || teamName).toLowerCase().replace(/\s+/g, '_'); // Find all browser sources for this team const teamBrowserSources = inputs.filter(input => diff --git a/testers2_deco_stream b/testers2_deco_stream deleted file mode 100644 index e69de29..0000000