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
SOURCEpassent en anglais ; - les dossiers médias historiques
MUSIQUEetVIDEOpassent enMUSICSetVIDEOS; - les champs GT et les masques d'animation dans les
.gtzippassent 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 :
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 :
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
.Textou.Sourcen'est pas compté dans cette limite ; - alphabet recommandé :
A-Z,0-9,_; - pas d'accents, pas d'espaces, pas de tirets ;
T1etT2remplacent les anciens préfixesE1etE2;- les index sont prévus jusqu'à
99pour 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 :
- présence de
SOURCE_backup; - présence de
SOURCE/TEMPLATES; - présence de
SOURCE/TEAM_LOGOS; - présence des nouveaux sous-dossiers dans
SOURCE/IMAGES; - ouverture d'un
.gtzipmigré dans vMix ; - affichage d'un logo équipe ;
- affichage d'une météo ;
- affichage d'un résultat, d'un programme et d'un classement ;
- ouverture du fichier
.vmixou.appsportsi les fichiers projet ont été mis à jour ; - contrôle du rapport JSON si
-ReportPatha é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 :
- fermez vMix et AppSport ;
- renommez le dossier
SOURCEmigré, par exemple enSOURCE_migration_failed; - renommez
SOURCE_backupenSOURCE; - restaurez les fichiers
.vmixou.appsportdepuis une sauvegarde si leurs chemins ont été modifiés ; - 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.