Nouveau : arcade, bande dessinée, Material 3 et une apparence pour les enfants
Quatre nouvelles familles rejoignent par défaut, science-fiction et médiéval — quatorze apparences intégrées désormais, chacune en sombre et en clair. Chaque widget, pop-up et élément de HUD les adopte sans changer une ligne de votre code : changez de préréglage et tout l'écran suit.

material_light
material_dark
kids_light
kids_dark
comic_light
comic_dark
arcade_light
arcade_darkMaterial 3 — pour les écrans d'application
Material 3 Expressive, mesuré d'après les tokens M3 officiels : boutons en pilule avec une plaque de 40dp dans la cible tactile de 48dp, boîtes de dialogue et feuilles de 28dp, cartes pleines, champs à contour et le curseur Expressive. Les composants d'application — barre de navigation, barre d'app, FAB, barre de recherche, chips, progression et sélecteur de date — suivent les tokens de composant M3, et les titres sont composés en Roboto, fournie avec le kit. Pour les boutiques, les réglages, les boîtes de réception et tout écran qui doit ressembler à une application.
Enfants — le coffre à jouets
Conçu pour les enfants : chaque touche, rangée et panneau est un bonbon en gelée avec un contour épais et un rebord plein qui s'enfonce à l'appui, chaque type de commande dans sa propre couleur de crayon. Les emplacements rapides sont des blocs de bonbon, les badges des autocollants, le joystick un arc-en-ciel ; les fenêtres reçoivent un ruban de titre ensoleillé et un bouton de fermeture rond en bonbon, et chaque appui écrase la gelée. Les tailles et la police de votre projet restent exactement les mêmes.
Bande dessinée — encre épaisse
Chaque face est une case de bande dessinée : la couleur de surface dans un épais contour d'encre, avec une ombre franche derrière qui disparaît à l'appui. Un réglage active ou désactive toutes les ombres, deux autres fixent l'épaisseur du contour et la taille de l'ombre, et un seul appel fait de même pour un seul widget. Les fenêtres reçoivent un cartouche de titre jaune.
Arcade — touches peintes
Chaque touche est peinte — un dégradé, un reflet blanc et un rebord qui s'enfonce à l'appui, dans un contour d'encre bleu marine — et porte un libellé blanc cerné d'encre : vert pour jouer, bleu pour le reste, rouge pour supprimer. Les panneaux sont épais, un cadre coloré autour d'un fond pâle, et les fenêtres reçoivent un bandeau de titre doré et une touche de fermeture ronde et rouge.
GoUi.use_preset(GoThemePresets.MATERIAL_LIGHT) # ou MATERIAL_DARK
GoUi.use_preset(&"kids_light") # ou &"kids_dark"
GoUi.use_preset(&"comic_light") # ou &"comic_dark"
GoUi.use_preset(&"arcade_light") # ou &"arcade_dark"
Material 3 en détail → · Enfants en détail → · L'arcade, widget par widget ↓ · La bande dessinée, widget par widget ↓ · Le même pop-up dans les quatorze apparences →
Arcade : touches peintes et panneaux épais
La plus récente des apparences habille chaque écran comme une borne d'arcade. Chaque touche est peinte — un dégradé d'un haut clair
vers un bas plus soutenu, un trait de reflet blanc et un rebord qui s'enfonce à l'appui, le tout dans un contour d'encre bleu marine — et son libellé est
blanc cerné d'encre. Chaque panneau est épais : un cadre coloré avec son propre reflet autour d'un fond pâle.
arcade_light pose des panneaux blancs sur une page bleu ciel ; arcade_dark des panneaux bleu marine sur une page de nuit.
Chaque image ci-dessous est un véritable écran gohud — le même code, une ligne de préréglage.
GoUi.use_preset(&"arcade_light") # ou &"arcade_dark"

arcade_light · la galerie
arcade_dark · la galerie
GoDialogs
GoSheet
GoCoachMark
GoDrawer
GoPopover
GoDialogs.alert()
GoSnackbarChaque touche, peinte

GoStyle.button()
GoStyle.tabs()


GoStyle.card()
GoForm
GoStyle.choice_grid()
GoSlotGrid

GoDatePicker
GoStyle.slider()
GoStyle.radio_group()
GoStyle.filter_chip()
GoSearchBar
GoStepper
GoTable
GoNavBar
GoTimePicker
GoCodeInput
GoWheelPickerLa nuit : arcade_dark
Sur une page sombre, l'encre devient la page elle-même, bien plus profonde, et les peintures restent tout aussi vives.

