This repo contains backing information for Glowers Radio.
Go to file
2023-01-08 01:26:25 +00:00
data data/songs.json: add 21stcenturyhumor, piejection 2023-01-08 01:26:25 +00:00
.gitignore .gitignore: update 2022-12-15 07:48:57 +00:00
generate.js generate.js: add 21stcenturyhumor, piejection 2023-01-08 01:26:25 +00:00
readme.md readme.md: update readme for addTrackInfo 2023-01-08 01:25:11 +00:00

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, 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 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

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 }