Communitygithub.com

hadimoti/joy-media-windows-mcp

Pilotez l'application de bureau Electron JOY Media (JOY Studio) sous Windows avec les outils Windows-MCP. Lancez une copie de test isolée, créez un projet, importez des médias, cliquez sur Exporter MP4, enregistrez la boîte de dialogue Windows, puis vérifiez le résultat (ffprobe, décodage complet, patches de couleur, timing depuis la base de données de l'application).

Qu'est-ce que joy-media-windows-mcp ?

Ce skill est une méthode apprise sur les builds JOY Media 1.1.0 (Electron 44.3.0, Windows 11). Il indique à un agent comment exécuter l'application de bureau **sans toucher à l'installation réelle de l'utilisateur ni à ses données**, naviguer dans l'éditeur avec les outils Windows-MCP et évaluer une exportation sur la base de faits plutôt que d'apparences. Les outils utilisés incluent `Snapshot`, `Screenshot`, `Click`, `Type`, `App`, `Wait` (Windows-MCP), ainsi que PowerShell pour le lancement, les vérifications de fichiers et `ffmpeg`/`ffprobe`. Le skill est conçu pour être exécuté sur Windows avec des builds non packagés de l'application, en utilisant un répertoire de données utilisateur isolé. Il couvre le lancement, la navigation dans l'interface, la gestion des boîtes de dialogue d'enregistrement, la vérification des fichiers exportés (codec, étiquettes de couleur, hachage) et l'analyse des performances via la base de données de l'application. Les tests de couleur utilisent des scripts Python (`fxgen`, `fxcheck`, `fxplace`) pour évaluer la précision des couleurs sur différentes matrices et gammes. Le skill insiste sur les règles de base : ne jamais toucher à l'application installée, isoler les données, ne rien supprimer et signaler tout crash.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/hadimoti/joy-media-skill/tree/HEAD/skills/joy-media-windows-mcp

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Piloter JOY Media avec Windows-MCP

Ce skill est une méthode, apprise sur les builds JOY Media 1.1.0 (Electron 44.3.0, Windows 11). Il indique à un agent comment exécuter l'application de bureau sans toucher à l'installation réelle de l'utilisateur ni à ses données, cliquer dans l'éditeur avec les outils Windows-MCP et juger une exportation sur la base de faits plutôt que d'apparences.

Outils utilisés : Snapshot, Screenshot, Click, Type, App, Wait (Windows-MCP), ainsi que PowerShell pour le lancement, les vérifications de fichiers et ffmpeg/ffprobe.

0. Règles de base (à ne pas sauter)

  • Demandez d'abord au propriétaire, à chaque exécution. Le lancement de l'application, l'importation et l'exportation nécessitent que le propriétaire soit devant le PC et donne un « go » clair pour cette exécution. Une seule exécution à la fois. Ne lancez jamais l'application avec le profil réel de l'utilisateur.
  • Ne touchez jamais à l'application installée (son dossier, ses scripts d'installation, son désinstalleur). Utilisez plutôt une copie non packagée séparée (section 1).
  • Isolez les données : passez toujours un nouveau --user-data-dir. Pour réutiliser un projet existant, fermez l'application, puis robocopy /E l'ancien profil vers un nouveau dossier (pas de /MIR, pas de purge) et lancez la copie.
  • La clé d'enregistrement joy:// (HKCU\Software\Classes\joy) ne doit pas changer. Exportez-la dans un nouveau fichier avec reg export avant le lancement, après le lancement et après la fermeture, et comparez les SHA-256. Si elle diffère, arrêtez-vous et informez le propriétaire ; ne restaurez que sur sa parole.
  • Ne supprimez rien pendant les tests (les copies, profils, exportations sont des preuves). Chromium peut nettoyer ses propres fichiers temporaires à l'intérieur du nouveau profil de test ; c'est acceptable.
  • Arrêtez-vous en cas de preuve de crash (sortie du processus GPU, événements Application Error, réinitialisations du pilote) : conservez tout, ne relancez pas par-dessus, informez le propriétaire.
  • Ne tapez jamais de secrets dans l'application et ne mettez pas de jetons dans les notes.

1. Obtenez une copie de l'application sécurisée à exécuter

