Add from: Widgets → Add widget → Portfolio
What goes in the widget
The portfolio schema has two arrays:
You need at least one image or one clip per portfolio widget — the schema rejects empty saves.
For embedded clips we use the platform’s official iframe — no scraping, no proxying. Self-hosted video uploads are not part of the portfolio widget.
Per-item fields
Image entry
There’s no per-image “description”, “tags”, or alt-text override beyond the caption.
Clip entry
Clips don’t have captions on the schema — the title shown in the embed is whatever the destination platform returns.
Widget options
There is no masonry / variable-height layout option — the grid is uniform tiles.
Tips
- First image is the visual anchor — pick something that grabs attention.
- Mix-and-match: a portfolio widget with 8 images and 1 hero clip reads cleanly.
- For lots of video, use the Embed widget — it has dedicated grid columns + button/embed display modes.
Common questions
Can I upload videos directly?
Can I upload videos directly?
Not via the portfolio widget — the
clips array only accepts YouTube / Twitch / Streamable / Kick URLs. For an <video>-style background, see Page background.Twitch clip says 'not allowed'
Twitch clip says 'not allowed'
The Twitch player needs the page hostname to allowlist. We send the right
parent= parameter — if you see this on a custom domain, drop us a message.Can I have one widget for images and another for clips?
Can I have one widget for images and another for clips?
Yes. Add two portfolio widgets — one with
images only, one with clips only.The grid looks weird on mobile
The grid looks weird on mobile
Drop the column count. 2 columns is usually right for phones; 4 is comfortable on desktop.
My image rejected with 'Image must be http(s) or a /uploads/ path'
My image rejected with 'Image must be http(s) or a /uploads/ path'
Drag-and-drop the file from disk so it goes through the widget uploader, or paste a fully-qualified
https:// URL. Local file paths (file://, C:\...) are not accepted.