Funkwhale 1.0

แž‚แž˜แŸ’แžšแŸ„แž„ แž แŸ’แžœแžปแž„แžœแŸ‰แžถแž›แŸ‹ แž”แžถแž“แž…แŸแž‰แž•แŸ’แžŸแžถแž™แž€แŸ†แžŽแŸ‚แžŸแŸ’แžแŸแžšแž—แžถแž–แžŠแŸ†แž”แžผแž„แŸ” แž‡แžถแž•แŸ’แž“แŸ‚แž€แž˜แžฝแž™แž“แŸƒแž‚แŸ†แž“แžทแžแž•แŸ’แžแžฝแž…แž•แŸ’แžแžพแž˜แž“แŸแŸ‡ แž˜แŸ‰แžถแžŸแŸŠแžธแž“แž˜แŸแžฅแžแž‚แžทแžแžแŸ’แž›แŸƒแž€แŸ†แž–แžปแž„แžแŸ’แžšแžผแžœแž”แžถแž“แž”แž„แŸ’แž€แžพแžแžกแžพแž„ แžŠแŸ‚แž›แžŸแžšแžŸแŸแžšแž‡แžถแž—แžถแžŸแžถ Python แžŠแŸ„แž™แž”แŸ’แžšแžพแž€แŸ’แžšแž”แžแŸแžŽแŸ’แžŒ Django แžŠแžพแž˜แŸ’แž”แžธแž”แž„แŸ’แž แŸ„แŸ‡แžแž“แŸ’แžแŸ’แžšแžธ แž“แžทแž„แž•แžแžแžถแžŸ แžŠแŸ‚แž›แžขแžถแž…แžŸแŸ’แžแžถแž”แŸ‹แž”แžถแž“แžŠแŸ„แž™แž”แŸ’แžšแžพแž…แŸ†แžŽแžปแž…แž”แŸ’แžšแž‘แžถแž€แŸ‹แž‚แŸแž แž‘แŸ†แž–แŸแžšแŸ” แžขแžแžทแžแžทแž‡แž“แžŠแŸ‚แž›แž˜แžถแž“แž€แžถแžšแž‚แžถแŸ†แž‘แŸ’แžšแžŸแž˜แŸ’แžšแžถแž”แŸ‹ Subsonic API แžฌ Funkwhale API แžŠแžพแž˜แž“แžทแž„ แž–แžธแžงแž‘แžถแž แžšแžŽแŸแž•แŸ’แžŸแŸแž„แž‘แŸ€แžแž“แŸƒ FunkwhaleแžŠแŸ„แž™แž”แŸ’แžšแžพ แž–แžทแž’แžธแž€แžถแžšแž”แžŽแŸ’แžแžถแž‰แžŸแž แž–แŸแž“แŸ’แž’ ActivityPub.


