ReaPack: Download, Manage and Update ReaScripts/JSFX Easily with this new REAPER Extension

Introduction

A lot of resources files can be exported/imported/shared within the REAPER DAW: FX chains, custom actions, toolbars, themes…

Being able to create custom scripts, either actions (ReaScripts) or effects (JSFX), as one of the top features of REAPER, recently become very quite popular. It allows people to code new custom features for REAPER in a easy way, and they can be shared easily on the web as they are simple text files.

This way, hundreds of actions and effects have been developed by members of the REAPER community, from simple ones to most advanced.

If searching for them is pretty easy (few requests on search engines can quickly tell you if the script desired exist or not), downloading them, importing them, and doing this every time you need to update them or on several computers is a very boring process.

It would be so much easier if scripts packs could be downloaded right from REAPER.

Well, that exactly what the new ReaPack REAPER extension, by the talented and generous cfillion, aims for. Welcome to a new era for REAPER scripts sharing!

This article will focus on the ReaScripts/JSFX workflow, around which ReaPack has been designed. But the development went very far and ReaPack is already capable of being used to share any kind of REAPER resources files!

ReaPack For Users

ReaPack is a free open source REAPER extension, that aims to download, manage and auto-update ReaScripts and JSFX in bulk, right from REAPER.

It was created and is maintained by cfillion since early January 2016 (beta versions); the 1.0 version is expected for the next weeks. It is supported and beta-tested by the ReaTeam, a collective of REAPER scripters created by mpl and for which I am project co-administrator, and other Cockos forum members.

In a way, just like the SWS extension, ReaPack can add hundreds of user-created new features to REAPER, pretty easily. This is why it has the power the become the next REAPER big thing.

List of ReaTeam repository files list from ReaPack.
List of ReaTeam repository files list from ReaPack.

It works by scanning index.xml files containing a list of scripts. This list is generated by scripters thanks to ReaPack-index software, which works with Git repositories (Git a well-known source code management system that allows developers to make maintenance and collaboration on code more easily; a Git project is called a repository. It has been ported to the web by some web services like GitHub).

ReaPack is cross-platform Mac and PC. You can download it from the project ReaPack GitHub Releases page.

Once ReaPack is installed, you can import scripts from an online repo, if the author made his scripts ReaPack friendly (explanation for developers in next part of this post). The repo download process is pretty easy:

  1. Find the online repository where the desired scripts or scripts packs are (from a simple Google Search, from forum post, website etc…)
  2. Copy the reapack-index file URL that should be provided by the author. It points to a file (usually, index.xml) that list all files in the repo and other meta infos about scripts.
  3. You paste the URL into the Import Repository ReaPack pop up window, available from Extensions ReaPack Import a Repository.
  4. You can then either install al the scripts of the repo, making this, or only some of its scripts thanks to the Package Browser

Later, you will be able to activate the automatic download of new scripts from the repo or existing scripts updates, right from REAPER, in one click. How cool is that ? 😛

List of repos activated in this ReaPack config.
List of repos activated on this particular ReaPack config.

Advanced Features

ReaPack also provides advanced features that can be really helpful:

  1. Some repos are included within ReaPack right out of the box, including my free scripts repo
  2. Display donation link to repo owners
  3. Allow to selectively deactivate certain script to auto-update
  4. Allow to select which files of a repo to download
  5. Display infos about repos
  6. Display infos about scripts (author, version, changelog…)
  7. Auto-update (you don’t need to go to reapack website to update the extension)
  8. Activation of a setting to be able to download ReaPack betas and scripts betas as well
  9. and A lot of of other extra features!
Select individual files from a repo. Demo by cfillion.

ReaPack is pretty new, you can expect some adjustments to come, but it is already fully functional and very effective! You can download it try it right now!

Extra Notes

Command ID Consistency

Sharing toolbars, custom actions or scripts bound to some scripts downloaded via ReaPack will work flawlessly no matter your config and operating system.

Because ReaPack scripts are downloaded in your User Resources  Script, while preserving folders structure of the original repo, they will have a unique command ID that will work for all OS and for all users. Something very nice, requested since last year.

Scripts Mods

If you plan to mod a script, first copy paste it outside it’s source folder, and rename it. This way, ReaPack will not override your changes if the script get updated, or if repo get deleted.

Supporting

cfillion put an incredible amount of work, effort and knowledge for creating this free extension and make the life of every REAPER user easier, all on his free time. Also, scripts authors have spend literally months of full time work to code the scripts that you can download and use for free.

Please consider supporting scripters and ReaPack developers by making donations to the different authors. They will highly appreciate your consideration!

Installation

Installation process is described on the ReaPack wiki page.

Links

ReaPack For Developers

If you plan to make your ReaScripts or JSFX ReaPack friendly… that’s great ! Your users will be able to download your scripts and update them more easily, thanks to you !

I will not make a detailed guide about conforming your scripts and repo for ReaPack, as the documentation is already pretty nice, but I will give you some minimum infos so that you can understand how it works.

