GSoC 2016 - Add-on Package Manager

Hi all,

I’m Peter Cassetta, and for my GSoC 2016 project I’ll be working on extending the current add-on UI to allow users to easily manage add-on updates.

My proposal can be found on the wiki: https://wiki.blender.org/index.php/User:PeterCassetta/GSoC_2016/ProposalI’d love to hear any thoughts or suggestions folks might have. :slight_smile:

By the way, if you would like to help shape development, I’m looking for artists and add-on devs willing to help test and give feedback during GSoC. My email address is on the proposal, so simply send me a PM or an email if you would like to help out.

Thanks all, looking forward to a great summer!

Hi Peter!

Read thru the proposal and I am curious about something…

Several of the open topics listed on the wiki’s package manager ideas page will need to be resolved as well prior to the start of coding, while some of the more time-consuming features can be decided later on based on time constraints. My main focus will be to deliver a working project at the end of GSoC.

Where is the wiki’s package manager ideas page? A link might be helpful.

This indeed is something that is needed for blender, but I’m wondering what’s on the ideas page.

Thanks,
Randy

Hey Peter,

awesome You decided to work on it

I don’t know what is Your plan for it but I have an idea how I would like it to look/work.
From my experience packages control that operates from console are far more usable
and in general those are pore popular ones
thankfully we have one inside blender so it may be used instead of putting all into preferences(or next to it)

so the idea is to use console to list Package Control operators

like Install, Uninstall, enable, disable, update, update all

so they can be called separately just like operators then if pressed they will reopen the console but this time listing all available addons and themes, so the specific name of the addon can be searched after and then if pressed that specific action will be executed

like

You first search for package control install
select it
then serach for needed addon
select it
and it gets downloaded, installed and enabled

This is just a suggestion though

It sounds like a fun project
so have fun with it!

and I am looking forward to it.

here is the basic mockup of an idea

Attachments


Maybe a system integrated with git would make things easier.
For example, i have a directory which i clone addons to it from github or from other git repositories(if addon has a git repo). Than i create symlinks of individual addons which i want o activate, in blender’s addon directory.
And, to update an addon i just update its cloned repository. Also if needed i can roll back to an older commit.

Very useful project. I implemented a very limited auto-updater for the LuxBlend addon and it was pretty well received I think, so people will certainly be very happy about a unifiied auto-updater that works for all Blender addons at once.

hi Peter,
I’ve been looking at a few solutions for this myself, there’s currently 3 ways to do this with varying degrees of complexity.
The most complete system i found on github is this: https://github.com/qwenger/BAddons/blob/master/matpi_addons_collection.py
matpi provides a reasonable addons installer with checks for updates & most bells & whistles. It could provide a nice starting point in package management as it provides some key elements.
1: Only the package manager needs to be installed.
2: Download individual addon from package manager or d/l all addons.
3: … you can see here
/uploads/default/original/4X/2/5/0/250e22860a3bdd1a499a6c3fe3310fd0256fdf6d.jpgstc=1
Whilst this is a gsoc, I’m not saying just use that, I’m saying here is a great starting point. :slight_smile:
Some other methods include :
1: Individual myaddon.py with update from git with no version control. (you always get either the version you have or the latest.)
2: Zipped addon, usually an addon in a folder with an init. again: (you always get either the version you have or the latest.)
3: “Shell” addon, which I learned, similar to package manager, this addon installs a "base addon with few features & has install full option. (via zip method.) again: (you always get either the version you have or the latest.)

Of course this works with public git repo’s, private repo’s that require login would need some more thought.
I think there’s room for individual addons guy’s & larger repo’s to use a system created very well & wish you guy’s all the best.
Keep up the good work.

Only one note & wish: Could you guy’s please use addons_contrib in Blender as one example. I would like to see a package manager in Blender that “installs” addons_contrib or chosen elements. This would give addons contrib a much needed boost & no doubt follow up with increased developers wishing to contribute. the current addons contrib released only in buildbot builds is good, but users missout on a big section of good addons.