GoStyle.button() la nuit
GoBar
GoStyle.hud_panel()
GoSlot
GoJoystick

GoFab
GoRewardCalendar

GoTabView
GoScroll

GoStyle.chip()
GoSlotGrid
GoRangeSlider
GoPagination
GoBadgeComment fonctionne l'apparence arcade
La face
Chaque touche et chaque panneau est un GoStyleBoxArcade : un contour d'encre, un corps en dégradé, un rebord et un reflet, dessinés
dans le propre rectangle du contrôle — une touche garde sa taille d'un état à l'autre, et un appui ne fait que l'enfoncer.
Des libellés lisibles
Un libellé blanc cerné d'encre se lit sur toute peinture dont le contour le détache — les WCAG comptent le contour comme faisant partie de la lettre. Chaque peinture est ajustée jusqu'à ce que son libellé dépasse 4,6:1 à chaque hauteur du dégradé.
Fenêtres
Le titre d'une fenêtre repose sur un bandeau doré, en lettres blanches cernées d'encre, à côté d'une touche de fermeture ronde et rouge. Boîtes de dialogue, feuilles, tiroirs et popovers sont d'épais panneaux encadrés.
Une touche peut prendre sa propre couleur — une touche de boutique orange dans un menu de pause :
menu.add_child(GoStyle.arcade_paint(GoStyle.button("Shop", _shop), Color("#FF8A1E")))
L'arcade en détail → · Le même pop-up dans les quatorze apparences →
Bande dessinée : encre épaisse et ombre franche
L'apparence bande dessinée dessine chaque face comme une case de bande dessinée — la couleur de surface dans un épais contour d'encre,
avec une ombre franche et pleine projetée vers le bas et la droite. comic_light encre en noir sur une page crème papier
avec un primaire cobalt ; comic_dark encre en crème sur une page de nuit avec un primaire jaune. Chaque image ci-dessous est
un véritable écran gohud — le même code, une ligne de préréglage.
GoUi.use_preset(&"comic_light") # ou &"comic_dark"

comic_light · la galerie
comic_dark · la galerie
GoSheet
GoCoachMark
GoDrawer
GoPopoverChaque widget, encré
Boutons, interrupteurs, onglets, curseurs, cartes, formulaires, tableaux, sélecteurs et chips portent tous l'encre — inutile de les styler un par un. Appuyez sur une touche et son ombre disparaît : la face s'enfonce à sa place, comme un tampon. Les faces désactivées perdent leur ombre et pâlissent, si bien que ce qui peut être pressé se distingue de ce qui ne le peut pas.

GoStyle.button() — tous les types


GoStyle.tabs()

GoStyle.slider()

GoStyle.card()
GoForm

GoTable
GoDatePicker
GoTimePicker
GoStepper

GoNavBar
GoInputGroup
GoSplitButton
GoPaginationLa nuit : comic_dark
Sur une page sombre, un contour noir disparaîtrait ; comic_dark le dessine donc en crème et projette une ombre légère
teintée de la même encre. Les éléments du HUD — emplacements rapides, barres, joystick et calendrier de récompenses — suivent les mêmes règles.

GoStyle.button() la nuit
GoSlot
GoBar
GoJoystick

GoSlotGrid
GoRewardCalendar