แžขแž“แŸ’แžแžšแž€แž˜แŸ’แž˜แžšแž”แžŸแŸ‹แžขแŸ’แž“แž€แž”แŸ’แžšแžพแž‡แžถแž˜แžฝแž™แžขแžผแžŒแžธแž™แŸ‰แžผแž€แžพแžแžกแžพแž„แžŠแŸ„แž™แž”แŸ’แžšแžพแž”แžŽแŸ’แžŽแžถแž›แŸแž™ แž“แžทแž„แž†แžถแž“แŸ‚แž›แŸ– แž”แžŽแŸ’แžŽแžถแž›แŸแž™แž‚แžบแž‡แžถแž”แžŽแŸ’แžแžปแŸ†แž“แŸƒแžŸแžทแž›แŸ’แž”แž€แžšแž‡แžถแž…แŸ’แžšแžพแž“แžŠแŸ‚แž›แž˜แžถแž“ UUID แžŠแŸ‚แž›แžแŸ’แžšแžผแžœแž”แžถแž“แž”แž„แŸ’แž€แžพแžแžŠแŸ„แž™แž…แŸƒแžŠแž“แŸ’แž™แž‡แžถแžขแžถแžŸแž™แžŠแŸ’แž‹แžถแž“ แž แžพแž™แž†แžถแž“แŸ‚แž›แž‚แžบแž‡แžถแžŒแžธแžŸแž”แŸ’แžšแžœแžแŸ’แžแžทแžšแž”แžŸแŸ‹แžŸแžทแž›แŸ’แž”แž€แžšแžแŸ‚แž˜แžฝแž™ แžŠแŸ‚แž›แžแŸ’แžšแžผแžœแž”แžถแž“แž•แŸ’แžแž›แŸ‹แžขแžถแžŸแž™แžŠแŸ’แž‹แžถแž“แžŠแŸ‚แž›แžขแžถแž…แžขแžถแž“แž”แžถแž“แžšแž”แžŸแŸ‹แž˜แž“แžปแžŸแŸ’แžŸแŸ” แž”แŸ‰แžปแžŸแŸ’แžแžทแŸแžขแžถแž…แž˜แžถแž“แž”แŸ’แžšแž™แŸ„แž‡แž“แŸแžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แžถแžšแž”แŸ„แŸ‡แž–แžปแž˜แŸ’แž–แž•แžแžแžถแžŸแŸ” แž’แŸ’แžœแžพแž€แžถแžšแž‡แžถแž˜แžฝแž™แž€แžถแžšแž‡แžถแžœแž‚แžบแžŸแŸ’แžšแžŠแŸ€แž„แž‚แŸ’แž“แžถแž‘แŸ…แž“แžนแž„แž‚แž˜แŸ’แžšแŸ„แž„แž•แŸ’แžŸแŸแž„แž‘แŸ€แž - แž”แŸ†แž–แž„แŸ‹แž˜แžทแžแŸ’แžแŸ– แžขแŸ’แž“แž€โ€‹แžขแžถแž…โ€‹แž‡แžถแžœโ€‹แž‘แžถแŸ†แž„โ€‹แžขแŸ’แž“แž€โ€‹แž”แŸ’แžšแžพโ€‹แž“แžทแž„โ€‹แž†แžถแž“แŸ‚แž›โ€‹แžŠแŸ‚แž›โ€‹แž”แžถแž“โ€‹แž”แž„แŸ’แž€แžพแžโ€‹แžŠแŸ„แž™โ€‹แžกแŸ‚แž€โ€‹แž–แžธโ€‹แž‚แžถแžแŸ‹แŸ” แžŠแŸ„แž™แžŸแžถแžšแž˜แŸ‰แžถแžŸแŸŠแžธแž“แž˜แŸแžŠแŸ†แžŽแžพแžšแž€แžถแžšแžŠแŸ„แž™แž”แŸ’แžšแžพแž–แžทแž’แžธแž€แžถแžš ActivityPub แžœแžถแžขแžถแž…แž‡แžถแžœแž–แžธแž€แžถแžšแžขแž“แžปแžœแžแŸ’แžแžŠแŸแž–แŸแž‰แž“แžทแž™แž˜แž•แŸ’แžŸแŸแž„แž‘แŸ€แžแžŠแžผแž…แž‡แžถ Mastodon ะธ pleroma.

