Advanced Scene Switcher

Advanced Scene Switcher 1.32.7

I'm trying to populate a text box in the scene with the time a recording started. This could be from the file name or a variable.

I've used https://github.com/WarmUpTill/Scene...e-set-up-variables-containing-date--time-data and have a ${rxTime} variable from ${rxY} etc - correctly into the text box in the scene - BUT it updates every second and I just want it to have the time the recording started.

Thanks for any help

1769505888031.png

1769505930340.png

1769505971439.png
 
I'm trying to populate a text box in the scene with the time a recording started. This could be from the file name or a variable.

I've used https://github.com/WarmUpTill/Scene...e-set-up-variables-containing-date--time-data and have a ${rxTime} variable from ${rxY} etc - correctly into the text box in the scene - BUT it updates every second and I just want it to have the time the recording started.

Thanks for any help

View attachment 118028
View attachment 118029
View attachment 118030
What does your "IF" statement look like? Do you have one or are you manually triggering it to run?
 
What does your "IF" statement look like? Do you have one or are you manually triggering it to run?
Thanks, that's helped enormously - I had is set to IF date is any (so I get access to the time variables).
Added an AND to it too so it's only running when I need it.

Actually now have moved it all into my start recording macro...

I need to figure out how to get padded hour, minute, seconds...

1769611875216.png
 
Thanks, that's helped enormously - I had is set to IF date is any (so I get access to the time variables).
Added an AND to it too so it's only running when I need it.

Actually now have moved it all into my start recording macro...

I need to figure out how to get padded hour, minute, seconds...

View attachment 118071
How about something like this, but me more reliable as the values are pulled right from the filename

1769626509964.png


And if you want to re-arrange the values, change them in the advanced section in settings. I did a find replace above for the space, but you could just alter that in the recording format as well.
1769626588898.png
 

Attachments

  • 1769626323226.png
    1769626323226.png
    65.1 KB · Views: 36
Oh that's great, thanks, but actually my file name only has date - it's a test and I want the file to be overwritten.
You just seem to be reinventing a task that OBS does already. Change the OBS recording filename format to reflect your scene display requirement, use AdvSS to take that variable, take out the file name extension and you are there.

1769691716641.png
 
Getting the following crash and can't pinpoint the issue since it never seems to happen in response to a macro being triggered, it's always just on a scene with no macros being triggered.

Code:
Unhandled exception: c0000005
Date/Time: 2026-01-29, 14:17:53
Fault address: 7FF9E572B34E (c:\windows\system32\msvcrt.dll)
libobs version: 32.0.4 (64-bit)
Windows version: 10.0 build 26100 (release: 24H2; revision: 7623; 64-bit)
CPU: AMD Ryzen 7 3700X 8-Core Processor             


