Skip to content

Migration vMix SOURCE et templates GT

Cette page décrit la migration des projets vMix historiques vers la nouvelle nomenclature MY LIVE SPORT : dossiers SOURCE plus lisibles, clés GT en anglais court, et script autonome pour migrer les fichiers existants.

Migration avec rupture

Les nouveaux exports n'envoient plus les anciennes clés GT et ne conservent plus les anciens chemins d'images. Les templates .gtzip et le dossier SOURCE doivent être migrés avant une utilisation en production.

Télécharger le script

Télécharger migrate-vmix-source.ps1

Le script est autonome. Il ne dépend pas d'AppSport ou d'un dépôt de développement. Il doit être exécuté depuis un dossier situé au-dessus de SOURCE, par exemple C:\FFF National.

Objectif de la migration

La migration applique quatre changements :

  • les dossiers métiers sous SOURCE passent en anglais ;
  • les dossiers médias historiques MUSIQUE et VIDEO passent en MUSICS et VIDEOS ;
  • les champs GT et les masques d'animation dans les .gtzip passent sur des clés v2 courtes et stables ;
  • les fichiers projet vMix/AppSport peuvent être mis à jour pour pointer vers les nouveaux chemins.

Les valeurs affichées restent localisables. Une clé comme PERIOD reste en anglais, mais sa valeur peut rester MI-TEMPS, devenir HALF-TIME, ou utiliser un autre libellé selon la langue choisie.

Clés v1 legacy dépréciées

Les clés historiques PERIODE, clock_mls, CLOCK_ADD_MCL, E1..., E2..., SED_..., P_..., CL_..., BR_..., SCROLL_SED_* et ALERT_E1 / ALERT_E2 sont conservées seulement pour documenter la migration. Elles sont dépréciées et ne doivent plus être utilisées dans un nouveau template.

Préparer le dossier

Fermez vMix et AppSport avant de lancer la migration.

Structure attendue :

C:\FFF National\
├─ SOURCE\
│  ├─ TEMPLATE\
│  ├─ LOGO_EQUIPE\
│  └─ IMAGES\
└─ migrate-vmix-source.ps1

La première exécution doit toujours être faite en simulation.

cd "C:\FFF National"
powershell -NoProfile -ExecutionPolicy Bypass -File ".\migrate-vmix-source.ps1"

Cette commande ne crée pas SOURCE_backup et ne modifie aucun fichier. Elle affiche seulement ce que le script ferait.

Application réelle :

cd "C:\FFF National"
powershell -NoProfile -ExecutionPolicy Bypass -File ".\migrate-vmix-source.ps1" -Apply -ReportPath ".\migration-vmix-source-report.json"

Application réelle avec le chemin absolu de SOURCE :

powershell -NoProfile -ExecutionPolicy Bypass -File "C:\FFF National\migrate-vmix-source.ps1" -SourcePath "C:\FFF National\SOURCE" -Apply -ReportPath "C:\FFF National\migration-vmix-source-report.json"

Dans cet exemple, le backup est créé ici :

C:\FFF National\SOURCE_backup

Application sans modifier les fichiers projet :

powershell -NoProfile -ExecutionPolicy Bypass -File ".\migrate-vmix-source.ps1" -Apply -SkipProjectFiles

Continuer une migration déjà appliquée avec un SOURCE_backup existant :

powershell -NoProfile -ExecutionPolicy Bypass -File ".\migrate-vmix-source.ps1" -Apply -UseExistingBackup -ReportPath ".\migration-vmix-source-report.json"

Sécurité et sauvegarde

Par défaut, le script ne modifie rien. Sans -Apply, il affiche uniquement les actions prévues. Si -ReportPath est fourni, il écrit quand même le rapport de simulation demandé.

Avec -Apply, le script crée d'abord une copie complète :

SOURCE_backup

Si SOURCE_backup existe déjà, la migration bloque. Utilisez -OverwriteBackup uniquement après avoir vérifié que l'ancien backup peut être remplacé.

