OhMyGame
OhMyGame is the open-source studio for making games with AI. Design, build, playtest, and publish games in one app, with your own model keys.
KERS Subsystems ist ein Live-Telemetrie-Overlay für F1 26: Timing Tower, Trackmap, Battle-Boxen, Boxenstopp-Karten und mehr — als Fenster über dem Spiel und als eigenes Fenster für die Aufnahme in OBS
Translation pending
GamesHTML · C++GitHub @KERSEXOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
KERS Subsystems ist ein Live-Telemetrie-Overlay für F1 26: Timing Tower, Trackmap, Battle-Boxen, Boxenstopp-Karten und mehr — als Fenster über dem Spiel und als eigenes Fenster für die Aufnahme in OBS.
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗Live-Telemetrie-Overlay für F1 26 — als Fenster über dem Spiel und als Quelle für OBS.
Das Programm hört auf den UDP-Strom des Spiels, rechnet daraus Abstände, Reifen, Strafen und Kampfgruppen aus und zeigt sie als Bausteine an: Timing Tower, Trackmap, Onboard, Lower-Third, Battle-Boxen, Boxenstopp-Karten, WM-Stand und mehr. Jeder Baustein lässt sich einzeln abschalten und frei platzieren.
Nur F1 26 (UDP-Format „2026"). Ältere Spiele senden ein anderes Format und werden nicht gelesen.
Seit 0.3.0 in C++. Server und HUD laufen als ein Programm: eine einzelne
KERS_Subsystems.exe von rund 57 MB statt 243 MB, ohne Python, ohne Chromium,
ohne zweiten Prozess. Einstellungen, WM-Stände und Fensterlage aus 0.2.x werden
unverändert weiterbenutzt — siehe Neu in 0.3.0.
Neu in 0.3.1: Code-Schutz für fremde Geräte, Team-WM und eigene Punkte, OBS-Steuerung in der Regie, Twitch-Chat ohne Einbettung und eigene Designs — mit einem Nachbau der F1-TV-Grafik. Hotlap-Karten bleiben nach der Linie 5 s stehen. Siehe Neu in 0.3.1.
Das HUD im Rennen: Timing Tower mit Strafen-Pillen, Überrundeten und Ausfällen, dazu die Trackmap und zwei Battle-Boxen.
| Quali | WM-Stand |
|---|---|
| Hotlap-/Inlap-Status, Eliminierungszone, Onboard, Hot-Lap-Boxen — und wer in der Gefahrenzone steht | Die Fahrerwertung, wie sie stünde, wenn das Rennen jetzt endet |
| Gap-Verlauf | Regie im Browser |
|---|---|
| Abstand zum Führenden über das ganze Rennen, eingeblendet aus der Regie | /regie — Kamera-Tipp, Live-Tower, Battles, Rennleitung und WM-Projektion |
Die Overlay-Bilder zeigen das eingebaute Demo-Rennen (
KERS_Subsystems.exe --demo) — erfundene Daten, keine Aufnahme aus dem Spiel.
Unter Releases die
KERS_Subsystems.exe herunterladen und in einen eigenen Ordner legen.
Im Spiel unter Einstellungen → Telemetrie die UDP-Ausgabe einschalten:
127.0.0.1, Port: 20777Spielernamen: ANKERS_Subsystems.exe starten. Es öffnet sich das Schaltbrett KERS Subsystems,
der Server läuft dabei schon mit.
Beim ersten Start fragt die Windows-Firewall, ob das Programm im Netzwerk erreichbar sein darf. Für Handy und zweiten PC (Regie, Settings) Private Netzwerke erlauben; nur am eigenen Rechner geht es auch ohne.
Handy, Tablet oder zweiter PC fragen beim ersten Aufruf nach einem Code — er steht im Schaltbrett unter Zugriff. Siehe Zugriff.
Beim ersten Start legt die EXE daneben einen Ordner data\ an. Dort liegen alle
deine Daten — Einstellungen, Fensterlage, WM-Stände, Aufzeichnungen. Die EXE
selbst enthält keine persönlichen Daten.
Das HUD ist ein rahmenloses Fenster, das immer über allem liegt. Im gesperrten Zustand gehen alle Klicks hindurch — du kannst also normal spielen, während es über dem Bild liegt. Entsperrt lässt es sich verschieben und in der Größe ändern.
Das Schaltbrett ist die Steuerung: Server starten und stoppen, HUD an und aus,
sperren, auf den Bildschirm legen, Layout, OBS und Updates. Der Knopf Log
zeigt, was Server und HUD melden — das, was früher im Konsolenfenster des
Servers stand. Dieselben Zeilen stehen in data\kers.log.
Es hat außerdem ein Symbol im Infobereich der Taskleiste.
Läuft der Server, erreichst du diese Seiten unter http://localhost:5100
(vom Handy im selben WLAN über die IP des Rechners):
| Seite | Wofür |
|---|---|
/ | Das komplette Overlay als Browserquelle |
/regie | Regie-Panel: Charts, WM-Stand, Battle- und Hotlap-Boxen von Hand ein- und ausblenden |
/settings | Alle Einstellungen: Design, Branding, Farben, Deckkraft, welche Bausteine sichtbar sind, Layout, WM-Punkte, OBS |
Ab 0.3.1 kommt nur noch dieser PC ohne Weiteres an die Seiten und die Kamera-Tasten. Jedes andere Gerät sieht beim ersten Aufruf eine Anmeldeseite und gibt dort einmal den 6-stelligen Code aus dem Schaltbrett ein (Zugriff). Danach bleibt es freigegeben.
http://<PC>:5100/?key=…) — die kommt als URL in die Browserquelle.
Für einzelne Bausteine den Pfad tauschen und ?key=… behalten.--url): Im Schaltbrett dort steht unter
Zugriff ein Feld für den Code des Servers.Fremde Webseiten im Browser dieses PCs kommen ebenfalls nicht mehr an den Server (Prüfung von Herkunft und Inhaltstyp, Schutz gegen DNS-Rebinding).
Der WM-Stand zeigt Fahrer, Teams oder beides im Wechsel (alle 8 s) —
umschalten in /settings unter WM-Stand oder mit dem Knopf WM: … in der Regie.
Die Team-Wertung ist die Summe der Fahrer eines Teams.
Eigene Punkte trägst du in /settings für die gewählte WM-Datei ein (P1–P20);
alle Felder leer = Standard 25-18-15-12-10-8-6-4-2-1. Sie landen in der Datei
selbst, gehen beim Weitergeben also mit. Von Hand sieht das so aus:
{
"title": "Fahrerwertung",
"points_system": { "1": 20, "2": 15, "3": 12 },
"drivers": [ { "name": "KERS", "team": "Red Bull", "base_points": 25, "in_game_name": "KERS_EX" } ],
"teams": [ { "name": "Red Bull", "base_points": 40 } ],
"teams_title": "Konstrukteure"
}
teams (optional) ersetzt die Basis-Summe eines Teams — für Ligen, in denen Fahrer
gewechselt haben. teams_title (optional) ist die Überschrift der Team-Ansicht.
Alte Dateien ohne diese Felder rechnen genau wie bisher.
Wie das HUD und das OBS-Fenster aussehen, legt ein Design fest — Auswahl in
/settings unter Design. Eingebaut sind:
Eigenes Design: in /settings ein Design Als eigenes Design kopieren. Der
Ordner liegt dann unter data\designs\<Name> — mit design.json (Farben,
Deckkraft, Ecken, Schriften), einem Ordner fonts\ für eigene Schriften und der
kompletten Szene unter qml\. Jede Datei dort ersetzt die eingebaute. Nach einer
Änderung im Schaltbrett Neu laden. Alles Weitere steht in der README.txt im
Ordner.
Die Browserquelle übernimmt von einem Design nur die Farben.
⚠ Ein Design enthält QML, also Programmcode. Installiere nur Designs von Leuten, denen du vertraust.
Seit 0.2.0 bestimmst du selbst, wo jeder der 13 Bausteine sitzt.
Mit der Maus: im Schaltbrett auf Layout bearbeiten. Das HUD entsperrt sich dabei selbst, alle Bausteine bekommen einen Rahmen mit Namen, und du ziehst sie an ihren Platz. An den Ecken ziehst du sie größer und kleiner. Was gerade nichts anzeigt (die Hotlap-Boxen laufen nur in der Quali) bekommt einen beschrifteten Platzhalter, damit es trotzdem greifbar ist. Beendet wird oben mit Fertig oder mit Esc — nicht im Schaltbrett, denn das liegt währenddessen unter der bildschirmgroßen Klickfläche des HUD.
Auf den Pixel genau: in /settings gibt es zu jedem Baustein Regler für
Ankerpunkt, Versatz, Ebene und Größe.
Was liegt vorn: unter den Bausteinen steht die Liste Ebenen — oben liegt vorn, mit den Pfeilen sortierst du um. Das ändert wirklich nur die Ebene: ein Baustein, der noch auf Standard steht, behält seinen eingebauten Platz und rechnet weiter mit (der Tower folgt der Strafen-Seite, die Trackmap ihrer Position, die Pit-Projektion weicht dem Onboard aus).
Bausteine und Ebenen sind je ein Klappblock — einmal zugeklappt, bleibt es zugeklappt, auch nach dem Neuladen. Im Kopf steht trotzdem, wie viele Bausteine nicht mehr auf Standard stehen und ob die Reihenfolge eine eigene ist.
Mehrere Anordnungen: unter Eigene Layouts sicherst du die aktuelle
Anordnung unter einem Namen und holst sie mit einem Klick zurück — z.B. eine fürs
Rennen und eine für die Quali. Gesichert wird nur das Layout: Ankerpunkt, Versatz,
Ebene und Größe je Baustein. Farben, Deckkraft und Schalter bleiben unberührt,
dafür sind die Presets ganz oben da. Die Layouts liegen auf dem Server
(data\layouts.json), sind also auch vom Handy aus da.
Zurück auf Anfang: der Knopf Standard Layout neben Layout bearbeiten
stellt alle Bausteine wieder an ihren eingebauten Platz. Das betrifft nur die
Positionen — Branding, Farben und der Rest bleiben. Nur die Ebenen zurücksetzen
geht in /settings mit Ebenen auf Standard; Positionen und Größen bleiben
dabei stehen.
Ein Baustein hängt dabei nicht an festen Koordinaten, sondern an einem von neun Ankerpunkten plus Versatz. Was du unten rechts platzierst, bleibt unten rechts, auch wenn das Fenster eine andere Größe hat — praktisch, weil das HUD meist in 2560×1440 läuft und OBS in 1920×1080 aufnimmt.
Zwei Wege:
http://localhost:5100/ mit transparentem Hintergrund, oder
einzelne Bausteine über /part/<name>.OBS aus der Regie steuern (ab 0.3.1). In OBS unter Werkzeuge →
WebSocket-Server-Einstellungen den Server einschalten, dann in /settings unter
OBS-Steuerung Verbinden an (Adresse/Passwort nur nötig, wenn OBS auf einem
anderen PC läuft bzw. eins verlangt). In der Regie erscheint die Karte OBS:
Szenen umschalten, Quellen ein- und ausblenden, Audio, Übergänge, Stream und
Aufnahme starten. Mit Docks wählst du, welche Bereiche dort stehen — dazu
kommen deine eigenen Browser-Docks aus OBS (Twitch-Chats laufen dabei über den
Direkt-Chat). Das OBS-Passwort bleibt verschlüsselt auf dem PC mit KERS.
Twitch-Chat in der Regie: Vorgabe ist Direkt — KERS liest den Chat selbst (nur lesen). Das klappt auch in LibreWolf und anderen Browsern, die die Twitch-Einbettung sperren. Mit dem Knopf daneben geht es zurück zur Einbettung.
Reicht deine Aufnahmemethode den Alphakanal nicht durch, gibt es die Rückfallebene Chroma: das Overlay bekommt einen einfarbigen Hintergrund (Magenta, weil die Farbe in einem Formel-1-Overlay nicht vorkommt), den du in OBS per Farbschlüssel wegfilterst.
Beim Start sieht das Programm still nach, ob es eine neuere Fassung gibt, und meldet sich mit einem Knopf. Der Download wird gegen Größe und SHA-256 geprüft, bevor er die laufende Datei ersetzt; die alte bleibt als Rückfallebene liegen, bis die neue einmal gestartet ist. Du kannst im Schaltbrett auch gezielt eine andere Fassung wählen — auch zurück auf eine Python-Fassung 0.2.x.
Von 0.2.6 kommt man ganz normal über den Update-Knopf auf 0.3.0. Die C++-Fassung
räumt beim ersten Start die alte 243-MB-Datei (KERS_Subsystems.exe.bak) weg.
Der Server der alten Fassung (data\main.exe mit seinem Konsolenfenster) läuft
nach dem Tausch noch weiter — 0.3.0 beendet ihn vor dem eigenen Serverstart von
selbst, aber nur genau diesen aus dem eigenen Ordner.
best_lap_sectors (die Sektoren genau
der Bestrunde)./test und /opti sind nur noch auf diesem PC erreichbar; /api/track/relearn
geht nur noch per POST.http://<PC>:5100. Ein eigenes Konsolenfenster gibt es nicht mehr, dafür das
Log im Schaltbrett.data\hud_state.json
mit "server_autostart": false oder beim Start mit --no-server. Die Knöpfe
Start Server und Stop Server bleiben.C++20 mit Qt 6.11, statisch gelinkt — das Ergebnis ist eine einzelne EXE ohne DLLs.
Das Werkzeug liegt portabel unter D:\Tools und D:\Qt, installiert wird nichts:
| Was | Wo |
|---|---|
| LLVM-MinGW (clang, lld) | D:\Tools\llvm-mingw |
| CMake, Ninja | D:\Tools\cmake, D:\Tools\ninja |
| Qt 6.11.2 statisch (qtbase, qtshadertools, qtdeclarative, qtwebsockets) | D:\Qt\6.11.2-static |
Das statische Qt baut tools\build_qt_static.cmd einmalig aus den Quellen
(rund 15 Minuten; einzelne Module mit base, shader, decl, ws). Danach:
packaging\build.bat
Ergebnis: build\KERS_Subsystems.exe. Die Tests laufen mit
packaging\env.bat
ctest --test-dir build --output-on-failure
Für eine Veröffentlichung legt packaging\release.bat die EXE samt SHA-256 in
dist\ ab.
Startoptionen
| Option | Wirkung |
|---|---|
--demo / --demo quali | erfundenes Rennen, ohne Spiel und ohne Server |
--url http://…:5100 | keinen eigenen Server starten, sondern einen anderen beobachten |
--server | nur der Server, ohne HUD (mit Tray-Icon) |
--no-server | den eingebauten Server nicht automatisch starten |
--port N, --udp-port N | andere Ports (Vorgabe 5100 und 20777) |
--obs, --chroma, --unlocked, --no-panel, --hz N | wie bisher |
--qml-dir <Ordner> | die Szene aus Dateien statt aus der EXE laden — zum Bauen am QML |
Der Golden-Vergleich mit der Python-Fassung liegt in tests\golden\: eine
.f1rec-Aufnahme läuft einmal durch main.py und einmal durch kers_replay,
vergleich.py legt die Ergebnisse nebeneinander.
src/server/ UDP-Parser, Rennzustand, HTTP/SSE-Server, Routen, Recorder,
Kamera-Tasten, Streckenkonturen, Settings (früher main.py)
src/hud/ Theme, Modelle, Bausteine, Datenstrom, HUD- und OBS-Fenster
(früher hud/*.py)
src/app/ main.cpp, Schaltbrett, Tray, Updater, Log-Fenster
src/common/ Pfade (data\), JSON-Dateien, Log, hud_state.json
hud/qml/ die Overlay-Szene — dieselben QML-Dateien wie in 0.2.x
templates/, static/ Web-Overlay, Regie und Einstellungen — in die EXE eingebettet
tests/ Qt-Tests (ctest) und der Golden-Vergleich
main.py, hud/*.py die Python-Fassung 0.2.6, nur noch als Vorlage
Ports: 5100 für die Weboberfläche, 20777 für die UDP-Pakete des Spiels.
Beim Testen darf nur eine Quelle auf 20777 senden — entweder das echte Spiel oder ein Testsender. Sonst mischen sich die Daten.
Test\test.py --port 20778schickt an einen anderen Port.
Nichts kommt an. Prüfe im Schaltbrett die Statuszeile: sie zeigt getrennt, ob der Server läuft und ob UDP-Pakete ankommen. Sendet das Spiel ein anderes Format als 2026, kommen Pakete an, werden aber nicht gelesen.
Das HUD liegt hinter dem Spiel. Im randlosen Vollbild schiebt sich das Spiel manchmal nach vorn. Das HUD meldet sich alle zwei Sekunden von selbst wieder oben an; hilft das nicht, ist meist das Spiel im echten Vollbild — dann ist die Browserquelle in OBS der bessere Weg.
OBS findet das Fenster nicht. In OBS auffindbar einschalten. Dafür erscheint das HUD dann auch in der Taskleiste.
Handy zeigt „KERS Subsystems — Code“. Das Gerät ist noch nicht freigegeben: den Code aus dem Schaltbrett (Zugriff) eingeben. Steht dort „gesperrt“, unter Geräte … freigeben.
OBS-Karte in der Regie bleibt „getrennt“. In OBS den WebSocket-Server
einschalten (Werkzeuge → WebSocket-Server-Einstellungen), Port 4455. Verlangt
OBS ein Passwort, dieses in /settings unter OBS-Steuerung eintragen.
„Port belegt" beim Start. Auf 5100 oder 20777 läuft schon etwas — meist eine
alte Python-Fassung aus einem anderen Ordner (main.exe bzw. main.py) oder ein
zweites KERS. (Den data\main.exe aus dem eigenen Ordner beendet 0.3.0 selbst.)
Das andere Programm beenden, dann im Schaltbrett Start Server.
Handy erreicht die Regie nicht. Beim ersten Start hat die Windows-Firewall
gefragt; wurde dort abgelehnt, in den Firewall-Einstellungen
KERS_Subsystems.exe für Private Netzwerke freigeben.
Privates Projekt, kein offizielles Produkt von EA oder Codemasters. Alle Marken gehören ihren jeweiligen Eigentümern.
Der eigene Quelltext steht unter der MIT-Lizenz (LICENSE.txt). Die EXE enthält
statisch gelinkt Qt 6 (LGPL-3.0, https://www.qt.io/licensing) und dessen
mitgelieferte Bibliotheken (zlib, libpng, libjpeg, FreeType, HarfBuzz, PCRE2).
Weil der gesamte Quelltext offen liegt, lässt sich die EXE mit einer anderen
Qt-Fassung neu bauen, wie es die LGPL verlangt.