แž”แž“แŸ’แž‘แžถแž”แŸ‹โ€‹แž–แžธโ€‹แž”แž„แŸ’แž€แžพแžโ€‹แž”แžŽแŸ’แžŽแžถแž›แŸแž™ แžฌโ€‹แž†แžถแž“แŸ‚แž› แžขแŸ’แž“แž€โ€‹แžขแžถแž…โ€‹แž”แž„แŸ’แž แŸ„แŸ‡โ€‹แžแž“แŸ’แžแŸ’แžšแžธโ€‹แž”แžถแž“แŸ” แž€แžถแžšแž•แŸ’แž‘แžปแž€แžฏแž€แžŸแžถแžšแžŸแž˜แŸ’แžšแžถแž”แŸ‹แžœแžถแžขแžถแž…แž‡แžถแž€แŸ’แž“แžปแž„แžŸแŸ’แžšแžปแž€ แžฌแž–แžธแž…แž˜แŸ’แž„แžถแž™ แžŠแŸ„แž™แž”แŸ’แžšแžพแž‡แŸ†แž“แžฝแž™แžŠแŸ‚แž›แž—แŸ’แž‡แžถแž”แŸ‹แž˜แž€แž‡แžถแž˜แžฝแž™แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž”แŸ’แžšแž–แŸแž“แŸ’แž’แžฏแž€แžŸแžถแžšแžŠแŸ„แž™แž•แŸ’แžขแŸ‚แž€แž›แžพแž–แžทแž’แžธแž€แžถแžš Amazon S3 แŸ” แžขแŸ’แž“แž€แžขแžถแž…แž•แŸ’แž‘แžปแž€แžกแžพแž„แžฏแž€แžŸแžถแžšแžŽแžถแž˜แžฝแž™แž“แŸƒแž‘แž˜แŸ’แžšแž„แŸ‹แžŠแŸแž–แŸแž‰แž“แžทแž™แž˜ แžŠแŸ„แž™แž˜แžทแž“แž…แžถแŸ†แž”แžถแž…แŸ‹แž€แžแŸ‹แžแŸ’แžšแžถแž”แž“แŸ’แžแŸ‚แž˜ แž“แžทแž„แž”แžถแžแŸ‹แž”แž„แŸ‹แž‚แžปแžŽแž—แžถแž– (แžงแž‘แžถแž แžšแžŽแŸ PeerTube แžŠแŸ‚แž›แž‚แžถแŸ†แž‘แŸ’แžšแž€แžถแžšแž”แž„แŸ’แž แŸ„แŸ‡แžขแžผแžŒแžธแž™แŸ‰แžผแž•แž„แžŠแŸ‚แžš)แŸ” Funkwhale แžขแžถแž“แž‘แžทแž“แŸ’แž“แž“แŸแž™แž˜แŸแžแžถแžแž“แŸ’แžแŸ’แžšแžธ แž“แžทแž„แžŸแžทแž›แŸ’แž”แŸˆแž‚แž˜แŸ’แžšแž”แžŠแŸ‚แž›แž”แžถแž“แž”แž„แŸ’แž€แž”แŸ‹แž“แŸ…แž€แŸ’แž“แžปแž„แžฏแž€แžŸแžถแžš แž แžพแž™แž”แŸ’แžšแžŸแžทแž“แž”แžพแž–แžฝแž€แžœแžถแž”แžถแžแŸ‹ แž”แž„แŸ’แž€แžพแžแž€แŸ†แž แžปแžŸแž˜แžฝแž™แŸ” แžŠแžผแž…แŸ’แž“แŸแŸ‡แžขแŸ’แž“แž€แž”แŸ’แžšแžพแžแŸ’แžšแžผแžœแž”แžถแž“แžŽแŸ‚แž“แžถแŸ†แžฑแŸ’แž™แž”แŸ’แžšแžพ MusicBrainz Picard แžŠแžพแž˜แŸ’แž”แžธแžŸแžšแžŸแŸแžšแžŸแŸ’แž›แžถแž€แžแŸ’แžšแžนแž˜แžแŸ’แžšแžผแžœแž˜แžปแž“แž–แŸแž›แž•แŸ’แž‘แžปแž€แžกแžพแž„แŸ” แž…แŸ†แžŽแžปแž…แž”แŸ’แžšแž‘แžถแž€แŸ‹แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แžถแžšแž€แŸ‚แžŸแž˜แŸ’แžšแžฝแž›แž‘แžทแž“แŸ’แž“แž“แŸแž™แž˜แŸแžแžถแž”แž“แŸ’แž‘แžถแž”แŸ‹แž–แžธแž€แžถแžšแž‘แžถแž‰แž™แž€แž€แŸแž˜แžถแž“แž•แž„แžŠแŸ‚แžš แžŠแŸ‚แž›แž’แŸ’แžœแžพแž€แžถแžšแž€แŸ’แž“แžปแž„แž‘แž˜แŸ’แžšแž„แŸ‹แž“แŸƒแž€แžถแžšแž€แŸ‚แž”แŸ’แžšแŸ‚แž‡แžถแž˜แžฝแž™แž“แžนแž„แž”แŸ’แžšแžœแžแŸ’แžแžทแž“แŸƒแž€แžถแžšแž•แŸ’แž›แžถแžŸแŸ‹แž”แŸ’แžแžผแžšแžŠแŸ‚แž›แžขแžถแž…แž˜แžพแž›แžƒแžพแž‰แŸ”


