Skip to content
3D Viewer Docs

How to Use

Adding a model to a product

  1. Go to Product 3D Models and open a product.
  2. In the Model file card, either:
    • Upload — pick a .glb or .gltf from your computer (or drag it in). If the product already has one, the button reads Upload (Replace).
    • Choose from Files — reassign a model already in Shopify Files.
    • Remove — detach the model from the product. The file stays in Shopify Files.
  3. Adjust the Viewer settings (full reference below). The Live preview on the right re-renders as you type.
  4. Click Save And View to save and open the live product page, or Save alone to persist without leaving.

File requirements: .glb (recommended) or .gltf. Maximum 20 MB, but keep files under ~10 MB so product pages stay fast.



Viewer settings reference

Every setting is per-model and stored as JSON in custom.viewer_3d_config.

Display
SettingRange / optionsDefaultWhat it does
Viewer height200–1200 px500Height of the viewer box on the page
Background colorany hex#ffffffCanvas background behind the model
Exposure0–51Overall brightness of the lighting
Tone mappingNone, Linear, Reinhard, Cineon, ACESFilmicLinearHow bright values roll off. ACESFilmic looks most cinematic; Linear is truest to the source
Default environment mapon / offonUses the built-in studio lighting. Turn off to supply your own
Blur skyboxon / offoffSoftens the background skybox without affecting reflections
Cast shadow under modelon / offonContact shadow on the ground plane
Environment
SettingWhat it does
Skybox HDR URLHDR image used as the visible background
Environment map HDR URLHDR image used for reflections and lighting only

Leave both empty to use the default environment. Host the .hdr files anywhere publicly reachable — Shopify Files works.

Camera
SettingRangeDefaultWhat it does
FOV modeauto / customautoAuto fits the model to the frame; custom lets you set the angle
FOV (degrees)1–17945Field of view. Lower is more telephoto/flatter, higher is wider/more dramatic
Initial yaw−360°–360°0Horizontal starting angle
Initial pitch−90°–90°0Vertical starting angle — positive looks down at the model
Initial zoom−100–1000Starting distance relative to the auto-fit
Maintain model size on resizeon / offoffKeeps the model a constant on-screen size when the viewport changes
Controls
SettingDefaultWhat it does
Allow rotateonDrag to orbit the model
Allow translate (pan)onRight-drag / two-finger drag to move the model
Allow zoomonPinch or wheel to zoom
Auto rotateonModel spins slowly on its own
Page scroll on touchonVertical swipes scroll the page instead of being eaten by the viewer. Leave on for mobile product pages
Page scroll on mouse wheeloffTurn on so the wheel scrolls the page rather than zooming the model
Grab cursor on canvasonShows the hand cursor so visitors know it’s draggable
Control bar

The on-screen buttons overlaid on the viewer. By default only fullscreen and zoom are shown — a product-page viewer should read as a photo that turns, not as an application.

ButtonDefaultWhat it does
Animation clip name/switcheroffLets visitors pick which animation plays. Note: with this hidden, animation does not play at all
Axis gizmo (X/Y/Z)offSmall orientation indicator
Zoom in / out buttonsonExplicit zoom controls
Camera (snapshot) buttonoffDownloads a PNG of the current view
Resets viewoffReturns the camera to its starting position
Fullscreen buttononExpands the viewer to the full screen
Animation
SettingRangeDefaultWhat it does
Default animation index0–990Which clip in the file plays first
Repeat modeone / all / noneoneLoop the current clip, cycle through all clips, or play once
AR
SettingDefaultWhat it does
WebXR ARonIn-browser AR on modern Android Chrome
Google Scene VieweronAndroid’s native AR viewer
Apple Quick LookoniOS AR — requires the .usdz below
iOS source URL (.usdz)emptyUpload a .usdz separately to Shopify Files and paste its URL here. Without it, Quick Look has nothing to show
Advanced
SettingDefaultWhat it does
Material variantemptyName of a KHR_materials_variants variant to load by default
Fix skinned bounding boxonFor rigged models, fits the camera to the posed mesh rather than the bind pose. Without it, character models often render as a tiny speck

3D Model Library

Your central store of models, independent of any product.

Adding models

  • Drop a .glb / .gltf onto the drop zone, or click Upload new.
  • Choose from Files imports a model already in Shopify Files.

Finding models

  • Search by name.
  • Sort by Newest first, Oldest first, Name (A→Z), or Largest first.
  • Toggle between list and grid view.

