Vovó Hilfe

Aktionen

Eine Aktion ist ein Stück HTML, CSS und JavaScript, das im Overlay erscheint. Jede läuft für sich, ohne Netzwerk und ohne Zugriff auf Passwörter: Was sie von außen braucht, erbittet sie von Vovó.

Anfangen

„Neue Aktion“ erstellt eine leere oder eine aus einem Beispiel: Alerts und Chat, was gerade läuft, Countdown, Ziel, Verlosung, Todeszähler und andere. Das Beispiel wird eine Kopie von dir, frei veränderbar.

In drei Stufen

Nur HTML: ein <template>, das erscheint, wenn das Ereignis passiert, mit den Feldern des Ereignisses in geschweiften Klammern.

<template data-on="follow" data-seconds="5">
    <div class="alert">{user} folgt jetzt!</div>
</template>

Ein bisschen JavaScript: vovo.on("raid", (e) => { ... }) und vovo.show("name", e). Und die ganze API für den Rest.

Auslöser

Eine Aktion bekommt nur die Ereignisse in ihrer Liste der Auslöser, im Editor. Ein Pad-Button ist der Auslöser button.

Bedingungen

Das Regler-Symbol neben einem Auslöser öffnet seine Bedingungen: Der Auslöser feuert nur, wenn alle erfüllt sind. Ein Raid mit 50 oder mehr, eine Nachricht, die mit !mitmachen beginnt, die richtige Belohnung.

Timer und Tastenkürzel

Der Auslöser Timer geht in Abständen los: Seine Bedingung every sagt, wie viele Sekunden dazwischen liegen (ohne sie jede Minute). Der Auslöser Tastenkürzel feuert bei einer Tastenkombination, seiner Bedingung keys, auch mit dem Spiel im Vordergrund.

Steuerelemente

In der Karte Steuerelemente des Editors erklärt die Aktion, was das Pad ändern kann, während sie läuft: an oder aus, eine Wahl zwischen Optionen, einen Zähler (mit Ziel, wenn du magst) oder einen Text. Jedes wird in vovo.state gespeichert, unter dem Schlüssel, den der Dialog zeigt, und jede Änderung kommt als Ereignis control an, ohne dass ein Auslöser nötig ist. Die Beispiele Alerts und Chat, Follower-Ziel und Todeszähler zeigen, wie.

vovo.on("control", () =>
{
    document.getElementById("chat").hidden = !vovo.state.chat;
});

Anpassen

Eine Aktion kann sich von der Person, die sie nutzt, ändern lassen, ohne ihren Code zu öffnen: ihre Farbe, die Größe ihres Textes, ihre Schrift, eine Seite des Bildschirms, ein eigenes Bild oder ein eigener Ton. Die Palette neben dem Namen ihres Panels oder in ihrer Zeile in der Liste der Aktionen öffnet Anpassen: eine Zeile pro Einstellung, mit dem, was sie enthält, ihrem Standard, wenn er abweicht, und dem Weg zurück dorthin. Eine Änderung zeigt sich sofort in den Szenen, die die Aktion zeigen, ohne sie neu zu starten, und jede ist eine Version, die das Protokoll rückgängig macht. Gewählt wird nur an diesem Computer: Ein Handy oder eine andere Vovó sieht es nie. Das Paket der Aktion trägt die Standardwerte, nie deine Wahl; eines, das den Platz der Aktion einnimmt, behält die Wahl, für die es noch Platz hat.

Wer die Aktion schreibt, deklariert sie in der Karte Anpassen des Editors oder unter settings in ihrer action.json: jede mit einer Art (eine Farbe, eine Zahl von einem Minimum bis zu einem Maximum, an oder aus, eine Wahl, ein Text, ein Bild, ein Ton oder ein Video, eine Schrift), einem Namen, einem Schlüssel und einem Standard. Die Aktion liest sie in vovo.settings und hört das Ereignis settings, wenn sich eine ändert; ihr CSS liest sie als var(--vovo-schlüssel) (eine Zahl mit ihrer Einheit, etwa 32px), und ein An oder Aus oder eine Wahl als Attribut der Seite, für Selektoren:

.chat
{
    color: var(--vovo-color);
    font-size: var(--vovo-size);
    font-family: var(--vovo-font), sans-serif;
}
html[data-vovo-side="Right"] .chat
{
    right: 40px;
}

