Skip to content
Table of contents

bloc: Object storage inside Blender

My bloc fork adds a Blender-facing workflow around S3 and MinIO storage. It preserves the upstream Blender-Cloud-Storage credit. The add-on translates object keys into a folder browser, then downloads assets before asking Blender to import them.

Integration Fork
  • Updated
  • 1
  • Python · 100%
  • GPL-3.0
Python Upstream credited
Documented components
2Explore modules
Source documents
1Read the instructions
Repository languagesPython 100%1

Shares calculated from GitHub Linguist bytes.

Python100%
100%24,284 bytes
Language%Bytes
Python100%24,284

1. Overview

1.1. Why it exists

Direct AWS S3 object storage integration inside Blender via Boto3, eliminating local drive storage bloat for 3D assets.

1.2. Best fit

Cloud-native 3D asset synchronization, backup, and distributed rendering workflows.

2. Use cases

Blender add-on that lists, uploads, downloads and imports files from MinIO or AWS S3 buckets in a sidebar panel.

Use-case diagram for bloc: Add a storage connection; Browse and search the bucket; Upload the current .blend; Import a mesh into the scene; Delete a remote fileblocAdd a storage connectionBrowse and search the bucketUpload the current .blendImport a mesh into the sceneDelete a remote fileBlender user«system»MinIO or S3 bucket
People on the left, external systems on the right; each oval is a use case backed by the files cited below.
Add a storage connection
Blender user

In the add-on preferences, CloudConnection entries hold the type (MinIO or AWS S3), endpoint or region, access and secret keys and bucket name; several connections can be listed.

Browse and search the bucket
Blender userMinIO or S3 bucket

Refresh File List calls list_objects (MinIO) or list_objects_v2 (boto3) and draws a folder tree in the View3D Cloud tab; the Search field filters names by substring.

Upload the current .blend
Blender userMinIO or S3 bucket

Upload Current File sends the saved .blend under its file name. The README mentions uploading textures and other dependencies, but addon.py only uploads the .blend itself.

Import a mesh into the scene
Blender userMinIO or S3 bucket

Download saves an object to the system temp folder; Load to Scene downloads it and calls Blender’s STL, OBJ, USD or PLY importer.

Delete a remote file
Blender userMinIO or S3 bucket

Delete calls remove_object (MinIO) or delete_object (S3) and refreshes the list.

2.1. Scenario: Pull a scan from a MinIO bucket into Blender

  1. Install the add-on from Edit > Preferences > Add-ons; on first load it installs boto3, minio and rapidfuzz with pip.
  2. In the preferences, add a MinIO connection with endpoint URL, keys and bucket name.
  3. Open the Cloud tab in the 3D view sidebar and press Refresh File List.
  4. Type part of a file name in Search to narrow the list.
  5. Press Load to Scene on an .obj or .stl file to import it.

Files readREADME.mdaddon.pyblender_manifest.tomlpyproject.toml

3. Getting started

These commands come from the repository documentation. They were not run during this review.

4. Repository references

Excerpts from the repository’s guides, in their original language. Links open the inspected source revision.

Prerequisites and first run

4.1. Installation

README.md

To install the Blender S3 Integration add-on, follow these steps:

  1. Download the Add-on
  • Clone the repository:
  1. Install the Add-on in Blender
  • Open Blender.
  • Go to Edit > Preferences > Add-ons.
  • Click on Install at the top of the preferences window.
  • Select the downloaded ZIP file.
  • Enable the add-on by checking the box next to “Blender S3 Integration”.
Read the full instructions ↗
Configuration and usage

4.2. Setup

README.md

Before using the add-on, configure your AWS credentials:

  1. Open Blender Preferences
  • Go to Edit > Preferences > Add-ons > Blender S3 Integration.
  1. Enter AWS Credentials
  • In the add-on preferences, enter your AWS Access Key, Secret Key, and the region where your S3 bucket is located.
  1. Set Your S3 Bucket Name
  • Enter the name of your S3 bucket in the preferences.
Read the full instructions ↗

4.3. Usage

README.md

Once installed and configured, use the add-on from the Blender interface:

  1. Open the S3 Integration Panel
  • Go to View3D > Tool Shelf > S3 Integration panel to access the features.
Read the full instructions ↗
Operations and troubleshooting

4.4. Updated Features (v2.0)

README.md

  • Upload Blender files with dependencies (textures, images, etc.) to S3.
  • Download Blender files with dependencies (textures, images, etc.) from S3.
Read the full instructions ↗

4.5. Updated Features (v3.0)

README.md

  • Minio and S3 support multiple endpoints
  • Folder inside the Panel
  • Search
Read the full instructions ↗
Development and contributions

4.6. Contributing

README.md

To contribute, fork the repository and create a pull request with your changes.
Read the full instructions ↗
Source documentation