Thread CD0: (Crashed)
Stack            EIP              Arg0             Arg1             Arg2             Arg3             Address
00000094704AEEF8 00007FF9E572B34E 0000000000000000 00000229CB9D1F20 0000000000000000 00000229C6D90388 msvcrt.dll!0x7ff9e572b34e
00000094704AEF00 00007FF95AD0F68A 0000000000000000 0000000000000012 0000022A032E2320 00007FF992665A86 libvlccore.dll!0x7ff95ad0f68a
00000094704AEF50 00007FF99378BDA6 0000022A59AFFF60 0000022A59AFFF57 0000000000000000 0000000000000000 libvlc.dll!0x7ff99378bda6
00000094704AEFC0 00007FF9B6B82AC2 0000022A59AFFF57 00000229C72F1260 00000094704AF0D9 0000022A032E2320 vlc-video.dll!vlcs_get_metadata+0x822
00000094704AEFF0 00007FF992667BE6 0000022A032E2320 00000229C72F1260 00007FF9903993F8 0000022A032E1F00 obs.dll!proc_handler_call+0x66
00000094704AF070 00007FF9902AB790 FFFFFFFFFFFFFFFE 00000094704AF240 0000022A26AE58B0 00000229CB9D1F20 advanced-scene-switcher-base.dll!0x7ff9902ab790
00000094704AF140 00007FF9902AB651 0000022A1262CA90 0000000000000000 00000229C738A1E0 00000229CB9D1F20 advanced-scene-switcher-base.dll!0x7ff9902ab651
00000094704AF200 00007FF9902AAA60 00000229C738A1E0 00000229C6147E20 00000229C738A1E0 00000094704AF349 advanced-scene-switcher-base.dll!0x7ff9902aaa60
00000094704AF290 00007FF9902AA75E 00000229C738A1E0 00000094704AF4B0 746800302E303237 0000000000000050 advanced-scene-switcher-base.dll!0x7ff9902aa75e
00000094704AF2C0 00007FF9902A6903 00000094704AF4B9 00000094704AF4B0 0000000000000000 0000022A0291CBC0 advanced-scene-switcher-base.dll!0x7ff9902a6903
00000094704AF3B0 00007FF988DCBDB6 00000094704AF4B0 00007FF988D241FA 00000026D78E1147 00000229D6DC0000 advanced-scene-switcher-lib.dll!std::_Func_impl_no_alloc<`advss::checkCondition'::`2'::<lambda_1>,void>::_Do_call+0x16
00000094704AF3E0 00007FF988FF643C 00000229CB9C9C40 00000229CB9D1F28 0000000000000004 000000000000000F advanced-scene-switcher-lib.dll!advss::Lockable::WithLock+0x2c
00000094704AF420 00007FF988DCD30F 00000229CB9C9CA8 00000229CB9C9C40 0000000000000000 0000000000000001 advanced-scene-switcher-lib.dll!advss::checkCondition+0x7f
00000094704AF520 00007FF988DC5B8F 0000022A5A872AF8 000000007FFE03B0 0000000000000000 00000094704AF658 advanced-scene-switcher-lib.dll!advss::Macro::CheckConditionHelper+0x1af
00000094704AF600 00007FF988DC4E7F 00000229FD893968 00000094704AF9C0 00000094704AF798 00000229C7168B10 advanced-scene-switcher-lib.dll!`advss::Macro::CheckConditions'::`2'::<lambda_1>::operator()+0x5f
00000094704AF630 00007FF988DC2FB2 00009AAAE7AFCA3A FFFFFFFFFFFFFFFE 00000094704AF798 00000094704AF758 advanced-scene-switcher-lib.dll!std::_Invoke_stored_explicit<`advss::Macro::CheckConditions'::`11'::<lambda_2>,0>+0x32
00000094704AF690 00007FF988DCAF58 00000229FD893890 00000094704AF6B0 00007D3064132183 000000007FFE0386 advanced-scene-switcher-lib.dll!std::_Packaged_state<void __cdecl(void)>::_Call_immediate+0x28
00000094704AF6E0 00007FF988DCBD93 0000022A5FD0EAA0 00000094704AF798 0000022A5FD0EAA0 000000007FFE0386 advanced-scene-switcher-lib.dll!std::_Func_impl_no_alloc<`Concurrency::details::_MakeVoidToUnitFunc'::`2'::<lambda_1>,unsigned char>::_Do_call+0x13
00000094704AF710 00007FF988DCD804 0000022A5FD0EAA0 0000022A5FD0EAA8 00000094704AF798 00000229CE41D440 advanced-scene-switcher-lib.dll!Concurrency::details::_PPLTaskHandle<unsigned char,Concurrency::task<unsigned char>::_InitialTaskHandle<void,`std::_Task_async_state<void>::_Task_async_state<void><std::_Fake_no_copy_callable_adapter<`advss::Macro::CheckConditions'::`11'::<lambda_2> > >':+0xe4
00000094704AF810 00007FF988DCC88D 0000022A5FD0EAA0 0000000000000000 0000000000000000 0000000000000000 advanced-scene-switcher-lib.dll!Concurrency::details::_TaskProcHandle::_RunChoreBridge+0x1d
00000094704AF850 00007FF988DCAFA1 0000022A5FD0E890 00000094704AF9C0 00007FF988D10000 000000007FFE0386 advanced-scene-switcher-lib.dll!Concurrency::details::_DefaultPPLTaskScheduler::_PPLTaskChore::_Callback+0x21
00000094704AF890 00007FF9CA652699 00000094704AFBB8 00007FF988D10000 0000022A5A872AF8 00000094704AFBB8 msvcp140.dll!0x7ff9ca652699
00000094704AF8C0 00007FF9E71B5370 0000000000000000 0000000000000001 00007FF9E7218280 00000229CDBF3D70 ntdll.dll!0x7ff9e71b5370
00000094704AFA20 00007FF9E71B63C1 0000000000000000 0000000000000000 0000000000000000 0000000000000000 ntdll.dll!0x7ff9e71b63c1
00000094704AFD80 00007FF9E4F0E8D7 0000000000000000 0000000000000000 000004F0FFFFFB30 000004D0FFFFFB30 kernel32.dll!0x7ff9e4f0e8d7
00000094704AFDB0 00007FF9E71CC53C 0000000000000000 0000000000000000 0000000000000000 0000000000000000 ntdll.dll!0x7ff9e71cc53c
 