Eine Einstellung kann auch eine Kamera sein: Wer die Aktion nutzt, wählt unter Anpassen eine Kamera des eigenen Computers, und die Aktion zeigt sie dort, wo sie sie platziert (vovo.camera.place, mit der Berechtigung camera.show). Eine Aktion kommt ohne Kamera und erfährt nie, welche gewählt wurde, und sieht auch ihre Bilder nicht: vovo.settings sagt nur, ob eine gewählt ist, als true oder false. Das Beispiel „Kamera“ ist eine Kamera in einem Rahmen.

Panels

Was ein Button nicht fassen kann (die Namen einer Verlosung, die Ziele mit ihren Zahlen, ein Druck, der zweimal fragen soll), kommt in das Panel der Aktion: panel in ihrem Manifest, gezeigt unter Panels in der Seitenleiste (sein Symbol am rechten Rand des Fensters, da, solange eine Aktion ein Panel hat). Ein Panel ist eine Liste von Teilen, die Vovó zeichnet: heading und note, ein control über seinen Schlüssel, ein button (mit confirm fragt er erst „Sicher?“), ein form mit bis zu vier Feldern und eine list, gelesen aus vovo.state (ihr key und ein path darin), jede Zeile mit bis zu drei Buttons.

Eine Aktion mit viel zu bieten teilt es auf zwei Arten auf. { "kind": "panel", "label": "Verlosung", "icon": "gift" } beginnt ein weiteres Panel: einen eigenen Eintrag unter Panels, mit seinem Namen und seinem Symbol (eines von Vovós Symbolen nach Namen oder ein Emoji; ohne eines das Symbol des ersten Pad-Buttons der Aktion). Die Teile danach, bis zum nächsten, gehören ihm, und die vor dem ersten stehen oben in jedem. Innerhalb eines Panels beginnt tab einen Abschnitt (bis zu zwölf): Die Teile danach, bis zum nächsten Tab, zeigen sich, solange er gewählt ist, und die vor dem ersten Tab in jedem. So ist eine Verlosung ein Panel mit einem Abschnitt für die Ziehung, einem für wer dabei ist und einem für wer gewonnen hat, statt einer langen Seite. Eine Aktion, die kein { "kind": "panel" } deklariert, hat eines, nach ihr benannt.

Der Kopf von Panels nennt das vordere; ein Druck dort listet alle, jedes mit der Angabe, ob eine offene Szene es zeigt und wessen es ist, mit einer Suche, sobald es mehr als acht sind. Abschnitte erscheinen als Tabs unter dem Kopf: die, die passen, und der Rest unter „Mehr“. Eine Überschrift öffnet eine Gruppe: Die Teile danach teilen sich eine Karte, aufeinanderfolgende Buttons eine Zeile, eine Liste ist eine eigene Karte mit ihrer Anzahl, und eine Notiz steht zwischen den Karten. Ein Formular mit einem Feld wird im Panel selbst ausgefüllt, Enter schickt es ab, ebenso ein Text-Steuerelement; ein Formular mit mehr Feldern öffnet ein kleines Fenster. Ein Zähler mit Ziel (max) zeigt, wie weit er ist.

Eine Liste kann Tausende Zeilen haben. Eine mit mehr als acht hat eine eigene Suche, die sichtbar bleibt, während die Liste scrollt. Ist sie das letzte Teil ihres Abschnitts, zeigt sie sich ganz; mit Teilen danach zeigt sie ihre ersten acht Zeilen und den Weg zu allen, also setze eine lange Liste ans Ende oder in einen eigenen Abschnitt.

Was dort getan wird, kommt als Ereignis panel an, ohne dass ein Auslöser nötig ist: sein name, die values eines Formulars und item und index einer Zeile. Die Namen gehören der Aktion, egal welches Panel sie zeigt. Eine Aktion hört ihr Panel nur, solange eine offene Szene sie zeigt, in OBS oder im Vorschaufenster: ohne eine sagt das Panel es, seine Buttons warten blass, und „Vorschau öffnen“ öffnet die der Szene; seine Steuerelemente und Listen zeigen sich weiter, da Vovó sie aufbewahrt. Nur wer den Stream führt, nutzt es, hier oder auf einem Gerät, dem du die Panels erlaubt hast, und während der Panik erreicht nichts die Aktion.

