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.

Headless? Everything is on GraphQL too. Assets expose a polymedia field on the Asset interface — provider, playback IDs, element tag, duration, dimensions, poster URL, caption/subtitle tracks, and transcript — through the asset queries your front end already runs. Gated per schema, off by default.

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. The Add media menu sits beside Upload files on the Assets index and in field selection modals. Choose From URL to paste a link, 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.

Why go Pro? Your Mux library, fully inside Craft.

Lite is free and complete for URL-based media — nothing is crippled, and pasting a Mux stream URL never requires Pro. Pro is for teams that host their own video on Mux and want editors to never leave the control panel: no second dashboard, no copying playback IDs, no manual poster grabs.

Upgrading unlocks the full Mux workflow:

  • Browse your Mux library in the CP. The same Add media menu gains a live grid of your Mux assets, with an "In Craft" badge on everything already imported. One click imports an asset — and re-importing reuses the existing .pmedia, so you never get duplicates.
  • Upload to Mux from Craft. Editors pick a video file in the CP and it uploads straight from the browser to Mux — chunked, with a progress bar, never touching your server. Polymedia polls until Mux finishes processing and hands back a ready-to-use asset.
  • Automatic first-frame posters. Imports and uploads fetch a poster from Mux automatically, retrying in the queue while the video is still transcoding. Editor-chosen posters always win.
  • Lifecycle control. Optionally delete the Mux asset when its Craft asset is hard-deleted, so your Mux library doesn't accumulate orphans. Off by default, and soft deletes never touch Mux.
  • Status at a glance. A Mux badge and asset ID on the asset edit screen show exactly what each item points at.

Mux credentials are set in plugin settings (env-overridable). Mux service fees are separate.

Key features:

  • Add media URLs from the Assets index or any field, with auto-detection
  • Image-only poster picker and .vtt caption/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
  • Automatic poster fetching for URL-created items, plus deterministic thumbnail derivation for YouTube, Vimeo, Mux, Cloudflare and Wistia
  • Control panel thumbnails for .pmedia files use the item's poster
  • Site-scoped tracks with srclang and label derived 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 like asset.getPlayer(), asset.getPoster(), asset.getTracks(), asset.isPolymedia
  • GraphQL polymedia field on the Asset interface for headless builds — batched resolution, gated per schema

Lite

Pro

Plus $19/year after one year.

Installation Instructions

To install this plugin, copy the command above to your terminal.

2 Reviews All reviews
5/ 5
Rating: 5 out of 5 stars
Active Installs
65
Version
v2.1.3
License
MIT
Compatibility
Craft 5
Supports GraphQL
Last release
July 17, 2026
Categories
Activity (30 days)
0
Closed Issues
0
Open Issues
2
Merged PRs
0
Open PRs