6.6 KiB
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 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
, andvideo/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 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 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 aEDisplayType.SQUARE
fallback for audioOnly, and for when the agent does not support the providedvideo/
.- Animated previews must always have a
image/gif
fallback. - Avoid using
EDisplayType.LANDSCAPE
when possible. EDisplayType.SQUARE
previews must be exactly1:1
;EDisplayType.LANDSCAPE
previews should be exactly16: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.
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'
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 }
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
uri: { "$ref": "#/$defs/GWRadioURI" }
type: { type: string, format: mimetype }
size: { type: string }