GoRangeSlider
GoSearchBar
GoFabComment fonctionne l'apparence bande dessinée
Un StyleBox pour chaque face
Chaque face est un GoStyleBoxComic : un remplissage, un contour et une ombre, dessinés à l'intérieur du rectangle même du contrôle. Il lit les tailles du contour et de l'ombre dans GoConfig à chaque dessin, si bien qu'un seul réglage change tout l'écran d'un coup.
Pressé veut dire à plat
Une touche pressée perd son ombre et se pose à sa place. Le survol garde l'ombre ; le focus ajoute un anneau d'encre intérieur qui ne couvre jamais le contour ; les faces désactivées perdent l'ombre et pâlissent.
Le skin encre le reste
GoSkinComic encre ce que dessine le code : emplacements rapides, chips, badges, avatars, notifications, la barre de navigation, le FAB, les cases de date et le joystick, dont le bouton projette une ombre.
Les fenêtres reçoivent un cartouche
Le titre d'une fenêtre repose sur un cartouche jaune, comme le récitatif d'une bande dessinée, à côté d'un bouton de fermeture rond et encré. Dialogues, feuilles, tiroirs et popovers sont des panneaux encrés opaques.
Lisible de jour comme de nuit
Les deux palettes passent les mêmes contrôles de contraste WCAG que tous les autres préréglages, touches pressées et désactivées comprises. Quand la couleur d'un cartouche serait trop proche de celle de la page, son contour reprend la couleur de la page.
Aucun changement de mise en page
Le contour et l'ombre tiennent dans chaque contrôle et les marges internes restent celles du thème, si bien qu'un écran mis en page dans une autre apparence garde sa disposition — et la police de votre projet.
Trois réglages et un appel
Trois réglages de GoConfig changent toutes les faces bande dessinée à la fois. Rien n'est reconstruit — l'écran se redessine dès que vous les modifiez.
GoUi.config.comic_border_width = 2.0 # le contour (dp) — 3 par défaut
GoUi.config.comic_shadow_size = 6.0 # l'ombre (dp) — 4 par défaut
GoUi.config.comic_shadow = false # aucune ombre nulle part
Un widget peut faire bande à part, quels que soient les réglages. Passez true en dernier argument pour inclure tout ce qu'il contient.
GoStyle.comic_shadow(skip_button, false) # ce bouton reste à plat
GoStyle.comic_shadow(card, true, true) # cette carte et tout ce qu'elle contient gardent leur ombre
GoStyle.comic_border(title, 5.0) # un contour plus épais sur celui-ci
tools/new_theme.py inked --from comic_light copie la palette ; changez les couleurs
du papier, de l'encre et du primaire, puis lancez tools/make_theme.py inked. L'encre, l'ombre et le skin suivent.
Bande dessinée en détail → · Le même pop-up dans les quatorze apparences →
Ce que ça donne dans un jeu
Les préréglages médiéval et science-fiction — fiches de personnage, inventaires et quêtes ; formulaires, grilles et cartes d'invite ; panneaux anguleux et commandes tactiles. Changer de préréglage tient en une ligne de code.
Ce qu'il vous enlève des mains
Ce qui coûte le plus de temps dans une UI de jeu, ce n'est pas la forme d'un bouton — c'est tout ce qui diverge d'un appareil à l'autre. gohud traite cette dérive en un seul endroit.
Chaque mesure est un token
Les espacements, les coins et les tailles de texte sont appelés par leur nom, pas écrits en chiffres. Changez de thème et tout l'écran suit.
Taille visible ≠ taille pressable
Un bouton de fermeture paraît faire 36 dp alors que sa cible tactile en fait 48. Là où des emplacements serrés se chevauchent, c'est celui dont le centre est le plus proche qui reçoit l'appui.
Encoches et claviers
Les éléments du HUD restent dans la zone sûre, et un champ de saisie remonte au-dessus du clavier virtuel quand celui-ci apparaît.
Retour ne ferme qu'une chose
Échap et le bouton Retour d'Android ne ferment que la surface la plus haute. Des fenêtres empilées ne disparaissent pas d'un seul coup.
Les snackbars ne captent jamais la saisie
Appuyez à travers un snackbar et c'est le bouton en dessous qui reçoit l'appui. Le focus n'est pas pris non plus.
Les icônes se demandent par leur nom
Les widgets ne connaissent que GoIconSet.CLOSE. Changez de jeu et tous les dessins changent sans toucher une ligne de code. Icônes →
Quatorze apparences, une ligne
GoUi.use_preset() change d'un coup le thème, le skin et les icônes — cadres arrondis, chanfreinés science-fiction, forgés médiévaux, composants d'application Material 3, bonbons en gelée pour enfants, encre de bande dessinée ou peinture d'arcade.
Lisibilité mesurée
Chaque thème est vérifié au regard des WCAG, y compris les états des boutons et les panneaux de HUD translucides sur blanc pur et noir pur.
Installer gohud
Deux chemins. Laissez votre agent IA le faire, ou déposez le dossier dans votre projet — il n'y a rien d'autre à configurer.
Démarrage rapide
Cinq lignes affichent un écran thématisé. Le parcours complet est sur la page d'installation.
Changer l'apparence — les couleurs et les formes
Un Theme ne peut restyler que ce que le moteur dessine. Les coins arrondis sont les seuls coins dont dispose StyleBoxFlat, et le joystick, les emplacements rapides et le repère guidé sont dessinés par du code — un thème seul ne peut donc jamais changer leur forme. gohud livre pour cela des préréglages : un thème, un skin et un jeu d'icônes choisis d'un seul tenant.
GoUi.use_preset(GoThemePresets.MEDIEVAL_DARK) # thème, skin et icônes d'un seul coup
| Préréglage | Apparence |
|---|---|
default_dark | Le gohud d'origine — coins arrondis, accent bleu doux |
default_light | Les mêmes formes sur une palette claire |
scifi_dark | Coins chanfreinés, arêtes néon cyan et halo, joystick hexagonal, crochets de visée |
scifi_light | Les mêmes formes anguleuses dans une palette claire de plan technique |
medieval_dark | Fer sombre et cuir, cadres d'or ancien, rivets, icônes gravées, titres en Cinzel |
medieval_light | Parchemin, encre et bronze avec les mêmes cadres forgés |
material_light Nouveau | Material 3 pour les écrans d'application — boutons en pilule, dialogues de 28dp, cartes pleines, la barre de navigation, le FAB et la barre de recherche d'une app, Roboto |
material_dark Nouveau | Les mêmes formes Material 3 sur la base sombre |
kids_light Nouveau | Le coffre à jouets des enfants — des touches en bonbon gélifié avec un contour épais et un rebord qui s'enfonce à l'appui, des couleurs de crayon, une page ensoleillée |
kids_dark Nouveau | Le même coffre à jouets sur une page bleu nuit |
comic_light Nouveau | Des cases de bande dessinée — un épais contour d'encre et une ombre franche sur chaque face, des panneaux blancs sur une page crème papier ; l'ombre, sa taille et l'épaisseur du contour sont des réglages |
comic_dark Nouveau | La même encre sur une page de nuit — des contours crème et un primaire jaune |
arcade_light Nouveau | Une borne d'arcade — chaque touche peinte avec un dégradé, un reflet et un rebord, son libellé blanc cerné d'encre ; d'épais panneaux encadrés sur une page bleu ciel, un bandeau de titre doré sur les fenêtres |
arcade_dark Nouveau | Les mêmes touches vives sur des panneaux bleu marine et une page de nuit |
default_dark — coins arrondis, accent bleu doux
default_light — mêmes formes, palette claire
scifi_dark — coins chanfreinés, néon cyan
scifi_light — mêmes formes anguleuses, palette de plan techniqueCes quatre captures montrent le même écran de galerie. Pas une ligne de code ne diffère — seulement le nom du préréglage. Coins des boutons, formes des interrupteurs, rangées de liste et bordures des champs de saisie bougent ensemble.
Collection médiévale
medieval_dark associe le fer et le cuir à l'or ancien ; medieval_light emploie le
parchemin et l'encre. Les cadres de menu portent un rivet et un petit ornement d'angle tandis que le HUD,
toujours visible, reste discret ; 16 icônes gravées redessinent les noms d'objets, et seuls les titres et
sous-titres utilisent la police Cinzel fournie.
medieval_dark — fer et cuir
medieval_light — parchemin et encreLes deux captures viennent de examples/medieval/medieval.tscn, construit à partir des widgets standard.
Le guide médiéval et comment créer votre propre royaume →
Le même écran sur téléphone et sur ordinateur
Les captures de la galerie sont prises sur un téléphone en portrait. Ci-dessous, le même code en 1280×800 — le contenu s'arrête à une largeur lisible (480 dp) et se centre, tandis que le HUD reste dans les coins. Le formulaire contourne les éléments de HUD flottants, mais ne bouge pas lorsqu'il en est déjà à l'écart : le décaler quand même décentrerait le contenu sur un écran large.
default_dark · 1280×800
scifi_dark · 1280×800La même feuille, une autre apparence
Choisissez-en un dans Paramètres du projet → gohud → Theme → Preset, ou renseignez
GoConfig.preset. Remplir explicitement theme, skin ou icons
l'emporte sur le préréglage : vous pouvez donc partir d'un préréglage et n'en redéfinir qu'un seul.
new_theme.py kingdom --from medieval_dark écrit
une palette qui détaille chaque valeur héritée ; make_theme.py kingdom construit le thème, ses
illustrations de contrôles et les molettes de son skin, et le préréglage apparaît dans le sélecteur.
Chaque réglage et chaque molette →
Les skins — là où un Theme n'atteint pas
Un skin possède le joystick, la face des emplacements rapides, l'anneau du repère guidé, les puces, les squelettes de chargement, les alertes, les séparateurs et les en-têtes de section. Dérivez-le et ne redéfinissez que ce que vous voulez changer.
class_name MySkin extends GoSkin
func slot_box(accent: Color, lit: bool) -> StyleBox:
var box := GoStyleBoxCut.new()
box.bg_color = accent
box.cut = 6.0
box.edge_color = accent
return box
| Classe | Formes qu'elle peut produire |
|---|---|
GoStyleBoxCut | Coins coupés en diagonale (chanfrein), une arête d'accent épaissie, un halo extérieur |
GoStyleBoxBracket | Des marques d'angle seules, sans enfermer le contenu |
GoStyleBoxMedieval | Un cadre forgé avec rivets, gravure d'angle, un reflet biseauté et le grain du matériau |
GoStyleBoxJelly | Un bonbon en gelée — un contour épais, un rebord plein qui s'enfonce à l'appui, un corps plus clair en haut et un reflet blanc |
GoStyleBoxComic | Une case de bande dessinée — un épais contour d'encre et une ombre portée franche, tous deux dimensionnés par GoConfig pendant que le jeu tourne |
GoStyleBoxArcade | Une touche ou un panneau d'arcade — un corps en dégradé, un reflet blanc, un rebord qui s'enfonce à l'appui et un contour d'encre ; un panneau ajoute un épais cadre coloré autour d'un fond pâle |
Les six se sérialisent dans une ressource Theme — c'est ce qui permet à un thème de changer la forme,
et pas seulement la couleur. GoSkinSciFi, GoSkinMedieval, GoSkinMaterial, GoSkinKids, GoSkinComic et GoSkinArcade sont les sous-classes fournies.



