Advanced Scene Switcher

Advanced Scene Switcher 1.28.1

AaronD

Active Member
It's been some time since I have done a flow chart but this is what I think is the logic flow. The top picture is how it is working now.
View attachment 107442View attachment 107443
The setup as it is now, it takes 3 macros per half hour block and two macros to handle the brb and commerical scene.
It was hard to get screen shots of all the conditions on the 3 macros so I had to split them between shots of the top and then the bottom.
View attachment 107445View attachment 107446View attachment 107447View attachment 107448View attachment 107449View attachment 107450View attachment 107451
A gantt chart looks very much like a piano roll, and more of what I had in mind. At what time (not condition yet) do you want each thing to happen?

You can tie things to a wall clock, or to another event, or to a timer that is itself tied to a wall clock or other event. A video that takes <so long> to play, is effectively a timer too, as far as the logic goes, except the time seems to be variable in your case, depending on which video plays. So you might need several of these charts, the difference being on which side of some threshold(s) the video lengths happen to be.
 

RobertWilliams

New Member
Hi, I am new to the forum so please over look my naïvety on this question.

The Setup:
I have used the plugin to setup many macros to show videos at random from a playlist every 30 minutes using the date function. At the end of the video the scene switches to a be right back scene(brb) for 30 seconds then switches a commercial scene. At the end of the commercial it then switches back to the BRB if the next 30 min macro has not fired off. I have also put in the macros if the commercial is still running to go ahead and switch to the video. The videos are random in length some as short as 22 min and some as long as 80 min. I have it set so if the video runs over 30 min the scene stays on that video till the end, skipping the normal scheduled video, and then picks up at the next schedule 30 min time after doing the BRB / commercial scene swaps.

The problem:
Since the videos have random lengths, sometimes the commercials get cutoff to switch to the videos. I have commercial videos between 7 minutes and 3.5 minutes long to randomly play.

Looking for:
Is there a way to setup "if x amount of time before the hour do this" ? I would combine this with the "and if the media source state matches ended". For example, I would setup the condition as: if 38 minutes before the next hour switch to scene to show a 7 minute commercial. This would also allow or if 8 minutes before the hour switch to scene to show a 7 minute commercial. Etc. Essentially looking for a more generic hour time reference instead of an exact hour.

I thought about trying to use the duration time modifier but not sure how. Since the video lengths are random putting in if media length for at least or exactly 22 minutes does not seem like it would help with the videos longer than an 45 min or and hour.

My brain is fried from this logical puzzle and open to suggestions.
Are you able to set each media to show a "blank screen" at the end of video?

1725498601541.png


Then use a video condition to catch the end of the video. Here is an example of check for a "black" screen.
1725498678362.png
 

alp35035

New Member
A gantt chart looks very much like a piano roll, and more of what I had in mind. At what time (not condition yet) do you want each thing to happen?

You can tie things to a wall clock, or to another event, or to a timer that is itself tied to a wall clock or other event. A video that takes <so long> to play, is effectively a timer too, as far as the logic goes, except the time seems to be variable in your case, depending on which video plays. So you might need several of these charts, the difference being on which side of some threshold(s) the video lengths happen to be.
Thanks AaronD! Sometimes I just need to bounce ideas off someone to unstick my thoughts. I came up with a solution to my problem and now testing it.
Created three new macros for Passing to Commercials for 15min, 8min, and 5min. I am now using the Date function but disabling the date and inputting the start times of 00:22:00 with a repeat every 30 minutes. I also split the Pass back to BRB in to a long version and short version for house keeping.
 

Warmuptill

Active Member
Hello,

Is there a way to install "ADVANCED SCENE SWITCHER" into OBS STUDIO FLATPAK? I was trying the tutorial on how to manually install plugins into OBS Flatpak, but it's not working, so I think I missed something. I switched to flatpak to solve the issue with DROIDCAM crashing OBS studio when trying to use phone audio, now I need to get some plugins installed.
You can use this command to install the flatpak version of the plug-in:
flatpak install com.obsproject.Studio.Plugin.SceneSwitcher

But note that some functionality will not work due to the restrictions imposed by the flatpak sandbox.
 

Niarmc

