Hm.. I would propose a structure like this:

~/.nuke/
  nukepedia/
    downloads/...
    tmp/...
    nuBridge/...
    tools/
      mypkg1/
        v1.2/...
        v1.3/...
      otherthing/
        v0.4/...

(stealing the structure somewhat from the https://github.com/Homebrew/homebrew package manager)


Then, for example when user installs the "autoroto" tool:

1. Download the uploaded file to
 ~/.nuke/nukepedia/downloads/autoroto_v1.1.zip
2. Extract contents of archive somewhere, maybe
 ~/.nuke/nukepedia/temp/autoroto/v1.1/


There would be a few install procedures:

a) Standard but non-Nukepedia specific structure

I would suspect there a lot of uploads which follow the structure like:

autoroto_v1.1.zip/
  autoroto_v1.1/
    init.py
    menu.py
    gizmos/
      autoroto.gizmo
      etc.gizmo
    docs/
      thing.pdf

In this case the install procedure would be to simply copy the contents of the "autoroto_v1.1/" directory into

~/.nuke/nukepedia/tools/autoroto/v1.1

Then at startup time, the nuBridge could would add the above directory onto the NUKE_PATH.


b) Unstructured uploads
For a random .gizmo file, or maybe a zip containing a bunch of .gizmo files etc - almost same - simply copy the .gizmo file into

~/.nuke/nukepedia/tools/autoroto/v1.1/autoroto.gizmo

and add it to NUKE_PATH.

From here you could, optionally, generate a init.py or menu.py file based on the file names, and metadata from Nukepedia (like category)


c) Custom install procedure

It would be possible to create a custom package format similar to RV's, but I'm not too sure about this - it seems like the "folder with menu.py or init.py at root" pretty much covers anything you might do. The custom format might allow things like packages depending on others.. but this quickly becomes a very difficult problem if you let the scope get too big.




The above file structure would have a few benefits:

1) Removing a version is simply case of deleting either the package directory or a version. This can be done both manually in file-manager or within the nuBridge UI.

2) The "active" version can be chosen dynamically.

By default you would just load the highest version (using semver via something like https://github.com/k-bx/python-semver probably).

However you could also do some interesting things, for example implement a "working environment" configuration which locks down specific versions for a project.

Say you might have a "somefilm" config like:

autoroto==2
jops==1.2
myutils

When you active this working-env, nuBridge would the latest 2.x version of "autoroto", jops version 1.2 specifically, and the latest version of "myutils".

This format could also be used to install the required packages using the same logic.

(this is pretty similar to the Ruby "Gemfile" http://bundler.io/v1.5/gemfile.html and the Rust language's package manager's dependency section - http://doc.crates.io/manifest.html )


I think my description might be longer than the code to implement it :P Plus I did gloss over possibly having a platform section in the directory structure for platform-specific plugins (like having "~/.nuke/nukepedia/tools/autoroto/v1.1/mac,linux/" and "v1.1/windows/" side-by-side)


On 28/01/16 14:41, Frank Rueter|OHUfx wrote:
Yes, that is indeed the biggest challenge.
At the moment I am keeping the "installation" as simple as possible -
and as transparent as possible.
There will be a folder in ~/Nukepedia where the downloaded files are
stored "as-is". Then the installer will try to make sense of them.
In the simplest case it's a gizmo file that just needs to be copied into
the folder structure which will add itself to the plugin path.
E.g.:
if you download a gizmo file it will end up in
~/Nukepedia/downloads/MyTool.gizmo
The installer will then look at it and decide that it can "install" this
file by simply copying it to ~/Nukepedia/gizmos/MyTool.gizmo
Which means you end up with copies of the tool, but only one is actually
in the plugin path, while the other represents the original file from
Nukepedia.
So with a zip file containing a single gizmo, you would end up with
those two files:
~/Nukepedia/downloads/MyTool.zip
~/Nukepedia/gizmos/MyTool.gizmo

Any file that cannot be installed because it's not clear how to (all
python code for example), will just be downloaded and the user will be
given a button to take them to the download location for manual
installation.
I will assess existing zip/tar files in the database and see if it's
worth trying to unpack things. E.g. if there is nothing but a gizmo file
inside a zip file, I might as well do that automatically as well as
mentioned above.

For the first release I probably wont go further than that, but for the
future I am planning to design some sort of packaging system, kinda like
RV's.
Once we have a package design figure out, we can create a new upload
process on the website to facilitate the upload of tools that conform to
the packaging and therefore can be installed automatically. Maybe we
will have a sort of upload wizard that guides an author through the
required steps and packages the files on the server.
We might even create a PySide app to enable people to test and upload
tools without the browser. Not sure yet.

As for the package design, rest assured that I will consult all you guys
for input :)
In fact, we might as well start the brain storm here and now if anybody
would like to contribute?

The obvious starting point would be to have a zip file that contains the
actual tool file(s) and some sort of text file (json, xml...) to provide
required info for installation (about python code, icons, etc).

Any thoughts?

Cheers,
frank



On 01/28/2016 04:45 PM, Ben Dickson wrote:
Hmm, how does the installation procedure work? There is quite a
variety in how things are uploaded (e.g directly uploading *.gizmo
file with "add the the following to your menu.py, or uploading tarball
with *.gizmo and menu.py, tarballs with different folder structures, etc)

For example, does it just extract the uploaded file into it's own
directory, and automatically add this directory to the Nuke plugin
path? Or something more elaborate?

On 27/01/16 06:53, Frank Rueter|OHUfx wrote:
With over 1000 tools in the database it's time for something like this:
http://www.nukepedia.com



--
ohufxLogo 50x50 <http://www.ohufx.com>     *vfx compositing
<http://ohufx.com/index.php/vfx-compositing> | *workflow customisation
and consulting <http://ohufx.com/index.php/vfx-customising>* *



_______________________________________________
Nuke-python mailing list
Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python



_______________________________________________
Nuke-python mailing list
Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python

--
ben dickson
2D TD | ben.dick...@rsp.com.au
rising sun pictures | www.rsp.com.au
_______________________________________________
Nuke-python mailing list
Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python

Reply via email to