{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://beatify.app/schemas/playlist.schema.json", "title": "Beatify Playlist", "description": "Schema for Beatify playlist JSON files in custom_components/beatify/playlists/. Validated in CI (see scripts/validate_playlists.py). Required fields + types are enforced; optional metadata fields are described for documentation but not required.", "type": "object", "required": ["name", "version", "tags", "songs"], "additionalProperties": true, "properties": { "name": { "type": "string", "minLength": 1 }, "version": { "type": "string", "minLength": 1 }, "tags": { "type": "array", "items": { "type": "string" } }, "language": { "type": "string" }, "description": { "type": "string" }, "added_date": { "type": "string" }, "author": { "type": "string" }, "source": { "type": "string" }, "movie_quiz_enabled": { "type": "boolean" }, "songs": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/song" } } }, "$defs": { "song": { "type": "object", "required": [ "artist", "title", "uri", "year", "fun_fact", "fun_fact_de", "fun_fact_es", "fun_fact_fr", "fun_fact_nl" ], "additionalProperties": true, "properties": { "artist": { "type": "string", "minLength": 1 }, "title": { "type": "string", "minLength": 1 }, "year": { "type": "integer", "minimum": 1900, "maximum": 2100 }, "uri": { "description": "Spotify track URI (canonical playback source) or null when no playable track exists.", "oneOf": [ { "type": "string", "pattern": "^spotify:track:[A-Za-z0-9]{22}$" }, { "type": "null" } ] }, "isrc": { "oneOf": [ { "type": "string", "pattern": "^[A-Z]{2}[A-Z0-9]{3}[0-9]{7}$" }, { "type": "null" } ] }, "uri_apple_music": { "type": ["string", "null"] }, "uri_youtube_music": { "type": ["string", "null"] }, "uri_tidal": { "type": ["string", "null"] }, "uri_deezer": { "type": ["string", "null"] }, "uri_apple_music_by_region": { "type": "object" }, "alt_artists": { "type": "array", "items": { "type": "string" } }, "fun_fact": { "type": "string" }, "fun_fact_de": { "type": "string" }, "fun_fact_es": { "type": "string" }, "fun_fact_fr": { "type": "string" }, "fun_fact_nl": { "type": "string" }, "chart_info": { "type": ["object", "string"] }, "certifications": { "type": ["array", "string"] }, "awards": { "type": ["array", "string"] }, "awards_de": { "type": ["array", "string"] }, "awards_es": { "type": ["array", "string"] }, "awards_fr": { "type": ["array", "string"] }, "awards_nl": { "type": ["array", "string"] }, "movie": { "type": "string" }, "movie_choices": { "type": "array", "items": { "type": "string" } } } } } }