🔄 Live Angle Thumbnails
Have the configurator send your page small renders of the shopper's current configuration from any angles you choose, refreshed every time they change an option.
A shopper picks a fabric, then a leg finish, then a different fabric again. Your product gallery is still showing the photography from the original catalogue shot - the thumbnails no longer match what's on screen.
Live angle thumbnails fix that. Tell the configurator which angles you want and it sends your page a set of small renders of exactly what's on screen, from those angles - first as soon as the product has loaded, then again every time the shopper's configuration settles. Drop them into your gallery strip, and clicking one can turn the live 3D viewer round to match.
They're rendered in the shopper's browser from the live scene, so they always match - same materials, same lighting, same tone mapping and shadows as the big viewer. Backgrounds are transparent, so they sit on whatever your page uses.
Not to be confused with Product Cutout Images - those are stable, pre-rendered URLs on our CDN, ideal for product feeds and emails. Live angle thumbnails are generated on the fly, in the browser, for the configuration in front of the shopper right now.
Quick start
Ask for some angles on the configurator URL:
Then listen for them on your page:
That's the whole feature. Nothing happens unless you pass cutoutAngles - no extra rendering, no messages.
Using the ov25-ui package? productLink accepts a query string and merges it into the iframe URL, and the message still arrives on your page's window:
Choosing angles
cutoutAngles is a comma-separated list of absolute yaw angles in degrees:
0faces the front of the product.- Negative walks left around it, positive walks right.
180(or-180) is the back.
So 0,-45,-135 gives you a front shot, a left three-quarter, and a left-back three-quarter.
They're absolute, so you don't need to know anything about how a particular product's camera was set up - 0 is the front of a footstool and the front of a corner sofa alike. Everything else about the shot (height, lens, and how tightly the product is framed) comes from the product's own default camera, so the thumbnails look like the main viewer rather than a generic render.
| Parameter | What it does |
|---|---|
cutoutAngles | Comma-separated absolute yaw degrees. Required - the feature is off without it. |
cutoutSize | Square size in pixels for each thumbnail. Clamped to 150–550. Defaults to 200. |
Each angle is one extra render, repeated every time the configuration changes, so keep the list short - three or four is a comfortable number. Ask for the smallest cutoutSize that still looks sharp at the size you display it; the default 200 is deliberately tiny because the tiles are usually 100px or so on screen.
Receiving the thumbnails
The first set arrives on its own once the 3D scene has loaded - the shopper doesn't have to touch anything. After that, every time the configuration settles, the configurator sends the complete current set - not just what changed. Replace whatever you were holding and you're always in sync; there's no patching or bookkeeping to do.
The message is deliberately not JSON - the images come across as ImageBitmap objects, which transfer without being copied or base64-encoded:
| Field | Type | What it is |
|---|---|---|
type | string | Always CUTOUT_THUMBNAILS. |
bitmaps | ImageBitmap[] | One render per requested angle. |
yaws | number[] | The angle each bitmap was rendered at, in the same order. |
ImageBitmap can be drawn straight to a <canvas>. If you'd rather have something you can put in an <img> tag, convert them as they arrive:
The bitmaps are handed over to your page, so it's yours to release: call close() once you've drawn or copied each one. Skip it and you'll leak memory a little faster with every option the shopper tries.
Clicking a thumbnail to turn the viewer
Send SELECT_CUTOUT_ANGLE back to the iframe to turn the live 3D viewer to one of the angles you were sent:
The camera swings round to that angle at the product's opening framing, undoing any zoom the shopper applied. It's a shortcut rather than a lock: the shopper can carry on dragging from there, and grabbing the viewer mid-move stops it.
| Field | Type | What it does |
|---|---|---|
yawDeg | number | null | The angle to move to, using the same convention as cutoutAngles. null stops any move in progress and leaves the camera where it is. |
animate | boolean | Optional, defaults to true. Send false to jump straight there - for example while the viewer is hidden behind a static image. |
requestId | number | Optional. Sent back to you in CUTOUT_CAMERA_PRESENTED, so you can tell which click it answers. |
When the camera has arrived and that frame is on screen, the configurator replies with CUTOUT_CAMERA_PRESENTED. Its payload is a JSON string of { yawDeg, requestId }. Wait for it before taking down anything you were showing over the viewer:
A "360°" tile alongside your thumbnails doesn't need to move the camera: send yawDeg: null so any move still in progress stops, and show the live viewer.
MOVE_CAMERA_TO_CUTOUT_ANGLE is accepted as another name for the same message.
Recipes
| Goal | Setup |
|---|---|
| Retailer-style gallery sweep | ?cutoutAngles=0,-45,-135 |
| Front, both sides, back | ?cutoutAngles=0,-90,90,180 |
| Just a front shot that always matches the build | ?cutoutAngles=0 |
| Larger tiles for a desktop-only gallery | ?cutoutAngles=0,-45,-135&cutoutSize=400 |
Behaviour notes
- Off by default. With no
cutoutAnglesparameter the configurator behaves exactly as it always has - nothing is rendered and no messages are sent. An empty or invalid value is treated the same way. - The first set arrives without any interaction, a moment after the 3D scene finishes loading. Keep your existing imagery in place until it turns up, so the gallery isn't empty while the product loads.
- Renders are captured off-screen and never disturb the shopper's view - the live viewer doesn't flicker or move while a set is being produced.
- Rapid changes are coalesced: click through five fabrics quickly and you'll get one set for the configuration you land on, not five.
- Backgrounds are fully transparent, and the product is framed the same way in every angle.
- Available on the standard product configurator. The bed, dining, and Snap2 modular configurators have their own embeds and don't support this yet.