Custom Online Controller

So, I hope the mods won’t mind if I post this here - please feel free to remove if so!

I’ve been working on a project using the API so that I can share control for a limited set of soundsets/elements – for instance, when it’s someone else’s turn to be GM!

It’s open source and available at

What it is: if you add the soundsets and elements by ID number (or ‘pk’ as the API calls it), you can share a link that controls those soundset(s) and/or element(s). You have to share your API key, but your login details remain private. I hope it’s also a bit cleaner and targeted for running soundsets in a session.

What it isn’t: A way of getting around having a subscription, or a replacement for the online master player. You’ll probably still need the master player to find the soundset IDs, your players won’t be able to play what you don’t own, and the sounds will still play to your player and those of your minions.

I’d welcome some feedback, and (since CSS is not really my strong point) if someone wanted to submit some revised styling for the thing, that would be great.


@yamahito This is awesome, and a great example of the kind of things that are possible with our API. Thanks for sharing!

I tested it out and I love how easy it is to use, and that it is hosted and ready to go, and especially that all the settings are encoded in the URL so you can just share that with your players to give them control of selected soundset moods/oneshots and elements.

I can see two use cases for this.

  1. This one seems to be well supported already and specifically mentioned by you – giving another player an opportunity to GM with selection of moods/oneshots and elements.

    For this use case, populating the actual music and sfx element list as well (not only oneshots) for a given soundset ID might be useful to save some time.

  2. Giving players the ability to trigger a selection of oneshots/elements when YOU are still the GM, without showing them soundset/mood names and without giving them the ability to trigger moods (that’s still your job as GM).

    I think this is also already possible by manually entering the IDs for all oneshots you want to allow, and therefore not populating the soundset or music/sfx element list.

    But I think it’d be great if you could still enter a soundset ID and ONLY populate the list of oneshots from that, and for the interface to be more tailored for this scenario. For example, using all available space for a grid of oneshots since there are no soundsets/moods or music/sfx elements.

    You could also then allow individual oneshots that you do not want players to trigger, to be removed, or even re-arrange the ordering.

I also notice that many API calls are being made (one for each element). If you watch what the master interface is doing, it is possible to fetch all the elements for a soundset in a single request, if you know the soundset UUID.

Perhaps that’s something we can work on at our end to make that possible via soundset ID, or by making it possible to first fetch a list of soundset UUIDs.

Also, we’ll fix the CORS restriction soon and that should make it much easier for anyone to self-host your controller.

The mad thing is that I’m calling that already - I think I’d assumed early on that the only way to get element names etc is to poll each element separately, but I can see that the /elements/?soundset__uuid='' endpoint gives me all of that. Should be a simple fix to amend the code later so that we only call the elements namepoint for individual pinned elements.

This is actually what the code does: all of the elements are populated when you load/reload the page (which also happens when you apply settings), and are hidden/unhidden and get their volume and play state updated as they get played based on a single API call to the state.

Yes, exactly :slight_smile: I did think that perhaps bards might like to control their own songs, and (as I play some star wars rpgs), force sensitive characters might like to ignite and brandish the occasional lightsaber :slight_smile:.

Yeah, I think this should be easy enough to do, probably with a second page. Add an issue, and I’ll have a look at some point soon!

That’d be great - the one restriction to the ready to roll version on github is that it’s using a free heroku instance to host the CORS proxy, which might be an issue if it gets too busy!

Thank you for the API :slight_smile:


@sonofconan just to let you know I updated the tool to use a single call to collect all of the elements - how does it look now?


1 Like