New Member
Hi, I’m new in this site so thank you in advance for your support.
I’ve been using this plugin for a while in a multi station environment (5PCs each of them with OBS and this plugin). The goal is to automate the scene switch based on what controller the user/player is using.
Each scene matches the controller in used, showing the controller layout and the buttons pressed.
The logic behind is something like this:
If PS5 controller is connected, change scene to PS5 controller.
If XBOX controller is connected, change scene to Xbox controller.
If both controllers are connected, change scene to Dual Controllers (2players)
If no controllers are connected, check for keyboard activity to recognise a gaming pattern (thinking about pressing and/or holding W,S,A,D keys as it’s the standard keys for gaming). If activity matched or recognised, change scene to keyboard&mouse.
if no keyboard activity recognised, set scene to default (an empty scene were only captures the screen).

I’ve used the USB action and the XBOX is not recognised whatsoever, in fact, I presume is only recognising media devices like video and audio, for example, webcam, capture card, mics, and the PS5 controller as is recognised as a media device due the mic within the controller.

So, due this limitation I’ve created a ps script to recognise the logic previously mentioned and it works like a charm, the problem is that I need to keep running the script on a loop or as a scheduled task for this to work.

I was wondering if there is other way to achieve this directly with OBS and/or Advanced Scene Switcher without the need of external scripts.

Thank you in advance.
 

Warmuptill

Active Member
Hi, I’m new in this site so thank you in advance for your support.
I’ve been using this plugin for a while in a multi station environment (5PCs each of them with OBS and this plugin). The goal is to automate the scene switch based on what controller the user/player is using.
Each scene matches the controller in used, showing the controller layout and the buttons pressed.
The logic behind is something like this:
If PS5 controller is connected, change scene to PS5 controller.
If XBOX controller is connected, change scene to Xbox controller.
If both controllers are connected, change scene to Dual Controllers (2players)
If no controllers are connected, check for keyboard activity to recognise a gaming pattern (thinking about pressing and/or holding W,S,A,D keys as it’s the standard keys for gaming). If activity matched or recognised, change scene to keyboard&mouse.
if no keyboard activity recognised, set scene to default (an empty scene were only captures the screen).

I’ve used the USB action and the XBOX is not recognised whatsoever, in fact, I presume is only recognising media devices like video and audio, for example, webcam, capture card, mics, and the PS5 controller as is recognised as a media device due the mic within the controller.

So, due this limitation I’ve created a ps script to recognise the logic previously mentioned and it works like a charm, the problem is that I need to keep running the script on a loop or as a scheduled task for this to work.

I was wondering if there is other way to achieve this directly with OBS and/or Advanced Scene Switcher without the need of external scripts.

Thank you in advance.
Can you share the script?
That might make it easier to say if the setup can be replicated directly in the plugin or not.

Just to mention it:
You should also be able to run the script from Advanced Scene Switcher using the "Run" action in case you just want to avoid the "scheduled task" or script looping.
 
I am thinking of using this to operate my overlay as a 12 second twitch alert. How do I make the macros not run over itself when I expect multiple alerts incoming at once?
 

Niarmc

New Member
Can you share the script?
That might make it easier to say if the setup can be replicated directly in the plugin or not.

Just to mention it:
You should also be able to run the script from Advanced Scene Switcher using the "Run" action in case you just want to avoid the "scheduled task" or script looping.
My first thought was using the "USB" action, but as mentioned, this action only picks up Media devices (please, let me know how can I expand that to every USB device or similar, as that will help to simplify everything).
Then, I've tried to run the "Run" action using a simplified script of the current one using exit codes to make the changes accordingly, but it doesn't seem to either run the script or to retrieve the exit codes, so it doesn't work directly running the script in the plugin.
So I've modified the original script a bit to achieve this by exporting the outcome of the exit codes to a file instead of actually generating exit codes (also tried to use variables in the plugin to retrieve the codes but no luck whatsoever).
Right now the logic is the same but exports exit codes 0, 1, 2, 3, or 4 depending on the case, then in the plugin I set the "File" action to match those codes to change the scenes.

