2025-02-13 Online Assets & Asset Shelf meeting
Present: Andy Goralczyk, Dalai Felinto, Julian Eisel, Sergey Sharybin, Sybren Stüvel
The meeting was to kick-start the Online Assets project, now that the Winter of Quality project is over. Most of the meeting was aimed at the current usability issues of the Asset Browser.
Usability
Andy explained his view on the current limitations of Blender’s asset system.
Andy’s Wishes
- Enable Asset Shelf in object mode, for set dressing (like with the ‘Asset Shelf’ Python template script),
- and for other things the Asset Browser supports, like materials.
Asset Browser (& Shelf)
- Missing options for editing multiple assets at once. Lower prio is tags, higher prio is everything else.
- and also for drag & drop of multiple assets
- with options for “one location”, “row”, “grid”, etc.
- Could be in the Redo Panel, or in the toolbar/header of the asset shelf. The latter is preferred, for discoverability.
- Link vs. Instance a collection: would be nice to be able to choose on a per-drag basis, but currently hidden in redo panel, not that accessible.
- Having these as a popover in the header would be really good.
Snapping
- Dragging in objects respects scene snapping, is great.
- Only works for objects, and not for collections (it’s not snapping the instancing empties).
- Doesn’t have to use the bounding box of the collection, as that’s not (yet) stored in the asset. Could just snap the empty itself.
- Snapping to the 3D cursor would be great too, might not be necessary as an option for dragging into the scene, though (see below).
Materials
- Wish: Link to the scene without assigning, for assignment later.
- Could be in context menu (see below).
Controversial option: context menu for more things
- Right-click on asset, “Open Blend File” is super cool.
- Want: “Instance to Scene” at 3D Cursor, “Link/Append to Scene”, etc.
- Want: “Execute Script” (link to scene, execute, discard). Would maybe need “trust scripts” option per asset library.
Header
- Define options for dragging into/onto things (next to append/link/follow prefs)
- Sybren’s wish: show what “Follow Prefs” means. That’s the default setting, and to understand that default you have to know what the default preference is.
- Context menu items can ignore that setting, and be more specific / independent.
Andy’s Issues
- Big issue: Long names of assets are a problem in the grid view, even in N-panel. Issue in AssetBrowser and AssetShelf.
- Possible solution: column view, small icons with full name behind it (like file browser column layout, but bigger icons than that, like half the size of the default asset browser)
- Possible, less desirable option: multi-line names under the icons. macOS does 2 lines max.
- Wish: show in the tooltip which blend file the hovered asset comes from.
Editing from Asset Shelf?
- Rik Schutte (via Andy): organisation, catalogs of poses? Would be nice if that could happen from the asset shelf.
- Sybren: automatic switching of the shown catalog(s) in the asset shelf would also be nice. That way it can be set up to only show the poses for the selected character(s), automatically switching when you select another character.
Asset Browser in Object Mode
- What does it show? Everything?
- Nice default: move primitives to assets, show those by default.
Online Asset Repositories
- Sybren’s unspoken thought (guess who wrote these notes): can Blender know whether it’s on a metered or unmetered connection?
- Delete per-asset blend file (like poses or brushes pushed to the asset library): move to system trash bin instead
- First-time experience should be fast. This likely means that the index “file” needs to be served as multiple smaller files.
- Care should be taken in terminology:
- “cache” should be something ephemeral, where files can be deleted by Blender at will. Such a directory is not expected to be used as a local asset library, but only as a way to avoid re-downloading the same file on every use.
- Other uses, such as a a directory used to download assets and subsequently have those available to other users (either via SMB/CIFS/NFS or systems like SyncThing, Dropbox, etc), should not be named “cache”, but rather “local storage for remote asset library” or something like that.
UI stuff
- “All Libraries” only shows already-downloaded assets.
- When selecting specific remote library, warning will be shown when offline or online access was denied.
Making an actual Blender asset lib
Part of the project: getting an online repository of curated assets. Should be discussed with the studio who’s going to build these assets.
OpenAPI/JSON/Tools discussion
Sybren will continue investigating options. Likely outcome (at the time of the meeting):
- OpenAPI used for defining the API and generating Python code.
- Pydantic as a tool for client-side validation.
- Simplicity for Blender developers is paramount; should not have to install a dozen other tools and learn three new languages.
- Division between Python and C++ JSON handling:
- Python will be used for fetching remote JSON (via the
requests
library), validation, and transforming into local data. - C++ code can keep using the current JSON library (or upgrade to something better/faster), and limited to Blender-written (and thus considered safe) files.
- Python will be used for fetching remote JSON (via the
There will likely be two API “flavours” defined:
- Static API: for serving files from a static server. No back-end server needed. Might be less optimal for large/often-changing repositories, but makes serving a simple set of assets super simple.
- Dynamic API: for serving API requests with an actual back-end server. This is a necessity for larger/often-changing asset libraries, more granular access control, etc.
At first only the static API will be implemented. But the API definition will at least have an explicit place where the supported API can be declared, so that in the future this can be expanded.
Server-Side File Layout
It must be possible to serve an asset repository simply by plonking some files on a static server. Proposed URL layout:
- Base URL can be bare domain or a directory in there:
https://example.org/my-awesome-library/
- Basic meta-information about the repository will be at
$BASE/_blender_assets/v1/meta.json
- That
meta.json
defines:- Name of the repository.
- How many assets are available.
- Whether this repository uses the static or dynamic API (see above).
- URLs (can be relative) to the index file (which will list each available asset).
- Pagination options for the index (so it can be broken down into smaller parts)
- Users will add a remote asset library via its URL. That URL can point to:
- The base URL (this will be the most common case), or
- the URL of the
meta.json
file.
The latter option is useful when uploading to a bucket-type storage, where URLs of files can be wildly different. That way themeta.json
can define absolute URLs for the index files, which in turn can have absolute URLs for the assets, thumbnails, etc.
Note that the paths & filenames are not final, and will likely change to try and stay away from path length limitations.
Tracking the project
Dalai made a tracking task: #134495: Online Assets: Remote Asset Library
Julian will make a separate task for the usability issues & wishes described above.