# glowers-radio This repo contains backing information for Glowers Radio. ## Contributing If you have a song in mind that would fit on Glowers Radio, you are free to create a PR or send in a diff for `generate.js`. The living schema is documented [below](#format) and mostly maps 1:1 to `MediaItem`, you should also check the `MediaItem` for the the media that is most similar to what you wish to add. ## Best Practices - Use an alpha-numeric id. Don't use dashes or hyphens; Uppercase characters *may* be used when appropriate. - Declare metadata when available. If you do not know the original source, try to find it first. - Metadata **must** be accurate and not an artists rendition of the actual metadata. - Items that aren't primarily music should be tagged with `misc`. - Use the `metadata-prefer-id` tag if the actual title would be too long, cubersome, or unrelated. i.e: - `slamtris`: Slamtris - Quad City DJs vs Hirokazu Tanaka *(cumbersome)* - `dngyamom`: Dynamite by BTS but it's Doin' Your Mom *(cumbersome)* - `thisistheinfowar`: In the House, In a Heartbeat *(unrelated)* - `alexjones`: Alex Jones Remix: Renai Circulation *(cumbersome)* - `ywnbaw`: Professor proves SICKS are the best weapons *(unrelated)* - `whenblackissus`: Among Us theme song but it's in the style of Metallica's Black Album *(long and cumbersome)* - `niggatorial`: I'm The 2007 YouTube Tutorial *(cumbersome)* - `honorary`: Erika *(unrelated)*
- Use `image/png`, `image/jpg`, `image/gif`, `audio/mp3`, and `video/mp4`. Files *should* be under 10MB and be of reasonable or tolerable quality - Try not to use reuploads, remasters, or edits, as the source; Unless the edit or remaster is the actual media. - Don't use videos where audio alongside artwork would be functionally identical. Lyrics videos are ok - Sources *should* contain codec information; if you are unsure of what correct codecs to declare, do not declare any or ask for help. No codec declarations are better than incorrect codec declarations. See [MDN](https://developer.mozilla.org/en-US/docs/Web/Media/Formats/codecs_parameter#basic_syntax) for details - All content *should* be hosted on Glowers Club. If you do not Glow, then your sources will be reuploaded if your Item(s) are accepted
- `video/` **must** have a thumbnail preview. - `video/` *should* have a `EDisplayType.SQUARE` fallback for audioOnly, and for when the agent does not support the provided `video/`. - Animated previews **must** always have a `image/gif` fallback. - Avoid using `EDisplayType.LANDSCAPE` when possible. - `EDisplayType.SQUARE` previews **must** be exactly `1:1`; `EDisplayType.LANDSCAPE` previews *should* be exactly `16:9`, or **must** be a close equivalent ## Format The `songs.json` format **is only intended for use for Glowers Radio**, and is effectively a living standard as a result. **Live data may change drastically without warning** If you do wish to use this data for your own purposes, i.e: to make a custom player, you should be caching the songs list so your application has something to fallback to if a breaking change to the format is made. ```yaml required: [ version, songs ] $defs: GWRadioURI: type: uri description: 'A URI that points to the source file. See `GWMediaPlayer.fromURIToAbsolute()` for how to convert to a URL' MediaCodecs: type: array description: 'An array of codecs contained within the source file. Items should follow RFC6381' items: - type: string properties: version: { type: integer } songs: items: required: [ id, sources ] properties: id: type: string tags: description: 'A list of tags used for filtering.' type: array items: - const: sus description: >- Media information will render in the Among Us Font. In imposter mode, only songs tagged with sus will be in shuffle - const: niggers description: >- Media that was originally available through the now-defunct nigge.rs online radio. Tagged items may contain the original _nigid and/or _nigkey as metadata $seeAlso: - '#/properties/songs/items/properties/metadata/properties/_nigid' - '#/properties/songs/items/properties/metadata/properties/_nigkey' - const: splash-song description: 'Media that can play on the Glowers Club splash page.' - const: misc description: 'Media that does not significantly contain music.' - const: moonman description: 'Moonman songs' - const: metadata-prefer-id description: >- Use the Media id instead of the metadata title for MediaSession. Primarily for media where the source title does not match the assigned id - regex: '^radio\-media\-style\-[a-z\-]+' description: >- Used to add or remove styling for particular Media, such as to remove the Album Art box or disable background blur. - type: string description: 'Tags may also be arbitrary' metadata: required: [ title, artist ] properties: title: { type: string } artist: { type: string } href: description: 'A URL the original source can be found, if known. Link may be dead' type: string format: url _nigid: $seeAlso: '#/properties/songs/items/properties/tags/items/1' description: 'The original song id from nigge.rs.' type: string _nigkey: $seeAlso: '#/properties/songs/items/properties/tags/items/1' description: 'Content of _id from the original nigge.rs song entry.' type: string sources: type: array items: - required: [ type, url ] properties: type: { type: string, format: mimetype } codecs: { "$ref": "#/$defs/MediaCodecs" } uri: { "$ref": "#/$defs/GWRadioURI" } previews: description: >- This is an array so GWMediaPlayer can better display videos being played as audio only. The first Item is how the MediaItem *should* be displayed, other Items are alternative versions the player may use. type: array items: - properties: display_type: description: 'Used to determine how the media should be displayed. See GWMediaPlayer.EDisplayType' type: string type: { type: string, format: mimetype } codecs: { "$ref": "#/$defs/MediaCodecs" } uri: { "$ref": "#/$defs/GWRadioURI" } size: { type: string } ```