Aitum Stream Suite

Aitum Stream Suite 1.2.1

Aitum

Member
Aitum submitted a new resource:

Aitum Stream Suite - All your streaming needs in ONE place with ease.

View attachment 118198
Customise your environments going between our live and build tabs.

Aitum Stream Suite allows you to stream to multiple services at one time combining our multi and vertical OBS plugins into an all in one package.

No need for any other multi chat, stream information or activity feed elsewhere.

Aitum Stream Suite is everything that is familiar to you.
Expand you streaming horizons today!

Read more about this resource...
 
I played with a test setup of Aitum Stream Suite a few nights ago and have since deployed it to one of my systems here. I'm also gauging the suitability for my other systems in my streaming cluster as I'm already finding uses for the sub-tools within.

Particularly, I really like the "Live Scenes" panel item. I'm curious, can you create additional user-configurable lists of scenes they can select from? I do pre-flight operations to look at all my sources and having a "pre-flight scene check" list like this.

Also, are things like adding output canvases (in my case, I gutted the vertical stuff out of my setup) saved as part of a Profile? Enquiring minds want to know!

Is any of the functionality like starting one or more streams controllable via Websockets? That would be useful for my setup via Bitfocus Companion and Advanced Scene Changer as well as those who use various plugins for the Elgato Stream Deck software.

And finally, calling the ability to create multiple workspaces a "game-changer" or something that "hits it out of the ballpark" fall woefully short.

I imagine there are likely improvements waiting in the wings, but dear $DEITY, this is insane right now.

Definitely a keeper.

--Katt. =^.^=

P.S. Just sent Aitum and you in particular, @Exeldro, a few clams. I figure that's the least I could do for all you do.
 
Last edited:
Aitum updated Aitum Stream Suite with a new update entry:

Version 1.1.0

  • Add Transform dock
  • Add stats dock
  • Add vod track option
  • Add srt and rist multi track support
  • Add icons to docks
  • Add icons to fixed tabs
  • Add output timers
  • Add dock layout on creating canvas
  • Add clone canvas scene and transition cache
  • Add source type to properties dock
  • Add theme to mac build
  • Add save and restore disabled preview and lock preview
  • Add pause recording hotkeys
  • Add Brazilian Portuguese translation (lucasromanomr)
  • Add custom stream...

Read the rest of this update entry...
 
I installed Aitum on OBS, but the problem is that when I try to stream live on Instagram, there's a major issue—even though I've adjusted the settings, the preview just shows a black screen.
 
I can happily report that everything I was reporting has now been fixed!

The "Favorite Scenes" pane is such a nice QoL addition despite the fact I use Stream Decks with Bitfocus Companion for my normal operations. it allows me to have a little additional granularity when I don't see a need to create a new button in my Decks.

--Katt. =^.^=
 
I'm actually finding this plugin super super useful, however my two gripes right now are probably really simple things I am overlooking, the first is the bar that gets added to the top of the window can only be moved to the far edges of the OBS window, instead of sub-docked to other parts, and the second is the "Automatic File Splitting" option does not stay active. That is, when I click on it and hit save settings, the second I go back into those settings, its already disabled.
Upon further inspection, it only saves if the split time or split size are increased above 0, which by setting to 0, I'd assume means its unrestricted. When I set the split time to any duration, obs crashes after that point.
I am currently on the latest version, 1.1.2.
 
Two reproducible crashes with Aitum Stream Suite on Linux (ScenesDock + CEF)

Environment: OBS Studio 32.1.2 (native RPM build, not Flatpak), Nobara Linux 44, Aitum Stream Suite 1.2.0 (built from source with BUILD_OUT_OF_TREE=On against the same OBS build), Qt 6.11.1, AMD Radeon 780M / Mesa 26.1.4, Wayland/KDE.


Bug 1 — SIGSEGV in ScenesDock when switching to a specific scene collection


100% reproducible: switching to one particular scene collection (contains a game capture, a V4L2 webcam with crop/luma-key/mask/color filters, PipeWire audio input and app-audio capture) crashes OBS immediately, every time.