แž–แžธแžแž“แŸ’แžแŸ’แžšแžธแžŠแŸ‚แž›แž”แžถแž“แž‘แžถแž‰แž™แž€แžšแžฝแž…แž แžพแž™แž‘แŸ…แž”แžŽแŸ’แžŽแžถแž›แŸแž™ แž“แžทแž„แž”แŸ‰แžปแžŸแŸ’แžแžทแŸ แžขแŸ’แž“แž€แžขแžถแž…แž”แž„แŸ’แž€แžพแžแž”แž‰แŸ’แž‡แžธแž…แžถแž€แŸ‹ แžŸแŸ’แžแžถแž“แžธแž™แŸแžœแžทแž‘แŸ’แž™แžป แž“แžทแž„แžŸแž˜แŸ’แž‚แžถแž›แŸ‹แž”แž‘แž‡แžถแž…แŸ†แžŽแžผแž›แž…แžทแžแŸ’แžแŸ” แžขแŸ’แž“แž€โ€‹แž”แŸ’แžšแžพโ€‹แž–แžธโ€‹แž…แž˜แŸ’แž„แžถแž™โ€‹แž“แžนแž„โ€‹แžขแžถแž…โ€‹แžŸแŸ’แž“แžพโ€‹แžŸแžปแŸ†โ€‹แž…แžผแž›โ€‹แž”แŸ’แžšแžพโ€‹แž”แžŽแŸ’แžŽแžถแž›แŸแž™ แžฌโ€‹แž†แžถแž“แŸ‚แž›โ€‹แžšแž”แžŸแŸ‹โ€‹แžขแŸ’แž“แž€โ€‹แžŠแŸ„แž™โ€‹แž‚แŸ’แžšแžถแž“แŸ‹โ€‹แžแŸ‚โ€‹แž”แžทแž‘แž—แŸ’แž‡แžถแž”แŸ‹โ€‹แžแŸ†แžŽโ€‹แž‘แŸ…โ€‹แžœแžถโ€‹แž€แŸ’แž“แžปแž„โ€‹แžšแž”แžถแžšโ€‹แžŸแŸ’แžœแŸ‚แž„แžšแž€โ€‹แž“แŸƒโ€‹แž˜แŸ‰แžถแžŸแŸŠแžธแž“โ€‹แž˜แŸโ€‹แžšแž”แžŸแŸ‹โ€‹แž–แžฝแž€แž‚แŸแŸ” แžขแŸ’แž“แž€แž”แŸ’แžšแžพแž”แŸ’แžšแžถแžŸแŸ‹แžขแž“แžถแž˜แžทแž€แž“แžนแž„แžขแžถแž…แžŸแŸ’แžแžถแž”แŸ‹แžแž“แŸ’แžแŸ’แžšแžธแž–แžธแž…แŸ†แžŽแžปแž…แž”แŸ’แžšแž‘แžถแž€แŸ‹แž‚แŸแž แž‘แŸ†แž–แŸแžš แž”แŸ’แžšแžŸแžทแž“แž”แžพแžœแžถแžแŸ’แžšแžผแžœแž”แžถแž“แžขแž“แžปแž‰แŸ’แž‰แžถแžแž“แŸ…แž€แŸ’แž“แžปแž„แž€แžถแžšแž€แŸ†แžŽแžแŸ‹แž˜แŸ‰แžถแžŸแŸŠแžธแž“แž˜แŸแŸ” แžขแŸ’แž“แž€โ€‹แž”แŸ’แžšแžพโ€‹แž€แŸ’แž“แžปแž„โ€‹แžŸแŸ’แžšแžปแž€โ€‹แžŠแŸ‚แž›โ€‹แž”แžถแž“โ€‹แž…แžปแŸ‡แžˆแŸ’แž˜แŸ„แŸ‡โ€‹แžขแžถแž…โ€‹แž…แžผแž›โ€‹แž”แŸ’แžšแžพโ€‹แžแž“แŸ’แžแŸ’แžšแžธโ€‹แž‘แžถแŸ†แž„แžขแžŸแŸ‹โ€‹แž“แŸ…โ€‹แž›แžพโ€‹แž˜แŸ‰แžถแžŸแŸŠแžธแž“โ€‹แž˜แŸโ€‹แžŠแŸ„แž™โ€‹แž˜แžทแž“โ€‹แž”แŸ’แžšแžพโ€‹แž…แŸ†แžŽแžปแž…โ€‹แž”แŸ’แžšแž‘แžถแž€แŸ‹โ€‹แž”แžŽแŸ’แžŠแžถแž‰โ€‹แžŠแŸ„แž™โ€‹แž…แžผแž›โ€‹แžแžถแž˜โ€‹แžšแž™แŸˆ แžขแžแžทแžแžทแž‡แž“แžŽแžถแž˜แžฝแž™แžŠแŸ‚แž›แž˜แžถแž“แž€แžถแžšแž‚แžถแŸ†แž‘แŸ’แžš Subsonic API - แž˜แŸ‰แžถแžŸแŸŠแžธแž“แž˜แŸแžแž“แŸ’แžแŸ’แžšแžธแž˜แžฝแž™แž•แŸ’แžŸแŸแž„แž‘แŸ€แžแžŠแŸ‚แž›แžฅแžกแžผแžœแž“แŸแŸ‡แžŸแŸ’แžแžทแžแž“แŸ…แž€แŸ’แžšแŸ„แž˜แžขแžถแž‡แŸ’แž‰แžถแž”แŸแžŽแŸ’แžŽแž€แž˜แŸ’แž˜แžŸแžทแž‘แŸ’แž’แžท แž‡แžถแž˜แžฝแž™แž“แžนแž„แžŸแžถแžแžถแžŠแŸ‚แž›แž€แŸ†แž–แžปแž„แžขแž—แžทแžœแžŒแŸ’แžแžŸแŸ’แžšแž”แž‚แŸ’แž“แžถแž“แŸƒแž˜แžผแž›แžŠแŸ’แž‹แžถแž“แž€แžผแžŠแž…แžถแžŸแŸ‹แž€แŸ’แžšแŸ„แž˜แžขแžถแž‡แŸ’แž‰แžถแž”แŸแžŽแŸ’แžŽแžฅแžแž‚แžทแžแžแŸ’แž›แŸƒ - แžฌ Funkwhale API แžŠแžพแž˜แž‡แžถแžงแž‘แžถแž แžšแžŽแŸแŸ” Otter แžŸแž˜แŸ’แžšแžถแž”แŸ‹ Android.