Im Chat schreiben

Mit der Berechtigung chat.send schreibt vovo.chat.send("...") als du in den Chat des Streams. Vovó hält das Tempo (20 Zeilen in 30 Sekunden) und schreibt einmal, worum zwei Seiten bitten, die die Aktion zeigen; zwei Drücke auf einen Button sind zwei Zeilen. Das Beispiel Chat-Erinnerung zeigt, wie. Mit { as: "persona" } geht die Zeile stattdessen über das eigene Twitch-Konto der Persona (Integrationen, unter Twitch): was die Persona sagt, ohne dass es eine ihrer Antworten ist, etwa eine Zeile, die jemand für sie tippt. Solange dieses Konto nicht verbunden ist, wird nichts geschrieben, auch nichts als du an ihrer Stelle.

Vovó unterscheidet den Aufruf einer Seite von dem einer anderen anhand des Ereignisses, das die Aktion gerade behandelte, als sie aufrief. Ein späterer Aufruf, nach einem await oder in einem Timer, sagt mit { event: e }, auf welches Ereignis er antwortet, wobei e das ist, was deine Funktion bekommen hat: vovo.chat.send("Willkommen!", { event: e }). Dasselbe gilt für vovo.emit, vovo.pad.play, vovo.webhook.send, vovo.draw, vovo.media.play und die OBS-Aufrufe. Ohne das würden zwei Seiten die Zeile zweimal schreiben, und der Link einer Moderatorin würde in der Glocke warten.

Das Mikrofon, der Bildschirm und wie du dich bewegst

Eine Aktion kann verfolgen, wie laut dein Mikrofon ist (audio.level), die Farbe des Bildschirms (screen.color) und wie du dich in einem Spiel bewegst (input.move): wie weit sich die Kamera gedreht hat, wohin du läufst und ob du springst, von der Maus, W, A, S und D oder den Pfeiltasten und einem Controller, damit eine Szene mit der Kamera schwingt. Die Beispiele „Bildschirmglühen“ und „Kamerawippen“ zeigen, wie. Vovó liest jedes nur, solange ein offenes Overlay eine Aktion zeigt, die darauf wartet, und die Statusleiste zeigt sein Symbol in ihrer Mitte, solange es das tut, mit den Aktionen im Tooltip. Von der Tastatur liest es nur die Bewegungstasten, als Richtung, nie welche Taste, und nicht, solange Vovós eigenes Fenster vorne ist, wo das Getippte die Szene schwingen ließe; Maus und Controller bewegen sie dann weiter, außer „Bewegung pausieren, solange Vovó vorne ist“ ist an (Einstellungen, Allgemein). Der Ton verlässt den Computer nie, nur wie laut er ist.

Clips und Videos

Mit der Berechtigung media.play zeigt vovo.media.play(link) einen Twitch-Clip, ein Twitch-Video oder ein YouTube-Video in seinem offiziellen Player, wo vovo.media.place(element) ihn platziert hat, mit Ton. Eine Aktion, die nur die bedienende Person auslöst, spielt ihn sofort; jede andere, die jemand im Chat ausgelöst haben könnte, wartet in der Glocke, bis du (oder ein Gerät, das freigeben darf) ihn durchlässt. Der Player weiß nicht, wann ein Clip endet: Gib { seconds: 60 } an oder rufe vovo.media.stop() auf. Das Beispiel Clips auf einem Fernseher nimmt !clip und einen Link von Moderatoren an.

Deine Moderatoren sind die Leute, denen du den Chat anvertraust: Unter Integrationen, bei Twitch, lässt „Links von Moderatoren spielen sofort“ einen Link, den einer von ihnen (oder du) einfügt, ohne Warten auf Sendung gehen, wenn die Aktion ihn wegen dessen Nachricht zeigt. Aus, bis du es einschaltest; die Links aller anderen warten weiterhin.

Sprachanrufe