GoStyle.box() renvoie toujours un StyleBoxFlat, parce que le code appelant le
reçoit et ajuste bg_color ou corner_radius. Utilisez
GoStyle.surface() lorsqu'une forme personnalisée doit survivre.
Widgets
Les pièces, en un tableau. Chacune en détail → · Chaque widget en image → · Pop-ups et boîtes de dialogue, le guide complet →
| Classe | Base | Rôle |
|---|---|---|
GoSurface | Control | Coque de carte flottante — placement au centre, en bas ou ancré, en-tête et pied fixes, corps défilant, redimensionnement par glissement |
GoSheet | CanvasLayer | Des pages qui montent depuis le bas, sur leur propre calque afin de passer au-dessus du HUD |
GoDialogs | Node | Confirmations et alertes que vous await ; destructive pour les actions irréversibles |
GoForm | MarginContainer | Formulaires à largeur plafonnée qui évitent le clavier virtuel et, avec avoid_hud, le HUD |
GoScroll | ScrollContainer | Défilement tactile ; la barre de défilement se loge dans la marge intérieure de la carte |
GoNotice | PanelContainer | Un snackbar qui ne prend ni la saisie ni le focus |
GoPromptCard | PanelContainer | Une question qui ne bloque pas le jeu |
GoCoachMark | Control | Une visite guidée qui désigne de vraies commandes ; appuyer sur la cible fait avancer |
GoHudAnchor | Control | Épingle les éléments de HUD à l'une des neuf positions de la zone sûre |
GoBar | Control | Barres de vie, de mana et d'expérience avec des variations amorties |
GoSlot | Button | Un emplacement rapide — icône, quantité, temps de recharge et raccourci sur une seule face |
GoJoystick | Control | Stick virtuel en mode fixe, suiveur ou relatif |
GoIconButton | Button | Paraît petit, s'appuie grand |
GoStyle | statique | Boutons, rangées de liste, champs de saisie, puces, tableaux, onglets et bien plus, fabriqués d'une seule manière cohérente |
Attendre, dire, compter
| Classe | Base | Rôle |
|---|---|---|
GoSnackbar | Node | le message qui se place tout seul |
GoSpinner | Control | une attente dont on ne voit pas la fin |
GoBadge | PanelContainer | la pastille de non-lu, l'étiquette NOUVEAU, le 99+ |
Formulaires et listes
| Classe | Base | Rôle |
|---|---|---|
GoField | VBoxContainer | la rangée qui peut être en erreur |
GoInputGroup | HBoxContainer | une saisie soudée à son bouton |
GoCombobox | Button | un sélecteur qui cherche |
GoCodeInput | VBoxContainer | codes promo et codes cadeaux |
GoTable | VBoxContainer | des en-têtes triables, des rangées sélectionnables |
GoPagination | HBoxContainer | des pages, ou une rangée « Voir plus » |
Les formes que les jeux utilisent vraiment
| Classe | Base | Rôle |
|---|---|---|
GoRewardCalendar | VBoxContainer | la présence quotidienne |
GoRadar · GoDonut | Control | les statistiques d'un coup d'œil |
GoCarousel | VBoxContainer | bannières et sélection de personnage |
GoKbd | HBoxContainer | des indications de touche qui ne mentent pas |
Par-dessus l'écran
| Classe | Base | Rôle |
|---|---|---|
GoDrawer | CanvasLayer | le panneau latéral |
GoPopover | RefCounted | la carte épinglée |
GoContextMenu | RefCounted | appui long et clic droit |
GoConsole | CanvasLayer | la console de développement |
Go HUD Skill
gohud embarque une compétence IA : toute l'API, des modèles exécutables et un lanceur d'aperçu. Collez un bloc dans votre agent : il installe gohud et sait s'en servir.
La lisibilité se mesure, elle ne s'estime pas à l'œil
« Joli » relève du goût ; « lisible » se mesure. Un gris pâle paraît très bien sur un bon écran et disparaît sur un téléphone en plein jour — choisir à l'œil finit toujours par y mener.
python3 addons/gohud/tools/check_contrast.py
Chaque paire de couleurs et le libellé de chaque état de bouton sur le panneau qui le porte sont mesurés au regard des WCAG, dans les quatorze thèmes. Les couleurs translucides sont d'abord composées sur leur fond réel — les mesurer directement annonce un meilleur rapport que ce que l'écran montre.
Les couleurs de texte sont donc dérivées, pas choisies : le générateur part de l'entrée de la palette et pousse sa clarté jusqu'à ce qu'elle franchisse le seuil sur chaque surface où elle peut se poser. Changez la palette et le contraste suit. Les règles et les pièges qui les motivent →
Vérifications, versions et ce site
Un seul point d'entrée lance toutes les vérifications ; chaque partie voit ce que les autres ne voient pas.
bash addons/gohud/tools/check_all.sh
| Vérification | Ce qu'elle attrape |
|---|---|
run_tests.sh sur quatre tailles d'écran | Comportement et mise en page des widgets, positions en RTL, focus clavier, contraste du skin à l'exécution, chaque préréglage |
new_project_check.sh | Les dépendances cachées envers un projet hôte ; avec --zip la version telle qu'elle est livrée, avec --export une build Web |
check_contrast.py | Le contraste WCAG de chaque fichier de thème, états des boutons et panneaux translucides compris |
check_generated.py · check_scaffold.sh | Les thèmes générés correspondent à leurs palettes ; un thème jetable se construit et passe le contrôle de contraste |
check_package.py | La version reprise de package.json, les déplacements dans le changelog et le contenu du ZIP, sur des copies temporaires |
check_site.py | Les liens, les ancres, la langue des pages, le glossaire et les tableaux de molettes de ce site |
Publier des versions
cat addons/gohud/package.json # { "version": "1.1.0" }
bash addons/gohud/tools/release.sh # toutes les vérifications → ZIP → ce ZIP dans un projet vide
bash addons/gohud/tools/package.sh # 1.1.0 → builds/1.1.0/gohud-1.1.0.zip
La version est celle écrite dans package.json : l'empaquetage ne l'augmente jamais. Pour publier
une nouvelle version, changez d'abord ce numéro. Une exécution réussie aligne plugin.cfg et
GoUi.VERSION sur cette valeur et, la première fois que cette version est empaquetée, déplace les
notes Unreleased de CHANGELOG.md dans une entrée datée. Réempaqueter la même version reconstruit
son ZIP et remplace l'ancien. Une exécution qui échoue ne change rien. Le ZIP laisse de côté ce site, les tests,
les outils et package.json.
Ce site
python3 addons/gohud/tools/make_site.py # glossaire et tableaux de molettes de skin, générés depuis les sources
python3 addons/gohud/tools/check_site.py # liens, ancres, langue, glossaire, tableaux générés
bash addons/gohud/tools/site_shots.sh /tmp/shots # captures d'écran de chaque page, en version bureau et téléphone
Les pages sont du HTML simple dans www/ — l'anglais à la racine, le coréen dans ko/.
Un workflow GitHub Actions publie ce dossier comme racine du site.