แžขแžแžทแžแžทแž‡แž“แž€แŸแžขแžถแž…แžŸแŸ’แž“แžพแžŸแžปแŸ†แž–แžธแž˜แŸ‰แžถแžŸแŸŠแžธแž“แž˜แŸแž“แžผแžœแž€แŸ†แžŽแŸ‚แž”แŸ’แžšแŸ‚แž“แŸƒแž”แž‘ (แžงแž‘แžถแž แžšแžŽแŸ แž–แžธ FLAC แž‘แŸ… MP3 แžŠแŸ‚แž›แž˜แžถแž“แžขแžแŸ’แžšแžถแž”แŸŠแžธแžแž‘แžถแž” แž‘แžถแž˜แž‘แžถแžšแž…แžšแžถแž…แžšแžขแŸŠแžธแž“แž’แžบแžŽแžทแžแžแžทแž…)แŸ”

แžœแžถแž‚แžบแžขแžถแž…แž’แŸ’แžœแžพแž‘แŸ…แž”แžถแž“แžŠแžพแž˜แŸ’แž”แžธแž‡แžถแžœ RSS feeds แžงแž‘แžถแž แžšแžŽแŸแž‘แŸ…แž•แžแžแžถแžŸแŸ‹แžŠแŸ‚แž›แž”แžถแž“แžšแŸ€แž”แžšแžถแž”แŸ‹แžšแžฝแž…แž แžพแž™แŸ”