Mit der Berechtigung call kann eine Aktion dich mit einem KI-Modell ans Telefon holen, auf Sendung: Du sprichst ins Mikrofon, es antwortet laut, und der Stream hört beide. vovo.call.start({ instructions, voice }) öffnet den Anruf mit deinem OpenAI-Schlüssel (Integrationen, KI); instructions sagt, wer das Modell ist und wie es spricht. Der Anruf öffnet stumm, damit die Aktion erst ein Telefon klingeln lassen kann; vovo.call.answer() öffnet das Mikrofon und lässt das Modell zuerst sprechen, vovo.call.tell() sagt ihm während des Anrufs etwas, und vovo.call.end() legt auf. call.started, call.answered, call.text (das Gesagte, aufgeschrieben) und call.ended sagen, was passiert.

Was das Modell sagt, ist zu hören, während es gesagt wird, ohne dass jemand es vorher liest, also beginnt ein Anruf nur durch etwas, das du von Hand getan hast: ein Pad-Button, ein Tastenkürzel, ein Steuerelement oder das Panel der Aktion. Chat, Belohnungen und Webhooks starten keinen. OpenAI berechnet ihn sekundengenau ab dem Öffnen, also hat jeder Anruf eine Obergrenze (höchstens fünf Minuten). Solange einer läuft, zeigt die Statusleiste ein rotes Telefon: Drück es, oder Panik, um sofort aufzulegen. Nutze Kopfhörer, sonst hört sich das Modell selbst aus deinen Lautsprechern.

Webhooks

Mit der Berechtigung webhook bittet vovo.webhook.send("name", { ... }) Vovó, das JSON an einen Webhook zu senden, der unter Einstellungen, Webhooks, eingerichtet ist: den eines Discord-Kanals, eine Automatisierung, ein Werkzeug in deinem Netzwerk. Die Adresse bleibt im Tresor dieses Computers, außerhalb von Sicherungen und Paketen, und die Aktion kennt nur den Namen. Das Beispiel Auf Discord ankündigen zeigt, wie.

Eingehende Webhooks

Andersherum sagt ein Dienst im Internet Vovó Bescheid: Lege unter Einstellungen, Webhooks, einen eingehenden Webhook an, kopiere seine Adresse und füge sie im Dienst ein (eine Spendenseite, ein Shop, ein Skript). Jeder Aufruf erreicht die Aktionen als Ereignis webhook, mit hook (dem Namen) und data (dem Gesendeten). Nutze den Auslöser webhook mit der Bedingung, dass hook der Name ist. Jeder Webhook hat eine eigene Adresse: Gib sie nur dem Dienst, der ihn aufruft. Das Relay hält einen Aufruf höchstens einen Tag lang für diesen Computer versiegelt, also kommt einer, der bei geschlossener Vovó gemacht wurde, an, wenn sie öffnet. Was ankommt, ist Text von jemand anderem: Aktionen zeigen ihn nur als Text.

Aus einem Programm auf diesem Computer

Ein Programm auf diesem Computer kann einer Aktion sagen, was es weiß: ein Skript, das das Log eines Spiels liest, ein Werkzeug, das den Punktestand eines Turniers führt, ein Makro. Die Aktion hört auf ein Ereignis mit eigenem Namen, unter den Auslösern in ihrer action.json (wie in einem Ordner, dem vovo dev folgt):

"triggers": ["score"]

und hört es wie jedes andere:

vovo.on("score", (e) =>
{
    document.getElementById("home").textContent = e.home;
    document.getElementById("away").textContent = e.away;
});

Das Programm sagt es mit vovo emit, dem Namen und den Feldern:

vovo emit score home=2 away=1

Eine Zahl, true und false kommen an, wie sie sind, alles andere als Text. Listen und Objekte gehen ganz als JSON, so ruft ein Programm es auf:

import json, subprocess
subprocess.run(["vovo", "emit", "score", "--fields", json.dumps({"home": 2, "away": 1})])

Es sagt, welche Aktionen es gehört haben, und schlägt fehl (Exitcode 1, mit dem Grund), wenn keine es täte: Keine Aktion hat diesen Namen unter ihren Auslösern, ihre Bedingungen sind nicht erfüllt, oder keine offene Seite zeigt sie. Es geht dorthin, wohin das eigene vovo.emit einer Aktion ginge, nie während der Panik, höchstens 30 in 10 Sekunden, und das Protokoll sagt, dass die Kommandozeile es ausgelöst hat. Eine Aktion nur für die bedienende Person hört es nicht. Was ein Programm sendet, ist dessen Text: Die Aktion zeigt ihn nur als Text. Um so zu tun, als sei ein Ereignis der API passiert, etwa ein Follow, nutze vovo simulate.