1 documents read from 1 candidates.

5. Features and components 2

Connection and listing
CloudConnection stores provider, endpoint, bucket and region settings. The active connection determines the boto3 or MinIO client. Listing results are split on slashes to construct a nested dictionary for the panel.
Search and import
CloudSearchManager scores names and path segments with RapidFuzz. A download first produces a temporary local file. The load operator then chooses an STL, OBJ, PLY or USD importer, so download success and import success remain separate states.

6. Architecture

Expand a component to follow its connections, or explore the full diagram.

System components Context
Mermaid Interactive diagram

System overview of the components and connections verified in the repository.

Static architecture view for bloc
Static preview. The interactive diagram replaces it after Mermaid loads.
flowchart LR
node_artist(("3D artist"))

subgraph group_ui["Blender interface"]
  node_preferences["Connection preferences<br/>[addon.py]"]
  node_panel["Integration panel<br/>[addon.py]"]
  node_browse["Browse and search<br/>[addon.py]"]
end

subgraph group_workflow["File workflows"]
  node_list["Bucket listing<br/>[addon.py]"]
  node_upload["Upload files<br/>[addon.py]"]
  node_dependencies["Dependency transfer<br/>[addon.py]"]
  node_download["Download files<br/>[addon.py]"]
  node_manage["Update and delete<br/>[addon.py]"]
  node_scene["Load into scene<br/>[addon.py]"]
end

subgraph group_storage["Cloud storage"]
  node_client["Cloud client setup<br/>[addon.py]"]
  node_providers["S3 and MinIO"]
end

node_artist -->|"configures"| node_preferences
node_artist -->|"uses"| node_panel
node_panel -->|"shows"| node_browse
node_upload -->|"refreshes"| node_list
node_client -->|"selects provider"| node_providers
node_upload -->|"includes"| node_dependencies
node_download -->|"includes"| node_dependencies
node_download -.->|"loads supported assets"| node_scene
group_ui --> group_workflow
group_workflow --> group_storage
class node_preferences,node_panel,node_browse toneBlue
class node_list,node_upload,node_dependencies,node_download,node_manage,node_scene toneAmber
class node_client,node_providers toneMint
class node_artist toneIndigo

A Blender add-on for S3-compatible storage. Artists configure a connection, browse or search bucket files, transfer Blender dependencies, and load supported assets into the scene through operators concentrated in the add-on module.

Components
12
Connections
19
Evidence-backed links
19/19
Text version of the diagram

The diagram merges parallel links between groups, so it shows 10 of 19. Full list:

  • 3D artist → Connection preferences (configures)
  • 3D artist → Integration panel (uses)
  • Integration panel → Browse and search (shows)
  • Integration panel → Upload files (offers)
  • Integration panel → Bucket listing (offers refresh)
  • Browse and search → Bucket listing (filters)
  • Upload files → Bucket listing (refreshes)
  • Upload files → Cloud client setup (uses connection)
  • Download files → Cloud client setup (uses connection)
  • Update and delete → Cloud client setup (uses connection)
  • Load into scene → Cloud client setup (downloads asset)
  • Cloud client setup → S3 and MinIO (selects provider)
  • Bucket listing → S3 and MinIO (lists objects)
  • Upload files → S3 and MinIO (uploads objects)
  • Download files → S3 and MinIO (downloads objects)
  • Update and delete → S3 and MinIO (updates or deletes)
  • Upload files → Dependency transfer (includes)
  • Download files → Dependency transfer (includes)
  • Download files → Load into scene (loads supported assets)
Follow one path through the code

Follow refresh from object keys to the tree, then follow load from the selected key to a temporary path and an import operator. Background listing hands UI updates back through Blender timers. The stored object itself is not a local folder.

7. Technical dossier

Built from the source at commit 6c83c21 (3 files). Each item comes from a pattern match in the code, so open the linked file before relying on it.

7.1. Layers and modules

Folders are sorted into layers by name, from the user interface down to data access. Because the sorting uses names only, the diagram says nothing about calls between layers.

Mermaid Layered view
flowchart TB
  subgraph L_core["Core source"]
    direction TB
    core_0["(root)<br/>1 file"]
  end
Modules and their main layer
ModuleLayerFilesTypesExtensions
(root)Core source113.py

7.2. C4 model

From system context to code declarations. Each level reflects the available source evidence.

UML 1 · System context
1 · System context

The widest C4 view: who uses the project and which outside systems and data stores it relies on. Rendered with uml-mcp.

PlantUML source
@startuml
!include <C4/C4_Context>
LAYOUT_LEFT_RIGHT()
System(SYS, "bloc", "My bloc fork adds a Blender-facing workflow around S3 and MinIO stora…")
System_Ext(E0, "AWS")
Rel(SYS, E0, "Calls")
@enduml

