This is really nice. Would you mind chatting with me sometime? I'd love to pick your brain or even just converse with someone who has similar interests. I've spent the past two years developing Streamus, https://streamus.com/, an open-source music player which runs off of YouTube as a browser extension; it has 130,000 users currently.
YouTube now defaults to using the <video> element unless the video would show an advertisement. In those scenarios, it falls back to using the flash player.
Creator of Streamus here. :) Nice app! Feel free to look through Streamus' codebase for ideas if you'd like, https://github.com/MeoMix/StreamusChromeExtension Just give attribution where appropriate.
I like your idea of using Billboard and iTunes charts. While not integrated into the actual UI, Streamus does integrate with Beatport's charts and I have BBC1's charts on my radar. I suppose others could be added as well, but not something I'm looking to do in the short term.
There's actually some semblance of user accounts with Streamus -- they're just not required. I do generate unique IDs for every installation and that can sync across PCs using chrome.storage.sync, but there isn't a lot of protection against malicious activity on that at this point. That is pretty much my #1 priority after I finish ironing out the last of some client-side bugs. I will be adding support for various openID logins and making users who aren't signed-in "second class citizens" while disabling the ability to delete records -- just providing them with the ability to mark them deleted so they don't show up client-side. That way someone can't go on a rampage nuking unauthenticated user data.
Anyway, keep up the good work. Happy to help you with any snares you encounter in building your extension. There's more than a couple 'gotchas' :)
"1. normal people don't install extensions in their browser. so a bit hard to go mainstream.
2. you're riding on top of a service (youtube) that can shut you down.
3. music is a tough space for investors generally - many (like me) have just stayed away from it."
Hi! I made this! I've spent the last 16 months working nights/weekends on it and I think it has come a long ways.
If anyone has any questions about the development process, how anything about it works, or even some constructive criticism... please don't hesitate to share! Thanks!
Yep. I am working on it. YouTube mixes utilize YouTube's V3 API (exclusively) where as most of their data can be access via the V2 or V3 API. When I first started working on the project V3 wasn't out yet and it has been slow become a production worthy API, but I'm hearing better things about it now and am certainly planning on revisiting the code.
I make this sweet Google Chrome extension for fun in my spare time: http://streamus.com It's a YouTube music player that I find more useful than Spotify b/c it integrates well with the browser. I've put 16 months of nights/weekends into it. It has 14k users, 4.8/5 in the web store and is completely open-source:
I find it fun for a TON of reasons. I'm learning a lot more about programming than I ever had in the past. This is the first time I've ever been super interested in absorbing material because it has a great impact upon me.
I get messages from people all around the world every day saying thanks for the work. That feeling is super rewarding -- more so than a paycheck. I've had to bust out Google Translator to try and decipher messages and hold conversations, had people tell me their dreams of getting to America or even something as simple as just being excited to talk to the developer. It's really great.
Finally, it solves a problem I was having and for that I am stoked! I went from having tons of bookmarks organizing music on YouTube to having a much more friendly interface for storing and listening to the music.
I work on a YouTube music player for Chrome as a side-project: http://streamus.com/. It has done reasonably well for itself - 14k users and a 4.8/5 in the store.
I think my front-end is pretty standard: jQuery, jQuery UI, jQuery Transit, qTip2, Backbone, Backbone Marionette, Lo-Dash, Jasmine.
Back-end is all Microsoft-land because I was more comfortable building it in C#. NHibernate (ORM), AutoFac (Dependency Injection), AutoMapper (DTO<->Domain object mapper), NUnit (Test). Database is MSSQL. It's hosted by AppHarbor: https://appharbor.com/
Alrighty. Well, I'm disappointed nobody has any questions, but hope to continue to improve the software and maybe someone will take interest another day. :)
Hiya! Developer of Streamus, Sean, here. I've been using Streamus as a strong learning opportunity over the past 15+ months. I've taught myself BackboneJS, GruntJS, RequireJS and a handful of smaller libraries over the last year and the entire experience has been extremely rewarding.
If anyone has any questions about the product, how it was made, or anything in between -- feel free to ask. I'll be hanging out all day. :)
You can find the code for the extension, website and server here:
Yeah, there's definitely a few workarounds. Things aren't really designed with Chrome Extensions in mind ever -- down to the fact that their URL isn't http or https. I even have to make myself look like a website by intercepted the headers being sent out by the iframe: https://github.com/MeoMix/StreamusChromeExtension/blob/maste... But, yes, the YouTube IFrame API is called from the background, but it still need a DOM element to target which gets destroyed on the foreground.
In theory, it would be possible to spawn a second, muted instance of the YouTube API in the foreground and, when the user wants video, swap to it while attempting to not introduce noticeable audio issues, but that seemed pretty ugly for now. I think if I ever get around to playing with cross-fading (http://solayo.com/ supports it..) then I might be confident enough to try this out.
I'm glad you like radio mode. It can go off-track sometimes... had people complain about Justin Bieber and other Top 40 leaking into it. I starred your repo -- if you ever want to collab or chat about ideas, I'm down! I'm always idling on IRC: #streamus irc.freenode.net
Yeah, I know about that bug. I haven't quite figured it out yet because all of my canvas elements are the exact same size -- something about YouTube serving up a different quality of image, maybe. I only released video back into the wild about 2 days ago and it might be removed again temporarily while I debug further.
Oh, also, if it wasn't immediately apparent -- there's also a whole server + DB backing this. This is only to allow sharing of playlists for now, but definitely opens the door to more possibilities in the future.
Working inside of a Chrome extension has honestly been the best part. It feels a bit like Christmas every time new APIs are made stable. The playground comes with its own set of caveats, but I think it is definitely worth it.
A lot of the credit for the design has to be given to GitHub. I've been using GitHub for Windows for a while now and, upon taking a closer look, realized that the information it was presenting was, conceptually, very similar to the needs of Streamus. After sending them some e-mails they pointed me towards this blog post of theirs: https://github.com/blog/1151-designing-github-for-windows which proved to be extremely helpful. Implementing a 'Metro UI' theme is super fun -- especially since I've never been much of a 'design guy.'
There's a pretty deep-dark secret lurking around the video, but I am working on it. As an extension, Streamus is comprised of a foreground and a background page. The two pages can communicate with each other and with external pages, but only the foreground is visible. Additionally, the foreground is only temporary -- every time focus is lost the entire page is destroyed. As such, if I hosted the YouTube player in the foreground, it would be destroyed when minimized and the music would cease playing.
SO, the player is on the background page. "But then how am I watching the video?" Well, with a couple of canvas elements and some clever permissions, I'm able to implement something similar to what is described here: https://developer.mozilla.org/en-US/docs/HTML/Manipulating_v.... I establish a port between the YouTube iframe on the background page and my foreground and pipe the image frame-by-frame to the foreground and re-render it. As you can imagine, this is pretty intense, especially because I can't use requestAnimatiomFrame from an invisible page. I'm still playing around with other possible optimizations, but mostly I need canvas.transferControlToProxy() to be implemented in Google Chrome. You can see the code in question here: https://github.com/MeoMix/StreamusChromeExtension/blob/maste...
I'm not using YouTube mixes for radio mode. It's a bit more clever than that. Each video in your stream keeps track of its top 5 related videos by asking YouTube for related videos. This is just the information shown on the RHS when you're browsing YouTube. If I have 10 items in my stream -- the pool consists of roughly 50, non-distinct, items. Non-distinct is pretty key here because it provides weighting. If a related video appears 5 times in the pool of 50, it's clearly related to a lot of your videos and receives an implicitly greater weight because of it.
I also just apply some filters for time, etc. In the future, radio mode will show faded-out 'future picks' so it's not such a mystery what is coming next. You can see the code for all this here: https://github.com/MeoMix/StreamusChromeExtension/blob/maste...
Let me know if you have any more questions! Thanks for taking the time to look at it, I appreciate it. :)
Hi! Developer of Streamus here. I built this whole thing from scratch. The software is entirely open-source, https://github.com/MeoMix/StreamusChromeExtension, and has been my hobby for about 15 months now.
The gist is simple -- make YouTube easier and quicker to use. Streamus provides the basics, such as searching YouTube and building/sharing playlists, but also provides extension-specific features such as keyboard shortcut support, omnibox integration and a ton more.
I'd love to field any questions, comments or concerns.
This is really nice. Would you mind chatting with me sometime? I'd love to pick your brain or even just converse with someone who has similar interests. I've spent the past two years developing Streamus, https://streamus.com/, an open-source music player which runs off of YouTube as a browser extension; it has 130,000 users currently.
Hit me up if you want to chat! [email protected] and if you'd like to browse the repo, https://github.com/MeoMix/StreamusChromeExtension