Vorschau und Simulieren

Der Editor zeigt die Aktion live, während du tippst, und die Buttons Simulieren lösen die Auslöser aus, ohne auf das echte Ereignis zu warten, und bewegen die Steuerelemente, wie der Pad-Button es täte. Nichts in der Vorschau erreicht den Stream. Das Symbol in der Ecke des Codes oder der Vorschau gibt ihr das ganze Fenster; dasselbe Symbol oder Esc stellt sie wieder neben das andere.

Screenreader

Screenreader können den Code-Editor nicht lesen. Der Button Nur Text über dem Code setzt an seine Stelle ein Textfeld, das Sprachausgabe, NVDA und JAWS ganz lesen, nach Zeile, Wort und Zeichen. Es startet eingeschaltet, wenn Windows meldet, dass ein Screenreader läuft; Tab springt weiter, also rücke mit Leerzeichen ein.

Dateien

Füge im Tab Dateien des Editors Bilder, Töne, Videos und Schriften hinzu. Die Aktion nutzt sie über ihren Namen: <img src="logo.png">. Um einen ihrer eigenen Töne oder eines ihrer Videos durch Web Audio zu schicken (einen Kompressor, eine Pegelanzeige), fordere es mit crossOrigin = "anonymous" an, bevor du seinen Namen angibst: Eine Aktion läuft getrennt von allem, und für sie kommen selbst ihre eigenen Dateien von woanders, was Web Audio sonst als Stille hört.

Berechtigungen

Was die Aktion von Vovó verlangen darf, steht unter Verhalten: im Chat schreiben, einen Webhook aufrufen, den geteilten Bildschirm zeigen, eine Kamera zeigen, in OBS Quellen zeigen und Filter einschalten. Ausgeschaltet kann die Aktion es nicht.

OBS aus einer Aktion

Mit der Berechtigung obs.toggle blendet vovo.obs.source("Szene", "Quelle", true) eine Quelle in einer OBS-Szene ein (false blendet sie aus; ohne Angabe schaltet es um), und vovo.obs.filter("Quelle", "Filter", true) tut dasselbe mit einem Filter. Die Namen sind die von OBS, egal wie groß geschrieben und mit welchen Akzenten; einer, den OBS nicht hat, wird in der Konsole genannt, mit dem gemeinten. Mehr erreicht eine Aktion in OBS nicht: Sie kann den Stream nicht stoppen und seinen Schlüssel nicht lesen.

Nur für die bedienende Person

Unter Verhalten sorgt „Nur für die Person, die den Stream führt“ dafür, dass die Aktion nur vom Pad, von Tastenkürzeln, Timern und ihren Steuerelementen ausgelöst wird: nie von Zuschauern, dem Chat, Belohnungen, Webhooks oder dem Ereignis einer anderen Aktion. Nutze es für das, was niemand, der zuschaut, tun können sollte, etwa den Chat leeren oder Szenen wechseln.

Versionen

Jedes Speichern behält eine Version. „Verlauf“ holt jede davon zurück.

Pakete