Level 2: the available sources do not support this view.

UML 3 · Components and layers
3 · Components and layers

Modules grouped by source-layer classification. Boundaries show organization, not runtime isolation or call relationships. Rendered with uml-mcp.

PlantUML source
@startuml
!include <C4/C4_Component>
LAYOUT_TOP_DOWN()
System_Boundary(SYS, "bloc") {
Boundary(L0, "Core source", "layer") {
Component(M0_0, "(root)", "Python", "1 files")
}
}
@enduml
UML 4 · Code
4 · Code

Selected declarations, fields and methods grouped by source file. No inheritance or call edges are inferred. Rendered with uml-mcp.

PlantUML source
@startuml
skinparam backgroundColor transparent
skinparam shadowing false
skinparam roundCorner 10
skinparam defaultFontName Arial
skinparam defaultFontSize 13
skinparam ArrowColor #4e6070
skinparam ArrowFontColor #3d4f5f
skinparam titleFontSize 14
skinparam actorBorderColor #006a62
skinparam actorBackgroundColor #e9f3f4
skinparam usecaseBorderColor #006a62
skinparam usecaseBackgroundColor #e9f3f4
skinparam componentBorderColor #006a62
skinparam componentBackgroundColor #e9f3f4
skinparam interfaceBorderColor #006a62
skinparam interfaceBackgroundColor #ffffff
skinparam nodeBorderColor #4e6070
skinparam nodeBackgroundColor #f4f8fb
skinparam databaseBorderColor #006a62
skinparam databaseBackgroundColor #ffffff
skinparam cloudBorderColor #4e6070
skinparam cloudBackgroundColor #f0f5fa
skinparam artifactBorderColor #006a62
skinparam artifactBackgroundColor #ffffff
skinparam rectangleBorderColor #b0c2d3
skinparam activityBorderColor #006a62
skinparam activityBackgroundColor #e9f3f4
skinparam partitionBorderColor #b0c2d3
skinparam stereotypeCBackgroundColor #ffffff
top to bottom direction
hide empty members
package "bloc" {
object "addon.py" as FN0 {
  get_modules_path()
  append_modules_to_sys_path()
  background_install_packages()
  install_packages()
  execute()
  execute()
}
}
@enduml

7.3. Data flow

The calls from the GitDiagram graph, in the order you meet them from the entry points. GitDiagram generates the graph with AI; the file paths it cites were checked against the repository tree.

Mermaid Sequence diagram
sequenceDiagram
  autonumber
  participant P0 as Download files
  participant P1 as Cloud client setup
  participant P2 as S3 and MinIO
  participant P3 as Dependency transfer
  participant P4 as Load into scene
  participant P5 as Update and delete
  participant P6 as 3D artist
  participant P7 as Connection preferences
  participant P8 as Integration panel
  participant P9 as Browse and search
  participant P10 as Upload files
  participant P11 as Bucket listing
  P0--)P1: uses connection
  P0->>P2: downloads objects
  P0->>P3: includes
  P0--)P4: loads supported assets
  P5->>P1: uses connection
  P5->>P2: updates or deletes
  P6->>P7: configures
  P6->>P8: uses
  P1->>P2: selects provider
  P4--)P1: downloads asset
  P8->>P9: shows
  P8->>P10: offers
  P8->>P11: offers refresh
  P9->>P11: filters
  P10->>P11: refreshes
  P10--)P1: uses connection
Steps as text
  1. Download files to Cloud client setup uses connection
  2. Download files to S3 and MinIO downloads objects
  3. Download files to Dependency transfer includes
  4. Download files to Load into scene loads supported assets
  5. Update and delete to Cloud client setup uses connection
  6. Update and delete to S3 and MinIO updates or deletes
  7. 3D artist to Connection preferences configures
  8. 3D artist to Integration panel uses
  9. Cloud client setup to S3 and MinIO selects provider
  10. Load into scene to Cloud client setup downloads asset
  11. Integration panel to Browse and search shows
  12. Integration panel to Upload files offers
  13. Integration panel to Bucket listing offers refresh
  14. Browse and search to Bucket listing filters
  15. Upload files to Bucket listing refreshes
  16. Upload files to Cloud client setup uses connection
  17. Upload files to S3 and MinIO uploads objects
  18. Upload files to Dependency transfer includes
  19. Bucket listing to S3 and MinIO lists objects

7.4. Services

7.5. Business logic

No classes were extracted, so these are the largest source files and their functions.

addon.py
get_modules_path, append_modules_to_sys_path, background_install_packages, install_packages, execute, execute

7.6. External integrations

7.7. Stack and dependencies

Python pyproject.toml 2 runtime

Open the manifest

External dependencies

