{"id":13552302,"url":"https://github.com/select/audius","last_synced_at":"2026-01-31T23:43:12.110Z","repository":{"id":12492477,"uuid":"71985668","full_name":"select/audius","owner":"select","description":"Audius - 💬 chat, 🎧 listen, 📺 watch","archived":false,"fork":false,"pushed_at":"2022-12-29T15:03:31.000Z","size":17096,"stargazers_count":40,"open_issues_count":38,"forks_count":10,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-03T03:33:00.351Z","etag":null,"topics":["mp3player","music","playlist","stream","streamus","upnext","youtube"],"latest_commit_sha":null,"homepage":"https://audius.rockdapus.org/","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/select.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-10-26T09:04:40.000Z","updated_at":"2025-02-16T19:10:10.000Z","dependencies_parsed_at":"2023-01-13T23:30:14.721Z","dependency_job_id":null,"html_url":"https://github.com/select/audius","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/select/audius","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/select%2Faudius","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/select%2Faudius/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/select%2Faudius/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/select%2Faudius/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/select","download_url":"https://codeload.github.com/select/audius/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/select%2Faudius/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28960877,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-31T23:03:11.038Z","status":"ssl_error","status_checked_at":"2026-01-31T22:56:44.691Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["mp3player","music","playlist","stream","streamus","upnext","youtube"],"created_at":"2024-08-01T12:02:01.965Z","updated_at":"2026-01-31T23:43:12.071Z","avatar_url":"https://github.com/select.png","language":"HTML","funding_links":[],"categories":["music","HTML"],"sub_categories":[],"readme":"# Audius ([audius.rockdapus.org](https://audius.rockdapus.org/))\n\nAudius is the ultimate streaming music player.\n\n- Create playlist, no login required, stored in the indexDB in your browser.\n- Queue songs, play history.\n- Organize playlists with drag and drop.\n- Connect to a Matrix room to chat, share, and discover music with your friends.\n- Share your playlists as hyperlinks, files and in Matrix rooms.\n- Runs \"offline\" - a pure HTML5 progressive web app that is self contained.\n- Set start end times of media items (e.g. to cut of trailing silence)\n- Split YouTube full albums into separate songs.\n- Run your own Audius instance as as single HTML file.\n- Plays Imgur \"Most Viral\" as video stream.\n- Supports: YouTube/Vimeo/.mp3/.opus/.oga/.wav/.mp4/.webm/.ogg URLs.\n- Create your own web channels with the build in web scraper.\n\n\u003cimg src=\"https://audius.rockdapus.org/img/audius.screenshot.1280x800.png\" /\u003e\n\n## Community\n\nIf you have questions or feedback, join the chat on matrix or create an issue on github.\n\n- [Join the chat](https://riot.im/app/#/room/#audius:matrix.org)\n- [Create an issue](https://github.com/select/audius/issues)\n\n## Run your own Audius\nEasy as - Download the [audius app](https://github.com/select/audius/blob/master/dist-website/audius.app.html), upload it to your server. Done!\n\nIf you run Audius as file (`file://` URL) all information are lost when you restart.\n\n## Extension\n\nThe [audius extension](https://chrome.google.com/webstore/detail/ekpajajepcojhnjmlibfbjmdjcafajoh) helps to search  external webpages.\n\t\n## Share your Music with Matrix / Riot.im\n[Matrix](https://matrix.org/) is a chat network that Audius uses to share songs.\n\nJoin a room and drag and drop to add new music.\n\n - [Random](https://audius.rockdapus.org/?import=!zKinTrtpQEyHfnIbnI:matrix.org\u0026type=matrix\u0026title=Random)\n - [Rock](https://audius.rockdapus.org/?import=!VTIhlnDdHsxZFZQNFh:matrix.org\u0026type=matrix\u0026title=Rock)\n - [Electronic](https://audius.rockdapus.org/?import=!sgKmJzakMmEdSCgKCE:matrix.org\u0026type=matrix\u0026title=Electronic)\n\nCreate your own rooms with Audius and share it with your friends.\n\n\n## Change log\n\n**2.0.15**\n* Matrix:\n\t* Send room invitations and join invited rooms.\n\t* Invite to and join direct messages with other users.\n\t* Interprete text messages as markdown and render them to HTML using [Snarkdown](https://github.com/developit/snarkdown)\n\n**2.0.14**\t\n* Matrix Rooms:\n    * Search and join all public rooms.\n    * Sort rooms in left menu.\n    * Message event format improved.\n    * Images are shown in chat.\n    * Messages can be deleted.\n    * Show message send staus.\n\n* Webscraper Channels:\n    * Fix audius channels (extension), scrape external sites again.\n    * Add option to forward channel scrape results to matrix channel.\n    * Added ability to watch open tabs for new media (for use with Slack and WhatsApp).\n* Enable Chrome Cast for YouTube.\n\n\n**2.0.13**\t\n* Text chat for Matrix rooms.\n* Removed tabs from left menu, easier navigation between playlists, rooms, and channels.\n* Fix watched media (\"42 New\"), watched media now tracked globally.\n* Always send human readable matrix messages to other clients.\n* Added play history.\n* Load more room/channel content on (infinite)scroll.\n\n**2.0.12**\t\t\n* Singe HTML file Audius app.\n* Modularization into main app, matrix, and webscraper to optimize loading speed.\n* Bootsplash, offline app and other [PWA](https://developers.google.com/web/progressive-web-apps/) things.\n* Fix share component so it always finds a media object.\n* Hide Matrix rooms.\n* Show Matrix consent link, now required to use Matrix.\n* Better registration flow for Matrix.\n\n**2.0.11**\n* Backup and recover your Audius data.\n* Added media sharing UI.\n* Improved Audius logo. Thanks [*Buryat*](http://buryat.me).\n* Show matrix login for rooms that don't allow guests.\n\n**2.0.10**\n* Add full screen mode for continuous full screen playback. Add controls for prev, next, timeline.\n* Custom channel scripts, executed in secure sandbox in extension.\n* Change user interface to less technical language. Thanks \u003ci\u003eCaspar\u003c/i\u003e.\n* Improve matrix room creation and settings: guest access, history readability. Only full members can create rooms.\n\n**2.0.9**\n* Improved mobile UI.\n* Improved search media link detection.\n* Don't open queue on add just indicate new media added. Thanks *lazz*.\n* Show error when extension is needed.\n\n**2.0.8**\n* Import [Streamly](https://github.com/LNFWebsite/Streamly) playlist.\n* Discover public Matrix rooms.\n* Create Matrix rooms.\n* Allow Admins to remove messages from rooms.\n\n**2.0.7**\n* Vimeo video player integrated.\n* Better support for YouTube playlists: import from search results.\n* Resize left menu, video player with drag.\n* Show confirm remove popups.\n* More error checks and error messages.\n* Replace gitter support chat with links to Audius matrix room.\n* Fixed queue sorting.\n\n**2.0.6**\n* Extension for searching external websites for content.\n* Share playlists, matrix rooms, web channels with one click link.\n* Add your own web channels with URL patterns (needs extension).\n* Matrix chat pagination working.\n* Share media in matrix room with drag and drop.\n\n**2.0.5**\n*   Bug fix release: YouTube skip, YouTube URLs in search, mobile version, d\u0026d search results, history for all played items.\n\n**2.0.4**\n*   Drag and drop to copy songs between playlists and queue.\n*   Sort queue with drag and drop.\n*   Added repeat for one song, all songs (only if shuffle is not active).\n*   Added support for web scraper TV stations (Imgur for now, more planned).\n*   Basic support for mobile screens (next release will add full mobile support).\n\n**2.0.3**\n\n*   Improved header timeline design.\n*   Added support for web video .mp4 .webm .ogg URLs.\n*   Added draggable start stop limits for media (hover over timeline).\n\n**2.0.2**\n\n*   Drag and drop search results into the current playlist.\n*   Support for .mp3 .oga .wav URLs (paste into search box).\n*   Experimental support for [Matrix.org](https://matrix.org/) radio stations.\n*   Store and list the 5 last web exports.\n\n**2.0.1**\n\n*   Replaced Redux with Vuex.\n*   Fixed playlist sorting.\n*   Fixed Firefox layout problems.\n*   Fixed, shuffle does not play same songs again.\n*   New (import)/export using [myjson.com](http://myjson.com/).\n\n## Run you own Audius\n\nDownload the \u003ca href=\"audius.app.hmtl\" download\u003eaudius app\u003c/a\u003e and upload it to you server.\n\n## Install Audius as app\n\n**Chrome desktop:**\n\n1.  At the top right, click _More_.\n2.  Click _More Tools_.\n3.  Add the app:\n\t\tWindows users: Click _Add to taskbar_.\n\t\tLinux users: Click _Add to desktop_.\n\t\tChromebook users: Click _Add to shelf_.\n\n**Chrome android:**\nTap the menu button and tap _Add to homescreen_. The app is not yet optimized for mobile phones, it might work on tablets.\n\n**Local HTML5:**\nSince this player is a pure HTML5 app without server side code you can simply download the HTML and JS code and run it from a local file. You can also download the latest version from the [source code](#source-code) repository at github.\n\nWhy use the web version then?\n\n1.  A click on \"reload page\" will pull the latests updates.\n2.  I recognized that using this app from a local file blocks a lot of videos on YouTube (e.g. all Vevo videos) :(\n3.  IndexDB, the browser database, does not work with file:// URLs, therefore Audius can not store your playlists etc. permanently.\n\n\n## Development\n\nGet the code and install all dependencies.\n```\ngit clone git@github.com:select/audius.git\ncd audius\nnpm install\n```\n\nRun the dev server (with hot module replacement).\n```\nnpm start\n```\nOpen http://localhost:8080/ to test.\n\n\nBuild a debug version that includes source maps and the full vue runtime.\n```\nnpm run build\n```\nThe build is located in `/dist-website`, open `index.html` to test.\n\nBuild a production version with with minimal runtime and without source maps\n```\nnpm run build:prod:app\n```\nThe build is also located in `/dist-website`, open `index.html` to test.\n\nThe chrome extension can be build with\n```\nnpm run build:extension\n```\n\n### Media meta data object `MediaMetaData` \n\nThis is the internal media data JSON fromat of Audius.\n```\n{\n\tid: 'ozD4h9HCHOY', // universal unique id\n\ttitle: 'Human readable title',\n\tduration: { h: 0, m: 58, s: '51' }, // optional if 'video' or 'audio'\n\tdurationS: 3531, // duration in seconds;  optional if 'video' or 'audio'\n\ttype: 'youtube', // available types: 'audio', 'video', 'vimeo'\n\thref: 'https://example.com/items/funny-video', // link to external page; not required for youtube\n\tthumbUrl: 'https://example.com/img/funny-video_100x75.jpg', // not req for yt\n\tstart: 0, // optional time in seconds\n\tstop: 379, // optional time in seconds\n\tyoutubeId: 'ozD4h9HCHOY', // youtube only\n\tvimeoId: '36579366', // vimeo only\n\ttracks: [ // optional\n\t\t{ // this is a full item with \n\t\t\ttrackId: 1,\n\t\t\ttitle: 'Kanan neni - Rokia Traoré - Wanita',\n\t\t\tduration: { d: 0, h: 0, m: 6, s: '19', ms: 0 },\n\t\t\tdurationS: 379,\n\t\t\tid: 'Track1-ozD4h9HCHOY',\n\t\t\ttype: 'youtube',\n\t\t\tstart: 0,\n\t\t\tfullTitle: '1. Kanan neni : 00:00\\r',\n\t\t\tdurationAlbum: 3531,\n\t\t\tisTrack: true,\n\t\t\tyoutubeId: 'ozD4h9HCHOY',\n\t\t\tstop: 379,\n\t\t},\n\t],\n},\n```\n\n### Web scaper channels\n\nA web scraper channel can be created by using URL patterns or a custom  object with data entries and functions.\nThe functions are evaled and executed in a sandbox in the Audius extension.\n\nIt must implement\n- `getUrl()` which returns `{ type: '…', …data, responseTemplate: {type: '…'}}`\n- a fuction that processes the data retrived from the call that `getURL` triggers\n\nAvailable types:\n- `ajaxJSON`\n- `ajaxRaw`\n- `scanOneUrl`\n- `getYouTubeInfo`\n- `mediaList` \n\nExample plugins\n```\n({\n\tpageIndex: 0,\n\tstepSize: 5,\n\tgetUrl() { // return URL to request\n\t\tthis.pageIndex += this.stepSize;\n\t\treturn {\n\t\t\ttype: 'ajaxJSON',\n\t\t\tdata: `http://www.example.com/feeds/posts/summary?start-index=${this.pageIndex}\u0026max-results=1\u0026alt=json`,\n\t\t\tresponseTemplate: { type: 'parse' },\n\t\t};\n\t},\n\tparse(data) {\n\t\tconst datetime = data.feed.entry[0].published.$t;\n\t\treturn {\n\t\t\ttype: 'scanOneUrl',\n\t\t\turl: `http://www.example.com/search?updated-max=${encodeURIComponent(datetime.replace(/\\.\\d{3}-/, '-'))}\u0026max-results=${this.stepSize}`,\n\t\t};\n\t},\n})\n```\n\n```\n({\n\tbaseURL: 'https://example.com/api/',\n\tlastKey: '',\n\tgetUrl() {\n\t\treturn {\n\t\t\ttype: 'ajaxJSON',\n\t\t\tdata: !this.lastKey\n\t\t\t\t? this.baseURL\n\t\t\t\t: `https://example.com/api/items/get?older=${this.lastKey}`,\n\t\t\tresponseTemplate: { type: 'parseResults' }, // call the parse function below with the results from ajaxJSON\n\t\t};\n\t},\n\tparseResults(data) {\n\t\tthis.lastKey = data.items[data.items.length - 1].id;\n\t\treturn { // return list of MediaMetaData objects\n\t\t\ttype: 'mediaList',\n\t\t\tdata: data.items.filter(item =\u003e /\\.mp4$/.test(item.image)).map(item =\u003e ({\n\t\t\t\tid: `example-${item.id}`,\n\t\t\t\ttitle: item.title,\n\t\t\t\ttype: 'video',\n\t\t\t\tthumbUrl: `https://thumb.example.com/${item.id}.jpg`,\n\t\t\t\thref: `https://example.com/top/${item.id}`,\n\t\t\t\turl: `https://vid.example.com/${item.image}`,\n\t\t\t})),\n\t\t};\n\t},\n});\n```\n\n## Legality, security, saftey, and privacy\n\n*   **Legality** This app sould be completely legal since it embedds videos from legal streaming providers (currently only YouTube). I do not provide any links to streams (except for the initial playlist containing only legal links from my friends)\n*   **Security** This app is open source so you can make sure that there is no malicious code included. In addition to that there is no advertisement (... yet :-O) that could spread malicious code. But to be clear streams and streaming APIs are provided by external entites ... read more below about privacy.\n*   **Safety** If you back up your playlist (and this app, it runs offline) to a file it will continue working even if this server goes down. Do back up your precius playlists now!\n*   **Privacy** This app stores all your data in your browser (Menu \u003e More tools \u003e Developer tools \u003e Application \u003e IndexDB), nothing is saved on my server. I currently do not use any analytics tool (though it's very tempting). The streams however are provided by external entities (Google-YouTube) that will track you. As stated before I currently have no intentions of showing external advertisement. I think if Audius gets popular there are nicer ways to profit from it.\n\nWeb apps are true freedom! Support an open and liberal web without geo borders and login screens.\n\n## System requirements\n\n*   [Vivaldi](https://vivaldi.com/download/)\n*   Chrome \u003e= 51\n*   FireFox \u003e= 49\n*   Internet Explorer \u0026 Safari ... not supported, might work though\n\n## Source code\n\nThe source code for this project is located at [https://github.com/select/audius](https://github.com/select/audius \"Source code on select@github audius\").\n\nIf you like this project give it a star ★ and contribute some code!\n\n## Migration from Streamus\n\nOn Linux use [this script](https://github.com/select/audius/blob/master/src/scripts/streamus-export.sh) I created to dump the Streamus WebSql to a JSON file. The JSON can be imported using the IMPORT button below the playlist. Use the script like this:\n\n\u003cpre\u003e./streamus-export.sh ~/.config/google-chrome/Profile\\ 1/Local\\ Storage/chrome-extension_jbnkffmindojffecdhbbmekbmkkfpmjd_0.localstorage\n\u003c/pre\u003e\n\nBe sure to validate the JSON output, the script is just a quick hack and you might have to tweak it.\n\n## Motivation\n\nYou are writing another music player, seriously? That's what I thought a lot when creating this, but you know ...\n\nThe extension (inactive for now) should have been the actual player since the original idea was to create a Chrome/FireFox extension with a media player for _web.whatsapp.com_. After struggeling alot with [getting the YouTube player to run in an extension content script](https://stackoverflow.com/questions/40309872/youtube-video-in-chrome-extension-content-script) the plan completely failed when the [content security policy](https://content-security-policy.com/) did not allow the embdding of youtube videos. Even though it should be possible to overwrite the header fields for the content security policy of web.whatsapp.com I could not get it to work (it worked on every page [except web.whatsapp.com](https://stackoverflow.com/questions/40322156/chrome-extension-can-not-get-header-with-onheadersreceived)). That meant no YouTube player, no music. The only way out of this mess was to create an extension with a a content script (grabs links) that communicates with a background script (relays found links) that in turn communicates with the a main player (this web app, that plays the songs). But this also meant that I had to write an extension and a web app. Well what the heck, I was still using Streamus but over the time less and less worked so I needed a replacement anyway. I tried [tomahawk](https://www.tomahawk-player.org/) and it seemed quite promising, but I just could not get it to work with dragged in or paste in [youtube links](https://github.com/tomahawk-player/tomahawk-resolvers/issues/126). Also the search was quite slow and did not show many results. This kind of left me no other option but to write Audius.\n\nAs Audius evolved I tried out new technologies, one of them the Matrix chat network. Matrix is similar to email (multiple federated servers) and offers open and encryped real time data and chat message transfer. This was a fun opportunity to create a new medium for the music chat rooms that I am part of. Music chat rooms are the best way to break out of filter bubbles from services that use algorithms, they allow you to discover new music your friends and strangers curate for you.\n\nHere are some alternatives to Audius that are also interesting:\n\n*   [Streamly](https://lnfwebsite.github.io/Streamly)\n*   [StreamSquid](http://streamsquid.com/)\n*   [My Cloud Player](https://mycloudplayers.com)\n\nJust look at them and appreciate the simplicity of the Audius interface ... wait what don't leave X-D\n\n## Credits\n\nThis work is inspired by the incredible [Streamus](https://www.reddit.com/r/streamus/) app.  \n\nHere are the tools I used to create Audius.\n\n*   VueJs\n*   \u003cspan style=\"text-decoration:line-through;\"\u003eRedux\u003c/span\u003e Vuex\n*   Icomoon + Google material icons\n*   Webpack + Plugins\n*   LivingStyleGuide\n*   \u003cspan style=\"text-decoration:line-through;\"\u003e[SortableJS](https://rubaxa.github.io/Sortable/)\u003c/span\u003e vuedraggable\n*   [Myjson.com](http://myjson.com/)\n*   Matrix\n*   Imgur\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fselect%2Faudius","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fselect%2Faudius","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fselect%2Faudius/lists"}