Das Export-Symbol in der Liste der Aktionen schreibt die Aktion in ein .zip mit ihrem Code und ihren Dateien, zum Weitergeben. Unter Verhalten gehen Autor, Website und eine Zeile dazu, was sie tut, mit, damit, wer sie hereinholt, weiß, was sie ist und woher sie kommt. „Aktion importieren“ zeigt, was das Paket mitbringt und was es verlangt, bevor es behalten wird, und öffnet die Aktion im Editor: Lies sie, bevor du sie nutzt. Ein Paket mit dem Namen einer Aktion, die du hast, ist sehr wahrscheinlich diese Aktion in einer neueren Version, also bietet es an, ihren Platz einzunehmen: Die Aktion behält ihre Szenen, Buttons und ihren Zustand, und ihre bisherige Version bleibt in ihrem Verlauf. Im Terminal tun vovo export und vovo import dasselbe, und vovo import --replace nimmt den Platz der Aktion mit seinem Namen ein. Ein Paket, das für andere gemacht ist, kann unter Verhalten eine ID nennen, den Namen seines Autors und den der Aktion mit einem Punkt dazwischen (example.raffle). Seine nächste Version findet dann die Aktion, die sie aktualisiert, auch nachdem du sie umbenannt hast, und zwei gleichnamige Aktionen verschiedener Autoren nehmen nie den Platz der jeweils anderen ein; vovo import --replace richtet sich ebenfalls danach. So oder so sagt der Import, welche Version den Platz welcher einnimmt, und weist darauf hin, wenn die Datei dieselbe oder eine ältere Version ist, und was du unter Anpassen gewählt hast, bleibt überall dort, wo die neue Version diese Einstellung noch hat. Ein Paket kann sagen, unter welcher Lizenz es weitergegeben wird: der Name einer Lizenz oder eine eigene Zeile unter Verhalten, und der ganze Text der Lizenz, dort aus einer Datei gewählt oder in einem Ordner als LICENSE neben action.json abgelegt. Wer die Aktion hereinholt, sieht die Zeile und liest den Text im Importdialog, bevor sie hereinkommt. Vovó sagt, was du geschrieben hast, und verpflichtet niemanden dazu: Sie prüft keinen Schlüssel, kein Konto und keinen Kauf, und der Verkauf einer Aktion geschieht außerhalb von Vovó. Das Kopieren-Symbol daneben dupliziert die Aktion und öffnet die Kopie im Editor, um eine Variante von einer funktionierenden aus zu beginnen: Code, Dateien und Auslöser kommen mit; Zustand, Szenen und Buttons nicht, und ein Tastenkürzel-Auslöser kommt ohne seine Kombination, damit eine Taste nicht beide auslöst.

In deinem eigenen Editor

Eine Aktion lässt sich im Editor deiner Wahl schreiben oder mit einem eigenen Build: Lege ihre Teile in einen Ordner, wie ein Paket sie enthält (action.json, index.html, style.css, script.js und files/), und führe im Terminal vovo dev mit dem Ordner aus. Vovó öffnet ihren Editor mit der Aktion dieses Namens, erstellt sie aus dem Ordner, wenn das Profil keine hat, und zeigt jede im Ordner gespeicherte Änderung sofort in der Vorschau; Simulieren funktioniert wie immer. Wie eine hier getippte Änderung erreicht sie den Stream erst, wenn du Speicherst. vovo dev stop, oder Nicht mehr folgen oben im Editor, gibt den Ordner frei.

vovo new <Ordner> legt diesen Ordner für dich an, leer oder aus einem der Beispiele (vovo new --list nennt sie, --from goal nimmt eines), und vovo check <Ordner> sagt auf einmal alles, was an einem Ordner oder Paket falsch ist, ohne etwas anzulegen oder zu öffnen: jedes Problem mit seiner Datei, und was Vovó annehmen und übergehen würde, etwa einen Schlüssel, mit dem sie nichts anfangen kann. Beide antworten auch, wenn Vovó geschlossen ist. vovo export <Aktion> <Ordner> schreibt eine Aktion, die du schon hast, als solchen Ordner.

vovo dev schreibt außerdem vovo.d.ts in den Ordner, die API, wie diese Vovó sie hat, und eine jsconfig.json, wenn es keine gibt, damit ein Editor wie VS Code vovo., die Namen der Ereignisse in vovo.on(" und die Felder jedes Ereignisses ergänzt. Keine der beiden gehört zur Aktion, und ein Paket trägt sie nie; unter Versionskontrolle behalte oder ignoriere sie, wie du magst. Damit ein falsches Feld unterstrichen wird, füge "checkJs": true zu den compilerOptions der jsconfig hinzu.

Es schreibt dort auch action.schema.json, ebenfalls kein Teil der Aktion: Mit "$schema": "./action.schema.json" am Anfang der action.json ergänzt der Editor ihre Schlüssel, bietet die Ereignisse und Berechtigungen beim Namen an und unterstreicht, was Vovó ablehnen würde.

Die Vorschau öffnet sich auch in deinem Browser, unter der Adresse, die vovo dev ausgibt, oder über den Pfeil in der Ecke der Vorschau: derselbe Entwurf, vom selben vovo ausgeführt wie auf Sendung, bei jeder Änderung neu geladen, von Simulieren erreicht, und mit den eigenen Entwicklerwerkzeugen des Browsers (Konsole, Haltepunkte, Elemente).

Um sie im Stream zu zeigen

Die Aktion muss in einer Szene sein, und die Szene in OBS.