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.
Cheers
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. :)