Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/backend/integrations/builtin/obs/obs-integration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ import GroupNameEventFilter from "./filters/group-name-filter";
import SceneNameEventFilter from "./filters/scene-name-filter";

import { SceneNameVariable } from "./variables/scene-name-variable";
import { PreviousSceneNameVariable } from "./variables/previous-scene-name";
import { SceneCollectionNameVariable } from "./variables/scene-collection-name";
import { IsConnectedVariable } from "./variables/is-connected";
import { IsStreamingVariable } from "./variables/is-streaming";
Expand Down Expand Up @@ -169,6 +170,7 @@ class ObsIntegration
FilterManager.registerFilter(SceneNameEventFilter);

ReplaceVariableManager.registerReplaceVariable(SceneNameVariable);
ReplaceVariableManager.registerReplaceVariable(PreviousSceneNameVariable);
ReplaceVariableManager.registerReplaceVariable(SceneCollectionNameVariable);
ReplaceVariableManager.registerReplaceVariable(IsConnectedVariable);
ReplaceVariableManager.registerReplaceVariable(IsStreamingVariable);
Expand Down
8 changes: 8 additions & 0 deletions src/backend/integrations/builtin/obs/obs-remote.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ let groupInfos: Array<CachedGroupInfo> = [];
let previewSceneName: string | null;
// The cached program scene name.
let programSceneName: string;
// The cached previous program scene name.
let previousProgramSceneName: string;

const TEXT_SOURCE_IDS = ["text_gdiplus_v2", "text_gdiplus_v3", "text_ft2_source_v2"];

Expand Down Expand Up @@ -179,6 +181,8 @@ async function setupRemoteListeners() {
});

obs.on("SceneTransitionStarted", async ({ transitionName }) => {
previousProgramSceneName = programSceneName || "";

programSceneName = (await obs.call("GetCurrentProgramScene"))?.sceneName || "";
eventManager?.triggerEvent(
OBS_EVENT_SOURCE_ID,
Expand Down Expand Up @@ -663,6 +667,10 @@ export function getCurrentSceneName(): string {
return programSceneName;
}

export function getPreviousSceneName(): string {
return previousProgramSceneName;
}

export async function setCurrentScene(sceneName: string): Promise<void> {
if (!connected) {
return;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { ReplaceVariable } from "../../../../../types/variables";
import { getPreviousSceneName } from "../obs-remote";

export const PreviousSceneNameVariable: ReplaceVariable = {
definition: {
handle: "obsPreviousSceneName",
description:
"The name of the previous OBS scene. If OBS isn't running, it returns 'Unknown'.",
possibleDataOutput: ["text"],
categories: ["advanced", "integrations", "obs"]
},
evaluator: () => {
return getPreviousSceneName() ?? "Unknown";
}
};