Here I add the script and a screenshot of the Macros as they are now.
Add-Type @" using System; using System.Runtime.InteropServices; public class UserActivity { [DllImport("user32.dll")] public static extern int GetAsyncKeyState(Int32 i); [DllImport("user32.dll")] public static extern bool GetCursorPos(out POINT lpPoint); public struct POINT { public int X; public int Y; } private static int wasdCount = 0; private static DateTime lastKeyPressTime = DateTime.Now; public static bool IsGamingPatternDetected() { int[] keys = { 0x57, 0x41, 0x53, 0x44 }; // W, A, S, D key codes foreach (int key in keys) { if (GetAsyncKeyState(key) != 0) { wasdCount++; lastKeyPressTime = DateTime.Now; break; } } // Reset count if no key press detected for a while if ((DateTime.Now - lastKeyPressTime).TotalSeconds > 1) { wasdCount = 0; } // Check if the pattern matches frequent key presses if (wasdCount > 10) // Adjust this threshold as needed { wasdCount = 0; // Reset count after detection return true; } return false; } public static bool IsMouseMoved() { POINT currentPos; GetCursorPos(out currentPos); if (currentPos.X != lastPos.X || currentPos.Y != lastPos.Y) { lastPos = currentPos; return true; } return false; } private static POINT lastPos; } "@ # Define the output file path $outputFilePath = "C:\temp\exit_code.txt" # Ensure the directory exists $outputDir = [System.IO.Path]::GetDirectoryName($outputFilePath) if (-not (Test-Path -Path $outputDir)) { New-Item -Path $outputDir -ItemType Directory -Force } # Function to get the current exit code from the file function Get-CurrentExitCode { if (Test-Path -Path $outputFilePath) { return Get-Content -Path $outputFilePath -Raw } else { return -1 } } while ($true) { # Check for Xbox controller $xbox = Get-PnpDevice -PresentOnly | Where-Object { $_.Name -like "*Xbox Controller" -and $_.Status -eq "Ok"} if ($xbox) { $xbox_status = "Connected" Write-Output "Xbox controller is connected" } else { $xbox_status = "Disconnected" Write-Output "Xbox controller is not connected" } # Check for PS5 controller $ps5 = Get-PnpDevice -PresentOnly | Where-Object { $_.Name -like "DualSense Wireless Controller" -and $_.Status -eq "Ok"} if ($ps5) { $ps5_status = "Connected" Write-Output "PS5 controller is connected" } else { $ps5_status = "Disconnected" Write-Output "PS5 controller is not connected" } # Determine exit code based on controller status if ($xbox_status -eq "Connected" -and $ps5_status -eq "Connected") { Write-Output "2 Controllers connected" $exitCode = 3 } elseif ($xbox_status -eq "Connected" -and $ps5_status -eq "Disconnected") { Write-Output "Xbox Controller connected" $exitCode = 2 } elseif ($xbox_status -eq "Disconnected" -and $ps5_status -eq "Connected") { Write-Output "PS5 Controller connected" $exitCode = 1 } else { Write-Output "All Controllers Disconnected" # Check for keyboard and mouse activity $activityDetected = $false $duration = 10 # Duration in seconds $endTime = (Get-Date).AddSeconds($duration) while ((Get-Date) -lt $endTime) { if ([UserActivity]::IsGamingPatternDetected() -and [UserActivity]::IsMouseMoved()) { $activityDetected = $true break } Start-Sleep -Milliseconds 100 } if ($activityDetected) { Write-Output "User is using keyboard and mouse in a gaming pattern" $exitCode = 4 } else { Write-Output "No gaming keyboard and mouse activity detected" $exitCode = 0 } } # Get the current exit code $currentExitCode = Get-CurrentExitCode # Write the exit code to a file only if it has changed if ($exitCode -ne $currentExitCode) { Set-Content -Path $outputFilePath -Value $exitCode Write-Output "Exit code updated to $exitCode" } else { Write-Output "Exit code remains unchanged" } # Wait based on keyboard activity detection $waitTime = if ($activityDetected) { 600 } else { 30 } # 10 minutes or 30 seconds $elapsedTime = 0 while ($elapsedTime -lt $waitTime) { # Check for controller connection during wait time $xbox = Get-PnpDevice -PresentOnly | Where-Object { $_.Name -like "*Xbox Controller" -and $_.Status -eq "Ok"} $ps5 = Get-PnpDevice -PresentOnly | Where-Object { $_.Name -like "DualSense Wireless Controller" -and $_.Status -eq "Ok"} if ($xbox -or $ps5) { Write-Output "Controller connected during wait time" break } Start-Sleep -Seconds 10 $elapsedTime += 10 } }
1725615846298.png