แž€แžถแžšแž•แŸ’แž›แžถแžŸแŸ‹แž”แŸ’แžแžผแžšแž“แŸ…แž€แŸ’แž“แžปแž„แž€แžถแžšแž…แŸแž‰แž•แŸ’แžŸแžถแž™แž“แŸแŸ‡แŸ–

  • แž€แŸ†แžŽแŸ‚ Python แžŠแŸ‚แž›แžแŸ’แžšแžผแžœแž€แžถแžšแžขแž”แŸ’แž”แž”แžšแž˜แžถแžแŸ’แžšแžผแžœแž”แžถแž“แž€แžพแž“แžกแžพแž„แžŠแž›แŸ‹ 3.6;
  • แž€แžถแžšแž•แŸ’แž›แžถแžŸแŸ‹แž”แŸ’แžแžผแžšแž“แŸ…แž€แŸ’แž“แžปแž„ client API แžŠแŸ‚แž›แž”แŸ†แž”แŸ‚แž€แž—แžถแž–แž†แž”แž‚แŸ’แž“แžถ;
  • แž€แžถแžšแž”แžŠแžทแžŸแŸแž’แž“แŸƒแžแžผแžแžนแž“ JSON (JWT) แžŠแžพแž˜แŸ’แž”แžธแž‚แžถแŸ†แž‘แŸ’แžš OAuth;
  • แž’แŸ’แžœแžพแžฑแŸ’แž™แž”แŸ’แžšแžŸแžพแžšแžกแžพแž„แž“แžผแžœแž€แŸ’แž”แžฝแž“แžŠแŸ„แŸ‡แžŸแŸ’แžšแžถแž™แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž”แž„แŸ’แž€แžพแžแž€แžถแžšแž˜แžพแž›แž‡แžถแž˜แžปแž“แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž‚แž˜แŸ’แžšแž”แŸ”
  • แž”แŸŠแžผแžแžปแž„แž˜แžฝแž™แžแŸ’แžšแžผแžœแž”แžถแž“แž”แž“แŸ’แžแŸ‚แž˜แž‘แŸ…แž…แŸ†แžŽแžปแž…แž”แŸ’แžšแž‘แžถแž€แŸ‹แž”แžŽแŸ’แžŠแžถแž‰แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แžถแžšแž“แžถแŸ†แž…แžผแž›แžแž“แŸ’แžแŸ’แžšแžธแž–แžธแž”แŸ’แžšแž–แŸแž“แŸ’แž’แžฏแž€แžŸแžถแžšแž˜แŸ‰แžถแžŸแŸŠแžธแž“แž˜แŸแŸ”
  • แž€แžถแžšแž”แž„แŸ’แž แžถแž‰แž…แŸ†แž“แžฝแž“แž“แŸƒแž€แžถแžšแž‘แžถแž‰แž™แž€แž”แž‘ แž“แžทแž„แžขแžถแž›แŸ‹แž”แŸŠแžปแž˜แž”แžถแž“แž”แž„แŸ’แž แžถแž‰แžแŸ’แž›แžฝแž“แŸ”
  • แž‘แŸ†แž–แŸแžšแžŸแŸ’แžœแŸ‚แž„แžšแž€แžแŸ’แž˜แžธ;
  • แž”แŸŠแžผแžแžปแž„ "แž›แŸแž„" แž“แŸ…แž›แžพแž”แž‘ แž“แžทแž„แžขแžถแž›แŸ‹แž”แŸŠแžปแž˜แžฅแžกแžผแžœแž“แŸแŸ‡แž‡แŸ†แž“แžฝแžŸแž‡แžฝแžšแž‡แžถแž‡แžถแž„แž€แžถแžšแž”แž“แŸ’แžแŸ‚แž˜แž”แž‘แž‘แŸ…แžœแžถแŸ”
  • แž€แžถแžšแž‚แžถแŸ†แž‘แŸ’แžš Scrobbling แžŠแŸ„แž™แž”แŸ’แžšแžพ Last.fm API v2.

แž”แŸ’แžšแž—แž–: linux.org.ru

แž”แž“แŸ’แžแŸ‚แž˜แž˜แžแžทแž™แŸ„แž”แž›แŸ‹