Any interesting APIs surrounding Rack/modular/music?

I’m learning about APIs at the moment in python so I thought it would be good to work on a project to do with what I am interested in so are there any cool APIs available? Not necessarily to do with Rack specifically but anything involving music making would great. I’m mainly looking for data to analyse.

Also, does anyone know if there is any particular stance around scraping VCV’s website/library? I haven’t got to learning about this yet but it’s definitely soon in my road map and I’ve seen some comments about it being frowned upon if there is not permission to do so.

Knowing that @docB is coming up with Csound modules for VCV this might be a great timing to study Csound API. :slight_smile:

2 Likes

As a long time Python developer, I’ve found you can search for PyAnything and find something. Search for PyMusic brings up some interesting stuff.

The Python well is deep.

1 Like

Also, searching for AnythingPy brings up a lot, as with MusicPy.

1 Like

This is worth checking out

as it’s a live music coding environment

2 Likes

I’m very fond of Csound. I started with this after its release in 1985 to develop my earliest experiments that led to Meander in 1988.

2 Likes

I was going to say have a look at the music category of the ProgrammableWeb website, but their search is down as I write this. Should be back soon.

Search | ProgrammableWeb.

They have a “top music APIs” list which might be worth a look?

2 Likes

I would very much like to know the answer to the above question. Over the years I have done a lot of screen scaping apps when there was no other way to get at data. I started doing this with IBM mainframe 911 terminals. This was extremely effective and relatively easy. I combined this with “LTERM” ports so that I could submit mainframe requests from any application and get responses.

I played around with web page and web site scraping in recent years for genealogy purposes. But, I abandoned that for some reason, which I cannot remember.

Assuming that the VCV web site is scrapable and scraping friendly, I think it would be a relatively straight forward task to produce a complete plugins installs list from the Library.

1 Like

Well, this topic has been discussed before in 2019 and there were apparently plans to add popularity of plugins to the Library plugin listing. I did not see anything about site scraping, but I may have missed that. It is obvious that site scraping was used to generate the graphs that starts off that topic. Interesting, the number one plugin was Audible Instruments then and that is what I found as the apparent top plugin yesterday.

https://community.vcvrack.com/t/barriers-to-plugin-adoption/905

I’m not sure this link to this topic works. We’ll see once I press Reply.

Interesting, I thought I had seen a google collab notebook that I think that data came from.

https://api.vcvrack.com/library/manifests?version=1

So it looks like there at least was api but I’m not convinced it’s up to date, I changed the manifest to 2 but it returns some plugins that never made it past v1 (TheXOR).

https://api.vcvrack.com/library/manifests?version=2

3 Likes

Yeah, I see what you mean.

https://api.vcvrack.com/library/manifests?version=2

This is the (JSON) list of everything you see on VCV Library - Plugins - all the plugins. It’s not limited to Rack v2 plugins it’s also the old ones. There’s no way to limit it to only v2 plugins.

If you install the “jq” utility you can then do:

curl https://api.vcvrack.com/library/manifests?version=2 | jq . > rack-plugins.json

and you get a nice, pretty-printed list of all plugins with their meta data. This also shows the “popularity” number, but only for non-proprietary plugins:

"popularity": 37425

Full example:

"Axioma": {
  "slug": "Axioma",
  "version": "2.0.0",
  "license": "GPL-3.0-or-later",
  "name": "Axioma",
  "brand": "Axioma",
  "author": "Kaue Werner",
  "authorEmail": "kaue.werner@gmail.com",
  "authorUrl": "https://kauewerner.github.io",
  "pluginUrl": "",
  "manualUrl": "https://github.com/kauewerner/Axioma/blob/main/README.md",
  "sourceUrl": "https://github.com/kauewerner/Axioma",
  "donateUrl": "",
  "changelogUrl": "",
  "creationTimestamp": 1614128101,
  "buildTimestamp": 1641942942,
  "status": "available",
  "available": true,
  "openSource": true,
  "popularity": 10473
},

With some jq magic you can then limit it to v2.x, v1.x, … plugins.

There are also API’s (look in the Rack source) for getting your subscribed plugins and downloading, but these are personal and uses your personal Rack token, which can be found in your settings.json file. Rough notes:

GET:
https://api.vcvrack.com
	/version
	/download/available?token=token&slug=slug&version=version&arch=win/mac/lin
	/download?token=token&slug=slug&version=version&arch=win/mac/lin
	/plugins
	/plugins?token=token
	/library/manifests
	/library/manifests?version=version

works: https://api.vcvrack.com/download?token=secret&slug=cf&version=2.0.2&os=mac

To get the full list of past and present plugins, with all meta data, and including their module meta data, you git clone https://github.com/VCVRack/library and in https://github.com/VCVRack/library/tree/v2/manifests you have all the info as JSON files.

2 Likes

By the way, I submitted a feature request to VCV yesterday to allow library listing of all plugins to include “Popularity” and be able to sort by that field.

2 Likes

Cool! I just checked the obvious and it actually works:

https://library.vcvrack.com/plugins?query=&sort=popularity

The plugin list sorted by most “popular” on top. And as can be seen right away, it’s definately in part a function of how long they’ve been in the library. As I can recall the “popularity” is simply number of downloads/subscriptions, so the early plugins offered from the start of the first Rack version has a huge, automatic advantage there.

So popularity sorting is already there, it’s just not surfaced via a button.

Also to note that proprietary/non-open-source plugins don’t have a popularity number, so they all fall to the bottom, which is a bit unfortunate and definately limits the applicability as it is now.

In looking at this I think the current “popularity” number is close to useless. If I were Andrew I would probably get rid of it and think of a new way. It’s probably also why it’s not surfaced via a button.

If real popularity would mean “how often a plugin or module is actually used by someone” then I’m afraid it can probably only be done with an opt-in telemetry system in Rack, kind of like the Debian “popcon” system. The only alternative is a like/vote system in the library, with it’s rightly/wrongly perceived gaming-possibility.

But we should move this to Like System for VCV Rack Library? - #53 by LarsBjerregaard where I have added some more thoughts…

2 Likes

Might be nice to have a module that provides a gateway to the Freesound collection. There’s a stable API now, the latest version of Ardour includes it. Very handy for retrieving sounds from a vast database. The only drawback is that you need a Freesound ID. In Ardour you only have to use it once, the DAW remembers your sign-in info. Anyway, it’s a great addition to the DAW, might be nice here too.

4 Likes

Thank you for pointing this out. It achieves what I was wanting without exposing the actual installs numbers, but those are really not needed for something like this.

I understand what your are saying, but I find meaning in a “popularity” sort. To me popularity (installs) is an objective measurable. Any type of “like” measurable is going to be subjective. Yes, number of instantiations would be more meaningful, but, how much would it change the ranking? I have no way of knowing, but I think instantiation counts will have the same “bias” that popularity counts have.

I still think that a beginner could not go wrong by exploring the top N plugins in the popularity ranking, where N is determined by the user’s time, patience and determination. It could be 25. It could be 50…

Yeah, I have sketched out a design over here:

Let’s keep the discussion in that thread where it belongs.

1 Like

This is not my topic, nor did I start this thread in this topic. I agree that it would be best to have this all in the “Like” topic, but the OP of this topic branched off from the Like topic intentionally, seemingly out of respect for the Like topic OP. :thinking:

Thanks for all the replies by the way, lots of things to explore here.

2 Likes