Changes to Add-on and Themes Bundling (4.2 onwards)

I updated this announcement description with the latest information about the “popular (hacky) add-ons”:


Popular (Hacky) Add-ons

Some add-ons are widely used, however they were never to the quality standard expected of the core Blender code or usability. They will be moved to the extensions platform.

  • Node Wrangler
    • Some of its functionaility can eventually be integrated into Blender. But as a whole the add-on belongs elsewhere for now.
    • The Physics & Nodes module decided to bundle it with Blender as a core add-on. So over time some of its functionality can be merged as native tools.
  • Import Images as Planes
    • It uses: bpy.app.driver_namespace, bpy.app.handlers.depsgraph_update_post & bpy.app.handlers.load_post in ways which runs too frequently.
    • Incorporated into Blender as a native tool (Shift + A > Images > Mesh Plane)
  • Rigify
    • It is one of the many possible solutions for auto-rigging. The animation & rigging module is ok with being an extension for now.
    • Animation & Rigging module decided to bundle it with Blender as a core add-on.
15 Likes

Hi @dfelinto, is there currently any plan to also include Loop Tools as Core, since it currently the most downloaded and used add-on on the Extension platform? Or at least port over some of the most used operations as defualt operations, like what was done for image as plane and node wrangler.

9 Likes

There currently no plans for that as far as I am aware, but there is definitely a desire to push Blender functionality forward and bring it to the new levels. Is typical issue of limited resources and time.

It would be cool to have a community support for that as well, to make this extra step of submitting a PR which expands the core functionality for everyone.

3 Likes

Would a patch of, for example the circelize and the relax operations from Loop Tools to default Blender be accepted? If anyone, hypothetically worked on it?

Even if its still in Phyton, the current performance/functionality of the phyton operations are more than acceptable in my opinion.

2 Likes

Maybe I’m missing something here, but I’m entirely confused with this local and remote repository thing. Two things I currently run into:

  • I can add a local repository following the manual, and convert my existing custom Add-ons by supplying the blender_manifest.toml and put it into that repository folder. But this whole system acts like an Add-on folder. It’s not a repository from which I would then be able to INSTALL my Add-on from. Instead, this simply becomes my Add-on folder. Nice per se, but not what I would call a repository. I’d like to supply a repository to my employees, so they can install Add-ons from it locally on their machines from a Network Drive location

  • I can run the blender --command extension build or validate commands just fine without throwing any errors. The extension with the ‘limitation’ stated above also works. But the blender --command extension server-generate command never finds my extensions, it always reports back found 0 packages. Is there a video tutorial showing the whole process please? Kind of like “this is how it’s done” on a simple example

2 Likes

I didn’t check details of implementation, but on a technical side it is fine to have functionality implemented in Python. Is not like all the functionality exposed in Blender is written in C/C++, there are some tools and IO which is in Python.

1 Like

But the blender --command extension server-generate command never finds my extensions

This command expects a folder that contains individual .zip files.

2 Likes

Great, this worked and produced the .json file required. Now the question is, can I use this output as a repository hosted on a Network Drive instead of a Website?

Looking into this as well.
But if you set it up atm, can’t you just add the new repository to the prefs?
That way your addons should show up. At least if I’m understanding it all correctly.

Yes, that’s the intent, support has been added for generating a simple HTML file as well.

You can add a remote repo that points to the remote repo to the generated JSON via http://..., https://... or file://... URL’s.

See: Creating a Static Extensions Repository - Blender 4.2 Manual

that was my expectation, but even if I

  • add the new repo with the .zip files and the ‘.json’ in it as a repo
  • make sure the custom directory points to this location, and also try the same with
  • user and system sub-directories to it, they don’t show up

Will try @ideasman42 suggestions next, this sounds promising

This works after a few tweaks!
Not sure if this is a Windows Platform thing, or just spaces in the path I had used before, but using a setup like this the extensions show up and are ready to install:

working repo

The .html file is also being generated fine:

Two things that do NOT work:

  1. Drag and Drop of any of the extensions (without manually adding the repo to Blender first). Blender asks to add the Repository to the system first, but produces an invalid configuration
  2. Using the platforms tag in the .toml. There is an error thrown on package generation, see below

this is how I define the platform:

the package builds fine, but trying to generate the .json throws this error:

Otherwise, cool stuff, this extensions system is big!

the invalid configuration is something like this:
add_repo

note the file path in the config, which is incorrect:
repo_config

access error

Note also that for some reason, the repo path in my working example above has to be typed as file://xxx, NOT file:///xxx - maybe a Windows only thing? Should be three slashes normally?

You should be using windows-x64 instead (doc).

This changed a few weeks already (sorry we haven’t being too careful with changing things before the release).

That said Blender should have given you a comprehensive error. If this still happens with a recent Blender, please report as a bug.


If you are running into an error generating the .json please report as a bug so we can fix it before 4.2 release.


file:/// is technically different than file://. The first two slashes indicate the schema (file://) while the third indicates the (absolute) path.


If you are running into an error while testing local repositories please report as a bug. It is the system tested the least.

1 Like

You should be using windows-x64 instead (doc).

Actually the initial problem is that you have a trailing
comma inside your list. But yes, you also need to use windows-x64 instead of amd64. And Blender should have given you a proper error.

platforms = ["windows-x64"]

Unfortunately none of the suggestions work (tried all of them), the error is related to how the data is interpreted in Python. It makes sense, the code in blender_ext.py reads:

platforms = [platform for platform in manifest_dict.get("platforms", "").split(",") if platform]

and throws the error
'list' object has no attribute 'split'
which is correct, given that manifest_dict.get("platforms", "") already returns a list as defined in the .toml. If it were a str instead, the code that tries to split it would make sense.

I’ll report this as a bug when I have time again.

1 Like

@RainerTrummer committed a fix for accessing platforms, for other issues please report them to the tracker.

For the records, I think the only “problem” here is that the generated html has repository=“./index.json” for all the entries.

Short of suggesting people to manually search/replace the index.html, this could be an option --html-repository where you specify the entry point for the json.

bug is reported #123994 - Local Repository Initialisation uses wrong path on drag and drop - blender - Blender Projects

1 Like

On a different subject, how would one now enable Add-ons via command line?

I used to do for example this in Blender 4.1:
blender -b --factory-startup --addons "f2"
to load an unbloated Blender and just activate the f2 Add-on (as an example). If I provided a wrong Add-on name, e.g. blender -b --factory-startup --addons "foobar", Blender would report back:
Add-on not loaded: "foobar", cause: No module named 'foobar'

With 4.2 I can’t activate any of the Add-ons at the moment with such mechanism. Furthermore, the error message isn’t telling me much, and is always the same:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
ModuleNotFoundError: No module named '_bpy_internal.addons.cli'
1 Like