{"id":19312519,"url":"https://github.com/muxinc/strapi-plugin-mux-video-uploader","last_synced_at":"2025-07-23T03:05:52.660Z","repository":{"id":37015264,"uuid":"298226112","full_name":"muxinc/strapi-plugin-mux-video-uploader","owner":"muxinc","description":"A Strapi plugin for managing uploads to Mux.","archived":false,"fork":false,"pushed_at":"2024-11-18T20:30:58.000Z","size":1597,"stargazers_count":25,"open_issues_count":8,"forks_count":22,"subscribers_count":15,"default_branch":"master","last_synced_at":"2025-06-11T21:56:02.445Z","etag":null,"topics":["mux","strapi","strapi-cms","strapi-plugin","video","video-processing","video-streaming"],"latest_commit_sha":null,"homepage":"https://mux.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/muxinc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-09-24T09:07:50.000Z","updated_at":"2025-05-30T12:15:32.000Z","dependencies_parsed_at":"2024-08-22T22:29:38.602Z","dependency_job_id":"c50d5831-02b5-4cd5-aa43-33e991def256","html_url":"https://github.com/muxinc/strapi-plugin-mux-video-uploader","commit_stats":null,"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"purl":"pkg:github/muxinc/strapi-plugin-mux-video-uploader","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muxinc%2Fstrapi-plugin-mux-video-uploader","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muxinc%2Fstrapi-plugin-mux-video-uploader/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muxinc%2Fstrapi-plugin-mux-video-uploader/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muxinc%2Fstrapi-plugin-mux-video-uploader/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/muxinc","download_url":"https://codeload.github.com/muxinc/strapi-plugin-mux-video-uploader/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muxinc%2Fstrapi-plugin-mux-video-uploader/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266609054,"owners_count":23955567,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-23T02:00:09.312Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["mux","strapi","strapi-cms","strapi-plugin","video","video-processing","video-streaming"],"created_at":"2024-11-10T00:35:08.664Z","updated_at":"2025-07-23T03:05:52.642Z","avatar_url":"https://github.com/muxinc.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Mux Video Uploader\n\nA [Strapi](https://strapi.io/) plugin for managing uploads to [Mux](https://mux.com).\n\nThis plugin provides the ability to upload content via a url or a direct file upload to [Mux](https://mux.com).\n\n## 🤩 Features\n\n- Upload videos using a url or a file to [Mux](https://mux.com) from inside of [Strapi](https://strapi.io/)\n- Manage assets with the plugin's asset grid and pagination capabilities\n- Search for assets using title or [Mux](https://mux.com) Asset ID values\n- Preview content using a player (powered by the [mux-player-react](https://github.com/muxinc/elements/tree/main/packages/mux-player-react) project)\n- Delete assets which result in the [Mux](https://mux.com) Asset also being deleted\n- Support uploading audio files\n- Attachment of either sidecar subtitle files (supports `.vtt` or `.srt` files) or Mux's auto-generated captions\n- Enable Signed playback for protected video delivery\n- Support of Mux's video quality and maximum stream resolution\n- Enable MP4 downloads on assets during upload\n- [Mux](https://mux.com) updates [Strapi](https://strapi.io/) automatically when the asset is ready using Webhooks\n\n## 🧑‍💻 Install\n\nFor installing with **Strapi v5**, install the latest—\n\n```bash\nnpm i strapi-plugin-mux-video-uploader@latest\n\nyarn add strapi-plugin-mux-video-uploader@latest\n```\n\nFor installing with **Strapi v4**, install v2.0.0—\n\n```bash\nnpm i strapi-plugin-mux-video-uploader@2.8.4\n\nyarn add strapi-plugin-mux-video-uploader@2.8.4\n```\n\n## 🖐 Requirements\n\n- A [Mux](https://mux.com) account\n- You will need both the **Access Token** and **Secret Key** scoped with \"Full Access\" permissions which can be created in the [Mux Dashboard](https://dashboard.mux.com/settings/access-tokens)\n- (Optional) If you plan to support [Signed video playback](https://docs.mux.com/guides/secure-video-playback), you will need to obtain a Signing key set\n- The **Webhook Signing Secret** which can be created in the [Mux Dashboard](https://dashboard.mux.com/settings/webhooks) (See the [Webhooks](#Webhooks) section for more info)\n- Tested with [Strapi](https://strapi.io/) v5.0.6 Community Edition\n\n## ⚙️ Configuration\n\nIn order for this plugin to communicate with [Mux](https://mux.com), some configuration values need to be set for the plugin before it can be used.\n\n**Starting in v3.0.0 of this plugin, we have switch to Strapi's File Based Config**.  To increase the portability of clustered deployments, we have switched to this paradigm to manage app configs.  This means that setting the configurations using the Settings view in the [Strapi](https://strapi.io/) Admin UI will no longer be available.\n\nIn migrating to v3.0.0, you will need to transition to the [Strapi](https://strapi.io/) File Based Config and copy the values that you had used to initially set up your plugin—\n\n### Typescript - Plugin Config\n\n```ts\n// Path: ./config/plugins.ts\nexport default ({env}) =\u003e ({\n  // ...\n  \"mux-video-uploader\": {\n    enabled: true,\n    config: {\n      accessTokenId: env('ACCESS_TOKEN_ID'),\n      secretKey: env('ACCESS_TOKEN_SECRET'),\n      webhookSigningSecret: env('WEBHOOK_SIGNING_SECRET'),\n      playbackSigningId: env('SIGNING_KEY_ID'),\n      playbackSigningSecret: env('SIGNING_KEY_PRIVATE_KEY'),\n    }\n  }\n  // ...\n});\n```\n\n### Javascript - Plugin Config\n\n```js\n// Path: ./config/plugins.js\nmodule.exports = ({env}) =\u003e ({\n  // ...\n  \"mux-video-uploader\": {\n    enabled: true,\n    config: {\n      accessTokenId: env('ACCESS_TOKEN_ID'),\n      secretKey: env('ACCESS_TOKEN_SECRET'),\n      webhookSigningSecret: env('WEBHOOK_SIGNING_SECRET'),\n      playbackSigningId: env('SIGNING_KEY_ID'),\n      playbackSigningSecret: env('SIGNING_KEY_PRIVATE_KEY'),\n    }\n  }\n  // ...\n});\n```\n\n## 🪝 Webhooks\n\n**Please note**: We've currently disabled webhook signature verification as there is not a way to access the raw request body from the Koa.js middleware (which [Strapi](https://strapi.io/) is using for parsing requests). This is needed to ensure that we are verifying the signature and that the request JSON payload has properties in the same order that was used for generating the signature.\n\nWhen setting up your Webhook configuration in the [Mux Dashboard](https://dashboard.mux.com/settings/webhooks), the \"URL to notify\" field should be in the format of—\n\n```\n{STRAPI_BASE_URL}/mux-video-uploader/webhook-handler\n```\n\nWhere `{STRAPI_BASE_URL}` is the publicly accessible hostname of your [Strapi](https://strapi.io/) instance.\n\n## 🧑‍⚖️ Permissions\n\nCurrently, anyone with \"Super Admin\" access to your [Strapi](https://strapi.io/) instance will be able to utilize the plugin for uploading and managing content within the [Strapi](https://strapi.io/) CE version. More sophisticated permissions can be defined for [Strapi](https://strapi.io/) Enterprise users using [RBAC](https://docs.strapi.io/developer-docs/latest/setup-deployment-guides/configurations/optional/rbac.html#declaring-new-conditions).\n\n**Please note**: End Users can only have read operation permissions (`find`, `findOne` and `count`). Write operations are not supported due to potential security reasons.\n\n## 🤝 Contributing\n\nContributions, issues and feature requests are welcome!\n\nDevelopers for this plugin should take a look at the `README_INTERNAL.md` document for details on setting up dev environments.\n\nIf you encounter an error or have questions, please feel free to file inquiries on the [Issues](https://github.com/muxinc/strapi-plugin-mux-video-uploader/issues) page for `strapi-plugin-mux-video-uploader`.\n\n## 🗣 FAQ\n\n### My Strapi instance is not publicly available, can I still use Webhooks?\n\nYes! However, in order to make it work, you'll need a \"Webhook Relay\" that runs from within your network. You can use a Webhook Relay service like Smee (https://smee.io/) or ngrok (https://ngrok.com/) to forward Webhook events to an instance of [Strapi](https://strapi.io/) behind a firewall.\n\n### I've installed the plugin, but the Strapi Admin UI doesn't show it\n\nThis happens when you need to rebuild your [Strapi](https://strapi.io/) instance. To do this, you need delete the `.cache`, `.strapi`, and `build` folders (while [Strapi](https://strapi.io/) is off) and restart to rebuild the instance.\n\nHere is an example of how to do this on a unix-based operating system from within the [Strapi](https://strapi.io/) application root—\n\n```bash\nrm -rf ./.cache ./build ./.strapi\n```\n\n### Custom subtitles and captions aren't working\n\nWhen uploading a video with custom text tracks, Mux asks for an URL pointing to these files. This feature currently works only on deployed [Strapi](https://strapi.io/) installations.\n\nWhen developing locally with [Strapi](https://strapi.io/), we don't have a globally reachable URL. Unlike webhooks with which we can use a local webhook proxy (e.g. Smee.io or ngrok), the plugin currently offers no way to configure a base URL to receive Mux's caption download requests. You'll still be able to upload videos, but the tracks won't be properly parsed by Mux.\n\nAnother approach would be to use tunnel service such as Cloudflare ZeroTrust or Tailscale to route requests against a publicly accessible hostname to your local instance.  If you go this route, you will need to ensure that you configure [Strapi](https://strapi.io/) to use the hostname when generating the Mux's caption download requests.  Here is an example of how to do that—\n\n### Typescript - Server Config\n\n```ts\n// Path: ./config/server.ts\nexport default ({ env }) =\u003e ({\n  // ... Existing properties set by Strapi\n  url: env('PUBLIC_URL', 'https://your_host.domain.tld'),\n});\n```\n\n### Javascript - Server Config\n\n```js\n// Path: ./config/server.js\nmodule.exports = ({ env }) =\u003e ({\n  // ... Existing properties set by Strapi\n  url: env('PUBLIC_URL', 'https://your_host.domain.tld'),\n});\n```\n\n## ❤️ Thanks\n\n[Strapi.io](https://strapi.io/)\n\n## 📚 References\n\n- [Mux - Webhooks](https://docs.mux.com/docs/webhooks)\n- [Mux - Authentication](https://docs.mux.com/docs/authentication)\n- [Strapi.io](https://strapi.io/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmuxinc%2Fstrapi-plugin-mux-video-uploader","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmuxinc%2Fstrapi-plugin-mux-video-uploader","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmuxinc%2Fstrapi-plugin-mux-video-uploader/lists"}