Quick Start
Get the 3D Packaging Designer running on your HubSpot page in under 5 minutes.
Install the Module
From the HubSpot Template Marketplace listing, click Install (free modules) or Purchase (paid modules). The module files are automatically added to your Design Manager under Custom Modules.
Add to a Page
Open any page in the HubSpot drag-and-drop editor. In the left sidebar, search for "3D Interactive Packaging Designer". Drag it onto your page where you want the visualizer to appear.
Configure Products
Click the module on the page to open its settings panel. Under the Content tab, toggle on the product types you want to display. By default all 8 products are enabled โ toggle off any you don't need.
Customize & Publish
Set your brand colors, upload your logo, customize the heading text, and adjust styles. Click Publish when ready. Your visitors can now interact with the 3D visualizer immediately.
Installation
Requirements
- HubSpot CMS Professional or Enterprise (required for custom modules)
- Visitors need a WebGL-capable browser (all modern browsers since 2015)
- No jQuery dependency โ the module uses vanilla JavaScript
What Gets Installed
The module installs the following files into your Design Manager:
Custom Modules/
โโโ 3d-packaging-designer.module/
โโโ module.html โ HTML + HubL template
โโโ module.css โ Scoped styles (all .tpd-* prefixed)
โโโ module.js โ Three.js scene engine
โโโ fields.json โ 50 configurable editor fields
โโโ meta.json โ Module metadata & icon
External Dependencies
The module loads Two JavaScript files from the Cloudflare CDN at page render time via HubL require_js():
| Library | Version | Purpose | Size (gzipped) |
|---|---|---|---|
| Three.js | r128 | WebGL 3D rendering engine | ~150 KB |
| OrbitControls.js | r128 | Mouse/touch rotation & zoom | ~8 KB |
cdnjs.cloudflare.com with aggressive browser caching. After the first page load, subsequent visits load the 3D engine from cache with zero network requests.
Configuration Overview
The module has 50 configurable fields organized across two tabs in the HubSpot page editor:
| Tab | Purpose | Fields |
|---|---|---|
| Content | What appears on the page: heading text, brand logo, which products are enabled, default colors per product, feature list | ~36 fields |
| Styles | How it looks: fonts, colors, backgrounds, borders, spacing, sidebar width, preview height | ~14 fields |
Every field includes inline help text explaining what it does. No code editing is ever required.
Content Tab Reference
Header Group
| Field | Type | Default | Description |
|---|---|---|---|
| Heading Text | Text | "Design Your *Perfect* Package" | Main heading above the visualizer. Wrap text in asterisks to apply the accent color. |
Brand Logo Group
| Field | Type | Default | Description |
|---|---|---|---|
| Logo Image | Image | None | Your brand logo displayed above the heading. Recommended size: 200px wide, transparent PNG or SVG. |
Enabled Products Group
Toggle each product type on or off. Disabled products don't appear in the visitor-facing selector grid.
| Field | Type | Default |
|---|---|---|
| Enable Pouch | Boolean | On |
| Enable Can | Boolean | On |
| Enable Stick Pack | Boolean | On |
| Enable Bar Wrap | Boolean | On |
| Enable Carton | Boolean | On |
| Enable Bottle | Boolean | On |
| Enable Wine Bottle | Boolean | On |
| Enable Drink Can | Boolean | On |
Product Colors Group
Each product type has 3 color fields that control the default colors visitors see when the page loads. Visitors can change these in real time using the built-in color pickers.
| Product | Color 1 | Color 2 | Color 3 |
|---|---|---|---|
| Pouch | Body (#0051B3) | Zipper (#C0392B) | Gusset (#003D8A) |
| Can | Body (#DC2626) | Lid (#C0C0C0) | Base (#B0B0B0) |
| Stick Pack | Body (#2D9E36) | Seal (#C0C0C0) | Accent (#1A6B3C) |
| Bar Wrap | Outer (#8B4513) | Inner (#D2691E) | Seal (#FFD700) |
| Carton | Body (#FFFFFF) | Lid (#E5E7EB) | Accent (#0051B3) |
| Bottle | Body (#228B22) | Cap (#C0C0C0) | Label BG (#FFFFFF) |
| Wine Bottle | Body (#722222) | Foil (#D4A84B) | Label BG (#FFF8EB) |
| Drink Can | Body (#1E40AF) | Lid (#C0C0C0) | Accent (#60A5FA) |
Features Group
| Field | Type | Description |
|---|---|---|
| Feature List | Repeater | Optional list of feature callouts displayed below the visualizer. Each item has a title and description. Leave empty to hide the section entirely. |
Styles Tab Reference
Style fields follow HubSpot marketplace conventions and are ordered: Text โ Background โ Border โ Spacing โ Advanced.
Text Group
| Field | Type | Default | Description |
|---|---|---|---|
| Heading Font | Font picker | Space Grotesk | Google Font for the main heading. Loaded automatically. |
| Body Font | Font picker | Inter | Google Font for labels, buttons, and UI text. |
| Accent Color | Color | #6366F1 | Used for active states, buttons, highlighted text, and interactive elements. |
Background Group
| Field | Type | Default | Description |
|---|---|---|---|
| Module Background | Color | #0F172A | Overall module container background color. |
| Panel Background | Color | #111827 | Sidebar controls panel background. |
| Preview Gradient Start | Color | #1A1A2E | Top color of the 3D preview area gradient. |
| Preview Gradient End | Color | #16162A | Bottom color of the 3D preview area gradient. |
Border Group
| Field | Type | Default | Description |
|---|---|---|---|
| Border Color | Color | #1E293B | Color for dividers and component borders. |
| Border Radius | Number (px) | 12 | Corner rounding on buttons, cards, and the main container. |
Spacing Group
| Field | Type | Default | Description |
|---|---|---|---|
| Module Padding | Spacing | 24px top/bottom, 0 left/right | Outer padding around the entire module. Adjust to create breathing room from adjacent page sections. |
Advanced Group
| Field | Type | Default | Description |
|---|---|---|---|
| Sidebar Width | Number (%) | 45 | Width of the controls sidebar as a percentage of the total module width. The 3D preview fills the remaining space. |
| Preview Min Height | Number (px) | 650 | Minimum height of the 3D preview canvas area. Increase for taller product displays. |
Product Types Deep Dive
Each product type is a full 3D model built with Three.js geometry, materials, and lighting. Here's what each includes:
Stand-Up Pouch
A flexible packaging pouch with front face, side gussets, and a resealable zipper. The zipper features visible teeth detail. The label area wraps around the front face.
- Color zones: Body, Zipper, Gusset
- Best for: Coffee, snacks, supplements, pet food, cannabis
Beverage Can
A standard 355ml (12oz) beverage can with pull-tab lid, cylindrical body, and recessed base. Metallic material with realistic reflections.
- Color zones: Body, Lid, Base
- Best for: Energy drinks, craft beer, seltzer, soda
Stick Pack
A tall, narrow single-serve sachet with sealed top and bottom edges. Common in powder supplements and drink mixes.
- Color zones: Body, Seal, Accent stripe
- Best for: Single-serve supplements, drink mixes, condiments
Bar Wrap
A horizontal flow-wrap package with crimped ends, typical of protein bars and chocolate bars.
- Color zones: Outer wrap, Inner foil, Seal
- Best for: Protein bars, chocolate, granola bars
Folding Carton
A rectangular box with lid, front face, and side panels. Rendered with slight bevel edges for realism.
- Color zones: Body, Lid, Accent
- Best for: Cereal, pharmaceuticals, cosmetics, electronics
Bottle
A standard round bottle with screw cap, shoulder taper, and cylindrical body. Label wraps around the center.
- Color zones: Body, Cap, Label background
- Best for: Sauces, supplements, cleaning products
Wine Bottle
A Bordeaux-style wine bottle with foil capsule, long neck, sloped shoulders, and a punt base. Glossy dark glass material.
- Color zones: Glass body, Foil, Label background
- Best for: Wine, spirits, premium olive oil
Slim Drink Can
A tall 250ml slim can (Red Bull format) with narrower diameter and taller profile than the standard beverage can.
- Color zones: Body, Lid, Accent
- Best for: Energy drinks, sparkling water, cocktails
Advanced Usage
Multiple Modules Per Page
The module is multi-instance safe. You can add multiple 3D Packaging Designer modules to the same page without conflicts. Each instance gets a unique DOM ID and scoped Three.js scene. Typical use case: one visualizer for pouches, another for bottles, on the same product page.
Custom Label Artwork
Visitors can upload label images that wrap onto the 3D product surface. Supported formats:
- PNG โ Best for labels with transparency
- JPG โ Smaller file sizes for photographic labels
- SVG โ Vector artwork (rasterized at upload)
Recommended label dimensions: 1024 ร 1024px or 2048 ร 1024px for best quality on the 3D surface.
PNG Export
The "Download PNG" button captures the current 3D canvas state as a high-resolution PNG image with a transparent background. The exported image matches the visible canvas size. Visitors can use this for internal reviews, presentations, or mockup approvals.
Surface Textures
| Texture | Description | Best For |
|---|---|---|
| Carbon Fiber | Diagonal weave pattern with subtle reflectivity | Premium, tech-forward products |
| Brushed Metal | Horizontal linear grain with anisotropic reflections | Metallic cans, industrial products |
| Linen | Fine woven crosshatch with soft matte feel | Natural, organic, artisan products |
| Speckle | Random dot pattern (kraft paper aesthetic) | Eco-friendly, recycled packaging |
Material Finishes
| Finish | Roughness | Metalness | Visual Effect |
|---|---|---|---|
| Matte | 0.9 | 0.0 | Flat, no reflections. Clean and modern. |
| Satin | 0.5 | 0.1 | Soft sheen with subtle highlights. |
| Glossy | 0.15 | 0.2 | Bright reflections, wet-look surface. |
| Metallic | 0.3 | 0.8 | Chrome-like reflections. Ideal for cans. |
Embedding in Blog Posts
The module works in blog posts and blog listing pages. Simply add the module to your blog template's drag-and-drop areas. It's registered for PAGE, BLOG_POST, and BLOG_LISTING template types.
Performance Notes
- Three.js is loaded asynchronously โ it won't block page rendering
- The 3D scene initializes only when the module container enters the viewport (intersection observer)
- Shadow maps use 4096ร4096 resolution for crisp shadows without excessive GPU load
- On mobile devices, shadow quality is automatically reduced to maintain 60fps
- Total additional page weight: ~160 KB gzipped (Three.js + OrbitControls from CDN, cached after first visit)
Troubleshooting
The 3D preview shows a blank/black area
Products appear but colors don't change
Check that JavaScript is enabled and there are no console errors. Open your browser's Developer Tools (F12) and look for any red error messages. The most common cause is a Content Security Policy (CSP) header blocking inline scripts or the CDN domain. Ensure cdnjs.cloudflare.com is allowed in your CSP.
Module doesn't appear in the page editor
Confirm the module was installed successfully by checking Design Manager โ Custom Modules. If it's not listed, try reinstalling from the marketplace. If you see it in Design Manager but not in the page editor's module sidebar, ensure your page template allows custom modules in that zone.
The module looks too small or too large
Adjust the Preview Min Height field in the Styles โ Advanced group. Default is 650px. For full-width hero-style layouts, try 800px or higher. The Sidebar Width percentage also affects the preview area size.
Label upload doesn't work
Label upload uses the browser's File API. It won't work if:
- The page is loaded over
http://instead ofhttps://(HubSpot pages are HTTPS by default) - The browser blocks file access (incognito mode with strict settings)
- The uploaded file exceeds ~10MB (browser memory constraint)
Module works in preview but not on published page
Click Publish changes in Design Manager after making any edits to the module code. Then republish the page itself. HubSpot caches module assets aggressively โ you may need to wait 1-2 minutes or clear your browser cache.
Multiple modules on the same page conflict
This shouldn't happen โ the module is multi-instance safe. If you experience issues, check that you haven't manually edited the module code and accidentally removed the instance scoping. Each module instance uses a unique data-module-instance attribute to scope all DOM queries.
Frequently Asked Questions
3D Interactive Packaging Designer with Product Visualizer
Built by Two Trees PPC ยท Sacramento, CA ยท support@twotreesppc.com
ยฉ 2026 Two Trees PPC LLC. All rights reserved.