Options utiles :

Option Effet
-Apply Applique réellement la migration. Sans cette option, le script reste en dry-run.
-SourcePath Définit un dossier source différent de .\SOURCE.
-ReportPath Écrit un rapport JSON de migration.
-SkipProjectFiles Ne modifie pas les fichiers .vmix, .appsport, .config et .xml.
-SkipGtzip Ne modifie pas les templates .gtzip.
-GtzipOnly Migre seulement les .gtzip deja presents dans SOURCE/TEMPLATES, sans backup, sans deplacement de dossiers et sans mise a jour des fichiers projet.
-Force Autorise l'écrasement d'un fichier déjà présent dans un dossier cible.
-OverwriteBackup Autorise le remplacement de SOURCE_backup.
-UseExistingBackup Réutilise un SOURCE_backup déjà présent sans l'écraser, utile pour continuer une migration déjà lancée.
-MappingPath Charge un mapping JSON personnalisé en complément du mapping intégré.

Dossiers migrés

SOURCE et IMAGES sont conservés. Le dossier IMAGES reste au pluriel, car il contient plusieurs types de visuels et pas uniquement des photos.

MUSICS est une convention projet volontaire pour rester cohérent avec IMAGES, VIDEOS et TEMPLATES. En anglais strict, MUSIC serait plus naturel.

Ancien chemin Nouveau chemin Usage
SOURCE/TEMPLATE SOURCE/TEMPLATES Templates live output
SOURCE/LOGO_EQUIPE SOURCE/TEAM_LOGOS Logos d'équipes
SOURCE/IMAGES/PICTO_METEO SOURCE/IMAGES/WEATHER Pictogrammes météo
SOURCE/IMAGES/BG_BUT SOURCE/IMAGES/GOALS Fonds liés aux buts
SOURCE/IMAGES/BG_VS SOURCE/IMAGES/VERSUS Visuels versus
SOURCE/IMAGES/BG_CG SOURCE/IMAGES/GRAPHICS Fonds graphiques, cartons et visuels vides
SOURCE/IMAGES/BG_TEMPS_MORT SOURCE/IMAGES/TIMEOUTS Temps-morts basketball
SOURCE/IMAGES/TAB SOURCE/IMAGES/SHOOTOUT Tirs au but
SOURCE/IMAGES/RESULTAT SOURCE/IMAGES/RESULTS Fonds de résultats
SOURCE/IMAGES/PROGRAMME SOURCE/IMAGES/SCHEDULE Fonds de programme
SOURCE/IMAGES/CLASSEMENT SOURCE/IMAGES/STANDINGS Classements et mouvements
SOURCE/MUSIQUE SOURCE/MUSICS Musiques et habillages audio
SOURCE/VIDEO SOURCE/VIDEOS Vidéos et médias vidéo

Fichiers image renommés

Les PNG statiques connus sont renommés avec les dossiers pour que la nouvelle arborescence reste cohérente. Les images dynamiques issues des données terrain ne sont pas renommées : logos équipes, photos joueurs, images de composition et images embarquées dans les .gtzip restent inchangés.

Electron crée aussi EMPTY.png à la racine du cacheFolder quand il crée ou vérifie le cache du projet. Le fallback serveur public est également /file/EMPTY.png, servi depuis shared/file/EMPTY.png.

