Extensions Platform - Alpha launch

Extensions Platform :rocket:

It is time … the Extensions Platform project is ready for initial public testing and feedback.

Keep in mind that this is a test instance. We may roll out some changes prior to the final official launch that may impact the existent data. So for now treat it as if all the data from the site may disappear.

How to test it

From Blender:

  1. Download a recent daily build of Blender 4.2 Apha.
  2. Enable the experimental feature: Prototypes → Extensions.
  3. In the User Preferences, Extensions tab, click on the and on + to add a new Remote Repository: https://extensions.blender.org.

Now you can Get any of the available extensions.

From the Website:

  1. Visit extensions.blender.org to discover, rate, get extensions.
  2. Login with your Blender-ID account to upload your extensions.

How to create extensions

This is more thoroughly explained in the documentation, but basically you will need a .zip file with your extension (e.g, an add-on) and a manifest file. This file will contain all the meta-data relative to this extension (replacing the need to add this in “bl_info”).

Documentation

Original blog post:

Feedback

We are looking for feedback on the different areas of the project:

  • [CREATION]: How is the experience of creating extensions.
  • [BLENDER]: How is the process in Blender to get extensions, change their settings, …
  • [SITE]: How is the navigation on the site, the authoring process, …
  • [OTHER]: Anything else (within the scope of this project).

You are also welcome to share your feedback on blender chat or report bugs directly on the site bug tracker.

I will read all the comments, and try to respond to them individually if possible. I will keep this post up to date with a Q&A and updates.


FAQ:

  • Working offline
    • Extensions can be installed offline (see Install from Disk).
    • Extensions installed this way don’t benefit from auto-update (for now).
  • Legacy Add-ons
    • Add-ons prior to 4.2 are considered legacy.
    • These add-ons can still be installed, and used, however they do not support the new auto-update system.
    • There is still a difference between Legacy add-ons (uses bl_info), and extensions installed from disk (uses manifest).
    • Add-ons can support both manifest and bl_info for backward compatibility.
  • Third-party stores + unique JSON
    • Commercial third-party stores can also be integrated with Blender to leverage auto-updates.
    • The details can be found on the documentation.
    • The recommended way of doing this is by creating a unique token to be used to deliver a JSON with the relevant extensions the user has access to.
46 Likes

I have some feedback for the site when uploading an extension:

  1. When trying to upload images I accidentially hit the button where you add a new image slot. I hit submit without having an image selected in that slot. This led to quite a problem. For one i was left with an error message stating that there must be an image in the slot in question. Furthermore all other images were deleted and I had to load them in manually again.
    After several attempts and reloading the images maually i did not get the error message any more and got buttons to delete unused (and used) slots.

  2. I would also be very useful to know that it is possible to change the page after submitting the addon while it is in review. The way it is now I was allways scared that I had messed something up and I would not be able to change it until it is online or declined.
    A live preview during the authoring process would of course be the best but I guess it is not necessary for the first iteration.

  3. Otherwise I had some trouble creating the manifest file but perhaps that was more due to being a dumbass artist with little programming experience. I wonder, since this file is rather similar for each extension, could it not be created automatically during the authoring process?

Hi, thanks for testing and sharing your feedback.

  1. Hitting submit without images

Having extra image slots which are not used are not a problem. But there is a bug related to that which we plan to tackle (reported here).

If you think your issue is different, please report as a bug so we can investigate properly,

  1. It would be good to know that you can change the description after sending for submission.

Noted, it indeed sounds like a good idea. We will implement a variation of this.

  1. Trouble creating the manifest

I would love to hear more specifics about it. Which fields were the most complicated, what was the main issues.

I have some ideas on how to improve the process, but short of that:

  • The extension package is expected to already have a manifest, we could handle repacking, but for now it has to match (Blender checks for its content as well and compare against the website content).
  • We will soon have a command-line option in Blender to help the validation (so you can try to check the manifest validation before you pack everything).
  • I also plan to add the template inside Blender’s Text Editor. But it won’t be much different than the one in the manual, so it probably won’t help you further.
3 Likes

I believe it was a different issue. I will try to reproduce.

It is not really a specific field. It is more that if you are not a programmer and used to writing these kinds of documents it is increadibly easy to forget a quote mark, write down a period instead of a comma and a gazillion similar things.
Making it possible with a form on the authoring page where you simply input your data which is then automatically written into a manifest file during the upload process would streamline the process for addon writers who do not routinely write addons but are artists who write an addon here and there and want to share it. It is not a show stopper and probably not ultra important it was just a paper cut for me so I thought I would mention it.

3 Likes

I think I found what I thought was a bug.