Per-model quick actions (the icon buttons on each row)

  • Copy Model ID — paste into the 3D Viewer — Any Model theme block.
  • Copy embed code — the iframe snippet, for any page that accepts HTML.
  • Copy file URL — the raw .glb URL.
  • Delete — removes it from the library. The .glb itself stays in Shopify Files.

Bulk actions Select models with the checkboxes (or Select all), then Delete selected from the bar that appears at the top.

Model detail page Open any model to get:

  • Details — file name, size, and the copyable Model ID and public link.
  • Share & embed — the iframe snippet, with a Responsive / Fixed toggle.
  • Viewer settings — the same full settings panel as the product page.
  • Live preview — updates as you edit.
  • Preview and Delete buttons in the header.

Placing the viewer on your storefront

Requires an Online Store 2.0 theme with JSON templates — Dawn and most modern themes qualify.

Product pages

Online Store → Themes → Customize → Product template → Add section → Apps → 3D Viewer — Product.

Block settings:

  • Manual model URL — leave empty so it falls back to the product’s assigned model. Only fill this in to hard-code one specific file.
  • Viewer height and Background color — fallbacks used when no per-product config exists.

Add this block once and every product with a model uses it automatically.

Home page, custom pages, blog posts

Pick that template at the top of the theme editor, then Add section → Apps → 3D Viewer — Any Model.

Block settings:

  • Model ID — paste from the 3D Model Library. Preferred: the ID resolves through the shop library metafield, so the model’s saved viewer settings travel with it.
  • Model URL — a raw .glb URL instead. This brings only the file, so the block’s own height and background apply.
  • Caption (optional)
  • Viewer heightBackground colorAuto rotateShow on-screen controls

Embedding a model anywhere

Every model has a standalone public page at /viewer/<model-id>. The Share & embed card gives you a ready iframe.

Where to use it

  • A Shopify page or blog post — switch the rich text editor to the </> HTML view and paste.
  • Custom Liquid section, anywhere in any theme, including legacy .liquid templates.
  • Any site outside Shopify.

Two modes

  • Responsive — a 4:3 box that scales to any column width.
  • Fixed — pins the model’s saved height.

URL overrides — so one model suits several placements without re-saving it:

  • ?bg=101014 — sets the background to match the host page (hex, no #).
  • ?autorotate=0 — stops it spinning.

The snippet is inline-styled with no classes and no <script>, so Shopify’s HTML sanitiser leaves it intact and your theme CSS can’t collide with it. Keep allow="fullscreen" on the iframe or the fullscreen button won’t work.


Preview vs Save

  • Live preview (right-hand panel) re-renders instantly as you edit. Saving only persists the change.
  • Preview opens the storefront with your unsaved changes applied via a URL fragment. Nothing is written.
  • Save And View saves first, then opens a fresh storefront tab. Shopify takes a few seconds to propagate metafield writes — the placeholder spinner is waiting for that, not stuck.

Plans

FreePro — $9.99/moPro Plus — $29.99/mo
ModelsUp to 5Up to 50Unlimited
Trial7 days7 days
Embed on product pages and pagesEverything in FreeEverything in Pro
All viewer customization optionsHDR skybox and environment mapsAR Quick Look (iOS) + Scene Viewer (Android)
Live preview in adminMaterial variantsCustom annotations
Standard supportPriority email supportPremium support

Existing model assignments are never removed on a downgrade — only new uploads beyond the limit are blocked.


Troubleshooting

Block renders nothing. The product has no model assigned. Upload one, or paste a manual URL ending in .glb / .gltf.

Storefront ignores your saved changes. The metafield definitions are missing Storefront read access. Run Create / fix definitions on the Setup page, then hard-refresh the storefront.

Model ID reports “not found”. Run Setup — that button writes the shop library metafield the Any Model block reads.

Model appears white. The viewer is mid-initialisation because a structural option just changed (tone mapping, environment map). Wait a moment, or revert that field.

Animation doesn’t play. The clip switcher is hidden. Turn on Animation clip name/switcher under Control bar — hiding it means “no animation”, not “animation you can’t control”.

Model renders as a tiny speck. It’s a rigged model and Fix skinned bounding box is off. Turn it on.

Model spins when I try to scroll the page. Turn on Page scroll on mouse wheel (desktop) and confirm Page scroll on touch is on (mobile).

Quick Look does nothing on iPhone. iOS needs a separate .usdz. Upload one to Shopify Files and paste its URL into AR → iOS source URL.

Pop-up blocked. Save And View and Preview must be a direct click, not a programmatic trigger. Allow pop-ups for your admin domain.

Fullscreen button does nothing in an embed. The iframe is missing allow="fullscreen". Re-copy the snippet from Share & embed.

Was this page helpful?

Last updated August 6, 2026