Enjoy!

Attachments


I wish a solution will be found to avoïd to load addons default shortcuts.

It does not matter what changes we save exporting a keyconfig script.
Addon’s default shortcuts are loaded when addon is loaded.

So, in a system when addons are automatically updated, it would be great to have your own keyconfig taking priority on addons default keyconfig.
Current situation is creating recurrent shortcut conflicts.

This has got to be my biggest frustration regarding add-on right now.

Hi Randy, good catch, here’s the link: https://wiki.blender.org/index.php/Dev:Ref/GoogleSummerOfCode/2016/Ideas
I’ll go ahead and add that link into the proposal as well.

Thankful for your participation and anxious to see your contribution, best of luck!

the package controller for sublime text is amazing, well maintained and fun time waster to look for new add-ons and themes.
https://packagecontrol.io/

On top of that, I would like to add Atom as having a nice package manager. Atom is basically a Sublime clone, so it works similarly, but Atom is open source. It’s written in Javascript, so I don’t think it would be directly usable, but I think the concepts could be translated into Python.

if you surpass your goal and have free time, I could use a way to distribute blender with the ability to use PIP itself to download missing python modules (but it would ask you first*) and install them into the blender python directory…

Hi Peter, if you want mockups let me know.

Here you have a quick one where the add-on manager is expanded with the package manager:

I could also make one where the package manager is separate.

Could we have ‘Categories’ and Addins panes themselves scrollable exclusively?
As one can see theres a scroll handle for the whole window - at right edge.
When scrolling through relatively big number of addins one loses "Menu’ panes from sight because whole wndow content is being scrolled.

I think atom and sublimes package managers are a good place to start, if your looking for baseline features and ease of use.

How are you going to handle the server side of things? Considering the fact there are a huge number of blender users that will potentially be using the addon system, something which can handle large scale is really important. There is nothing more annoying than having productivity stopped due to waiting on packages installing/waiting for the server to have reduced load.

A couple of things I wouldn’t mind answered.

  • I’m not sure what your server side skills are, but you might need some sort of caching system to alleviate the load from the server. Any ideas on server architecture? Maybe tight integration with github?
  • Is the blender foundation going to be paying for running the infrastructure?
  • Will the server have a public facing website with readmes? This is maybe something that could be linked through from github if people are using that for their addon repos. I love how atom reads addons from github and reads the readme files from there. Makes it easy to let the addon author know about issues and makes it easy to submit fixes (which benefits everyone). https://atom.io/packages/
  • Are you planning on exposing a public API for all the addons?
  • Any plans on making a ‘user account’ type system, which allows a users to sync all their blender installs with the same addons? Or at least allowing it as an option. I understand that some projects require different addons to others, but allowing a ‘base’ set of addons that I can always have installed across blender installs might be nice. Essentially just reducing the time it takes to get blender configured to personal taste. Might be something for phase 2 of this project (if there is one).
  • Will you be tracking stats, like number of downloads? This might allow addon developers to determine how much time/effort they should put into continuing development of their addon?

I spend my days working on server side architecture for large, scalable services, so if you need any help further down the line, I wouldn’t mind pitching in. A decent addon system for blender is something I have been considering working on for some time now… just never seem to find decent blocks of time to work on it.

Hi all, quick update.

The official start of GSoC was yesterday, May 23, and I worked on documenting my planning stage and some conclusions I’ve come to. As well, I discussed possible different server implementations on #blendercoders IRC. (You should be able to find me there during US work hours on weekdays, my nick is simply PeterCassetta.)

Sybren (my mentor) gave me a good list of questions to answer before I begin coding, so today I created a wiki page with those questions that I’ll be updating as things become more concrete. (klauser, regarding your queries, most of the server-side stuff is still undecided. Ton has said he would prefer not having to install anything new on blender.org; a few more details can be found on the wiki page.)

By the way, thanks for all the feedback, I’ll definitely come back to the UI suggestions once the server-client protocols are established. That’s it for now!