Thank you in advance.
 

M_Jacob_N

New Member
Pardon my English as it is not my mother tongue.

This powerful plugin is the centerpiece of all my automations. A big thumb up to Warmuptill.

But I want to report some issues:

Version: 1.27.2 under windows 10 / OBS version: 30.2.3

1. Deletion of an action sometimes causes the scroll to jump erratically to seemly random positions.

2. Reordering by drag and drop does work most of the time, but it fails for no apparent reason every now and then. When it happens, subsequent attempt to re-drag and drop the same item will most likely fail (IIRC).

3. A normal short mouse left click on an item sometimes triggers drag and hold (the item overlays the mouse cursor and moves with it). When it happens, pressing the Esc button will not cancel the hold, instead, it'll close the switcher window while drag-n-hold is still in place, which renders the OBS unresponsive and exit abnormally.

4. Repeatedly clicking on the delete button will delete the selected action/condition at first and then it'll delete the last action in the list which is counterintuitive, as a second click may go totally unnoticed when the end of the list is not in the view.

And a few improvements to consider:

1. Ctrl+Z or a button to undo the last operation is imperative. Right now, it makes me nerves about mouse button malfunctioning sabotages the entire project. Oh, my!

2. The condition evaluation of a macro in action list as of now, neither support variables as macro name, nor evaluate the value a variable. If it does, it'll most definitely save my days.

3. Batch copy and paste may reduce the chances of been haunted by Repetitive Strain Injury.

4. If pasted items could appear in current selected position instead of the end of the list, it may also reduce the chances of getting RSI.

5. Right-click menu of an action or condition could really use a Remove/Delete command especially when the window is maximized on a 8K monitor. My mouse could give you a big hug as it will no longer have to work as hard all the way across the screen to reach the delete button and back to the top of the list, select an item and do it all over again.

6. If "Video matching" condition could support comparing (pixel matching) two sources, it'll make my heart sing.

7. "Filter" action could implement the mirroring of the entire JSON settings or single field of another filter.

8. The "Scene item visibility" action has three settings : Show/Hide/Toggle, I propose two additional settings. One is "Enable filters and show", the other is "Hide and disable filters". It is common practice to disable filters to save resources when the source is not shown anywhere. "Enable filters and show" needs one additional time parameter though. Let's say you have 4 filters on a source, and set 1 second on "Enable filters and show", then each filter takes 200ms to enable and the last 200ms wait till the item is shown. This acts as a prefetch as "Enable all filters" at once could place spikes on system resources.
 

Warmuptill

Active Member
I am thinking of using this to operate my overlay as a 12 second twitch alert. How do I make the macros not run over itself when I expect multiple alerts incoming at once?
My answer will be a bit general as I don't know what your macros look like, so I apologize it they won't work in your setup.

Assuming your macro showing the overlay is structured somewhat like this ...

1725643491802.png


One solution might be to simply not run your macro in parallel to other macros.
This will result in advanced scene switcher to wait for the actions of that macro to complete before continuing within other actions.

This might however not be desirable if you have other macros which need to run during that time.
So, alternatively you could set up an Action Queue, to which you can append your actions when necessary and they will be ran one after the other.
Here is an example on how to use those queues:
 

Warmuptill

Active Member
My first thought was using the "USB" action, but as mentioned, this action only picks up Media devices (please, let me know how can I expand that to every USB device or similar, as that will help to simplify everything).
Then, I've tried to run the "Run" action using a simplified script of the current one using exit codes to make the changes accordingly, but it doesn't seem to either run the script or to retrieve the exit codes, so it doesn't work directly running the script in the plugin.
So I've modified the original script a bit to achieve this by exporting the outcome of the exit codes to a file instead of actually generating exit codes (also tried to use variables in the plugin to retrieve the codes but no luck whatsoever).
Right now the logic is the same but exports exit codes 0, 1, 2, 3, or 4 depending on the case, then in the plugin I set the "File" action to match those codes to change the scenes.

