JSFX now ReaPack Friendly & ReaTeam JSFX Repository
Hi everyone !
If you are a JSFX creator, you will be happy to hear that ReaPack, the incomming REAPER extension by cfillion that is meant to download/synchronize ReaScripts from Git Repos, can now works with JSFX !
This means that JSFX coded and upoaded on a Git System like GitHub can be downloaded right from REAPER by anyone using the ReaPack !
More if you update your FX, people will be able to be notified, and to download your new version with one click only !
To benefit from that, all you have to do is to have a GitHub (or alternative like GitLab) account and upload your script there.
But you can also simply upload your JSFX on the brand new JSFX RaaTeam (ReaTeam is a collective of REAPER independent coders) public repo !
Just like ReaTeam Templates Repository, it can be a good place for collaboration and for centralizing JSFX, but if you prefer to be the only one to control your repo, then feel free to create one !
To make a JSFX ReaPack friendly,
you only have to say .jsfx as extension,
and to have an ReaPack friendly header, like this one :
This is very cool and I hope it takes off but I'm super-busy and fairly lazy, so to entice people like me into supporting the worthy initiative, an explicit step by step "how-to" would probably be a good idea. If I had some simple instructions to follow, I might feel more inclined to invest some time in making my stuff compatible and uploading to a repository.
Make it super-easy and people will probably start to use it, which would be a good thing. My eyes start to glaze over at the very sight of the word "git" and I doubt that I'm alone in that.
I'll try to make a quick resume but a more advanced english speaker may give more easy to understand information.
GitHub is webservice that provides Git system for its users.
It allows to have a access to source code online, which make collaboration easier.
Git is a system to manage source codes.
It has advanced version history per files (you can see which lines were added, deleted and by who and when), possibility to make collaborations etc...
A project managed on Git has a repository, which contains all files and version of the projects.
On the repo, you have a Master Branch, containing files and subfolders.
You can also optionally have other branch for other versions of the project (betas...).
Demo : My REAPER Scripts repo : https://github.com/X-Raym/REAPER-ReaScripts (master branch)
Full repos can be copied by other users on new repos as Forks, and these users can propose modifactions back against one source repo branch 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.
Demo : One commit resume : https://github.com/X-Raym/REAPER-Rea...9cff1686ab3a86
You can see the new lines created and the lines modified.
ReaPack is an Extension for REAPER that allows to download and sync scripts from online Git systems, like github.
By putting URL of repositories, you can download reascript or jsfx files.
It can scan the commit history and see if new files or if files were modified since your last synchronization with the repos.
This commit history is created using another software, the ReaPack Indexer. It scans files from a repo, a search files which have a certain type of header (containing script name, script author, versions..), and it can created a XML file with the list of all the valid files. But if these files already exist, it only check modifications.
Using a dedicated XML files to see repos changes is more efficient than if every user have to scan every files of a repo. By having a simple files with the modifications list, only one file is scanned.
To provide scripts or JSFX to users, you have several choice
Create a GitHub account, join the ReaTeam, and commit your formated files here
Create a GitHub account, create your own repo, and upload the formated file here
Create a account on GitHub alternative, and upload your formated here
ReaPack indexer is able to see JSFX if they have .jsfx as extension and if they have an header which look like this :
Each time you make a modifications on your FX, just modified the version number, and run ReaPack index.
When users will synchronize their package with ReaPack, they will see that you made a change to your repo, and ReaPack will automatically download them.
In resume, that's it
There is a bit of vocabulary but you may not need to know about forks, pull request and branch.
In resume if you want to be part of that :
Create a GitHub account
add .jsfx to your js (there is bulk renamer for that if needed)
Add the JSFX header to your files
And then you will be able to start using GitHub and the ReaPack indexer
Fork ("make a working copy of" in english) a ReaTeam repository (ReaScripts or JSFX) in your GitHub account
Clone it ("download it on your computer") in the GitHub Desktop app
Create a subdirectory to organize the packages by category for easy searching (eg. Envelopes, MIDI, Dynamics etc)
Add some metadata at the top of the new files to at least tell ReaPack what version they are at (see X-Raym's posts above for more info on that)
Once you're done making changes, create a branch and add at least one commit inside
Send your commits to the original repository with a pull request
After that, a member of ReaTeam will review the request, and if all is good, will merge it and update the package index.
At this point the new package or update is available for download to ReaPack users!
GitHub's help pages provide a good introduction to git and GitHub Desktop: https://help.github.com/.
EDIT: I've only put version metadata in the video (that's the absolute minimum), but for prettier packages it's best to also put author information and a changelog.
Check out the examples at https://github.com/ReaTeam/JSFX/tree/master/Templates.
I have a few questions:
1 Does the Free Plan work OK?
2 Where is ReaPack?
3 Where is ReaPack Indexer?
4 Does everything go in the ReaTeam repository?
5 cfillion's scheme seems to suggest running your own repository; is that needed? Doesn't that cost $?
6 Once a script is uploaded to the ReaTeam repository, can any reaTeam member update the script? Anyone-else?
How will a user search for the script that meets his / her requirements? Can user guides / screenshots etc be uploaded here too? (oops, that's what mschnell asked)
------------------------
Chambers Dictionary: git noun, derog slang a stupid or contemptible person.
__________________ DarkStar ... interesting, if true. . . . Inspired by ...
Note : If you are a regular contributors, you could even join ReaTeam and you will not have to create forks and pull request
Note 2 : If you have a tons of JSFX, you may consider manage your own repo if you prefer.
This way, you will be able to commit changes and make them accessible to your users more quickly.
@DarkStar
Quote:
1 Does the Free Plan work OK?
It is, it only has limitations on private repos, that are non visible by the public.
If you need private Repos, you can use GitLab, a free GitHub alternative which doesn't have limits on private repos.
Actually, the most active ReaTeam repo is the ReaTeam Templates, were we share code snippets to everyone, but most active GitHub users have their own repos.
But if you only have few JSFX, maybe it doesn't worth to create a repo, that's the purpose of ReaTeam repos.
Quote:
5 cfillion's scheme seems to suggest running your own repository; is that needed? Doesn't that cost $?
We all use GitHub with free account here. I have an alternative GitLab repos for my premium/private scripts.
Quote:
6 Once a script is uploaded to the ReaTeam repository, can any reaTeam member update the script? Anyone-else?
Any ReaTeam member can modify it yes.
Any non ReaTeam member car create a Fork and propose a Pull Request. Any ReaTeam member can then authorize or not the change, but basically the rule is to let people mamanger their code as they want. ReaTeam behave just like a common repo, but we rarely change others files, we only make propositions.
@mschnell
GitHub also have README.md files that you can put on main and subfolders that display any text you want in a human readable way.
you can also create a several page wiki.
you also have an issue/bug/feature request hub.
There is a Find File function on GitHub, but more useful, a search function within ReaPack !
@ijijn
Indeed, GitHub app is not the only Git app compatible
I like it anyway because of all the click and drag actions we can make, and you always have access to the console if needed.
__________________ subproject FRs click here note: don't search for my pseudonym on the web. The "musicbynumbers" you find is not me or the name I use for my own music.
If I may suggest one thing: when you get this up and running, it might be worth to simplify the install/initialization process for ReaPack/Indexer or whatever. Just make it stupidly simple, like installing the SWS extensions. Many of the potential users probably don't have any experience in using these services like Git.
For example, I just navigated to the ReaPack download page, but I have no idea what to do with those .dll and .dylib files (do i need one or both? where do i put them? etc...)
Yep, some of us are a bunch of idiots please provide accessibility for the handicapped.
@Sju
Actually is already pretty simple. You just have to put the right file in the right folder and hope it is running
For the end users, no need to run Git ot whatsoever.
GitHub and ReaPack indexer is for the coders only.
It is more documentation than ReaPack itself that need to be simplified
But we cannot write full docs until we didn't get to a v1.0 with "definitive" behaviors
WHen v1.0 will came out, I'll create a detailed article on my website, and maybe some users (reaperblog ? ) could make a video of it
I`m very glad this project grows exactly how I imagined it year ago.
So much people already like it and use it (even if it is still beta state) and I`m proud almost all talented here take part of this project.
If certain things need to be at certain places, write to cfillion, and he'll certainly find a way
Quote:
Also the vast majority of JS created up until recently don't have a file extension. Having to rename them all is a bit ugly.
To be honest, not having a file extension is what is ugly.
You can't filter files by type in your finder/explorer, or on other softwares (Git for example)
You can't dedicate a default software to open your file
You can't sort files by types without taking the risk that other non jsfx files (who wouldn't have any extension) get mixed with your search results
I don't know why JSFX doesn't have any extension by default but you have to admit that providing files without extensions is completely unusual and doesn't provide any advantage. It is not because it doesn't need extension that it shouldn't have one.
Fortunately, there is a lot of ways to batch rename files on the different OS so it is not really a problem to add .jsfx to a file selection.
For Windows, Bulk Rename Utility is a killer software for renaming.
For mac : 3 Easy Ways to Batch Rename Files on the Mac
Renaming dozens of file can sound like a pain in the ass but it is really a matter of seconds with a renamer software.
cfillion really try hard to match usual and actual coding behaviors of the community but without any conventions, the ReaPack indexer would be a set of custom complex rules dedicated to each coders, which wouldn't be very easy to manage.
With ReaScript, we had the chance to already have some kind of conventions for the header, but we all had to tweak all our scripts a bit to make them ReaPack friendly. It take time, but because our work will more easily accessible than ever before, it really worth the time investment, don't you think ?
There is no hurry, take your time, and don't forget that maybe some volunteers can help you.
5 cfillion's scheme seems to suggest running your own repository; is that needed?
A fork (working copy) is a bit different from a full-fledged independent repository: it's a way to make and submit changes without having to join ReaTeam.
If you intend to send modifications often, it's probably best to join ReaTeam and have direct write permissions, but for occasional contributions I think it's best to fork/branch/pull-request: it's easier and less error prone (pull requests are checked for common mistakes by a bot and manually reviewed before being applied).
The package indexer is intended for repository maintainers, developers/contributors don't need to bother with it unless they run their own independent repository or want to test the changes in ReaPack locally before sending them.
Quote:
Originally Posted by DarkStar
How will a user search for the script that meets his / her requirements?
For example, I just navigated to the ReaPack download page, but I have no idea what to do with those .dll and .dylib files (do i need one or both? where do i put them? etc...)
.dll files are for Windows and .dylib are for OS X. Choose the architecture (32/64 suffix) to match REAPER's.
To install, download and put the file in REAPER's resource directory, inside of the "UserPlugins" subfolder.
@IXix
Quote:
Originally Posted by IXix
What about these?
1. external data files (wav, ogg, txt etc.) that need to be in the Data folder
2. jsfx-inc files
3. png, jpg, txt etc. referenced by the fx
As X-Raym said, additional files are specified from the metadata header:
This tells ReaPack to install ixix-functions.jsfx-inc from the same directory as the current file, background.png from the "YourPackage Data" subfolder and some_file_that_is_not_in_the_repository.pdf from an external URL. ixix-functions-win32.jsfx-inc is only installed on computers running Windows.
There are two limitations on this:
Only one package can claim a specific file at a time (meaning that sharing files between packages sucks at this time and I have yet to find a good solution. Suggestions appreciated)
Files cannot be installed outside of the repository's root directory
.dll files are for Windows and .dylib are for OS X. Choose the architecture (32/64 suffix) to match REAPER's.
To install, download and put the file in REAPER's resource directory, inside of the "UserPlugins" subfolder.
To be honest, not having a file extension is what is ugly.
Yeah, but I have projects with JSFX, and they all refer to the files without extension. Renaming the files will break those projects. Also, all bundled JSFX are without extension, so I guess you could say that they are that way by convention...
Anyhow, TBH this all seems like way to much work for me personally (I like coding, I like Git, but I hate "paperwork"), so I probably won't be contributing anyway, which kinda makes my opinion m00t I guess i.e. please ignore me.
@Tale
Indeed it will "break" your project if you rename JSFX from your effects folder...
But you can have a copy of you FX on a folder dedicated to your Git Repo, that have the necessary modifications.
(or maybe we can ask cockos to handle file with JSFX extension just like those which don't have one ?)
Anyway, if one day you feel the need to make your FX more easily accessible, you know where to look for :P
Thanks for sharing your JSFX for free, no matter what way you choose !
This tells ReaPack to install ixix-functions.jsfx-inc from the same directory as the current file, background.png from the "YourPackage Data" subfolder and some_file_that_is_not_in_the_repository.pdf from an external URL. ixix-functions-win32.jsfx-inc is only installed on computers running Windows.
There are two limitations on this:
Only one package can claim a specific file at a time (meaning that sharing files between packages sucks at this time and I have yet to find a good solution. Suggestions appreciated)
Files cannot be installed outside of the repository's root directory
Nice. Great work.
Regarding limitation 2, does that mean that I'd need to set my repo root as "[AppData]/REAPER" in order to install files to both "[AppData]REAPER/Effects/IX/" and "[AppData]REAPER/Data/IX" ?
Limitation 1 sucks hard but I don't know enough about this stuff to suggest any solutions.
Quote:
Originally Posted by X-Raym
To be honest, not having a file extension is what is ugly...
Yes but that's the situation we have to deal with. As Tale pointed out, just renaming the plugins isn't a very good option, so it would be much better if the awkward extentionless files could be handled.
@IXix
Limitation 2 just means that ReaPack won't accept to put stuff in C:\WINDOWS nor anywhere outside of <REAPER resource path>/Effects/<repo name>/ (for an effect package).
About the .jsfx extension, even if I add support for extension-less files, it might still break existing projects (or custom/cycle actions for ReaScripts) if ReaPack's install location differs from where the user put them before.
In my opinion this would be the best solution for that: http://forum.cockos.com/showthread.php?t=53820.
@G-Sun
ReaPack v0.9 is incompatible with previous releases (I don't enforce backward compatibility since it's beta and things change frequently):
Delete <REAPER resource path>/ReaPack/registry.db and restart REAPER (note that this makes ReaPack forget anything it previously installed).
Limitation 2 just means that ReaPack won't accept to put stuff in C:\WINDOWS nor anywhere outside of <REAPER resource path>/Effects/<repo name>/ (for an effect package).
Ah, well that's a big problem. Many FX require files from <REAPER resource path>/Data and subfolders.
Quote:
Originally Posted by cfillion
About the .jsfx extension, even if I add support for extension-less files, it might still break existing projects (or custom/cycle actions for ReaScripts) if ReaPack's install location differs from where the user put them before.
In my opinion this would be the best solution for that: http://forum.cockos.com/showthread.php?t=53820.
That would be a good solution but it's a six year old request so I won't hold my breath.
Ah, well that's a big problem. Many FX require files from <REAPER resource path>/Data and subfolders.
EDIT: Ah, I see. I'm not much familiar with JSFX development so I didn't think about that, but some data files put in the Effects folder would actually be visible in REAPER's FX browser right?
I'll look into a solution for this, thanks!
EDIT: Ah, I see. I'm not much familiar with JSFX development so I didn't think about that, but some data files put in the Effects folder would actually be visible in REAPER's FX browser right?
I'll look into a solution for this, thanks!
We recently gained the ability to read any files we like in the effect folder but file sliders still point to the data folder...
Quote:
Originally Posted by http://reaper.fm/sdk/js/js.php#js_file
In the above example, the /some_path specifies a subdirectory of the REAPER\Data path, which will be scanned for .wav, .txt, .ogg, or .raw files. default_value defines a default filename. If this is used, the script will generally use file_open(slider1) in the @serialize code section to read the contents of the selected file.
Cool! (but Damn! Now I'll have to get my act together and test it! Need more hours in a day and more days in a week.)
Quote:
Originally Posted by daxliniere
No-one likes a git here in the UK...
That could be part of my aversion. Perhaps it's a subconscious reaction to the word? Nah, probably just crippling laziness, not wanting to figure out a new thing.
I`m very glad this project grows exactly how I imagined it year ago.
So much people already like it and use it (even if it is still beta state) and I`m proud almost all talented here take part of this project.
Me too
It speaks to the generosity of the REAPER community's contributors.
/* test.data
* Version: 1.0
* Provides: Test Data/*.txt
*/
Sorry, my brain is having a slow day and I don't quite understand how the system is supposed to work. Could you please elaborate? What should my repo folder structure look like?
Okay, I think I nearly almost don't quite understand. I'll try to set up a repository, just for me until I understand how it works, how best to organise the files and which files I should include in it.
Might take a while though. Life is really relentless these days.
*expletive deleted* this is almost two years old! Time is cranking by at a truly alarming rate.
I'm finally getting this done. How do I test my repo, so I can see how it will appear to the user and check that stuff goes where it's supposed to go during installation?
You can import a local index file for testing by using file:// + path in Import repositories. (To test installing the download URLs contained in the index must be accessible)
You can import a local index file for testing by using file:/// + path in Import repositories. (To test installing the download URLs in the index must be accessible)
I must have lost a few more brain cells because I'm struggling to work this out.
I want to duplicate the files and folders created by the Reaper installer, so I created my repository in /Effects/IX/ , added header data to two of the effects and commited to the repo but when I run reapack-index the index is empty
What am I doing wrong? I'm starting to feel stupid.
A limitation of reapack-index is that it can only detect the type of a file from the file extension. JSFX packages must have the .jsfx extension. (You can use the provides tag to remove the extension if you want.)
Quote:
Originally Posted by IXix
Also, assuming I ever get it to find the files, is that "provides:" line correct and is it okay to have that same line in two effects?
Yes it's the correct syntax for adding files to a package. Only one package may own a file on the user hard drive at the same time. There is two ways to share files between more than one packages:
By using a unique folder or file name. This guaranties the files are installed along and updated at the same time as the package. This makes the package self-contained but installs duplicate files.
Code:
provides:
[data] ix_sequences/1 - All Notes.txt > ix_sequences/MIDI_Variant/1 - All Notes.txt
[data] ix_sequences/2 - Accent on 1.txt > ix_sequences/MIDI_Variant/1 - All Notes.txt
The other solution is making a dedicated package for the shared files. This is the opposite of the previous way.
IX_Sequences.data
Code:
@description Sequences files for IX effects
@version 1.0
@author IX
@provides ix_sequences/*.txt
@about ...
A limitation of reapack-index is that it can only detect the type of a file from the file extension. JSFX packages must have the .jsfx extension. (You can use the provides tag to remove the extension if you want.)
Ah okay. I mistakenly thought that issue had been overcome. Could you elaborate on how the provides tag can be used to remove the extension? Would you create a dummy package that uses provides to install the extensionless files?
Quote:
Originally Posted by cfillion
Only one package may own a file on the user hard drive at the same time. There is two ways to share files between more than one packages...
I see. I think I get it now and your previous (very previous, sorry!) repo structure suggestion makes more sense. Thanks for your patience and your hard work! Reapack is a fantastic achievement.