Ruled out as causes: source name duplicates (checked — none in this collection), a broken ALSA microphone device (fixed a separate ALSA→PipeWire issue, crash persisted identically afterward).


Stack trace (crashing thread):
#0 QMetaObject::cast(QObject*) const (aitum-stream-suite.so)
#1 ScenesDock::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (aitum-stream-suite.so)
#2 QMetaMethodInvoker::invokeImpl(...) (libQt6Core.so.6)
#3 QMetaObject::invokeMethodImpl(...) (libQt6Core.so.6)
#4 QMetaObject::invokeMethod<void, QMetaMethodArgument>(...) (aitum-stream-suite.so)
#5 operator() (aitum-stream-suite.so)
#6 QObject::event(QEvent*) (libQt6Core.so.6)
#7 QApplicationPrivate::notify_helper(...) (libQt6Widgets.so.6)

Looks like a queued QMetaObject::invokeMethod firing on a ScenesDock (or something it references) after it's already been destroyed during the scene-collection switch — confirmed identical (same binary offsets) across three separate crash attempts.


Bug 2 — SIGTRAP / CEF fatal error when going Live with the Vertical canvas


Separate crash, also 100% reproducible: switching from the "Build" tab to "Live" (to start the vertical canvas output) crashes OBS with a CEF fatal error, even with no Browser Source added by me anywhere in the scene.


Log line right before the crash:
[FATAL:cef/libcef_dll/ctocpp/task_ctocpp.cc:37] CefTask_0_CToCpp called with invalid version -1

Stack trace (crashing thread):

#0 logging::LogMessage::HandleFatal(...) (libcef.so)
#1 logging::LogMessage::Flush() (libcef.so)
#2 logging::LogMessageFatal::~LogMessageFatal() (libcef.so)
#3 CefTask_0_CToCpp::CefTask_0_CToCpp() (libcef.so)
#4 CefCToCppRefCounted<...>::Wrap(...) (libcef.so)
#5 cef_post_task (libcef.so)
#6 QueueCEFTask(std::function<void()>) (obs-browser.so)
#7 QCefWidgetInternal::Resize() (obs-browser.so)
#8 QWidget::event(QEvent*) (libQt6Widgets.so.6)

This points to Aitum's internal browser dock trying to show/resize a CEF widget before the CEF browser thread has finished initializing — consistent with repeated Failed to create cookie manager: Browser thread not initialized warnings also seen in the log at OBS startup.


Happy to provide full coredumps, debug symbols, or test further if it helps narrow these down.
 
Aitum updated Aitum Stream Suite with a new update entry:

Version 1.2.1

  • Make main canvas a dock
  • Add scenes dock
  • Add sources dock
  • Add transitions dock
  • Add Copy Paste for OBS 32.2+
  • Add undo
    • removing scene item
    • remove filter
    • scene item order in sources panel
    • transform menu
    • blending mode
  • Add FFmpeg output
  • Add option to reorder outputs
  • Add remove confirmation for canvas and output
  • Add color format, color space and color range options to custom encoder
  • Add update question dialog
  • Add logging of...

Read the rest of this update entry...
 
Thanks for the suggestion, I'll look into that. That said, I'll keep digging into the OBS/Aitum side too and will post a new report here if I find anything else.

Update: Bug 1 (ScenesDock crash) still present in 1.2.1 — and not collection-specific

Tested with 1.2.1 (rebuilt from source, tag 1.2.1). Same environment as before: OBS Studio 32.1.2 native RPM build, Nobara Linux 44, Qt 6.11.1.

Result: the crash still happens, but this time it triggered on a different scene collection switch than before (previously: my "IterGames/Into the Dead" collection; this time: switching away from a "Genral/Zoom" collection into a "Sin Título" podcast collection). The collection that crashed last time loaded fine this time.

This suggests the bug isn't tied to a specific collection's contents — it looks like a timing-dependent race condition in ScenesDock that can fire on any scene-collection switch, which is a bit more concerning since it's not consistently avoidable by staying away from one particular collection.

Updated stack trace (identical call path to before, just new offsets from the 1.2.1 rebuild):

