Media streaming services orchestration for OSX
Last updated 4 years ago by nogizhopaboroda .
ISC · Original npm · Tarball · package.json
$ cnpm install streamjockey -g
SYNC missed versions from official npm registry.

stream jockey

Stream Jockey provides you a way to control media streaming services (like soundcloud, mixcloud, youtube, etc) in browser. Right in the existing instance of your browser where you read this message.


  • Os: Mac OS
  • Browser: Chrome or Safari
  • If node version >= 4 : XCode 7


npm install -g streamjockey


git clone
cd streamjockey
npm install

Then run the application


or in case you've chosen variant with cloning repository

node index.js

then go to the demo page

to make sure that application works well


streamjockey -h

      Usage: streamjockey [rcfile]
        -h, --help            output usage information
        -v, --version         output the version number

Run as a daemon:

streamjockey > /dev/null &; disown

RC file

RC file should be a valid nodejs module and consist of key-value pairs

where key is url matcher and value contains at least this 3 functions: play, pause, is_playing

optionally there might be functions prev and next

after installation application saves default RC file here: ~/.sjrc.js with snippets for page

check it out to get into

all the functions should be javascript snippets that can be executable on target page, e.g.:

document.querySelector('<play button selector>').click();

you can test them right in browser console on target page

play: plays media

pause: stops/pauses media

is_playing: should return true if media is playing and false or anything else if not

next: next media source

prev: previous media source


module.exports = {
  "<url_matcher>": { //e.g.: ""
    /* required functions */
    "play": function(){
      document.querySelector('<play button selector>').click();
      return 'play'; //return is optional
    "pause": function(){
      document.querySelector('<pause button selector>').click();
      return 'pause';
    "is_playing": function(){
      //return is required
      return document.querySelector('<play/pause button selector>').classList.contains('playing');
    /* optional functions */
    "next": function(){
      document.querySelector('<next button selector>').click();
    "prev": function(){
      document.querySelector('<prev button selector>').click();

As long as RC file is node module, you can require one module from another, e.g.:

// ~/.sjrc.js
module.exports = require('./.dotfiles/sjrc.js');

There might be more than one target sites. Streamjockey handles it well

Just check out the demo if you still didn't do so. It can tell much more than text here

How it works

Application uses native binding for mediakeys interception ( and executes js code in browser using applescript. That's why there is no Firefox support - it's not scriptable.

Bugs/Issues/Feature requests

Create new issue here

Current Tags

  • 0.1.0                                ...           latest (4 years ago)

1 Versions

  • 0.1.0                                ...           4 years ago
Maintainers (1)
Today 0
This Week 0
This Month 0
Last Day 0
Last Week 0
Last Month 0
Dependencies (3)
Dev Dependencies (0)
Dependents (0)

Copyright 2014 - 2017 © |