Here I add the script and a screenshot of the Macros as they are now.
Add-Type @" using System; using System.Runtime.InteropServices; public class UserActivity { [DllImport("user32.dll")] public static extern int GetAsyncKeyState(Int32 i); [DllImport("user32.dll")] public static extern bool GetCursorPos(out POINT lpPoint); public struct POINT { public int X; public int Y; } private static int wasdCount = 0; private static DateTime lastKeyPressTime = DateTime.Now; public static bool IsGamingPatternDetected() { int[] keys = { 0x57, 0x41, 0x53, 0x44 }; // W, A, S, D key codes foreach (int key in keys) { if (GetAsyncKeyState(key) != 0) { wasdCount++; lastKeyPressTime = DateTime.Now; break; } } // Reset count if no key press detected for a while if ((DateTime.Now - lastKeyPressTime).TotalSeconds > 1) { wasdCount = 0; } // Check if the pattern matches frequent key presses if (wasdCount > 10) // Adjust this threshold as needed { wasdCount = 0; // Reset count after detection return true; } return false; } public static bool IsMouseMoved() { POINT currentPos; GetCursorPos(out currentPos); if (currentPos.X != lastPos.X || currentPos.Y != lastPos.Y) { lastPos = currentPos; return true; } return false; } private static POINT lastPos; } "@ # Define the output file path $outputFilePath = "C:\temp\exit_code.txt" # Ensure the directory exists $outputDir = [System.IO.Path]::GetDirectoryName($outputFilePath) if (-not (Test-Path -Path $outputDir)) { New-Item -Path $outputDir -ItemType Directory -Force } # Function to get the current exit code from the file function Get-CurrentExitCode { if (Test-Path -Path $outputFilePath) { return Get-Content -Path $outputFilePath -Raw } else { return -1 } } while ($true) { # Check for Xbox controller $xbox = Get-PnpDevice -PresentOnly | Where-Object { $_.Name -like "*Xbox Controller" -and $_.Status -eq "Ok"} if ($xbox) { $xbox_status = "Connected" Write-Output "Xbox controller is connected" } else { $xbox_status = "Disconnected" Write-Output "Xbox controller is not connected" } # Check for PS5 controller $ps5 = Get-PnpDevice -PresentOnly | Where-Object { $_.Name -like "DualSense Wireless Controller" -and $_.Status -eq "Ok"} if ($ps5) { $ps5_status = "Connected" Write-Output "PS5 controller is connected" } else { $ps5_status = "Disconnected" Write-Output "PS5 controller is not connected" } # Determine exit code based on controller status if ($xbox_status -eq "Connected" -and $ps5_status -eq "Connected") { Write-Output "2 Controllers connected" $exitCode = 3 } elseif ($xbox_status -eq "Connected" -and $ps5_status -eq "Disconnected") { Write-Output "Xbox Controller connected" $exitCode = 2 } elseif ($xbox_status -eq "Disconnected" -and $ps5_status -eq "Connected") { Write-Output "PS5 Controller connected" $exitCode = 1 } else { Write-Output "All Controllers Disconnected" # Check for keyboard and mouse activity $activityDetected = $false $duration = 10 # Duration in seconds $endTime = (Get-Date).AddSeconds($duration) while ((Get-Date) -lt $endTime) { if ([UserActivity]::IsGamingPatternDetected() -and [UserActivity]::IsMouseMoved()) { $activityDetected = $true break } Start-Sleep -Milliseconds 100 } if ($activityDetected) { Write-Output "User is using keyboard and mouse in a gaming pattern" $exitCode = 4 } else { Write-Output "No gaming keyboard and mouse activity detected" $exitCode = 0 } } # Get the current exit code $currentExitCode = Get-CurrentExitCode # Write the exit code to a file only if it has changed if ($exitCode -ne $currentExitCode) { Set-Content -Path $outputFilePath -Value $exitCode Write-Output "Exit code updated to $exitCode" } else { Write-Output "Exit code remains unchanged" } # Wait based on keyboard activity detection $waitTime = if ($activityDetected) { 600 } else { 30 } # 10 minutes or 30 seconds $elapsedTime = 0 while ($elapsedTime -lt $waitTime) { # Check for controller connection during wait time $xbox = Get-PnpDevice -PresentOnly | Where-Object { $_.Name -like "*Xbox Controller" -and $_.Status -eq "Ok"} $ps5 = Get-PnpDevice -PresentOnly | Where-Object { $_.Name -like "DualSense Wireless Controller" -and $_.Status -eq "Ok"} if ($xbox -or $ps5) { Write-Output "Controller connected during wait time" break } Start-Sleep -Seconds 10 $elapsedTime += 10 } }
View attachment 107497

