From 9035125f7782920af11972c5c267a24c0994db81 Mon Sep 17 00:00:00 2001 From: homer Date: Sat, 24 Oct 2026 13:41:18 +0200 Subject: [PATCH] Ajoute les images libres et les couleurs des jeux MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- .gitattributes | 4 ++ CONTRIBUTING.md | 57 +++++++++++++++ README.md | 7 +- games/230802-azul/scoring.json | 3 +- .../472690-crescendo/expansion.json | 1 + games/414317-harmonies/scoring.json | 3 +- schemas/assets.schema.json | 70 +++++++++++++++++++ schemas/expansion.schema.json | 17 +++++ 8 files changed, 159 insertions(+), 3 deletions(-) create mode 100644 schemas/assets.schema.json diff --git a/.gitattributes b/.gitattributes index 6313b56..13d18b9 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,5 @@ * text=auto eol=lf +*.png binary +*.jpg binary +*.jpeg binary +*.webp binary diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6cbc30f..9a17956 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -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` diff --git a/README.md b/README.md index 59d61ed..1d6675a 100644 --- a/README.md +++ b/README.md @@ -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) -/ 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. diff --git a/games/230802-azul/scoring.json b/games/230802-azul/scoring.json index 3827e37..e0f246c 100644 --- a/games/230802-azul/scoring.json +++ b/games/230802-azul/scoring.json @@ -12,7 +12,8 @@ "winner": "highest", "icon": "Palette", "colors": { - "primary": "#005b8f" + "primary": "#1d5f96", + "secondary": "#e4572e" }, "options": [ { diff --git a/games/414317-harmonies/expansions/472690-crescendo/expansion.json b/games/414317-harmonies/expansions/472690-crescendo/expansion.json index 1bef88c..b3d77f8 100644 --- a/games/414317-harmonies/expansions/472690-crescendo/expansion.json +++ b/games/414317-harmonies/expansions/472690-crescendo/expansion.json @@ -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 }, diff --git a/games/414317-harmonies/scoring.json b/games/414317-harmonies/scoring.json index 80986f3..531d9e6 100644 --- a/games/414317-harmonies/scoring.json +++ b/games/414317-harmonies/scoring.json @@ -15,7 +15,8 @@ }, "icon": "TreePine", "colors": { - "primary": "#065f46" + "primary": "#2b4aa8", + "secondary": "#f2a93b" }, "options": [ { diff --git a/schemas/assets.schema.json b/schemas/assets.schema.json new file mode 100644 index 0000000..4304ed2 --- /dev/null +++ b/schemas/assets.schema.json @@ -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)" +} diff --git a/schemas/expansion.schema.json b/schemas/expansion.schema.json index f4f2b5a..230fa11 100644 --- a/schemas/expansion.schema.json +++ b/schemas/expansion.schema.json @@ -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": {