If you add a preview slot and write something into the “Caption” field but do not upload an image you get the message “This field is required”. Since I did not want to upload a further image I was searching for a “delete this slot” button but could not find one. The solution is to delete the text in the “Caption” Field.

BTW, I uploaded an extension named BugTest and intended to delete it after testing but it appears that the “Delete Extension” button does not work.

Isn’t bl_info supposed to be deprecated in favor of manifest? All example add-ons have it.

Quick impressions of little things.

The website

  • I imagine themes having User Interface tag could lead to noise when someone wants to find UI add-ons.
  • If a review needs an approval, something like “Awaiting moderation” is a better label than “Not publicly visible”
  • When my pending review is the only review there, “Be the first to review.” is still shown, and leads to the writing page (which shows “forbidden” warning now).
  • It would be helpful if the repository link is available in the info panel. I’m wondering if some authors may not want this.
  • In the dedicated version history page opening the latest item by default would be helpful (similar to the LTS changelog).
  • Maybe linked text could be more distinguishable in the info panel.

Blender-side

  • I hope types of extensions are distinguishable from the list, by icons or something.
  • Buttons (filter, settings, repositories) are a bit cramped up there and it’s easy to switch to an adjacent menu accidentally. This is not an issue limited to the extensions UI but more apparent with cramped three buttons.
1 Like

About reviews.

  • I logged in with my account to write a review of an addon. Everything fine here.
  • Visist the page again while I’m still logged in to chect if there are more reviews besides mine.
  • At the bottom there is a message that reads: “Be the first to review.”
  • Aside note, not sure why my review is not public.

2 Likes

Hi, thank you for working on this, it’s amazing!

My one request would be to have some kind of API/automated way to update addons. While it may seem like a small thing, I think it could go a long way towards promoting the adoption of the website by addon developers, as otherwise it is just another place that you need to manually upload to every time you release an update.

My ideal system would be being able to point towards a file on an external website (e.g. the latest release on GitHub), but I understand if that’s not possible, so alternatively, having an API to allow uploading zip files from a script would just as good.

4 Likes

Is it planned to let users report errors & warnings thanks to a button?
:small_blue_diamond: This would let users inform the author that an error (a bug) is preventing to use the add-on normally
:small_blue_diamond: To let the add-on author know that a recent Python API change generates errors, “inciting” the author to update it
:small_blue_diamond: To let moderators know that the add-on development has ceased and that it is not compatible with the current version of Blender anymore

Mock-ups:

2 Likes

I don’t think just a one way report button that doesn’t allow for seeing if it was already reported, asking a follow up question or tracking the issue is enough for general bug reports.

And I don’t think extensions.blender.org should grow into having its own issue tracker, it’s a lot of work to make that good. For someone who already uses a repository on github, gitlab or projects.blender.org it’s not convenient to use that instead of the issue tracker they already have.

Maybe such a report button should just go to a link provided by the author, and perhaps there could be some encouragement in the docs to make a repository for that purpose, projects.blender.org being a decent choice if you want to stay within the Blender websites.

Still it would be good if there was some way to report that the add-on is incompatible with a new Blender version, and for the moderators of extensions.blender.org to easily see that and take action. Maybe there should be a mechanism just for that purpose?

9 Likes

Hello, thank you for the project!

Website feedback:

  • in the website search tab i would add the option to search for the “tag” maybe using the hashtag # ( #render for example )
  • in the website i would add the option for a list view ( maybe with a filtered “tag” “versions” options ) now the “large” preview is nice but i imagine to search a long list of extensions.

Blender app feedback:

  • what is the difference between “install from disk” and “install Legacy add-on” ( different install path ?)
  • the Legacy “add-on” extensions will be pre-downloaded with the Blender app ?
  • would be possible to install a specific version of an extension ( i imagine a specific version of add on compatible only with a specific version of Blender like the future 4.2 LTS )
  • will be possible to update a single extension without “update all” ?
  • would be possible to save in the preferences the list of the addon installed ? ( so in the case of a new Blender install it would be easier to install the favourite extensions )
2 Likes

Great progress on the project! I do have a few questions:

Is there a possibility to contact users? This is quite important to communicate if there’s a major problem, update or some kind of official tutorial/training.

To collect donations the intended way seems to be that one would use the “website” field. It would be great to make that a bit more prominent, like adding a donate button and maybe even a popup after installation. Is that already planned?

For addons that need an additional python package it would be great if that would be handled by the extension platform so that the addon itself doesn’t have to access the internet. Is that functionality planned?

using the docs I self hosted a third party extension site using the json file.

some feedback

  1. the ui is driving me bonkers my mouse is on the gear icon, since i just added my repo/json file

image