Ancien fichier Nouveau fichier
SOURCE/IMAGES/PICTO_METEO/TEMP_BAS.png SOURCE/IMAGES/WEATHER/TEMP_LOW.png
SOURCE/IMAGES/PICTO_METEO/TEMP_HAUT.png SOURCE/IMAGES/WEATHER/TEMP_HIGH.png
SOURCE/IMAGES/PICTO_METEO/soleil.png SOURCE/IMAGES/WEATHER/clear_day.png
SOURCE/IMAGES/BG_BUT/BUT00.png SOURCE/IMAGES/GOALS/GOAL_00.png
SOURCE/IMAGES/BG_BUT/BUT-INFO-00.png SOURCE/IMAGES/GOALS/GOAL_INFO_00.png
SOURCE/IMAGES/BG_CG/JAUNE_CARTON.png SOURCE/IMAGES/GRAPHICS/YELLOW_CARD.png
SOURCE/IMAGES/BG_CG/ROUGE_0_CARTON_CLOCK.png SOURCE/IMAGES/GRAPHICS/RED_0_CARD_CLOCK.png
SOURCE/IMAGES/RESULTAT/RESULTAT_N.png SOURCE/IMAGES/RESULTS/RESULT_DEFAULT.png
SOURCE/IMAGES/PROGRAMME/PROGRAMME_N.png SOURCE/IMAGES/SCHEDULE/SCHEDULE_DEFAULT.png
SOURCE/IMAGES/PROGRAMME/PROGRAMME_DATE.png SOURCE/IMAGES/SCHEDULE/SCHEDULE_DATE.png
Fallback classement legacy SOURCE/IMAGES/STANDINGS/EMPTY.png
SOURCE/IMAGES/TAB/vert.png SOURCE/IMAGES/SHOOTOUT/MADE.png
SOURCE/IMAGES/TAB/rouge.png SOURCE/IMAGES/SHOOTOUT/MISSED.png

Templates .gtzip

Les fichiers .gtzip sont des archives ZIP. Le script les ouvre en place, cherche les fichiers XML internes et remplace les noms de champs GT dans les valeurs d'attribut, les valeurs texte simples et les Mask de Storyboard.

Les Mask sont importants pour les animations : si un storyboard masque ou cible un ancien champ comme E1NOM_FULL.Text, le script le migre aussi vers la nouvelle clé, par exemple T1_NAME.Text. Les listes de masks contenant plusieurs champs sont traitées champ par champ.

Le script ne modifie pas les images embarquées dans les .gtzip. Il ne renomme pas non plus les fichiers internes du template. Cette limite est volontaire : elle réduit le risque de casser un template vMix fonctionnel.

La migration couvre les familles utilisées par les sports suivants :

  • football ;
  • futsal ;
  • hockey sur glace ;
  • basketball ;
  • tennis.

Réparer uniquement les animations .gtzip

Si une ancienne migration a cassé certaines animations, restaurez les templates depuis le backup, puis relancez seulement la migration .gtzip. N'utilisez pas -OverwriteBackup dans ce scénario, afin de garder le backup original intact.

cd "C:\FFF National"
Rename-Item ".\SOURCE\TEMPLATES" "TEMPLATES_broken"
Copy-Item ".\SOURCE_backup\TEMPLATE" ".\SOURCE\TEMPLATES" -Recurse
powershell -NoProfile -ExecutionPolicy Bypass -File ".\migrate-vmix-source.ps1" -SourcePath ".\SOURCE" -GtzipOnly -Apply -ReportPath ".\migration-gtzip-only-report.json"

Pour migrer tout sauf les templates .gtzip, utilisez :

powershell -NoProfile -ExecutionPolicy Bypass -File ".\migrate-vmix-source.ps1" -Apply -SkipGtzip -ReportPath ".\migration-vmix-source-report.json"

Règles de nommage GT

Les nouvelles clés respectent les règles suivantes :

  • maximum 11 caractères pour le nom de champ de base ;
  • le suffixe vMix .Text ou .Source n'est pas compté dans cette limite ;
  • alphabet recommandé : A-Z, 0-9, _ ;
  • pas d'accents, pas d'espaces, pas de tirets ;
  • T1 et T2 remplacent les anciens préfixes E1 et E2 ;
  • les index sont prévus jusqu'à 99 pour les équipes, joueurs, staff, lignes de programme, résultats et classements.

Exception connue : CLOCK_ADD_MLS fait 13 caractères parce que le logiciel l'expose déjà ainsi pour le chrono additionnel MY LIVE SPORT. Les nouveaux templates doivent utiliser CLOCK_ADD_MLS.Text.

