glowers-radio/readme.md
2022-12-13 07:48:33 +00:00

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

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 }