JOY Media mit Windows-MCP steuern
Diese Fähigkeit ist eine Methode, erlernt an JOY Media 1.1.0 Builds (Electron 44.3.0, Windows 11). Sie beschreibt einem Agenten, wie die Desktop-App ohne Berührung der echten Installation oder Daten des Benutzers ausgeführt, mit den Windows-MCP-Tools durch den Editor navigiert und ein Export anhand von Fakten statt nach Augenmaß beurteilt wird.
Verwendete Werkzeuge: Snapshot, Screenshot, Click, Type, App, Wait (Windows-MCP) sowie PowerShell für das Starten, Dateiprüfungen und ffmpeg/ffprobe.
0. Grundregeln (nicht überspringen)
- Fragen Sie den Eigentümer zuerst, bei jedem Durchlauf. Das Starten der App, Importieren und Exportieren erfordern, dass der Eigentümer am PC ist und ein klares „Go“ für diesen Durchlauf gibt. Jeweils ein Durchlauf. Niemals gegen das echte Profil des Benutzers starten.
- Berühren Sie niemals die installierte App (deren Ordner, Installationsskripte oder Deinstallationsprogramm). Stattdessen eine separate, ausgepackte Kopie ausführen (Abschnitt 1).
- Daten isolieren: Immer ein neues
--user-data-dirübergeben. Um ein bestehendes Projekt wiederzuverwenden, die App schließen, dann das alte Profil mitrobocopy /Ein einen neuen Ordner kopieren (kein/MIR, keine Löschung) und auf die Kopie starten. - Der Registrierungsschlüssel
joy://(HKCU\Software\Classes\joy) darf sich nicht ändern. Vor dem Start, nach dem Start und nach dem Schließen mitreg exportin eine neue Datei exportieren und per SHA-256 vergleichen. Bei Abweichung anhalten und den Eigentümer informieren; nur auf dessen Anweisung wiederherstellen. - Nichts löschen während des Testens (Kopien, Profile, Exporte sind Beweise). Chromium kann eigene temporäre Dateien innerhalb des neuen Testprofils bereinigen; das ist in Ordnung.
- Bei Hinweisen auf einen Absturz anhalten (GPU-Prozess beendet, Application Error-Ereignisse, Treiber-Rücksetzungen): alles aufbewahren, nicht erneut ausführen, den Eigentümer informieren.
- Niemals Geheimnisse in die App eingeben oder Token in Notizen ablegen.
1. Eine sichere App-Kopie erstellen
Den gewünschten Commit in einen kurzen Pfad (unter 260 Zeichen) bauen oder entpacken, z. B. C:\jg\app-<sha>:
git archive <sha>in ein tar-Archiv, nachC:\jg\<name>entpacken.pnpm install --offline --frozen-lockfile(benötigt einen warmen pnpm Store).- Den Electron
dist-Ordner undpath.txtaus einer vorhandenen Kopie kopieren (node_modules\.pnpm\electron@<ver>\node_modules\electron; Offline-Installationen laden Electron nicht herunter). SHA-256 derelectron.exeprüfen. pnpm build, dannpnpm --filter @joy-media/desktop package:unpacked.robocopy apps\desktop\dist\joy-media-unpacked C:\jg\app-<sha> /E.
Eine ausgepackte Kopie läuft mit isPackaged = false und registriert daher nicht das joy://-Protokoll. Dennoch den Schlüssel prüfen.
2. App starten (PowerShell)
$env:NODE_ENV = 'production'
$app = 'C:\jg\app-<sha>'
Start-Process -FilePath '<Pfad zu>\electron.exe' `
-ArgumentList @($app, '--user-data-dir=C:\jgp\<neues-profil>', '--enable-logging=stderr') `
-WorkingDirectory $app `
-RedirectStandardOutput 'C:\jgp\run\stdout.log' -RedirectStandardError 'C:\jgp\run\stderr.log' -PassThru
--enable-logging=stderr schreibt console.*-Ausgaben des Renderers in die Fehlerdatei (nützlich für temporäre Diagnosen). Prüfen, dass keine Prozesskommandozeile --joy-media-gpu-encode-fallback enthält (das wäre der Fallback-Neustart, kein Standardstart). Der Fenstertitel lautet JOY Studio. Bei einem neuen Profil öffnet die App die Projekte-Seite; bei einem kopierten Profil stellt sie das letzte Projekt wieder her.
3. Das Fenster mit Windows-MCP steuern
Skalierung: Screenshots sind etwa 2,56-mal kleiner als der reale Bildschirm. Zum Klicken immer die echten Koordinaten aus Snapshot verwenden, niemals Pixel eines Screenshots. Nach jedem Seitenwechsel einen kleinen Screenshot (scale 0.4) aufnehmen.
Reihenfolge: Fensteraktionen nur einzeln ausführen. Ein Batch, der direkt nach einem Export gesendet wurde, hat schon einmal dazu geführt, dass Klicks und Tippeingaben im falschen Projekt landeten. App switch "JOY Studio" schlägt gelegentlich mit „Ungültiges Fensterhandle“ fehl; wenn das Fenster bereits im Vordergrund ist, fortfahren.
Die Koordinaten unten stammen von einem 4920x2160 Bildschirm mit dem JOY-Fenster in Standardgröße und -position. Sie sind eine Ausgangskarte, kein Versprechen: immer einen Snapshot aufnehmen und die Elementliste verwenden, wenn etwas anders aussieht.
| Aktion | Position (echte Koordinaten) |
|---|---|
| Dateimenü | (910, 288) |
| Datei > Projekte-Bibliothek | (1077, 358) |
| Schaltfläche „Neues Projekt“ | (3023, 311), dann Namensfeld (1165, 727) anklicken, Namen mit press_enter eingeben |
| Erste Projektkarte | (1680, 873) |
| Timeline „Medien importieren“ (leere Timeline) | (2199, 1312) |
| Datei-öffnen-Dialog: Namensfeld / Öffnen | (1587, 1208) / (2268, 1264) |
| „Export MP4“ | (2672, 288) |
| Clip auswählen, Skalierung prüfen | Clip-Leiste anklicken (1762, 1349); der Inspektor zeigt Skalierung X/Y |
| App-Fenster schließen | (3143, 288) |
| Speichern-Dialog: Namensfeld / Speichern | etwa (1717, 1058) / (2283, 1266) |
Rezept für einen Fall: Projekte-Bibliothek > Neues Projekt > Name > Medien importieren > vollständigen Dateipfad eingeben > Öffnen (der Clip landet auf der Timeline) > Vorschau prüfen > „Export MP4“ > warten > Dialog speichern > überprüfen.
Der Speichern-Dialog. Der Export endet in einem normalen Windows-Speichern-Dialog (Standardordner Downloads, ein vorgeschlagener Name ohne Erweiterung). Die Datei erreicht den Desktop erst, wenn jemand sie speichert. Ein Verzug zwischen „Worker fertig“ und „Datei auf dem Desktop“ liegt also nur an diesem wartenden Dialog. Einen Screenshot aufnehmen, wenn der Worker fertig sein sollte; entweder speichert der Eigentümer, oder (mit dessen OK) den vollständigen Zielpfad ...\Desktop\<vorgeschlagener-Name>.mp4 in das Namensfeld eingeben und auf Speichern klicken. Job-Zeiten in der App-Datenbank werden durch die Wartezeit nicht beeinflusst.
4. Vor, während und nach einem Durchlauf
Vorher: reg export des joy://-Schlüssels und Hashbildung; das echte Profil des Benutzers und alle Beweisordner auflisten (scripts/list-tree.ps1), um nachweisen zu können, dass sich nichts geändert hat.
Währenddessen (lange Exporte): scripts/sampler.ps1 -Pattern '*<profil>*' -Out <csv> -Stop <stopdatei> im Hintergrund starten. Es zeichnet einmal pro Sekunde Arbeitsmenge, Private Bytes, CPU-Sekunden, NVENC-Sitzungen und GPU-Nutzung pro Electron-Prozess auf. Die Stop-Datei erstellen, um es zu beenden.
Nachher: App schließen (Fenster-Schließen-Button), bestätigen, dass kein electron-Prozess mehr läuft, den Schlüssel erneut exportieren, die Ordner erneut auflisten und via Diff vergleichen, prüfen, dass keine *.upload-Überreste im Profil sind, und nach Anwendungsfehler/WER- und Display/nvlddmkm-Ereignissen suchen (ignorieren von irrelevantem Rauschen wie Docker).
5. Export anhand von Fakten beurteilen
ffprobe -show_streams: Codec, Größe, Frames, Dauer, Farb-Tags (color_space,color_primaries,color_transfer,color_range).- Vollständige Dekodierung muss sauber sein:
ffmpeg -v error -i out.mp4 -f null -und Exit-Code 0. - Datei hashen (
Get-FileHash); identische Layouts von unterschiedlichen Builds sollten identische Hashes ergeben, wenn der Codepfad gleich ist. - Phasenzeiten aus der app-eigenen Datenbank (einer Kopie von
joy-media.sqlite3plus deren-wal/-shm, schreibgeschützt geöffnet):scripts/export-times.py <kopie>gibt pro Export die Browser-Phase (Klick-Zeitstempel bis gestaffeltes Original), gestaffelte Bytes und Worker-Zeit aus. Der Klick-Zeitstempel ist die 13-stellige Zahl im Dateinamen. - Farbgenauigkeit: Testdateien mit
scripts/fxgen.py <ordner>erstellen (einfarbige Farbfelder mit bekannten sRGB-Werten plus einem binären Frame-Zähler; BT.709, BT.601, ungetaggtes SD, Full Range, gedreht, VFR, 10-Bit, HEVC, VP9, AV1, interlaced, ein Übergangspaar und ein Audio-Raten-Paar), mitscripts/fxcheck.py <ordner>prüfen, dann einen Export mitJOY_FX_DIR=<ordner> python -I scripts/fxplace.py <export.mp4> <testdatei-name> [frame]bewerten. Es findet, wo der Clip gelandet ist (Clips, die kleiner als die Leinwand sind, liegen 1:1 oben links, nicht skaliert) und gibt die schlechteste/mittlere Abweichung unter vier Matrix/Range-Messungen aus; die richtige Messung sollte innerhalb von etwa 3 Stufen liegen. - Audio: Tonhöhe über die Nulldurchgangsrate von
astats, Pegel über RMS; Mono-Quellen werden stereo (etwa 3 dB leiser pro Kanal).
6. Bekanntes Verhalten, das man sich merken sollte (JOY Media 1.1.0 Builds)
- Jeden Farbtest in einer neuen App-Sitzung ausführen. Auf dem getesteten Rechner (RTX 5070 Ti, Electron 44.3.0) wird der erste Export nach dem Start als BT.709 (Tag bt709) codiert; spätere Exporte in derselben Sitzung werden als BT.601 (Tag smpte170m) codiert, fallen größer und langsamer aus bei einem langen Layout und haben andere Bytes. Ein Diagnose-Build zeigte, dass der Capture-Canvas-Frame das erste Mal RGBA (GPU-gestützt) und danach BGRA (CPU-gestützt) ist; die App setzt selbst keinen Farbraum. Die Umwandlung zu NV12 BT.709 innerhalb der App machte jeden Export identisch.
- Ungetaggtes SD-Video wird als BT.709 gelesen (Farbverschiebungen von bis zu etwa 20 Stufen).
- Eine Quelle ohne Tonspur exportiert stille Stereospur (AAC).
- Builds nur auf gleicher Grundlage vergleichen: gleiches Layout, gleiche Position in der Sitzung (erster Export vs. erster Export), Fenster im Vordergrund und fokussiert (ein nicht fokussiertes Fenster kann etwa 30 % langsamer sein), eine Kopie desselben Profils.
- Andere Agenten oder Chat-Fenster auf demselben Desktop können den Fokus stehlen: vor dem Klicken einen Screenshot machen.
- Der erste Klick auf ein Fenster fokussiert es möglicherweise nur.
7. So berichten
Angeben, was ausgeführt wurde (Build, Profil-Kopie, Layout), die Zahlen (Phasenzeiten, Spitzenspeicher, Größen, Tags), die bestandenen Prüfungen (joy://-Schlüssel unverändert, Ordner-Diffs leer, Dekodierung sauber), was nicht verifiziert wurde, und die eine Entscheidung, die vom Eigentümer benötigt wird. „Ein Durchlauf pro Build“ sagen, wenn das alles ist, was man hat.