Thank you in advance.
I think you should have been able to set this up directly in the advanced scene switcher.

To handle the mouse movement you can simply rely on the "Cursor" condition type:
1725643965929.png


Handling the keyboard input (W A S D) should also be possible using the "Hotkey" condition:
1725644118774.png

You will have to setup the key binds in the OBS setting menu.

I would have assumed the controllers are regular USB devices and get detected by libusb and the USB condition type can be used ...
1725644304439.png

... but I guess for some reason these devices do not show up for you.
Maybe I am using the libusb API incorrectly.
A quick Google search did not bring up anything which would explain such behavior, so I would appreciate it very much, if you can somehow narrow down, which types of devices are not being detected properly on your side. :)

You could then combine those macros like so to set up the scene switches:
1725644638729.png

Then, I've tried to run the "Run" action using a simplified script of the current one using exit codes to make the changes accordingly, but it doesn't seem to either run the script or to retrieve the exit codes, so it doesn't work directly running the script in the plugin.
Depending on what your default application for opening *.ps1 files is you might have to directly specify the powershell.exe binary you want open the file with.
Otherwise the plugin might attempt to open the file with a text editor instead.

For example:
1725645126818.png


Regarding the issue of not being able to read out the exit code.
I just noticed that the variables are not available when the process is being started "detached" from the rest of the program.
This is very unintuitive and I will add a note that this is the case.
If you want to use the variables you will have to enable the "Wait for process exit or at most ..." option.

Pardon my English as it is not my mother tongue.

This powerful plugin is the centerpiece of all my automations. A big thumb up to Warmuptill.

But I want to report some issues:

Version: 1.27.2 under windows 10 / OBS version: 30.2.3

1. Deletion of an action sometimes causes the scroll to jump erratically to seemly random positions.

2. Reordering by drag and drop does work most of the time, but it fails for no apparent reason every now and then. When it happens, subsequent attempt to re-drag and drop the same item will most likely fail (IIRC).

3. A normal short mouse left click on an item sometimes triggers drag and hold (the item overlays the mouse cursor and moves with it). When it happens, pressing the Esc button will not cancel the hold, instead, it'll close the switcher window while drag-n-hold is still in place, which renders the OBS unresponsive and exit abnormally.

4. Repeatedly clicking on the delete button will delete the selected action/condition at first and then it'll delete the last action in the list which is counterintuitive, as a second click may go totally unnoticed when the end of the list is not in the view.

And a few improvements to consider:

1. Ctrl+Z or a button to undo the last operation is imperative. Right now, it makes me nerves about mouse button malfunctioning sabotages the entire project. Oh, my!

2. The condition evaluation of a macro in action list as of now, neither support variables as macro name, nor evaluate the value a variable. If it does, it'll most definitely save my days.

3. Batch copy and paste may reduce the chances of been haunted by Repetitive Strain Injury.

4. If pasted items could appear in current selected position instead of the end of the list, it may also reduce the chances of getting RSI.

5. Right-click menu of an action or condition could really use a Remove/Delete command especially when the window is maximized on a 8K monitor. My mouse could give you a big hug as it will no longer have to work as hard all the way across the screen to reach the delete button and back to the top of the list, select an item and do it all over again.

6. If "Video matching" condition could support comparing (pixel matching) two sources, it'll make my heart sing.

7. "Filter" action could implement the mirroring of the entire JSON settings or single field of another filter.

8. The "Scene item visibility" action has three settings : Show/Hide/Toggle, I propose two additional settings. One is "Enable filters and show", the other is "Hide and disable filters". It is common practice to disable filters to save resources when the source is not shown anywhere. "Enable filters and show" needs one additional time parameter though. Let's say you have 4 filters on a source, and set 1 second on "Enable filters and show", then each filter takes 200ms to enable and the last 200ms wait till the item is shown. This acts as a prefetch as "Enable all filters" at once could place spikes on system resources.
Thanks for the suggestions! :)
I will try to look into them when I find the time to.
 