Construisez ou décompressez le commit souhaité dans un chemin court (moins de 260 caractères), par exemple C:\jg\app-<sha> :

  1. git archive <sha> vers une archive tar, extrayez dans C:\jg\<nom>.
  2. pnpm install --offline --frozen-lockfile (nécessite un cache pnpm chaud).
  3. Copiez le dossier dist d'Electron et path.txt depuis une copie existante de node_modules\.pnpm\electron@<ver>\node_modules\electron (les installations hors ligne ne téléchargent pas Electron). Vérifiez le SHA-256 de electron.exe.
  4. pnpm build, puis pnpm --filter @joy-media/desktop package:unpacked.
  5. robocopy apps\desktop\dist\joy-media-unpacked C:\jg\app-<sha> /E.

Une copie non packagée s'exécute avec isPackaged = false, elle n'enregistre donc pas le protocole joy://. Vérifiez la clé quand même.

2. Lancez-la (PowerShell)

$env:NODE_ENV = 'production'
$app = 'C:\jg\app-<sha>'
Start-Process -FilePath '<chemin vers>\electron.exe' `
  -ArgumentList @($app, '--user-data-dir=C:\jgp\<nouveau-profil>', '--enable-logging=stderr') `
  -WorkingDirectory $app `
  -RedirectStandardOutput 'C:\jgp\run\stdout.log' -RedirectStandardError 'C:\jgp\run\stderr.log' -PassThru

--enable-logging=stderr place les lignes console.* du moteur de rendu dans le fichier d'erreur standard (utile pour les diagnostics temporaires). Vérifiez qu'aucune ligne de commande de processus ne contient --joy-media-gpu-encode-fallback (ce serait le relancement de secours, pas un lancement par défaut). Le titre de la fenêtre est JOY Studio. Sur un nouveau profil, l'application ouvre la page Projets ; sur un profil copié, elle restaure le dernier projet.

3. Pilotez la fenêtre avec Windows-MCP

Échelle : les captures d'écran sont environ 2,56 fois plus petites que l'écran réel. Cliquez toujours sur les coordonnées réelles de Snapshot, jamais sur les pixels de la capture d'écran. Prenez une petite Screenshot (scale 0.4) après chaque changement de page.

Ordre : émettez les actions sur la fenêtre une par une. Un lot envoyé juste après une exportation a déjà fait atterrir les clics et la saisie dans le mauvais projet. App switch "JOY Studio" échoue parfois avec "Invalid window handle" ; si la fenêtre est déjà au premier plan, continuez.

Les coordonnées ci-dessous proviennent d'un écran 4920x2160 avec la fenêtre JOY à sa taille et position par défaut. Elles sont une carte de départ, pas une promesse : prenez un Snapshot et utilisez la liste des éléments quand quelque chose semble différent.

ActionOù (coordonnées réelles)
Menu Fichier(910, 288)
Fichier > Bibliothèque de projets(1077, 358)
Bouton Nouveau projet(3023, 311), puis cliquez sur le champ du nom (1165, 727), Type le nom avec press_enter
Première carte de projet(1680, 873)
Chronologie "Importer un média" (chronologie vide)(2199, 1312)
Boîte de dialogue Ouvrir un fichier : zone de nom / Ouvrir(1587, 1208) / (2268, 1264)
Exporter MP4(2672, 288)
Sélectionnez le clip, vérifiez l'échellecliquez sur la barre du clip (1762, 1349) ; l'inspecteur affiche Échelle X/Y
Fermez la fenêtre de l'application(3143, 288)
Boîte de dialogue Enregistrer : zone de nom / Enregistrerenviron (1717, 1058) / (2283, 1266)

Recette pour un cas : Bibliothèque de projets > Nouveau projet > nom > Importer un média > tapez le chemin complet du fichier > Ouvrir (le clip atterrit sur la chronologie) > vérifiez l'aperçu > Exporter MP4 > attendez > enregistrez la boîte de dialogue > vérifiez.

La boîte de dialogue Enregistrer. L'exportation se termine par une boîte de dialogue Windows normale (dossier Téléchargements par défaut, un nom suggéré sans extension). Le fichier n'atteint le Bureau qu'après que quelqu'un l'enregistre, donc un délai entre « travail terminé » et « fichier sur le Bureau » est simplement dû à l'attente de cette boîte de dialogue. Prenez une capture d'écran lorsque le travail devrait être terminé ; soit le propriétaire enregistre, soit (avec son accord) tapez le chemin complet ...\Bureau\<nom-suggéré>.mp4 dans la zone de nom et cliquez sur Enregistrer. Les temps de travail dans la base de données de l'application ne sont pas affectés par l'attente.

4. Avant, pendant et après une exécution

Avant : reg export la clé joy:// et hachez-la ; listez le dossier de profil réel de l'utilisateur et tous les dossiers de preuve (scripts/list-tree.ps1) afin de pouvoir prouver que rien n'a changé.

Pendant (exportations longues) : démarrez scripts/sampler.ps1 -Pattern '*<profil>*' -Out <csv> -Stop <fichier_arret> en arrière-plan. Il enregistre, une fois par seconde, l'espace de travail, les octets privés, les secondes CPU, les sessions NVENC et l'utilisation GPU par processus Electron. Créez le fichier d'arrêt pour le terminer.

Après : fermez l'application (bouton Fermer la fenêtre), confirmez qu'aucun processus electron n'est resté, exportez à nouveau la clé, listez à nouveau les dossiers et différenciez, vérifiez qu'il n'y a pas de fichiers *.upload restants dans le profil, et recherchez les événements Application Error/WER et Display/nvlddmkm (ignorez le bruit non lié comme Docker).

5. Jugez l'exportation sur des faits

  • ffprobe -show_streams : codec, taille, images, durée, étiquettes de couleur (color_space, color_primaries, color_transfer, color_range).
  • Le décodage complet doit être propre : ffmpeg -v error -i out.mp4 -f null - et code de sortie 0.
  • Hachez le fichier (Get-FileHash) ; des mises en page identiques à partir de builds différents doivent donner des hachages identiques lorsque le chemin de code est le même.
  • Temps des phases depuis la base de données de l'application (une copie de joy-media.sqlite3 plus ses fichiers -wal/-shm, ouverte en lecture seule) : scripts/export-times.py <copie> affiche, par exportation, la phase du navigateur (estampille du clic à l'original mis en scène), les octets mis en scène et le temps de travail. L'estampille du clic est le nombre à 13 chiffres dans le nom du fichier.
  • Précision des couleurs : construisez des fixtures avec scripts/fxgen.py <dossier> (patches de couleur unis avec des valeurs sRGB connues plus un compteur d'images binaire ; BT.709, BT.601, SD non étiqueté, pleine gamme, pivoté, VFR, 10 bits, HEVC, VP9, AV1, entrelacé, une paire de transition et une paire de taux audio), vérifiez-les avec scripts/fxcheck.py <dossier>, puis notez une exportation avec JOY_FX_DIR=<dossier> python -I scripts/fxplace.py <export.mp4> <nom-fichier-fixture> [image]. Il trouve où le clip a atterri (les clips plus petits que le canevas sont placés 1:1 en haut à gauche, sans mise à l'échelle) et affiche l'écart le plus grand/moyen sous quatre lectures de matrice/gamme ; la bonne lecture doit être dans les 3 niveaux environ.
  • Audio : hauteur via le taux de passage par zéro de astats, niveau via RMS ; les sources mono deviennent stéréo (environ 3 dB de moins par canal).

6. Comportements connus à retenir (builds JOY Media 1.1.0)

  • Effectuez chaque test de couleur dans une session d'application fraîche. Sur la machine testée (RTX 5070 Ti, Electron 44.3.0), la première exportation après le lancement est encodée en BT.709 (étiquette bt709) ; les exportations suivantes dans la même session sont encodées en BT.601 (étiquette smpte170m), sortent plus grosses et plus lentes sur une mise en page longue, et ont des octets différents. Un build de diagnostic a montré que l'image du canevas de capture est RGBA (soutenue par GPU) la première fois et BGRA (soutenue par CPU) ensuite ; l'application ne définit pas elle-même d'espace colorimétrique. La conversion en NV12 BT.709 à l'intérieur de l'application a rendu chaque exportation identique.
  • La vidéo SD non étiquetée est lue comme BT.709 (les couleurs se décalent jusqu'à environ 20 niveaux).
  • Une source sans piste audio exporte une piste AAC stéréo silencieuse.
  • Comparez les builds uniquement sur un pied d'égalité : même mise en page, même position dans la session (première exportation vs première exportation), fenêtre au premier plan et focalisée (une fenêtre non focalisée peut être environ 30 % plus lente), une copie du même profil.
  • D'autres agents ou fenêtres de chat sur le même bureau peuvent voler le focus : faites une capture d'écran avant de cliquer.
  • Le premier clic sur une fenêtre peut seulement la focaliser.

7. Rapportez-vous comme ceci

Indiquez ce qui a été exécuté (build, copie de profil, mise en page), les chiffres (temps de phase, mémoire maximale, tailles, étiquettes), les vérifications qui ont réussi (clé joy:// inchangée, différences de dossiers vides, décodage propre), ce qui n'a pas été vérifié, et la seule décision dont vous avez besoin du propriétaire. Dites « une exécution par build » quand c'est tout ce que vous avez.

Skills associés