i want to move to the repo list, to turn one on/off, so you move your mouse down and left, and 9 out of 10 times , i just clip the bottom right corner of the drop down button left of the gear

image

over…and over…it’s VERY annoying.

I had to click the gear to get the menu to show, but once it’s showing mouse over any item left of the gear will show a menu… until you get to the search then it stops and you have to click again to get menus to show. inconsistent and a bit frustrating.

  1. After adding my repo to a blender started with with a brand new profile folder, (i deleted c:\Users\ray\AppData\Roaming\Blender Foundation\Blender\4.2\ before starting blender.

i get the following error in both the prefs dialog (but it doesn’t fit due to the default width of the prefs dialog):

f:\Downloads\blender-4.2.0-alpha+main.690cc6e3cb56-windows.amd64-release>blender --factory-startup
Writing userprefs: "C:\Users\ray\AppData\Roaming\Blender Foundation\Blender\4.2\config\userpref.blend" ok
Info: Preferences saved

Repository file: C:\Users\ray\AppData\Roaming\Blender Foundation\Blender\4.2\extensions\blender_org\.blender_ext\bl_ext_repo.json not found, sync required!
PRE:
POST:
[WinError 3] The system cannot find the path specified: 'C:\\Users\\ray\\AppData\\Roaming\\Blender Foundation\\Blender\\4.2\\extensions\\homelazydodocom'
SYNC: home.lazydodo.com
Repository file: C:\Users\ray\AppData\Roaming\Blender Foundation\Blender\4.2\extensions\homelazydodocom\.blender_ext\bl_ext_repo.json not found, sync required!
Traceback (most recent call last):
  File "f:\Downloads\blender-4.2.0-alpha+main.690cc6e3cb56-windows.amd64-release\4.2\scripts\addons_contrib\bl_pkg\bl_extension_ops.py", line 621, in modal
    self.exec_command_finish()
  File "f:\Downloads\blender-4.2.0-alpha+main.690cc6e3cb56-windows.amd64-release\4.2\scripts\addons_contrib\bl_pkg\bl_extension_ops.py", line 766, in exec_command_finish
    repo_cache_store.refresh_remote_from_directory(
  File "f:\Downloads\blender-4.2.0-alpha+main.690cc6e3cb56-windows.amd64-release\4.2\scripts\addons_contrib\bl_pkg\bl_extension_utils.py", line 918, in refresh_remote_from_directory
    repo_entry._json_data_refresh(force=force, error_fn=error_fn)
  File "f:\Downloads\blender-4.2.0-alpha+main.690cc6e3cb56-windows.amd64-release\4.2\scripts\addons_contrib\bl_pkg\bl_extension_utils.py", line 767, in _json_data_refresh
    self._json_data_refresh_from_toml(error_fn=error_fn, force=force)
  File "f:\Downloads\blender-4.2.0-alpha+main.690cc6e3cb56-windows.amd64-release\4.2\scripts\addons_contrib\bl_pkg\bl_extension_utils.py", line 748, in _json_data_refresh_from_toml
    with open(filepath_json, "w", encoding="utf-8") as fh:
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\ray\\AppData\\Roaming\\Blender Foundation\\Blender\\4.2\\extensions\\user_default\\.blender_ext\\bl_ext_repo.json'
Error: Python: Traceback (most recent call last):
  File "f:\Downloads\blender-4.2.0-alpha+main.690cc6e3cb56-windows.amd64-release\4.2\scripts\addons_contrib\bl_pkg\bl_extension_ops.py", line 621, in modal
    self.exec_command_finish()
  File "f:\Downloads\blender-4.2.0-alpha+main.690cc6e3cb56-windows.amd64-release\4.2\scripts\addons_contrib\bl_pkg\bl_extension_ops.py", line 766, in exec_command_finish
    repo_cache_store.refresh_remote_from_directory(
  File "f:\Downloads\blender-4.2.0-alpha+main.690cc6e3cb56-windows.amd64-release\4.2\scripts\addons_contrib\bl_pkg\bl_extension_utils.py", line 918, in refresh_remote_from_directory
    repo_entry._json_data_refresh(force=force, error_fn=error_fn)
  File "f:\Downloads\blender-4.2.0-alpha+main.690cc6e3cb56-windows.amd64-release\4.2\scripts\addons_contrib\bl_pkg\bl_extension_utils.py", line 767, in _json_data_refresh
    self._json_data_refresh_from_toml(error_fn=error_fn, force=force)
  File "f:\Downloads\blender-4.2.0-alpha+main.690cc6e3cb56-windows.amd64-release\4.2\scripts\addons_contrib\bl_pkg\bl_extension_utils.py", line 748, in _json_data_refresh_from_toml
    with open(filepath_json, "w", encoding="utf-8") as fh:
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\ray\\AppData\\Roaming\\Blender Foundation\\Blender\\4.2\\extensions\\user_default\\.blender_ext\\bl_ext_repo.json'

however, the repo does seem to load as my addon shows up in the list

  1. glorious! lets change something in the json, and hit the refresh button

image

no changes… check the console:

SYNC: home.lazydodo.com
RepoLock: freed without releasing lock!Error in bpy.app.handlers._extension_repos_sync[0]:
Traceback (most recent call last):
  File "f:\Downloads\blender-4.2.0-alpha+main.690cc6e3cb56-windows.amd64-release\4.2\scripts\addons_contrib\bl_pkg\__init__.py", line 153, in extenion_repos_sync
    bpy.ops.bl_pkg.repo_sync_all('INVOKE_DEFAULT', use_active_only=True)
  File "f:\Downloads\blender-4.2.0-alpha+main.690cc6e3cb56-windows.amd64-release\4.2\scripts\modules\bpy\ops.py", line 107, in __call__
    ret = _op_call(self.idname_py(), kw, C_exec, C_undo)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: Error: Lock exists: lock is already held by this session

and no updates in the UI, closing blender, and restarting it shows the refreshed data

  1. The random field i edited was tagline in the UI this field shows up as Description why? how is this already out of sync? This should have been called description in the json as well.

  2. my repo shows up as my hostname in the UI

image

given the odds of people hosting this on github are virtually 100% lets add a second package file on the same host

image

oh that’s not great, you can barely tell the two apart, the name in the list of extension sites is useless now, but hey, at least you should be able to tell what is what by the URL field, but…it’s too small…

You are seemingly allowed to rename things in this list so that’s the only option to organize this, better defaults would be the way to go though, perhaps the json could hold some extra metadata?

{ 
   "repo":
   { 
     "id": "lazydodo_madness"
     "name": "LazyDodo's den of madness"
     "homepage": "https://blahdieblah.com"
   },
   "packages": 
   [
     ...current content here..
   ]
}
  1. minor inconvenience: the archive_hash field is case sensitive, i had upper case, blender needed lower case.

  2. I’ll admit, being a bit pedantic here, since i know the answer, but we poorly communicate it. Update vs sync? what’s the difference? why are there 2 buttons for something that sounds like it’s the same thing ? the documentation ignores existence of these two buttons. And the tooltips are not as helpful as they could be.

image

  1. When you add a repo it be nice if it looked for a default json file so i could tell my users to add

https://blender.lazydodo.com

rather than the slightly uglier

https://blender.lazydodo.com/packages.json

(fictitious URI used, will not work, do not try)

  1. Having both archive_size and archive_hash for a file seems a bit superfluous? are we expecting collisions on an sha256 hash to be that common we need an additional check? Figured it out, size is displayed in the UI

  2. The manifest for a repo is json, the manifest inside an extension zip is toml, how about we pick a team and stick with it?

11 Likes

Isn’t bl_info supposed to be deprecated in favor of manifest? All example add-ons have it.

Yes and when downloading them in Blender you get a warning saying that bl_info is deprecated.

I’m to write a page about migrating an add-on to become an extension, I will mention that more emphatically.

1 Like

Good points overall, thanks for the suggestions. I’m adding most of them to the list of front-end improvements for this week.

It would be helpful if the repository link is available in the info panel

If a developer is using gitlab/github/… I would imagine they would use a link to the tracker in the “Issue Tracker”. From there should be easy to get to the repository.

We are open for feedback, but my initial concern is that another separate link for this would be overkill. Specially since in most cases the ‘website’ link may already be used for that.

We plan to have this at some point. It will likely be an API entry on the site, as well as a command-line option from within Blender.

1 Like

It would be good if there was some way to report that the add-on is incompatible with a new Blender version.

Yup, on the horizon

@LazyDodo
Replying to your points:

  1. it was originally in it’s own panel, I found this nicer, it’s often not wide enough to show a URL or directory and is annoying to keep poping open when doing multiple actions - although I can live with it too.
  2. I can redo this error and will check on this next (*edit* now fixed).
  3. tagline is basically a short description (single line). We could call it tagline in the UI too I suppose.
  4. in this case I think users will have to manually rename, it’s unclear how common this use case will be.
  5. worth reporting as a bug.
  6. should be clarified (we could rename update → upgrade which more clearly gets newer versions of extensions).
  7. agree.
  8. TOML is better for maintaining in a repo (allowing comments for e.g.), JSON is good for online technologies & liter/faster for downloading whole repositories, I don’t see the need to pick one.