Getting the following crash and can't pinpoint the issue since it never seems to happen in response to a macro being triggered, it's always just on a scene with no macros being triggered.

Code:
Unhandled exception: c0000005
Date/Time: 2026-01-29, 14:17:53
Fault address: 7FF9E572B34E (c:\windows\system32\msvcrt.dll)
libobs version: 32.0.4 (64-bit)
Windows version: 10.0 build 26100 (release: 24H2; revision: 7623; 64-bit)
CPU: AMD Ryzen 7 3700X 8-Core Processor            


Thread CD0: (Crashed)
Stack            EIP              Arg0             Arg1             Arg2             Arg3             Address
00000094704AEEF8 00007FF9E572B34E 0000000000000000 00000229CB9D1F20 0000000000000000 00000229C6D90388 msvcrt.dll!0x7ff9e572b34e
00000094704AEF00 00007FF95AD0F68A 0000000000000000 0000000000000012 0000022A032E2320 00007FF992665A86 libvlccore.dll!0x7ff95ad0f68a
00000094704AEF50 00007FF99378BDA6 0000022A59AFFF60 0000022A59AFFF57 0000000000000000 0000000000000000 libvlc.dll!0x7ff99378bda6
00000094704AEFC0 00007FF9B6B82AC2 0000022A59AFFF57 00000229C72F1260 00000094704AF0D9 0000022A032E2320 vlc-video.dll!vlcs_get_metadata+0x822
00000094704AEFF0 00007FF992667BE6 0000022A032E2320 00000229C72F1260 00007FF9903993F8 0000022A032E1F00 obs.dll!proc_handler_call+0x66
00000094704AF070 00007FF9902AB790 FFFFFFFFFFFFFFFE 00000094704AF240 0000022A26AE58B0 00000229CB9D1F20 advanced-scene-switcher-base.dll!0x7ff9902ab790
00000094704AF140 00007FF9902AB651 0000022A1262CA90 0000000000000000 00000229C738A1E0 00000229CB9D1F20 advanced-scene-switcher-base.dll!0x7ff9902ab651
00000094704AF200 00007FF9902AAA60 00000229C738A1E0 00000229C6147E20 00000229C738A1E0 00000094704AF349 advanced-scene-switcher-base.dll!0x7ff9902aaa60
00000094704AF290 00007FF9902AA75E 00000229C738A1E0 00000094704AF4B0 746800302E303237 0000000000000050 advanced-scene-switcher-base.dll!0x7ff9902aa75e
00000094704AF2C0 00007FF9902A6903 00000094704AF4B9 00000094704AF4B0 0000000000000000 0000022A0291CBC0 advanced-scene-switcher-base.dll!0x7ff9902a6903
00000094704AF3B0 00007FF988DCBDB6 00000094704AF4B0 00007FF988D241FA 00000026D78E1147 00000229D6DC0000 advanced-scene-switcher-lib.dll!std::_Func_impl_no_alloc<`advss::checkCondition'::`2'::<lambda_1>,void>::_Do_call+0x16
00000094704AF3E0 00007FF988FF643C 00000229CB9C9C40 00000229CB9D1F28 0000000000000004 000000000000000F advanced-scene-switcher-lib.dll!advss::Lockable::WithLock+0x2c
00000094704AF420 00007FF988DCD30F 00000229CB9C9CA8 00000229CB9C9C40 0000000000000000 0000000000000001 advanced-scene-switcher-lib.dll!advss::checkCondition+0x7f
00000094704AF520 00007FF988DC5B8F 0000022A5A872AF8 000000007FFE03B0 0000000000000000 00000094704AF658 advanced-scene-switcher-lib.dll!advss::Macro::CheckConditionHelper+0x1af
00000094704AF600 00007FF988DC4E7F 00000229FD893968 00000094704AF9C0 00000094704AF798 00000229C7168B10 advanced-scene-switcher-lib.dll!`advss::Macro::CheckConditions'::`2'::<lambda_1>::operator()+0x5f
00000094704AF630 00007FF988DC2FB2 00009AAAE7AFCA3A FFFFFFFFFFFFFFFE 00000094704AF798 00000094704AF758 advanced-scene-switcher-lib.dll!std::_Invoke_stored_explicit<`advss::Macro::CheckConditions'::`11'::<lambda_2>,0>+0x32
00000094704AF690 00007FF988DCAF58 00000229FD893890 00000094704AF6B0 00007D3064132183 000000007FFE0386 advanced-scene-switcher-lib.dll!std::_Packaged_state<void __cdecl(void)>::_Call_immediate+0x28
00000094704AF6E0 00007FF988DCBD93 0000022A5FD0EAA0 00000094704AF798 0000022A5FD0EAA0 000000007FFE0386 advanced-scene-switcher-lib.dll!std::_Func_impl_no_alloc<`Concurrency::details::_MakeVoidToUnitFunc'::`2'::<lambda_1>,unsigned char>::_Do_call+0x13
00000094704AF710 00007FF988DCD804 0000022A5FD0EAA0 0000022A5FD0EAA8 00000094704AF798 00000229CE41D440 advanced-scene-switcher-lib.dll!Concurrency::details::_PPLTaskHandle<unsigned char,Concurrency::task<unsigned char>::_InitialTaskHandle<void,`std::_Task_async_state<void>::_Task_async_state<void><std::_Fake_no_copy_callable_adapter<`advss::Macro::CheckConditions'::`11'::<lambda_2> > >':+0xe4
00000094704AF810 00007FF988DCC88D 0000022A5FD0EAA0 0000000000000000 0000000000000000 0000000000000000 advanced-scene-switcher-lib.dll!Concurrency::details::_TaskProcHandle::_RunChoreBridge+0x1d
00000094704AF850 00007FF988DCAFA1 0000022A5FD0E890 00000094704AF9C0 00007FF988D10000 000000007FFE0386 advanced-scene-switcher-lib.dll!Concurrency::details::_DefaultPPLTaskScheduler::_PPLTaskChore::_Callback+0x21
00000094704AF890 00007FF9CA652699 00000094704AFBB8 00007FF988D10000 0000022A5A872AF8 00000094704AFBB8 msvcp140.dll!0x7ff9ca652699
00000094704AF8C0 00007FF9E71B5370 0000000000000000 0000000000000001 00007FF9E7218280 00000229CDBF3D70 ntdll.dll!0x7ff9e71b5370
00000094704AFA20 00007FF9E71B63C1 0000000000000000 0000000000000000 0000000000000000 0000000000000000 ntdll.dll!0x7ff9e71b63c1
00000094704AFD80 00007FF9E4F0E8D7 0000000000000000 0000000000000000 000004F0FFFFFB30 000004D0FFFFFB30 kernel32.dll!0x7ff9e4f0e8d7
00000094704AFDB0 00007FF9E71CC53C 0000000000000000 0000000000000000 0000000000000000 0000000000000000 ntdll.dll!0x7ff9e71cc53c
That seems to be related to a “Media” condition attempting to get metadata provided by a VLC source, if I am not mistaken.