2 declared packages (2 runtime, 0 development) in pyproject.toml.

Package table 2
External dependencies
PackageVersionScopePurposeRegistry
boto3^1.28.0runtimeCloud servicespypi.org
minio^7.1.0runtimeCloud servicespypi.org

7.8. CI/CD pipeline

No CI/CD pipeline in the repository. The code is built and run by hand, as described above.

7.9. Deployment

Mermaid Deployment diagram
flowchart LR
  repo[("GitHub repository")]
  local["Local machine<br/>Python"]
  repo -->|"clone and run"| local

The repository has no Dockerfile, Compose file or hosting configuration, so the code runs on the machine that clones it.

7.10. Monitoring

What the code logs, measures and exposes to tell whether it is working.

Nothing found for: Public interface, Private interface, Entities, Database, Security, Testing.

8. Types and file structure

13 declared types, with 12 in the base-relationship overview.

Type diagram
classDiagram
direction TB
class t1bd2f38d1df9["CloudConnection"] {
}
class tc6162ba17c1d["CLOUD_OT_ConnectionAdd"] {
  execute()
}
class tba1a8c923798["CLOUD_OT_ConnectionRemove"] {
  execute()
}
class t413b380bcb71["CloudIntegrationPreferences"] {
  draw()
}
class ta7f72565c22e["CloudIntegrationPanel"] {
  draw()
}
class t2469e84e3752["CloudToggleFolderOperator"] {
  execute()
}
class t85310a14a3c5["CloudFilePropertyGroup"] {
}
class t27a5a06619a9["CloudUpdateFileListOperator"] {
  execute()
}
class t7846b33f88df["CloudUploadFileOperator"] {
  execute()
}
class t9c44c9d5eca5["CloudLoadFileOperator"] {
  execute()
}
class t7fe9626f4380["CloudDownloadFileOperator"] {
  execute()
}
class t13452e91ae41["CloudDeleteFileOperator"] {
  execute()
}
class b7fc08f11cd57["bpy.types.PropertyGroup"] {
  <<unresolved_base>>
}
b7fc08f11cd57 <|-- t1bd2f38d1df9
class bb1aa8a371273["bpy.types.Operator"] {
  <<unresolved_base>>
}
bb1aa8a371273 <|-- tc6162ba17c1d
bb1aa8a371273 <|-- tba1a8c923798
class b4788926edee8["bpy.types.AddonPreferences"] {
  <<unresolved_base>>
}
b4788926edee8 <|-- t413b380bcb71
class bf0eb7a162f8e["bpy.types.Panel"] {
  <<unresolved_base>>
}
bf0eb7a162f8e <|-- ta7f72565c22e
bb1aa8a371273 <|-- t2469e84e3752
b7fc08f11cd57 <|-- t85310a14a3c5
bb1aa8a371273 <|-- t27a5a06619a9
bb1aa8a371273 <|-- t7846b33f88df
bb1aa8a371273 <|-- t9c44c9d5eca5
bb1aa8a371273 <|-- t7fe9626f4380
bb1aa8a371273 <|-- t13452e91ae41

Unresolved bases remain labelled; full signatures are not reconstructed.

9. Reference

3 / 3 eligible files read (5 in the tree); 0 oversized, 0 failed reads and 0 syntax diagnostics.

What the scan covers

Known dependency/build folders, credential files and binaries are excluded. The scan covers READMEs, recognized manifests and parser-supported source files.

Linguist statistics cover the whole repository and may include other languages.

11. Files to read 2

12. Glossary

Repository

The versioned source files, configuration, and history of a project.

README

The repository’s entry document, usually covering its purpose and initial setup.

Dependency

A library, tool, or service that another component needs to build or run.

API

An interface through which software components exchange requests and results. An API does not have to use HTTP.

Volume and bind mount

A volume is storage managed by the container platform; a bind mount exposes a chosen host path inside a container.

Continuous integration

Automated checks that run when source changes, such as building, testing, and linting. Passing checks cover only what those checks exercise.

Fork

A separate repository derived from another project. A change in a fork is not automatically a change in the upstream project.

13. References

  1. antoinebou12. (2026, November 5). bloc. [Software repository] github.com.
  2. antoinebou12. (2026, November 5). bloc: README. [Repository documentation] github.com.
  3. antoinebou12. (2026, November 5). addon.py. [Source file] github.com.
  4. antoinebou12. (2026, November 5). blender_manifest.toml. [Source file] github.com.
  5. Boucher, A. (2026, October 23). My bloc fork: browsing S3 and MinIO from Blender. [Project article] antoineboucher.info.
  6. Boucher, A. (2026, October 23). bloc: Object storage inside Blender. [Project article] antoineboucher.info.

Sources without a publication date show the date they were last checked, November 5, 2026. File links retain the inspected revision where available.