Ajoute les images libres et les couleurs des jeux
Validation du contenu / validate (push) Has been cancelled

- documente l'ajout d'images sous licence libre ou avec autorisation de
  l'éditeur (assets/assets.json) et ajoute son schéma ;
- les images sont traitées comme des fichiers binaires ;
- couleurs d'Azul et d'Harmonies, et couleurs propres à l'extension
  Crescendo, reprises des pochettes ;
- schéma des extensions régénéré (champ colors).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-24 13:41:18 +02:00
parent 228a1e4afb
commit 9035125f77
8 changed files with 159 additions and 3 deletions
+4
View File
@@ -1 +1,5 @@
* text=auto eol=lf
*.png binary
*.jpg binary
*.jpeg binary
*.webp binary
+57
View File
@@ -99,6 +99,63 @@ La fiche de règles d'une extension (`rules.fr.json`, schéma
`expansion-rules.schema.json`) n'exige que `summary` : décrivez ce qui change
(mise en place, déroulement, décompte), pas tout le jeu.
## Ajouter des images
Par défaut, l'app affiche la miniature BoardGameGeek du jeu. Vous pouvez
fournir un **logo** (carré) et une **bannière** (format large, environ 3:1),
**uniquement si leurs droits le permettent** :
| Licence (`license`) | Quand l'utiliser |
|---|---|
| `CC0-1.0` | domaine public, aucune attribution requise |
| `CC-BY-4.0` | réutilisation libre avec attribution |
| `CC-BY-SA-4.0` | réutilisation libre avec attribution et partage à l'identique |
| `publisher-permission` | l'éditeur autorise cet usage par écrit : `permission` doit pointer vers cette autorisation |
Une image trouvée sur internet, une photo de boîte ou un visuel de l'éditeur
**sans licence libre ni autorisation écrite** n'a pas sa place ici.
```
games/230802-azul/
assets/
assets.json
logo.webp
banner.webp
```
```json
{
"$schema": "../../../schemas/assets.schema.json",
"schemaVersion": 1,
"files": [
{
"file": "logo.webp",
"role": "logo",
"license": "CC-BY-4.0",
"author": "Nom de l'auteur",
"source": "https://… (page d'origine de l'image)"
}
]
}
```
Le CI vérifie que :
- chaque image est déclarée dans `assets.json`, et chaque image déclarée
est présente ;
- c'est vraiment une image **PNG, JPEG ou WebP** (pas de SVG) qui correspond
à son extension ;
- elle pèse **512 Ko au maximum** (préférez WebP) ;
- l'auteur est indiqué (sauf CC0), et le lien d'autorisation pour
`publisher-permission`.
L'app affiche le crédit (auteur, licence, lien vers la source) près de chaque
image. Une extension peut aussi avoir son dossier `assets/`, dans son propre
dossier.
**À la relecture**, vérifiez la licence sur la page `source` (et
l'autorisation sur `permission`) : le CI ne peut pas le faire à votre place.
## Vérifier avant d'envoyer
Avec un éditeur qui comprend les schémas JSON (VS Code…), la clé `$schema`
+6 -1
View File
@@ -17,6 +17,8 @@ games/
scoring.json # modèle de score (comment compter les points)
rules.fr.json # fiche de règles en français
README.md # notes libres (facultatif)
assets/ # images sous licence libre (facultatif)
assets.json # licence, auteur et source de chaque image
expansions/ # extensions vendues à part (une par dossier)
<bggId>-<nom>/
expansion.json # ce que l'extension ajoute au jeu de base
@@ -34,7 +36,10 @@ de BoardGameGeek : on ne les recopie pas ici.
- **Du code** : les modèles de score sont des fichiers JSON déclaratifs. Si un
jeu demande une règle de calcul que le format ne sait pas exprimer, ouvrez
un ticket sur le dépôt de l'app.
- **Des images, logos ou PDF** : ce sont des œuvres des éditeurs.
- **Des images sans licence libre** (visuels de boîte, logos d'éditeurs…) ni
autorisation écrite, et des **PDF** : ce sont des œuvres protégées. Les
images libres sont acceptées, déclarées avec leur licence (voir
[CONTRIBUTING.md](CONTRIBUTING.md#ajouter-des-images)).
- **Le texte des livrets de règles** : une fiche de règles est un résumé
rédigé avec vos propres mots, qui renvoie aux règles officielles.
+2 -1
View File
@@ -12,7 +12,8 @@
"winner": "highest",
"icon": "Palette",
"colors": {
"primary": "#005b8f"
"primary": "#1d5f96",
"secondary": "#e4572e"
},
"options": [
{
@@ -3,6 +3,7 @@
"schemaVersion": 1,
"bggId": 472690,
"name": "Crescendo",
"colors": { "primary": "#5b3f86", "secondary": "#f19bb0" },
"adds": {
"options": [
{ "type": "boolean", "id": "sanctuaires", "label": "Module Sanctuaires", "default": true },
+2 -1
View File
@@ -15,7 +15,8 @@
},
"icon": "TreePine",
"colors": {
"primary": "#065f46"
"primary": "#2b4aa8",
"secondary": "#f2a93b"
},
"options": [
{
+70
View File
@@ -0,0 +1,70 @@
{
"type": "object",
"properties": {
"$schema": {
"type": "string"
},
"schemaVersion": {
"type": "number",
"const": 1
},
"files": {
"type": "array",
"items": {
"type": "object",
"properties": {
"file": {
"type": "string",
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*\\.(png|jpe?g|webp)$"
},
"role": {
"type": "string",
"enum": [
"logo",
"banner"
]
},
"license": {
"type": "string",
"enum": [
"CC0-1.0",
"CC-BY-4.0",
"CC-BY-SA-4.0",
"publisher-permission"
]
},
"author": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"source": {
"type": "string",
"format": "uri",
"pattern": "^https\\:\\/\\/"
},
"permission": {
"type": "string",
"format": "uri",
"pattern": "^https\\:\\/\\/"
}
},
"required": [
"file",
"role",
"license",
"source"
],
"additionalProperties": false
},
"minItems": 1
}
},
"required": [
"schemaVersion",
"files"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Images libres d'un jeu (assets/assets.json)"
}
+17
View File
@@ -22,6 +22,23 @@
"format": "uri",
"pattern": "^https\\:\\/\\/"
},
"colors": {
"type": "object",
"properties": {
"primary": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"secondary": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
}
},
"required": [
"primary"
],
"additionalProperties": false
},
"adds": {
"type": "object",
"properties": {