Exemples de longueur valide :

Clé Longueur
T1P99_FIRST 11
T2S99_FIRST 11
SCH99_TIME 10
BK999999T1 10
EV99_T1P 8

Correspondances principales

Le mapping complet est intégré dans le script migrate-vmix-source.ps1. Les tableaux ci-dessous listent les familles les plus utilisées pour préparer ou contrôler les templates. La colonne legacy correspond à la v1 dépréciée, la colonne nouveau correspond au contrat v2.

Match, chrono et météo

V1 legacy déprécié V2 actuel
PERIODE PERIOD
CLOCK_MLS / clock_mls CLOCK_MLS
CLOCK_ADD_MCL CLOCK_ADD_MLS
ADDITIONEL_TIME ADD_TIME
MESSAGE MSG
ERROR ERR_MSG
DAY DAY_NO
DAY_EME DAY_SUF
DAY_JOURNEE DAY_LBL
DAY_FINALE FINAL
METEO_CIEL WTHR_ICON
METEO_TEMP TEMP
METEO_HUM HUMID
METEO_VENT WIND
PICTO-TEMP TEMP_ICON

Équipes, joueurs et staff

V1 legacy déprécié V2 actuel
E1NOM_FULL / E2NOM_FULL T1_NAME / T2_NAME
E1NOM_BUG / E2NOM_BUG T1_SHORT / T2_SHORT
E1LOGO / E2LOGO T1_LOGO / T2_LOGO
E1SCORE / E2SCORE T1_SCORE / T2_SCORE
E1TAB / E2TAB T1_PEN / T2_PEN
E1CLASSEMENT / E2CLASSEMENT T1_RANK / T2_RANK
E1NOM99 T1P99_LAST
E1PRENOM99 T1P99_FIRST
E1NUMERO99 T1P99_NO
E1POSTE99 T1P99_ROLE
E1NCIMG99 T1P99_IMG
S1NOM99 T1S99_LAST
S1PRENOM99 T1S99_FIRST
S1POSTE99 T1S99_ROLE
S1NCIMG99 T1S99_IMG

Formations, buts et actions

V1 legacy déprécié V2 actuel
E1N343-11 T1F343P11N
E1NAME343-11 T1F343P11L
E1IMG343-11 T1F343P11I
E1IMG442T-11 T1F442TP11I
E1IMG442L-11 T1F442LP11I
E1BUT99 T1GOAL99
E1BUTFONT T1GOAL_CNT
FONTBUTS GOAL_BG
FONTBUTS-INFO GOAL_INFO
E1TIMEOUTLABEL T1_TO_LBL
E1TIMEOUT T1_TO
E1TIMEOUT_IMG T1_TO_IMG

Résultats, programme et classements

V1 legacy déprécié V2 actuel
SED_99_E1 RES99_T1
SED_99_E2 RES99_T2
SED_99_S1 RES99_S1
SED_99_S2 RES99_S2
SED_99_T RES99_TIME
SED_99_F RES99_BG
P_99_DATE SCH99_DATE
P_99_E1 SCH99_T1
P_99_E2 SCH99_T2
P_99_H SCH99_TIME
P_99_F SCH99_BG
CL_99_RANK ST99_RANK
CL_99_NOM ST99_NAME
CL_99_LOGO ST99_IMG
CL_99_PTS ST99_PTS
CL_G99_99_RANK SG9999R
CL_G99_99_NOM SG9999NM
CL_G99_99_LOGO SG9999LG

Tableau final et statistiques

V1 legacy déprécié V2 actuel
BR_P99_NOM BK99NM
BR_P99_CODE BK99CD
BR_P99_R99_NOM BK9999NM
BR_P99_R99_99_E1 BK999999T1
BR_P99_R99_99_E2 BK999999T2
BR_P99_R99_99_STATUS BK999999ST
EVENT_99_HOME EV99_T1
EVENT_99_AWAY EV99_T2
EVENT_99_HOME_% EV99_T1P
EVENT_99_AWAY_% EV99_T2P
EVENT_99_HOME_A EV99_T1A
EVENT_99_AWAY_A EV99_T2A

