Webflow Integration Guide
This guide covers how to embed StorySplat 3D scenes in Webflow using either the official Webflow App or manual embed code.
Option 1: Webflow App (Recommended)
Installation
- Open your Webflow project in the Designer
- Go to Apps in the left panel
- Search for "StorySplat"
- Click Install
Using the App
- Click the StorySplat app in your Apps panel
- Enter your Scene ID
- Configure settings (height, autoplay, etc.)
- Click "Insert 3D Scene" to add to your page
Option 2: Manual Embed
For quick embedding without installing the app, use the Embed element:
Single Script Embed (Recommended)
This uses the bundled build which includes everything in one script:
<!-- StorySplat 3D Scene Viewer -->
<div id="storysplat-viewer" style="width: 100%; height: 600px;"></div>
<script src="https://cdn.jsdelivr.net/npm/storysplat-viewer@2/dist/storysplat-viewer.bundled.umd.js"></script>
<script>
StorySplatViewer.createViewerFromSceneId(
document.getElementById('storysplat-viewer'),
'YOUR_SCENE_ID',
{ autoPlay: false, showUI: true }
);
</script>
Step-by-Step Instructions
- In the Webflow Designer, add an Embed element where you want the 3D scene
- Paste the embed code above
- Replace
YOUR_SCENE_IDwith your actual scene ID - Adjust the height as needed (e.g.,
600px,80vh,100vh) - Publish your site
Configuration Options
| Option | Type | Default | Description |
|---|---|---|---|
autoPlay |
boolean | false | Auto-start tour playback |
showUI |
boolean | true | Show navigation controls |
lazyLoad |
boolean | false | Show thumbnail first, load on click |
revealEffect |
string | 'medium' | Reveal animation: 'fast', 'medium', 'slow', 'none' |
Examples
Basic embed:
<div id="scene-viewer" style="width: 100%; height: 600px;"></div>
<script src="https://cdn.jsdelivr.net/npm/storysplat-viewer@2/dist/storysplat-viewer.bundled.umd.js"></script>
<script>
StorySplatViewer.createViewerFromSceneId(
document.getElementById('scene-viewer'),
'f8dc96cf-6fc8-4d11-89bb-36c447c0d060'
);
</script>
With autoplay:
<div id="scene-viewer" style="width: 100%; height: 600px;"></div>
<script src="https://cdn.jsdelivr.net/npm/storysplat-viewer@2/dist/storysplat-viewer.bundled.umd.js"></script>
<script>
StorySplatViewer.createViewerFromSceneId(
document.getElementById('scene-viewer'),
'YOUR_SCENE_ID',
{ autoPlay: true }
);
</script>
Lazy loading:
<div id="scene-viewer" style="width: 100%; height: 600px;"></div>
<script src="https://cdn.jsdelivr.net/npm/storysplat-viewer@2/dist/storysplat-viewer.bundled.umd.js"></script>
<script>
StorySplatViewer.createViewerFromSceneId(
document.getElementById('scene-viewer'),
'YOUR_SCENE_ID',
{ lazyLoad: true }
);
</script>
Full page with no UI:
<div id="scene-viewer" style="width: 100%; height: 100vh;"></div>
<script src="https://cdn.jsdelivr.net/npm/storysplat-viewer@2/dist/storysplat-viewer.bundled.umd.js"></script>
<script>
StorySplatViewer.createViewerFromSceneId(
document.getElementById('scene-viewer'),
'YOUR_SCENE_ID',
{ showUI: false, autoPlay: true }
);
</script>
iframe Alternative
If you prefer iframe embedding (simpler but less customizable):
<iframe
src="https://discover.storysplat.com/api/v2-html/YOUR_SCENE_ID"
width="100%"
height="600"
frameborder="0"
allow="accelerometer; gyroscope; xr-spatial-tracking"
allowfullscreen
></iframe>
Webflow-Specific Tips
Responsive Height
Use viewport units for responsive height:
Inside a Section
When embedding in a Webflow section:
- Set the section to your desired height
- Set the embed to
width: 100%; height: 100%; - Remove padding from the container
Multiple Scenes
Use unique IDs for each viewer:
<!-- First scene -->
<div id="scene-1" style="width: 100%; height: 400px;"></div>
<!-- Second scene -->
<div id="scene-2" style="width: 100%; height: 400px;"></div>
<script src="https://cdn.jsdelivr.net/npm/storysplat-viewer@2/dist/storysplat-viewer.bundled.umd.js"></script>
<script>
StorySplatViewer.createViewerFromSceneId(
document.getElementById('scene-1'),
'SCENE_ID_1'
);
StorySplatViewer.createViewerFromSceneId(
document.getElementById('scene-2'),
'SCENE_ID_2'
);
</script>
Custom Controls
Add your own play/pause buttons:
<div id="scene-viewer" style="width: 100%; height: 600px;"></div>
<button id="play-btn">Play</button>
<button id="pause-btn">Pause</button>
<button id="next-btn">Next</button>
<script src="https://cdn.jsdelivr.net/npm/storysplat-viewer@2/dist/storysplat-viewer.bundled.umd.js"></script>
<script>
let viewer;
async function init() {
viewer = await StorySplatViewer.createViewerFromSceneId(
document.getElementById('scene-viewer'),
'YOUR_SCENE_ID',
{ showUI: false }
);
document.getElementById('play-btn').onclick = () => viewer.play();
document.getElementById('pause-btn').onclick = () => viewer.pause();
document.getElementById('next-btn').onclick = () => viewer.nextWaypoint();
}
init();
</script>
Getting Your Scene ID
- Create or edit your scene at storysplat.com
- Click "Upload" or "Update" to publish
- Find the Scene ID in the "Developer Export" section
- Copy the ID (looks like:
f8dc96cf-6fc8-4d11-89bb-36c447c0d060)
Troubleshooting
Scene Not Loading
- Verify the scene ID is correct
- Check that the scene is published and public
- Open browser console for error messages
Layout Issues
- Ensure the container has explicit height
- Check for CSS conflicts with Webflow styles
- Use
min-heightto prevent collapse
Performance
- Enable lazy loading for below-the-fold content
- Limit number of 3D scenes per page
- Test on mobile devices
Support
- Documentation: docs.storysplat.com
- Issues: GitHub Issues
- Email: support@storysplat.com