data | ||
lib | ||
.gitignore | ||
Makefile | ||
readme.md |
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 attribution info (track info) when available. If you do not know the original source, try to find it first.
- Attribution info must be accurate and not an artists rendition.
- 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 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 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
addTrackInfo
setMetadata
will be deprecated in favor of addTrackInfo
to allow additional attribution information to be stored.
addTrackInfo
is more verbose than setMetadata
. Check the JSDoc blocks for RadioMetadata.new
RadioMetadata
methods beginning with b
are auto-generated from BMetadataType
.
Avoid being too autistic with additional info, just note the main stuff. You don't have to add the Randy Marsh saying nigger clip because it's used a single time in a ytpmv.
Support for raw href
values will remain, however an appropriate createURI
function should be used instead.
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'
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:
$ref: "#/$defs/GWRadioURI"
description: 'A URI where the original source can be found, if known. Link may be dead'
_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 }