I will try to reproduce and investigate the issue on my side.
Would you mind sending me an export of your settings?
(Doesn’t need to be here - feel free to send me a DM)

Thanks for letting me know about this problem!
 
Is there any way to detect whether or not a capture card has a signal with this plugin? I tried using a Video condition to check whether or not the card was showing the "No Signal" text, and while it did work I also noticed in the logs I was getting multiple warnings about long times being spent on the condition. I'm not 100% sure but it seems like it was also causing dropped frames in my recordings. Is there any more performant way of accomplishing this?
 
Is there any way to detect whether or not a capture card has a signal with this plugin? I tried using a Video condition to check whether or not the card was showing the "No Signal" text, and while it did work I also noticed in the logs I was getting multiple warnings about long times being spent on the condition. I'm not 100% sure but it seems like it was also causing dropped frames in my recordings. Is there any more performant way of accomplishing this?
Unless there is some other way the capture card is indicating that it has no signal, I believe using the "Video" condition is your best bet.
Depending on what you have set up previously you can probably make it much more performant by reducing the frequency at which this check is performed as well as the reducing the area in which you perform the check in.

Can you provide an example image of what the "No Signal" screen looks like?
 
Unless there is some other way the capture card is indicating that it has no signal, I believe using the "Video" condition is your best bet.
Depending on what you have set up previously you can probably make it much more performant by reducing the frequency at which this check is performed as well as the reducing the area in which you perform the check in.

Can you provide an example image of what the "No Signal" screen looks like?
Sure, it looks like this:
Screenshot 2026-02-02 12-39-101.png

I was doing a "contains text" check with type "Single uniform block of text" only on the region where it says "No Signal". Would a different text type or a different check entirely (such as exactly matches or matches pattern) be less intensive?
 
Sure, it looks like this:View attachment 118165
I was doing a "contains text" check with type "Single uniform block of text" only on the region where it says "No Signal". Would a different text type or a different check entirely (such as exactly matches or matches pattern) be less intensive?
I see.

