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.
- Languages
- 1Code breakdown
- Documented components
- 2Explore modules
- Source documents
- 1Read the instructions
Repository languagesPython 100%1
Shares calculated from GitHub Linguist bytes.
| Language | % | Bytes |
|---|---|---|
| Python | 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.
- 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
- Install the add-on from Edit > Preferences > Add-ons; on first load it installs boto3, minio and rapidfuzz with pip.
- In the preferences, add a MinIO connection with endpoint URL, keys and bucket name.
- Open the Cloud tab in the 3D view sidebar and press Refresh File List.
- Type part of a file name in Search to narrow the list.
- 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:
- Download the Add-on
- Clone the repository:
- 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”.
Configuration and usage
4.2. Setup
README.md
Before using the add-on, configure your AWS credentials:
- Open Blender Preferences
- Go to Edit > Preferences > Add-ons > Blender S3 Integration.
- Enter AWS Credentials
- In the add-on preferences, enter your AWS Access Key, Secret Key, and the region where your S3 bucket is located.
- Set Your S3 Bucket Name
- Enter the name of your S3 bucket in the preferences.
4.3. Usage
README.md
Once installed and configured, use the add-on from the Blender interface:
- Open the S3 Integration Panel
- Go to View3D > Tool Shelf > S3 Integration panel to access the features.
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.
4.5. Updated Features (v3.0)
README.md
- Minio and S3 support multiple endpoints
- Folder inside the Panel
- Search
Development and contributions
4.6. Contributing
README.md
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.
Blender panel
Active connection
- From Blender panel
- To S3 or MinIO API
S3 or MinIO API
Object keys and folder tree
- From S3 or MinIO API
- To Blender panel
Temporary file
- From S3 or MinIO API
- To Blender importer
Blender importer
- From Temporary file
Mermaid Interactive diagram
System overview of the components and connections verified in the repository.

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
| Module | Layer | Files | Types | Extensions |
|---|---|---|---|---|
(root) | Core source | 1 | 13 | .py |
7.2. C4 model
From system context to code declarations. Each level reflects the available source evidence.
UML 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
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
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
- Download files to Cloud client setup uses connection
- Download files to S3 and MinIO downloads objects
- Download files to Dependency transfer includes
- Download files to Load into scene loads supported assets
- Update and delete to Cloud client setup uses connection
- Update and delete to S3 and MinIO updates or deletes
- 3D artist to Connection preferences configures
- 3D artist to Integration panel uses
- Cloud client setup to S3 and MinIO selects provider
- Load into scene to Cloud client setup downloads asset
- Integration panel to Browse and search shows
- Integration panel to Upload files offers
- Integration panel to Bucket listing offers refresh
- Browse and search to Bucket listing filters
- Upload files to Bucket listing refreshes
- Upload files to Cloud client setup uses connection
- Upload files to S3 and MinIO uploads objects
- Upload files to Dependency transfer includes
- Bucket listing to S3 and MinIO lists objects
7.4. Services
Service 1
CloudSearchManagerfuzzy_match, filter_by_type, search
7.5. Business logic
No classes were extracted, so these are the largest source files and their functions.
addon.pyget_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
External dependencies
2 declared packages (2 runtime, 0 development) in pyproject.toml.
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
- antoinebou12. (2026, November 5). bloc. [Software repository] github.com.
- antoinebou12. (2026, November 5). bloc: README. [Repository documentation] github.com.
- antoinebou12. (2026, November 5). addon.py. [Source file] github.com.
- antoinebou12. (2026, November 5). blender_manifest.toml. [Source file] github.com.
- Boucher, A. (2026, October 23). My bloc fork: browsing S3 and MinIO from Blender. [Project article] antoineboucher.info.
- 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.