Basic usage
Minimal example
The simplest integration: a button that opens the widget with product data:
<script src="https://app.selektable.com/widgets/embed.js" async></script>
<button onclick="Selektable.open('widget_abc123', {
productId: 'sofa-001',
productTitle: 'Modern Blue Sofa',
productImage: 'https://myshop.com/images/sofa.jpg'
})">
View in your room
</button>
With multiple product images
Provide multiple images so customers can choose which angle to visualize:
Selektable.open('widget_abc123', {
productId: 'sofa-001',
productTitle: 'Modern Blue Sofa',
productImage: 'https://myshop.com/images/sofa-front.jpg',
productImages: [
{ id: 1, src: 'https://myshop.com/images/sofa-front.jpg', alt: 'Front view' },
{ id: 2, src: 'https://myshop.com/images/sofa-side.jpg', alt: 'Side view' },
{ id: 3, src: 'https://myshop.com/images/sofa-top.jpg', alt: 'Top view' }
],
productUrl: 'https://myshop.com/products/modern-blue-sofa'
});
productImage sets the primary image used for AI generation. productImages provides the full gallery displayed in the widget.
Preloading for instant open
Preload the widget iframe on page load so it opens instantly when clicked:
<script src="https://app.selektable.com/widgets/embed.js" async></script>
<script>
window.addEventListener('load', function () {
Selektable.preload('widget_abc123');
});
</script>
<button onclick="Selektable.open('widget_abc123', {
productId: 'sofa-001',
productTitle: 'Modern Blue Sofa',
productImage: 'https://myshop.com/images/sofa.jpg'
})">
View in your room
</button>
Using data attributes
Declarative approach using HTML data attributes:
<script src="https://app.selektable.com/widgets/embed.js" async></script>
<div
data-selektable-widget="widget_abc123"
data-product-id="sofa-001"
data-product-title="Modern Blue Sofa"
data-product-images='[{"id":1,"src":"https://myshop.com/images/sofa.jpg","alt":"Sofa"}]'
>
<button onclick="Selektable.open('widget_abc123')">
View in your room
</button>
</div>
The SDK auto-discovers the data attributes and merges them with any options passed to open().
With identity tracking
Associate visualizations with logged-in customers:
<script src="https://app.selektable.com/widgets/embed.js" async></script>
<script>
// After page load, identify the user if logged in
window.addEventListener('load', function () {
// Replace with your actual user data
var user = getCurrentUser(); // your auth function
if (user) {
Selektable.identify(user.id, {
name: user.name,
email: user.email
});
}
});
</script>
Dynamic product pages (SPA)
For single-page applications where products change without full page reloads:
// When product changes in your SPA
function onProductChange(product) {
// Just pass the new product data when opening
document.getElementById('try-on-btn').onclick = function () {
Selektable.open('widget_abc123', {
productId: product.id,
productTitle: product.name,
productImage: product.image,
productImages: product.images.map(function (img, i) {
return { id: i, src: img.url, alt: img.alt };
}),
productUrl: window.location.href
});
};
}