{"id":395251,"date":"2026-10-30T01:01:32","date_gmt":"2026-10-30T01:01:32","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/video-library-for-mux\/"},"modified":"2026-10-30T01:01:19","modified_gmt":"2026-10-30T01:01:19","slug":"videoteca-for-mux","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/videoteca-for-mux\/","author":21181635,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.4","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"Videoteca \u2013 Video Library for Mux","header_author":"Eurico S\u00e1 Fernandes","header_description":"Upload videos to Mux from the WordPress admin, keep their titles, search your library and embed them with a block, shortcode or ACF field.","assets_banners_color":"3e4449","last_updated":"2026-10-30 01:01:19","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/eeeurico\/videoteca-for-mux","header_author_uri":"https:\/\/github.com\/eeeurico","rating":0,"author_block_rating":0,"active_installs":0,"downloads":59,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"eeeurico","date":"2026-10-30 01:01:19","revision":3774251}},"upgrade_notice":{"1.0.0":"<p>First release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3774251,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3774251,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3774251,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3774251,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"vlfm\/video":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"vlfm\/video","version":"1.0.0","title":"Mux Video","category":"media","icon":"video-alt3","description":"Upload a video to Mux, or choose one from your Mux video library, and play it with Mux Player.","keywords":["video","mux","stream","player","upload"],"textdomain":"videoteca-for-mux","attributes":{"videoId":{"type":"number"},"background":{"type":"boolean","default":false},"autoplay":{"type":"boolean","default":false},"muted":{"type":"boolean","default":false},"loop":{"type":"boolean","default":false},"controls":{"type":"boolean","default":true},"showTitle":{"type":"boolean","default":false},"hideCaptions":{"type":"boolean","default":false},"playbackRates":{"type":"string","default":""},"preload":{"type":"string","enum":["","none","metadata","auto"],"default":""},"maxResolution":{"type":"string","enum":["","720p","1080p","1440p","2160p"],"default":""},"posterId":{"type":"number"},"startTime":{"type":"number"},"accentColor":{"type":"string"}},"supports":{"align":["wide","full"],"html":false,"spacing":{"margin":true}},"editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScript":"vlfm-player"}},"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3774251,"resolution":"1","location":"assets","locale":"","width":2560,"height":1626},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3774251,"resolution":"2","location":"assets","locale":"","width":2560,"height":1626},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3774251,"resolution":"3","location":"assets","locale":"","width":2560,"height":3130},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3774251,"resolution":"4","location":"assets","locale":"","width":2560,"height":1626},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3774251,"resolution":"5","location":"assets","locale":"","width":2560,"height":2940}},"screenshots":{"1":"The Mux Videos library, with search, filters and hover previews.","2":"Uploading several videos and renaming them while they upload.","3":"Video details: preview, title, thumbnail frame and IDs.","4":"The Mux Video block's video picker, searching by title.","5":"Mux Videos \u2192 Settings."}},"plugin_section":[],"plugin_tags":[289614,582,259,222,5637],"plugin_category":[50],"plugin_contributors":[286071],"plugin_business_model":[],"class_list":["post-395251","plugin","type-plugin","status-publish","hentry","plugin_tags-mux","plugin_tags-streaming","plugin_tags-upload","plugin_tags-video","plugin_tags-video-player","plugin_category-media","plugin_contributors-eeeurico","plugin_committers-eeeurico"],"banners":{"banner":"https:\/\/ps.w.org\/videoteca-for-mux\/assets\/banner-772x250.png?rev=3774251","banner_2x":"https:\/\/ps.w.org\/videoteca-for-mux\/assets\/banner-1544x500.png?rev=3774251","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/videoteca-for-mux\/assets\/icon-128x128.png?rev=3774251","icon_2x":"https:\/\/ps.w.org\/videoteca-for-mux\/assets\/icon-256x256.png?rev=3774251","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/videoteca-for-mux\/assets\/screenshot-1.png?rev=3774251","caption":"The Mux Videos library, with search, filters and hover previews."},{"src":"https:\/\/ps.w.org\/videoteca-for-mux\/assets\/screenshot-2.png?rev=3774251","caption":"Uploading several videos and renaming them while they upload."},{"src":"https:\/\/ps.w.org\/videoteca-for-mux\/assets\/screenshot-3.png?rev=3774251","caption":"Video details: preview, title, thumbnail frame and IDs."},{"src":"https:\/\/ps.w.org\/videoteca-for-mux\/assets\/screenshot-4.png?rev=3774251","caption":"The Mux Video block's video picker, searching by title."},{"src":"https:\/\/ps.w.org\/videoteca-for-mux\/assets\/screenshot-5.png?rev=3774251","caption":"Mux Videos \u2192 Settings."}],"raw_content":"<!--section=description-->\n<p>Videoteca adds a video library to WordPress for videos hosted on <a href=\"https:\/\/www.mux.com\">Mux<\/a>. You upload, find, rename and embed videos from the WordPress admin, and Mux handles encoding and streaming. It is an independent plugin, not affiliated with or endorsed by Mux, Inc.<\/p>\n\n<p><strong>Titles stay the way you wrote them.<\/strong> Each video is stored in WordPress with the title you give it, taken from the file name unless you change it, even while it is still uploading. The same title goes to Mux, so your Mux dashboard shows it too. Rename a video in WordPress and it is renamed in Mux.<\/p>\n\n<p><strong>Search by title.<\/strong> Find any video by words from its title, description or original file name, or by its Mux asset or playback ID. Search works in the library screen and in the block's video picker.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li><strong>Mux Videos<\/strong> in the admin menu: a library screen with thumbnails, durations and a short animated preview on hover. Filter by status, sort by date or title, and search.<\/li>\n<li><strong>Uploads straight to Mux<\/strong>: drag files onto the library or into the block. Files go from the browser to Mux in chunks, so your server's upload size limit does not apply, and an upload pauses and carries on if the connection drops.<\/li>\n<li><strong>Import from a URL<\/strong>: give Mux the address of a video file and it fetches it.<\/li>\n<li><strong>Sync from Mux<\/strong>: add the videos already in your Mux account to the library, using their Mux titles where they have one.<\/li>\n<li><strong>Video details<\/strong>: preview a video, rename it, add a description, choose the thumbnail frame, copy the IDs or shortcode, download static renditions, and delete it from the library or from Mux as well.<\/li>\n<li><strong>Mux Video block<\/strong>: upload, choose or import a video without leaving the editor. Renaming the video in the block renames it everywhere.<\/li>\n<li><strong>Player options<\/strong>: autoplay, mute, loop, start time, a background video mode, hidden controls, captions off by default, the speed menu, preload, a maximum resolution, a poster image from the Media Library, showing the title and the player's accent color.<\/li>\n<li><strong>Shortcode<\/strong> for classic content and page builders: <code>[vlfm_video id=\"123\"]<\/code>, with the same options.<\/li>\n<li><strong>Advanced Custom Fields<\/strong>: a Mux Video field type with the same picker as the block, for themes that place videos themselves.<\/li>\n<li><strong>WPGraphQL<\/strong>: a <code>MuxVideo<\/code> type for headless sites, which ACF Mux Video fields resolve to, and library queries for editors.<\/li>\n<li><strong>Signed playback<\/strong> (optional): the site issues short-lived tokens, so your videos only play where you embed them. The plugin can create the signing key for you.<\/li>\n<li><strong>Auto-generated captions<\/strong> in more than 20 languages, chosen per site.<\/li>\n<li><strong>Static renditions<\/strong> (optional): an MP4 or audio-only file next to each stream.<\/li>\n<li><strong>Webhooks<\/strong> (optional): Mux tells your site when a video is ready, even after you close the page.<\/li>\n<\/ul>\n\n<p>Videos play in <a href=\"https:\/\/www.mux.com\/player\">Mux Player<\/a>, which is bundled with the plugin, so nothing loads from a CDN. Casting to Chromecast is turned off, because it needs Google's Cast SDK from Google's servers. AirPlay still works in Safari.<\/p>\n\n<h4>Source code and libraries<\/h4>\n\n<p>The plugin includes its source code. The JavaScript and CSS in <code>build\/<\/code> are compiled from <code>src\/<\/code> with <a href=\"https:\/\/www.npmjs.com\/package\/@wordpress\/scripts\">@wordpress\/scripts<\/a>: run <code>npm install<\/code>, then <code>npm run build<\/code>.<\/p>\n\n<p>Bundled libraries, both under the MIT License:<\/p>\n\n<ul>\n<li><a href=\"https:\/\/github.com\/muxinc\/elements\">Mux Player<\/a> (<code>@mux\/mux-player<\/code>)<\/li>\n<li><p><a href=\"https:\/\/github.com\/muxinc\/upchunk\">UpChunk<\/a> (<code>@mux\/upchunk<\/code>)<\/p>\n\n<p>tools\/no-cast-sdk-loader.js removes the code in Mux Player that loads Google's Cast SDK, during the build.<\/p><\/li>\n<\/ul>\n\n<p>You need a Mux account. Mux charges for encoding, storage and delivery; see <a href=\"https:\/\/www.mux.com\/pricing\">Mux pricing<\/a>.<\/p>\n\n<h4>Shortcode<\/h4>\n\n<pre><code>[vlfm_video id=\"123\"] plays library video 123. Switches take `1`, `true`, `on` or `yes`.\n<\/code><\/pre>\n\n<ul>\n<li><code>background=\"1\"<\/code>: plays muted and on a loop with no controls, like a moving image.<\/li>\n<li><code>autoplay=\"1\"<\/code>: starts playing, muted, when the page loads.<\/li>\n<li><code>muted=\"1\"<\/code>, <code>loop=\"1\"<\/code><\/li>\n<li><code>controls=\"0\"<\/code>: hides the controls. A click on the video plays and pauses it.<\/li>\n<li><code>title=\"1\"<\/code>: shows the title in the player.<\/li>\n<li><code>captions=\"off\"<\/code>: starts with captions off. Visitors can turn them on.<\/li>\n<li><code>speeds=\"0.5 1 1.5 2\"<\/code>: the speeds in the speed menu, or <code>speeds=\"off\"<\/code> to hide it.<\/li>\n<li><code>preload=\"none\"<\/code>: <code>none<\/code>, <code>metadata<\/code> or <code>auto<\/code>.<\/li>\n<li><code>max_resolution=\"720p\"<\/code>: <code>720p<\/code>, <code>1080p<\/code>, <code>1440p<\/code> or <code>2160p<\/code>.<\/li>\n<li><code>poster=\"456\"<\/code>: a poster image, as a Media Library ID or an image URL.<\/li>\n<li><code>start=\"10\"<\/code>: starts 10 seconds in.<\/li>\n<li><code>accent_color=\"#fa50b5\"<\/code>: the color of the controls.<\/li>\n<\/ul>\n\n<p>You can find a video's ID in its details in Mux Videos \u2192 Library, where you can also copy its shortcode.<\/p>\n\n<h4>Advanced Custom Fields<\/h4>\n\n<p>With <a href=\"https:\/\/wordpress.org\/plugins\/advanced-custom-fields\/\">Advanced Custom Fields<\/a> active, field groups get a <strong>Mux Video<\/strong> field type, under Content. Editors choose a video from the library, upload one or import one from a URL, right in the field. The field saves the library video ID.<\/p>\n\n<p><strong>Return Format<\/strong> sets what <code>get_field()<\/code> returns:<\/p>\n\n<ul>\n<li><strong>Video Array<\/strong> (the default): the video ID, title, description, status, playback ID and policy, duration, aspect ratio, resolution, thumbnail and animated preview URLs, the HLS stream URL, captions, downloads and, for signed videos, the tokens Mux Player needs.<\/li>\n<li><strong>Video ID<\/strong>: the library video ID.<\/li>\n<li><strong>Player HTML<\/strong>: a Mux Player, ready to print with <code>the_field()<\/code>. Its script and styles load with it.<\/li>\n<\/ul>\n\n<p>For player options, set Return Format to Video ID and pass the ID to the shortcode:<\/p>\n\n<pre><code>echo do_shortcode( sprintf( '[vlfm_video id=\"%d\" background=\"1\"]', get_field( 'video' ) ) );\n<\/code><\/pre>\n\n<p>In ACF's REST API, the field's value is the video ID.<\/p>\n\n<h4>WPGraphQL<\/h4>\n\n<p>With <a href=\"https:\/\/wordpress.org\/plugins\/wp-graphql\/\">WPGraphQL<\/a> active, the schema has a <code>MuxVideo<\/code> type. Add <a href=\"https:\/\/wordpress.org\/plugins\/wpgraphql-acf\/\">WPGraphQL for ACF<\/a> and Mux Video fields resolve to <code>MuxVideo<\/code>, whatever their Return Format:<\/p>\n\n<pre><code>{\n  post(id: \"launch-day\", idType: SLUG) {\n    videoFields {\n      video {\n        title\n        playbackId\n        playbackPolicy\n        tokens { playback thumbnail storyboard }\n        thumbnailUrl\n        aspectRatio\n        duration\n      }\n    }\n  }\n}\n<\/code><\/pre>\n\n<p>Anyone who can see a post can see the videos in its fields, as on the page itself. <code>tokens<\/code> is null for public videos. For signed ones it has the same shape as the <code>tokens<\/code> prop of Mux Player for React, and it expires after the token lifetime in Mux Videos \u2192 Settings, so refetch or rebuild pages within that time. <code>streamUrl<\/code> is the HLS stream, for other players.<\/p>\n\n<p>To browse the library itself, <code>muxVideo(id: ID!, idType: MuxVideoIdTypeEnum)<\/code> gets one video by global ID, database ID, asset ID or playback ID, and <code>muxVideos(first: Int, after: String, where: {search, status, orderby, order})<\/code> lists them, newest first. <code>node(id:)<\/code> loads videos too. These are for logged-in users who can edit posts, for example with an application password, and return nothing to anyone else, so videos that are not on a page stay private.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to Mux, a video hosting service run by Mux, Inc., to store, process and stream your videos. Without a Mux account it cannot upload or play videos.<\/p>\n\n<ul>\n<li><strong>Mux Video API (api.mux.com)<\/strong>: called from your server when you connect your account, upload or import a video, open or refresh the library, rename or delete a video, sync your account, or create a signing key. It sends your Mux access token, the titles you give your videos, the address of any video you import from a URL, and each video's ID in WordPress. Titles and IDs are stored in Mux as asset metadata. Descriptions stay in WordPress.<\/li>\n<li><strong>Direct uploads<\/strong>: when you upload a video, your browser sends the file to an upload address that Mux provides for that file.<\/li>\n<li><strong>Mux image and stream delivery (image.mux.com, stream.mux.com)<\/strong>: visitors' browsers load thumbnails and video streams from Mux whenever a page with a video is viewed, and the library and editor do the same for you.<\/li>\n<li><strong>Mux Data<\/strong> (off by default): if you turn on Viewer analytics under Mux Videos \u2192 Settings, Mux Player sends playback quality data (such as start-up time, errors and buffering, along with the viewer's browser, device and approximate location) to Mux Data when someone plays a video. Mux Data does not set cookies unless you allow that separately. Previews in the WordPress admin are never sent.<\/li>\n<li><strong>Webhooks<\/strong>: if you set one up, Mux sends notices about your videos to <code>\/wp-json\/vlfm\/v1\/webhook<\/code> on your site. The site turns them away until you save the webhook's signing secret.<\/li>\n<\/ul>\n\n<p>Mux terms of service: https:\/\/www.mux.com\/terms\nMux privacy policy: https:\/\/www.mux.com\/privacy<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>In your Mux dashboard, go to Settings \u2192 Access Tokens and create a token with <strong>Mux Video: Read and Write<\/strong> permission. Add <strong>System: Read and Write<\/strong> if you want the plugin to create a signing key for signed playback.<\/li>\n<li>In WordPress, go to Mux Videos \u2192 Settings, paste the token ID and secret key, and save.<\/li>\n<li>Go to Mux Videos \u2192 Library to upload videos, or click <strong>Sync from Mux<\/strong> to add the videos already in your account.<\/li>\n<li>Optional: add the webhook URL shown in the settings to your Mux dashboard (Settings \u2192 Webhooks) and paste its signing secret into the settings.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"why%20does%20my%20video%20keep%20its%20title%3F\"><h3>Why does my video keep its title?<\/h3><\/dt>\n<dd><p>The library entry is created in WordPress, with your title, before the file starts uploading. WordPress stays the source of the title, and the plugin copies it to Mux's <code>meta.title<\/code> field whenever it changes.<\/p><\/dd>\n<dt id=\"what%20can%20i%20search%20by%3F\"><h3>What can I search by?<\/h3><\/dt>\n<dd><p>Any word from the title, the description or the original file name, plus the Mux asset ID or playback ID. Each word you type has to match somewhere, so \"launch interview\" finds \"Interview about the launch\".<\/p><\/dd>\n<dt id=\"do%20uploads%20count%20against%20my%20wordpress%20upload%20limit%3F\"><h3>Do uploads count against my WordPress upload limit?<\/h3><\/dt>\n<dd><p>No. Files go from your browser straight to Mux and never pass through your server.<\/p><\/dd>\n<dt id=\"do%20i%20need%20webhooks%3F\"><h3>Do I need webhooks?<\/h3><\/dt>\n<dd><p>No. While the library or editor is open, the plugin checks Mux until each new video is ready. A webhook lets your site hear about videos that finish after you close the page, and about videos deleted in the Mux dashboard. Webhooks need the signing secret from Mux saved in the settings, and they cannot reach a local or password-protected site.<\/p><\/dd>\n<dt id=\"who%20can%20do%20what%3F\"><h3>Who can do what?<\/h3><\/dt>\n<dd><p>Anyone who can upload media can upload and import videos. Authors can edit and delete their own videos, and editors can edit and delete everyone's, as with posts. Contributors can insert existing videos. Only administrators can change settings or sync the whole Mux account.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20i%20delete%20a%20video%3F\"><h3>What happens when I delete a video?<\/h3><\/dt>\n<dd><p>You choose. You can remove it from the WordPress library only, which leaves it in Mux, or delete it from Mux as well, which cannot be undone.<\/p><\/dd>\n<dt id=\"can%20a%20video%20play%20without%20controls%3F\"><h3>Can a video play without controls?<\/h3><\/dt>\n<dd><p>Yes. Turn off <strong>Show controls<\/strong> in the block, or use <code>controls=\"0\"<\/code> in the shortcode. Visitors click the video to play and pause it. Add autoplay to start it straight away, or turn on <strong>Background video<\/strong> for a muted loop with nothing on top, like a moving image.<\/p>\n\n<p>Videos that autoplay without controls stay on their poster for visitors who have asked their device for reduced motion. They can still click to play.<\/p><\/dd>\n<dt id=\"can%20i%20use%20the%20videos%20on%20a%20headless%20site%3F\"><h3>Can I use the videos on a headless site?<\/h3><\/dt>\n<dd><p>Yes. Add the Mux Video field to your content with Advanced Custom Fields, and query it through WPGraphQL with WPGraphQL for ACF. See the WPGraphQL section for an example.<\/p><\/dd>\n<dt id=\"does%20signed%20playback%20work%20with%20page%20caching%3F\"><h3>Does signed playback work with page caching?<\/h3><\/dt>\n<dd><p>Yes, as long as the token lifetime in Mux Videos \u2192 Settings is longer than your page cache lifetime. Tokens expire on the hour, so cached pages share them.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20videos%20if%20i%20delete%20the%20plugin%3F\"><h3>What happens to my videos if I delete the plugin?<\/h3><\/dt>\n<dd><p>Your videos stay in Mux. The library in WordPress stays too, unless you tick \"Remove the video library and these settings when the plugin is deleted\" in the settings first.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<\/ul>","raw_excerpt":"Upload videos to Mux from WordPress, keep the titles you give them, search your library and embed videos with a block, shortcode or ACF field.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/395251","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=395251"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/eeeurico"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=395251"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=395251"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=395251"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=395251"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=395251"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=395251"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}