Once the script is ready, Shuffll assembles visuals for each scene. Because not every scene will have explicit media provided, Shuffll uses a prioritised fallback system to find the best available source.
For every scene, Shuffll works through the following sources in order. As soon as a source produces a result, it stops and moves to the next scene.
1. Videos you provided (customTemplate.scenes[].videosToAdd)
2. Stock footage (searched by scene content)
3. Workspace assets (your uploaded media library)
4. Image → Video (Stability AI generates a still, then it is animated)
5. AI video generation (full clip generated from the scene script)This means that if you explicitly attach a video to a scene, it will always be used. If you don't, Shuffll searches stock footage, then your workspace, and finally generates something from scratch.
You can override the default order at the project level using videoSourcesPipeline:
"videoSourcesPipeline": ["workspace_assets", "stock_footage", "generate_from_text"]Or at the template level using customTemplate.videoSourcesByOrder (see Using Templates).
Available values:
| Value | Description |
|---|---|
stock_footage | Search stock video libraries |
workspace_assets | Search your uploaded workspace media |
generate_from_image | Generate a still image, then animate it |
generate_from_text | Generate a video clip directly from the scene description |
Omitting a source from the pipeline disables it entirely. For example, to use only your own workspace assets and generate when nothing is found:
"videoSourcesPipeline": ["workspace_assets", "generate_from_text"]Use customTemplate.scenes[].videosToAdd to pin specific media to a scene:
"customTemplate": {
"id": "template_id_here",
"scenes": [
{
"id": "scene_001",
"videosToAdd": [
{
"url": "https://cdn.shuffll.com/.../my-clip.mp4",
"isMaster": true,
"stagePositionNumber": 1
}
]
}
]
}url— a public URL or anuploadPathfrom a workspace assetisMaster— iftrue, this clip drives the scene durationstagePositionNumber— the layer/position on the scene canvas (1-indexed)
The same fallback concept applies to image slots in scene templates. Control the order using imagesSourcePipeline at the project level:
"imagesSourcePipeline": ["workspace_assets", "stock_footage", "generate_from_text"]Available values: stock_footage, workspace_assets, generate_from_text.
Upload media to your workspace using POST /auth/workspace/{workspaceId}/assets, then reference the returned uploadPath directly in videosToAdd[].url. See Assets in the API reference.
You can also pass customTemplate.assets with a list of external URLs — Shuffll will download, analyse, and intelligently map them to the most appropriate scenes. See Using Templates for details.