#0 QMetaObject::cast(QObject*) const (aitum-stream-suite.so)
#1 ScenesDock::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (aitum-stream-suite.so)
#2 QMetaMethodInvoker::invokeImpl(...) (libQt6Core.so.6)
#3 QMetaObject::invokeMethodImpl(...) (libQt6Core.so.6)
#4 QMetaObject::invokeMethod<void, QMetaMethodArgument>(...) (aitum-stream-suite.so)
#5 operator() (aitum-stream-suite.so)
#6 QObject::event(QEvent*) (libQt6Core.so.6)
#7 QApplicationPrivate::notify_helper(...) (libQt6Widgets.so.6)
#8 QCoreApplication::notifyInternal2(...) (libQt6Core.so.6)
#9 QCoreApplicationPrivate::sendPostedEvents(...) (libQt6Core.so.6)
...

Same signature as the original report: a queued QMetaObject::invokeMethod targeting ScenesDock firing after something it references has been destroyed during a scene-collection switch — just apparently able to trigger on more than one specific collection.

For reference, Bug 2 (CEF/SIGTRAP crash going Live with the Vertical canvas) hasn't been retested yet on 1.2.1 — will follow up separately once I get a chance to test that path again.

Happy to share the new coredump/stack trace in full if useful, or test any debug build / patch.
 
Minor bug:
"Group" source in the "Add Source" drop-down menu doesn't have a sub-menu (where the "New..." button is supposed to be), making it impossible to create groups.
 
Majorly annoying bug:
My dock layouts keep duplicating between "Live" and "Build" depending on which was opened first after system restart. For example if "Build" was opened first — it's gonna dupe itself onto "Live". Annoying isn't it?
Upd. Did I say "after system restart"? I meant "whenever". It seems to do it whenever it wants. Or NOT do it.
Oh, do I love this software.
 

Linked Canvases​

One thing I feel is currently missing from Aitum Stream Suite is a way to link canvases together.

With multiple canvases, for example a 16:9 main canvas and a 9:16 vertical canvas, I would like to be able to switch scenes on the main canvas and have the corresponding scene automatically switch on the linked canvas.

For example:

Main Canvas<br> ├── Starting Soon<br> ├── Gameplay<br> ├── Just Chatting<br> └── Ending<br><br>Vertical Canvas<br> ├── Starting Soon<br> ├── Gameplay<br> ├── Just Chatting<br> └── Ending<br>
If the Main Canvas switches to Gameplay, the linked Vertical Canvas would automatically switch to its own Gameplay scene.

The important part is that the scenes don't have to be identical. Each canvas can have a completely different layout, while scenes with the same name represent the same "state".

I think this would be especially useful for multistreaming between platforms like Twitch and TikTok. You could have completely independent layouts for each platform, while only having to control the main canvas.

I built a workaround for this​

I actually ended up implementing this myself:

https://github.com/nicolas-meilan/aitum-obs-canvas-synq

My solution mirrors the scenes between the different canvases and uses the scene name to determine which scene should be activated on the other canvas.

This gives me a lot of freedom. I can completely redesign the vertical scenes without having to manually synchronize scene changes every time.

I also use it together with my Twitch bot:

https://github.com/nicolas-meilan/twitchBot

This allows my bot to trigger scene changes on the main canvas, while the other canvases automatically follow.

The downside is that my implementation has to rely on OBS WebSocket to monitor the scene changes and synchronize them.

That's where I think this could fit really nicely into Stream Suite itself. Since Stream Suite already manages multiple canvases, implementing the synchronization natively could be much more robust and reliable than having users rely on an external Python script and OBS WebSocket.

Something as simple as being able to define:

Main Canvas<br> ↓ linked to<br>Vertical Canvas<br>
and synchronize scenes based on their names would already solve the problem.

I think this is one of those things that becomes increasingly important as you start using multiple canvases for different platforms. The ability to have independent layouts while treating them as a single stream from a scene-management perspective would make multistreaming considerably easier.

Just wanted to share the idea since I couldn't find a native way to do this currently, and I thought the workaround might also demonstrate why having this functionality directly in Stream Suite could be useful.
 
Back
Top