Polymedia
Version 1.2.1
May 29, 2026
Fixed
craft upcould fail when a core or third-party migration re-saved sections before this plugin'sm260507_000000_field_settingsmigration had run. The element-validation hook queried the not-yet-createdpolymedia_field_settingstable and threwThe table does not exist.AssetFieldSettings::getAllowedProviders()now returns no restrictions when the table is absent, so migrations complete cleanly.
Version 1.2.0
May 29, 2026
Added
- Track pickers on the asset edit screen for video items — Captions, Subtitles, and Descriptions. Each is a multi-select
.vttpicker that can also upload into the item's folder. Tracks are site-scoped, withsrclangandlabelderived from the current site on save. Previously tracks could only be attached programmatically viaRelatedAssets::attach(). - Poster image picker on the Add media URL create screen, so a poster can be set when first creating an item — previously only available on the asset edit screen. The picker is image-only and supports inline upload, with uploads landing in the item's own folder.
- Add media URL button on the standalone Assets index toolbar, beside Upload files. Previously only available in field selection modals.
- Each new
.pmediais now created inside its own dedicated folder (named after the title slug plus a short uid), so its poster and track files sit alongside it instead of cluttering the parent folder. Posters and tracks uploaded inline are co-located into that folder automatically. polymedia/migrate/foldersconsole command to move existing.pmediaitems (and their co-located poster/track files) into per-item folders. Supports--dry-run; safe to run repeatedly — items already in their own folder are skipped.
Changed
- Removed the target-volume dropdown from the Add media URL screen. New
.pmediamanifests now land in the volume/folder the user is currently browsing (or the field's upload location), matching how Craft handles normal asset uploads. Falls back to the configured default volume, then the first writable volume. - Hard-deleting a
.pmedianow also removes its dedicated folder and the poster/track files inside it. A.pmediathat shares a folder with other items leaves the folder untouched.
Version 1.1.0
May 7, 2026
Added
- "Allowed Providers" setting on plain
craft\fields\Assetsfields when thepolymediakind is enabled. Mirrors the same filter onPolymediaField, so any Assets field can restrict media URL selections to specific providers. Toggles live as the kind is checked/unchecked. polymedia_field_settingstable for per-field plugin settings keyed by field UID.AssetFieldSettings,ProviderFilterservices.PolymediaAssetFieldBehaviorattached to native Assets fields.- Plugin icon (
src/icon.svg).
Changed
- Provider filter validation extracted to a shared service.
PolymediaFieldand plain Assets fields now run identical validation logic.
Removed
- Unused per-placement poster override code (
FieldOverridesservice,FieldRelationRecord,polymedia_field_relationstable). The schema, service, andallowPosterOverrideconfig key were never reachable from Twig or the CP UI.
Version 1.0.2
May 6, 2026
Added
PolymediaAssetBehaviorattached to allAssetelements, exposinggetPlayer(),getElement(),getData(),getPoster(),getTracks(),getTranscript(), andgetIsPolymedia()directly on assets in Twig.
Version 1.0.1
May 6, 2026
Fixed
- Restored "Add Media URL" button in asset selection modals and slideouts.
Version 1.0.0
May 4, 2026
Added
- Initial release.
- URL detection for 16 media providers (HLS, DASH, Mux, YouTube, Vimeo, Spotify, TikTok, Wistia, JW Player, Twitch, Cloudflare, Shaka, PeerTube, Video.js, MP4, Audio).
.pmediaJSON manifest files stored as Craft assets.MediaItemRecorddatabase mirror for fast index queries.- Deterministic thumbnail derivation (YouTube, Vimeo, Mux, Cloudflare, Wistia).
- Custom
polymediafile kind with asset index table attributes (Type, Provider, Duration). - CP "Add media URL" modal with signed-URL warning.
- Asset edit sidebar panel with playback defaults.
- Related assets system (poster, captions, subtitles, descriptions, transcript).
- VTT validation with BOM stripping.
PolymediaFieldfield type (extends Assets) with provider filtering and per-placement poster overrides.Rendererservice withplayer(),element(),data(),is(),scripts().craft.polymedia.*Twig variable API.- Media Chrome
<media-controller>rendering with correct provider element tags. - Script loader modes: CDN, self-host, none.
- Asset indexer reconciler for orphaned
.pmediafiles. - 102 unit tests, 268 assertions.