Polymedia
Polymedia turns any media URL into a native Craft asset. Paste a YouTube link, Spotify track, HLS stream, or local video file — Polymedia creates a lightweight .pmedia manifest in your existing volume. The result is a real Asset element: searchable, relatable, permission-gated, and eager-loadable like any other asset in Craft.
16 providers supported out of the box — YouTube, Vimeo, Mux, Spotify, HLS, DASH, TikTok, Wistia, JW Player, Twitch, Cloudflare Stream, Shaka, PeerTube, Video.js, plus native MP4/WebM and audio formats. Most are auto-detected from the URL. No configuration needed.
Front-end rendering is optional and customisable. When you do want player output, Polymedia renders standards-based <media-controller> markup powered by Media Chrome. No iframes, no embed codes, no JavaScript framework lock-in. Render with one Twig call — either through the craft.polymedia.* helpers or directly on the asset itself with asset.getPlayer(), asset.getPoster(), or asset.getData(). The children option lets you compose your own control bar.
The field type extends Assets, so you get everything Craft's relation system offers — min/max limits, element conditions, eager loading — plus provider filtering.
Manage media like any other asset. Add a URL straight from the Assets index or any field, set a poster and upload caption/subtitle/description tracks right on the asset edit screen, and let each item keep its poster and track files together in its own folder — no more cluttered volumes.
Key features:
- Add media URLs from the Assets index or any field, with auto-detection
- Image-only poster picker and
.vttcaption/subtitle/description pickers, each with inline upload - Per-item folders keep every manifest beside its poster and tracks, with a migration command for existing items
- Deterministic thumbnail derivation for YouTube, Vimeo, Mux, Cloudflare and Wistia
- Site-scoped tracks with
srclangandlabelderived from the current site - VTT validation with automatic BOM stripping
- Script loader with CDN, self-host, or bring-your-own-bundler modes
- Signed URL warnings to prevent token leakage in public volumes
- Asset index reconciler for orphaned manifests
- Twig API in two styles —
craft.polymedia.player(asset)helpers, or asset methods likeasset.getPlayer(),asset.getPoster(),asset.getTracks(),asset.isPolymedia
To install this plugin, copy the command above to your terminal.