The following workflow is based on Git, for managing code, and ReaPack-Index software, to create an index.xml. But you have to be aware of one thing: it doesn’t matter where you host your source files, if you use ReaTeam code conventions and if you don’t use Git: all that matter for ReaPack is to have a compliant index.xml file. You can code it from scratch, having your own script header…

However, conventions are kinda useful for collaborative works, and help build a community, so I will show you the tools we use and why. You will be free to follow them or not.

Script Header

The first thing you have to do is to have a certain type of header on top of your scripts. The most common header style come from a header template convention I proposed to the community one year ago. It is based on WordPress plugin header, a system that prove to be both effective and humanly-readable.

Note that another header format is also possible, you will find info about it in the ReaPack-Index wiki (link below).

This header contains basic infos about your script.

Just under it, you can optionally have the changelog of the script.

This is how it looks in its short version (Lua version):

If you use JSFX:

Other tags are possible, if you want to add a screenshot, or to add files dependencies. Once again, you will see infos about that on ReaPack-Indewer wiki.

Git

To upload your code online, you will have to use a Git system. Here is some basic vocabulary definitions to guide you in the process.

Git is a modern system to manage source codes, created by Linus Tovalds, Linux creator.
It proposes advanced version history per files (you can see which lines were added, deleted and by who and when), possibility to make collaborations, etc…
Git system can be found as web services.

GitHub is free web service that provides Git system for its users. There is alternative like GitLab (which is open source and that you can put on your own server) and BitBucket.
This kind of web services allows to have a access to source code online, which make collaboration and distribution world-wide possible.
Using GitHub can be an advantage as most other REAPER scripters are on GitHub for collaborative projects.
Using GitLab allows you to have unlimited private repository, which is a great advantage if you don’t want anyone to access your scripts.

X-Raym Git Hub
Screenshot of my ReaScripts GitHub Repo. You can see files on a master branch, organized within folders.

A project managed on Git has a repository, which contains all files, folders, and versions of the project.

Repo can be split into several branch, each containing their own version of the files. You have a Master Branch, containing files and folders in stable versions, and optionally, development branches for pre-releases/development.
For scripting, only using the Master branch is ok.

Full repos can be copied by other users on new repos as Forks, and these users can propose modifications back against the source repo as Pull Request.

When you make a change on your local computer, you have to validate these changes from time to time by creating a Commit. A commit will track your changes, the time, and the author of the commit. Each commit have a name and description, entered by his author.
Here is a demo. You can see the new lines created and the lines modified.

Then, you will have to sync your commit (changes) to the online repo.

You can commit right from your Git system website, or thanks to a Git App like the GitHub app or GitKraken. Then you will have to sync your online repo so that you online changes get propagated to your local repo files.

github
The GitHub App, with history of commit and new files to commit.

Git can also be manage from a console, GitShell, to perform more advanced actions. Access to GitShell is provided from these apps (screenshot below).

ReaPack-index

ReaPack index is a software that aims to create a list of your Git repo scripts files as a index.xml file for ReaPack. It works with GitShell console.

Indeed, parsing all the files to check which one have been updated, which one is new etc. will be very inefficient if it has do be done by scanning the whole repo each time you want to check for updates. Using a single file allows to have only one HTTP request, and only one file is scan on the Git server, which is far better. Plus, the meta infos are more easily accessible in one single file.

To create this index file, you will have to use the ReaPack-index.

It has a lot of functions and command, but it’s main purpose is to scan your commit history to see if there is changes in scripts header version tag.

ReaPack-index also allows you to set your ReaPack name, your donation link, etc…
The list of available command is on the ReaPack-index website.

Updates

Once ReaPack-index is set, each time you commit to your repo (new files, script updates…), you will have to run the reapack-index command from GitShell. It will update the index.xml file and commit the changes. Then, you can sync your repo, and all your users will be able to download the scripts updates the next time they will perform a synchronization.

Using ReaPack-Indexer with the GitShell
Using ReaPack-index with the GitShell

Private Repos

You can use ReaPack index with private repositories as well. But to avoid sending you private key, it is recommended to use a PHP file to treat the different requests. This way, you will also be able to filter the index.xml element so that only some part of your repo are send to users.

I will write another article this particular subject.

Resources

Conclusion

As scripter, I always desired a way to share my script more easily to my users, so that they can use them flawlessly.

Thanks to cfillion, this tool now exist. And it is already very powerful.

I hope other scripts developers will follow ReaPack project, and that regular users will not be afraid to download scripts anymore.

Despite the fact it was design based on available ReaScripts, ReaPack is already capable of managing other resources than scripts (projects templates, FX chains…). So, all of this is already compatible with any REAPER resource a user can create. This may be the subject of another article. Manwhile, it is already a promising future for file sharing with REAPER.. and it has been made possible by its community!

Do you also think this is an exciting new extension for REAPER? Let us know by leaving a comment below!

  • Kurt Otto

    excellent. thank you.

  • asemkecut

    WOW, what a great post!!
    You must spend lot of time for this.
    Much appreciated!