Scroll résultats et alertes

Champ GT v1 legacy déprécié Champ GT v2 actuel Usage
SCROLL_SED_E1.Text SCR_T1.Text Nom 1
SCROLL_SED_E2.Text SCR_T2.Text Nom 2
SCROLL_SED_S1.Text SCR_S1.Text Score 1
SCROLL_SED_S2.Text SCR_S2.Text Score 2
SCROLL_SED_S.Text SCR_STAT.Text Timer ou statut
SCROLL_SED_T.Text SCR_SEP.Text Séparateur
SCROLL_SED_L1.Source SCR_L1.Source Visuel 1
SCROLL_SED_L2.Source SCR_L2.Source Visuel 2
ALERT_E1.Text ALERT_T1.Text Nom 1
ALERT_E2.Text ALERT_T2.Text Nom 2
ALERT_S1.Text ALERT_S1.Text Score 1
ALERT_S2.Text ALERT_S2.Text Score 2
ALERT_S.Text ALERT_ST.Text Timer ou statut
ALERT_T.Text ALERT_SEP.Text Séparateur
ALERT_L1.Source ALERT_L1.Source Visuel 1
ALERT_L2.Source ALERT_L2.Source Visuel 2
ALERT_ALERTE.Text ALERT_ID.Text Identifiant unique

Localisation des valeurs

La migration ne doit pas transformer le contenu affiché en anglais par défaut. Les noms de clés sont techniques et restent anglais. Les valeurs sont du texte éditorial et doivent suivre la langue de sortie.

Exemples :

Clé Valeur française possible Valeur anglaise possible
PERIOD MI-TEMPS HALF-TIME
PERIOD SCORE FINAL FINAL SCORE
PERIOD TEMPS-MORT TIMEOUT
SCH1_TIME REPORTÉ POSTPONED
DAY_LBL Journée Matchday

Le comportement attendu est :

  • français par défaut pour conserver les productions existantes ;
  • anglais si la langue de sortie est configurée en anglais ;
  • autre langue possible via un mapping de libellés dédié.

Contrôles après migration

Après un -Apply, contrôlez au minimum :

  1. présence de SOURCE_backup ;
  2. présence de SOURCE/TEMPLATES ;
  3. présence de SOURCE/TEAM_LOGOS ;
  4. présence des nouveaux sous-dossiers dans SOURCE/IMAGES ;
  5. ouverture d'un .gtzip migré dans vMix ;
  6. affichage d'un logo équipe ;
  7. affichage d'une météo ;
  8. affichage d'un résultat, d'un programme et d'un classement ;
  9. ouverture du fichier .vmix ou .appsport si les fichiers projet ont été mis à jour ;
  10. contrôle du rapport JSON si -ReportPath a été utilisé.

Commande de recherche utile pour vérifier qu'un projet ne référence plus les anciens chemins :

rg -n "PICTO_METEO|BG_BUT|BG_CG|BG_TEMPS_MORT|PROGRAMME|RESULTAT|CLASSEMENT|LOGO_EQUIPE|SOURCE[/\\]TEMPLATE|SOURCE[/\\](MUSIQUE|VIDEO)\b" .

Rollback

En cas de problème :

  1. fermez vMix et AppSport ;
  2. renommez le dossier SOURCE migré, par exemple en SOURCE_migration_failed ;
  3. renommez SOURCE_backup en SOURCE ;
  4. restaurez les fichiers .vmix ou .appsport depuis une sauvegarde si leurs chemins ont été modifiés ;
  5. relancez vMix et testez le projet avant production.

Ne supprimez pas SOURCE_backup tant que tous les templates et les chemins d'images n'ont pas été validés sur le poste de production.