3D Model Viewer
Attach real 3D models to your products, lots and bills of materials, and rotate them right inside the form view. No plugin, no external service, no CDN.
glTF GLB STL OBJ PLY 3MF ZIP
See it in action
A real WebGL viewport inside the Odoo form view.
A 3D model record: the viewport, its storage figures and its share link in one place. Drag to rotate, scroll to zoom, toggle the grid, the wireframe or auto-rotation. Products, variants, lots and bills of materials each get a 3D Models tab listing theirs.
The share page: a standalone viewer anyone with the link can open, with no Odoo account.
Settings: decide where the 3D tab appears and whether sharing is allowed at all.
You decide where 3D appears
A dedicated Settings section lets the administrator turn 3D on for Products, Lots / Serial Numbers and Bills of Materials — one of them, several, or all at once.
Share without giving access
Publish any model as a standalone web page protected by an unguessable link. Set an expiry date, allow or block downloads, and revoke the link whenever you want.
It will not slow Odoo down
The 3D engine is never part of the Odoo backend bundle. It is fetched the first time somebody actually opens a model, then read from the browser cache.
Engineered for performance
- Zero cost when unused. A database with the module installed and no 3D model open downloads not one byte of the 3D engine.
-
Compressed storage, free decompression.
Files are stored compressed (Brotli when the optional
brotlipackage is present, gzip otherwise) and handed to the browser still compressed, tagged withContent-Encoding. The browser inflates them with its native decoder, so models are smaller on disk and faster on the wire at once, at no JavaScript cost. Text-heavy glTF files routinely lose well over half their size. - Downloaded once. Assets are served from content-addressed, immutable URLs, so a model a user has already seen is read straight from the browser cache.
- Rendering on demand. The render loop stops completely once the scene settles, and while the viewer is off-screen or the tab is in the background. No animation loop quietly burning a CPU core.
- Background optimisation. Uploads are compressed quickly so saving stays instant; a scheduled action then re-compresses them at the maximum ratio.
- Automatic thumbnails. The first person to open a model gives it its preview image, so list and kanban views never start a WebGL context.
Secure by design
- Share links use a 256-bit random token, compared in constant time.
- Turning sharing off in Settings revokes every existing link. It does not merely hide the button.
-
Share pages are served
noindex, nofollow, with no referrer and no shared-cache storage. -
Uploaded archives are inspected: path traversal, executable and
HTML content are rejected. A
.gltfpointing at an external server is refused. - Visitors can be allowed to look without being allowed to download.
Formats and bulk import
glTF and binary glTF (.gltf, .glb),
.stl, .obj, .ply,
.3mf, and .zip archives containing one of
those together with its textures. Archives are unpacked in the
browser, so they stay compressed on the server.
Draco, Meshopt and KTX2/Basis compressed glTF files work out of the box: their decoders ship with the module and are only fetched when a file actually uses them.
A bulk import wizard matches a whole folder of files to your records by internal reference, name or barcode. Files that match nothing, or more than one record, are listed rather than guessed.
Your data stays on your server
This module requires no external service and sends no data anywhere. The 3D engine, the Draco and Basis decoders and every asset are shipped inside the module and served from your own Odoo. Nothing is fetched from a CDN at runtime, and there is no activation key of any kind.
The only outbound traffic a 3D model can ever cause is a visitor opening a share link you generated yourself.
Requirements
- Odoo 19, Community or Enterprise.
- The Manufacturing application, which the module depends on in order to attach models to bills of materials.
- A browser with WebGL, which every current desktop and mobile browser provides.
-
No mandatory Python dependency beyond the standard library.
Installing the optional
brotlipackage simply shrinks stored models further.
Support
A question or a problem? Write to raphael.bethaz@hotmail.com and you will get an answer.
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module