Niarmc

New Member
Maybe I am using the libusb API incorrectly.
A quick Google search did not bring up anything which would explain such behavior, so I would appreciate it very much, if you can somehow narrow down, which types of devices are not being detected properly on your side. :)
Thanks for your reply and all the information. I will give it a try and see how it behaves. As far as I can see, the plugin only shows USBs related to Media Class, these are video capture card, video camera and audio devices like Microphones. The PS5 controller as it has a microphone integrated, it’s recognised as Media Class USB device.
Unfortunately the XBOX controllers, keyboards and mouse, Stream Decks and any other USB device connected are not listed.
I’ve tried typing the name and manufacturer manually but that doesn’t work. The devices need to be listed in order to work.
It would be great if we could either add devices manually to Libusb library or expand the search of USB devices connected to the PC.
Thank you
 

Niarmc

New Member
Thanks for your reply and all the information. I will give it a try and see how it behaves. As far as I can see, the plugin only shows USBs related to Media Class, these are video capture card, video camera and audio devices like Microphones. The PS5 controller as it has a microphone integrated, it’s recognised as Media Class USB device.
Unfortunately the XBOX controllers, keyboards and mouse, Stream Decks and any other USB device connected are not listed.
I’ve tried typing the name and manufacturer manually but that doesn’t work. The devices need to be listed in order to work.
It would be great if we could either add devices manually to Libusb library or expand the search of USB devices connected to the PC.
Thank you
Actually, I’ve tried to set up everything from scratch again in one of the PCs and the “USB” action recognises the keyboard and mouse, the stream deck and the PS5 controller.
The capture card is alright as in this PC the capture card is not USB.
The XBOX controller is connected but it’s not listed and I think it is because Windows is recognising the controller as Xbox Peripherals instead of USB devices, even though is connected via USB.
Thanks
1725697280954.png
1725697317002.png
 
Last edited:

ukie

Member
@Warmuptill Is there a way to trigger a specific OBS tab to come to foreground?
For example, I have the Scenes and Audio Mixer as two tabs under one window, and I want to trigger the Audio Mixer to be open.
 

Attachments

  • Screenshot 2024-09-10 at 11.18.32.png
    Screenshot 2024-09-10 at 11.18.32.png
    271.1 KB · Views: 17

RobertWilliams

New Member
Is there a condition that I can set that will force a macro to run if the macro has not run (ie other conditions evaluate to True) in the last X minutes? TIA.
 

AaronD

Active Member
Is there a condition that I can set that will force a macro to run if the macro has not run (ie other conditions evaluate to True) in the last X minutes? TIA.
My first thought is to add an "Or Timer" condition at the end, set for X minutes. Then reset that timer in the actions of the same macro.

As explained in these two posts, putting an "Or" condition at the end, effectively bypasses everything else when it becomes true:

Note: For those that want it to fire *exactly* every X minutes, you would NOT use the explicit reset, but check the auto-reset box instead. The explicit reset pushes the next trigger out to the full X minutes again, even if something else triggered it partway through that time. So it's not strictly periodic anymore, but a timeout instead.
 
Last edited:

Rozenman

Member
Dear Warmuptill,
If you have time, please see if it is possible to solve the problem of the program crashing when performing the operation shown in the screenshot. It is not critical for work, but I would like to fix it.
Thank you!
 

Attachments

  • Advanced Scene Switcher - 1.27.2 2024-09-14 22-17-26.png
    Advanced Scene Switcher - 1.27.2 2024-09-14 22-17-26.png
    65.2 KB · Views: 24
  • OBS-2024-09-14-221427.ips.zip
    43.6 KB · Views: 14

Warmuptill

Active Member
Dear Warmuptill,
If you have time, please see if it is possible to solve the problem of the program crashing when performing the operation shown in the screenshot. It is not critical for work, but I would like to fix it.
Thank you!
Thanks for reporting the crash!

A build with a fix will be available here in a few minutes:

Note that you have to be logged into GitHub to be able to download it.
Let me know if that should be an issue.
 
Top