Trying to recognise text can be a very expensive operation.
Especially if it is done on the whole "screen" / OBS canvas.

So the first step I would suggest to take is to reduce the size of the area the plugin needs to check by enabling the "Perform check only in area" setting.
Select an appropriate region of the screen by clicking the "Select area" button.
The smaller the area, the better the performance.
1770060599986.png


The "No Signal" message is static and won't move or anything like that, correct?
In that case I would suggest, instead of checking for specific words on screen, to only look for the warning triangle.
This will allow you to further reduce the size of the area to check.

You can try to do this using the "exactly matches" or "matches pattern" options of the "Video" condition.
The former needs a pixel perfect match and is relatively inexpensive computationally.
The latter does not require a perfect match but takes a longer to calculate. (Pattern matching should still be much cheaper than text recognition)

I would suggest to try to start with an exact match and see if it works as expected.
To do so click the "Browse" button to select an image to compare the input image to.
You will have the option to create a screenshot of the selected input image already cropped to the size you specified earlier.

Video compression artifacts / noisy input images might render the "exactly matches" check ineffective.
If it should not be suitable, switch to "matches pattern".
You can reuse the screenshot you created earlier and only need to adjust the threshold value defining how closely the input image needs to match the provided screenshot. (The higher the better to avoid any potential false positives)

Finally you can reduce the frequency, at which the condition is checked, in a few ways.
If you plan on setting up additional macros I would suggest to open the advanced settings for this particular macro and configure a custom condition check interval like this:

1770061509580.png

If you don't plan on setting up any other change the "check conditions every X ms" at the top of the General tab.

I hope this helps!
If something is unclear / does not work feel free to reach out with further questions!
 
I see.

Trying to recognise text can be a very expensive operation.
Especially if it is done on the whole "screen" / OBS canvas.

So the first step I would suggest to take is to reduce the size of the area the plugin needs to check by enabling the "Perform check only in area" setting.
Select an appropriate region of the screen by clicking the "Select area" button.
The smaller the area, the better the performance.
View attachment 118166

The "No Signal" message is static and won't move or anything like that, correct?
In that case I would suggest, instead of checking for specific words on screen, to only look for the warning triangle.
This will allow you to further reduce the size of the area to check.

You can try to do this using the "exactly matches" or "matches pattern" options of the "Video" condition.
The former needs a pixel perfect match and is relatively inexpensive computationally.
The latter does not require a perfect match but takes a longer to calculate. (Pattern matching should still be much cheaper than text recognition)

I would suggest to try to start with an exact match and see if it works as expected.
To do so click the "Browse" button to select an image to compare the input image to.
You will have the option to create a screenshot of the selected input image already cropped to the size you specified earlier.

Video compression artifacts / noisy input images might render the "exactly matches" check ineffective.
If it should not be suitable, switch to "matches pattern".
You can reuse the screenshot you created earlier and only need to adjust the threshold value defining how closely the input image needs to match the provided screenshot. (The higher the better to avoid any potential false positives)

Finally you can reduce the frequency, at which the condition is checked, in a few ways.
If you plan on setting up additional macros I would suggest to open the advanced settings for this particular macro and configure a custom condition check interval like this:

View attachment 118168
If you don't plan on setting up any other change the "check conditions every X ms" at the top of the General tab.

I hope this helps!
If something is unclear / does not work feel free to reach out with further questions!
Doing an exact match on the warning icon seems to be working. Thank you so much for the detailed suggestions!
 
Hi,
I just downloaded and installed Advanced Scene Switcher 1.32.7. Unfortunately, it is behaving as it did before. It freezes OBS at startup. My fix for the last time isn't working. I did a few things in safe mode then it worked in regular mode. I suspect their is an issue with "detected a new version....." When I try to force quit their is no error on my Mac. Thanks.
 
Any possibility of updating the Source action to be able to chose the blend mode? Pretty much every other source setting can be changed with macros except for that. Would be nice to also include the transition merge that was just added to the Scene Item Visibility action.
 
That seems to be related to a “Media” condition attempting to get metadata provided by a VLC source, if I am not mistaken.

I will try to reproduce and investigate the issue on my side.
Would you mind sending me an export of your settings?
(Doesn’t need to be here - feel free to send me a DM)

Thanks for letting me know about this problem!
Just realized I never replied to this. That info was all I needed to get things sorted out, I made some sources inactive at OBS launch but had a macro that was still trying to reference the metadata of those sources at launch. Fixed it by pausing that macro and unpausing it when the sources are active again. Thanks!
 
Back
Top