Video Node
Upload, play, sync, and reuse video files with custom playback controls.
Video nodes are static media nodes for uploaded files and video outputs that already exist on the canvas. They keep the playable source, sync-backed media reference, file metadata, and video-specific playback state with the node so downstream steps can reuse the same asset.
What it stores
- The local preview fields, including
srcandblobKey, while the browser can still display the staged upload. - The durable R2-backed
mediaRefafter media sync finishes. - File metadata such as
fileName,mimeType,duration,naturalWidth,naturalHeight, andaspectRatio. - Optional presentation metadata for poster-first editorial video surfaces.
Add or replace a video
Choose the Video node
Add a Video node from the canvas toolbar, or drag compatible video files into the canvas. Drag-and-drop creates Video nodes with the standard video node dimensions before metadata is loaded.
Drop or select a file
The file picker is limited to supported video MIME types. The same validator also rejects empty, unsupported, or oversized files when the file is dropped or pasted into the canvas.
Let metadata load
Builder Studio stages a local preview first, then reads video metadata from the active source. The loaded duration, natural dimensions, and aspect ratio are written back to the node.
Use the synced asset
After media sync completes, the node prefers the R2 display URL. Downstream nodes receive the same video through the
video-outport.
Supported files
| Format | MIME type | Notes |
|---|---|---|
| MP4 | video/mp4 | Accepted for upload and the default fallback video MIME type. |
| WebM | video/webm | Accepted for upload and browser playback when supported. |
| MOV | video/quicktime | Accepted for upload. video/mov and video/x-mov normalize to this MIME type. |
| AVI | video/x-msvideo | Accepted for upload. video/avi and video/msvideo normalize to this MIME type. |
Playback controls
A loaded Video node renders an inline video element with metadata preloading and custom controls. The controls appear while the node is selected, while the progress scrubber is active, or while a seek is syncing.
- Play and pause use node-safe event handling so clicking controls does not drag or pan the canvas.
- The progress control is a keyboard-accessible slider labeled
Video progress. - The time display uses tenths for clips under 10 seconds and standard time formatting for longer clips.
- Mute and volume controls share the global video volume state, so a volume change applies consistently across Video nodes.
- If the media element fails to load, the node shows Retry. Editable sessions also show Replace video.
Metadata and sizing
Loaded metadata is only accepted from the active playback source. That protects the node from stale browser events when a local preview is replaced by a synced URL or another file.
- The node updates
aspectRatiowhen the loaded video ratio differs by more than0.001. - The node stores
naturalWidthandnaturalHeightfromvideoWidthandvideoHeight. - Local uploads auto-fit the node to the natural video dimensions when the aspect ratio changes. Synced remote media references do not resize an existing node from a later metadata event.
- The node updates
durationwhen the loaded duration is finite, positive, and meaningfully different from the stored value.
{ "type": "video", "data": { "mediaRef": "r2://media/workspace/demo-video", "mimeType": "video/mp4", "fileName": "demo-video.mp4", "duration": 12.4, "naturalWidth": 1920, "naturalHeight": 1080, "aspectRatio": 1.7777777778 }}Sync and retry behavior
Before a source is available, pending media renders the shared media loading state. During sync, the node frame can show the current media state, a sync message, and a retry action when the upload pipeline can be retried.
- The display source prefers the R2 display URL, then the stored media URL, then the local preview source.
- Replacing a video clears the previous media fields before writing the next local preview and metadata.
- The playback source key includes the local blob key, remote URL, fallback source, and media creation timestamp so load events can be matched to the current source.
Agent and API notes
Agents should treat Video nodes as media references, not generation requests. The passthrough executor emits the stored video URL on video-out with the stored MIME type when available. Keep mediaRef, src, and video metadata together when replacing the underlying asset so downstream reference-to-video workflows receive the expected media.
Was this page helpful?