New:Try our MCP
Mux helps teams ship high-performance and cost-effective video in minutes, not months. Build better video into anything from websites to platforms to AI workflows.
<iframe
src="https://player.mux.com/dE02GfTAlJD4RcqNAlgiS2m00LqbdFqlBm?&metadata-video-title=All about thumbnails&metadata-user-id=user-1138"
style="width: 100%; border: none; aspect-ratio: 16/9;"
allow="autoplay; encrypted-media; picture-in-picture;"
allowfullscreen
></iframe>
We give you the building blocks to create live and on-demand video exactly how you want.
See all Mux Video features// create an asset with auto-generated subtitles
await muxClient.video.assets.create({
"inputs": [
{ "url": "https://static.mux.com/home-page/thumbnail-infomercial.mp4" },
{ generated_subtitles: [{ name: "English CC", "language_code": "en" }] }
],
"playback_policies": ["public"],
"video_quality": "basic"
});
// get subtitles
const playbackId = "dE02GfTAlJD4RcqNAlgiS2m00LqbdFqlBm";
const trackId = "Yq9OsPqSNFCZ1q4tak9cEKQNxt9lHO8ghRSLQGDdYcVwCL5XXnCR1A";
await fetch(`https://stream.mux.com/${playbackId}/text/${trackId}.vtt`)
<img
src="https://image.mux.com/dE02GfTAlJD4RcqNAlgiS2m00LqbdFqlBm/thumbnail.webp?width=512&height=512"
width="512"
height="512"
alt="Thumbnail"
/>
// Get an instant clip
const playbackId = "dE02GfTAlJD4RcqNAlgiS2m00LqbdFqlBm";
const streamUrl = `https://stream.mux.com/${playbackId}.m3u8?asset_start_time=5&asset_end_time=25`;
// Or create a frame-accurate asset-based clip
const assetId = "sMP4ES801fUTrIwceiqvbZxrzuzOfI00P3";
await muxClient.video.assets.create({
"inputs": [{
"url": `mux://assets/${assetId}`,
"start_time": 5,
"end_time": 25
}],
"playback_policies": ["public"],
"video_quality": "basic"
});
Use storyboards to quickly tell AI about your video, or to create experiences like video player timeline hover previews
// You can get a storyboard as data (.json or .webvtt) or an image (.webp, .jpg, or .png)
const playbackId = "dE02GfTAlJD4RcqNAlgiS2m00LqbdFqlBm";
const response = await fetch(`https://image.mux.com/${playbackId}/storyboard.json`)
console.log(await response.json())
/* {
"storyboard": {
"url": "https://image.mux.com/Ljxts2USDNC18YsA8u2Ik1iZCcO5YcBT/storyboard.jpg",
"webpUrl": "https://image.mux.com/Ljxts2USDNC18YsA8u2Ik1iZCcO5YcBT/storyboard.webp",
"tile_width": 284,
"tile_height": 160,
"calc_storyboard_width": 1420,
"calc_storyboard_height": 1120,
"duration": 34.334,
"tiles": [
{
"start": 0,
"x": 0,
"y": 0
},
{
"start": 0.978,
"x": 284,
"y": 0
},
{
"start": 1.956,
"x": 568,
"y": 0
},
{
"start": 2.934,
"x": 852,
"y": 0
},
{
"start": 3.912,
"x": 1136,
"y": 0
},
{
"start": 4.891,
"x": 0,
"y": 160
},
{
"start": 5.869,
"x": 284,
"y": 160
},
{
"start": 6.847,
"x": 568,
"y": 160
},
{
"start": 7.825,
"x": 852,
"y": 160
},
{
"start": 8.803,
"x": 1136,
"y": 160
},
{
"start": 9.781,
"x": 0,
"y": 320
},
{
"start": 10.759,
"x": 284,
"y": 320
},
{
"start": 11.737,
"x": 568,
"y": 320
},
{
"start": 12.716,
"x": 852,
"y": 320
},
{
"start": 13.694,
"x": 1136,
"y": 320
},
{
"start": 14.672,
"x": 0,
"y": 480
},
{
"start": 15.65,
"x": 284,
"y": 480
},
{
"start": 16.628,
"x": 568,
"y": 480
},
{
"start": 17.606,
"x": 852,
"y": 480
},
{
"start": 18.584,
"x": 1136,
"y": 480
},
{
"start": 19.562,
"x": 0,
"y": 640
},
{
"start": 20.541,
"x": 284,
"y": 640
},
{
"start": 21.519,
"x": 568,
"y": 640
},
{
"start": 22.497,
"x": 852,
"y": 640
},
{
"start": 23.475,
"x": 1136,
"y": 640
},
{
"start": 24.453,
"x": 0,
"y": 800
},
{
"start": 25.431,
"x": 284,
"y": 800
},
{
"start": 26.409,
"x": 568,
"y": 800
},
{
"start": 27.387,
"x": 852,
"y": 800
},
{
"start": 28.366,
"x": 1136,
"y": 800
},
{
"start": 29.344,
"x": 0,
"y": 960
},
{
"start": 30.322,
"x": 284,
"y": 960
},
{
"start": 31.3,
"x": 568,
"y": 960
},
{
"start": 32.278,
"x": 852,
"y": 960
},
{
"start": 33.256,
"x": 1136,
"y": 960
}
]
},
"error": null
} */
// Enable an audio-only static rendition
const assetId = "sMP4ES801fUTrIwceiqvbZxrzuzOfI00P3";
await muxClient.video.assets.createStaticRendition(assetId, { resolution: 'audio-only' })
// Get that rendition
const playbackId = "dE02GfTAlJD4RcqNAlgiS2m00LqbdFqlBm";
const streamUrl = `https://stream.mux.com/${playbackId}/audio.m4a`;
Uploading this 34 second video:
Storing this video for 1 month:
Streaming 209,295 times:
Free monthly usage credit:
Mux Data analytics: Included
Total: $0
Track key engagement and quality of experience metrics: views, playing time, viewer retention, startup time, rebuffering, and more.
Looking for standalone media-grade stream analytics?
Get Mux DataIntegrate Mux into your AI workflows for video processing and delivery. Our platform works both as a video foundation for AI tools and as the final step for delivering video to users.
Powered by
const playbackId = "dE02GfTAlJD4RcqNAlgiS2m00LqbdFqlBm"
// Generate a list of thumbnail URLs at regular intervals
const timestamps = [];
const interval = duration / 6;
for (let i = 1; i <= 5; i++) {
timestamps.push(Math.round(i * interval));
}
const imageUrls = timestamps.map(
(time) => `https://image.mux.com/${playbackId}/thumbnail.png?time=${time}&width=640`
);
// Send all the thumbnail URLs to OpenAI's moderation API concurrently, and return the scores for each thumbnail
const moderationPromises = imageUrls.map(async (url) => {
const moderation = await openaiClient.moderations.create({
model: "omni-moderation-latest",
input: [
{
type: "image_url",
image_url: {
url: url,
},
},
],
});
const categoryScores = moderation.results[0].category_scores;
return {
nsfw: categoryScores.sexual,
violence: categoryScores.violence,
};
});
// Find highest scores across all thumbnails
const scores = await Promise.all(moderationPromises);
const maxNsfw = Math.max(...scores.map(s => s.nsfw));
const maxViolence = Math.max(...scores.map(s => s.violence));
|
const playbackId = "dE02GfTAlJD4RcqNAlgiS2m00LqbdFqlBm";
const schema = z.object({ summary: z.string().describe('A summary of the video content in 500 characters or less') });
const response = await openaiClient.responses.parse({
model: 'gpt-4.1-mini',
input: [
{ role: 'system', content: 'You are an image analysis tool. You will be given a storyboard of a video, and be expected to return structured data about the contents.' },
{
role: 'user',
content: [
{ type: 'input_text', text: "What's in this video? Return summary of the video in 500 characters or less." },
{ type: 'input_image', image_url: `https://image.mux.com/${playbackId}/storyboard.png`, detail: 'high' },
],
},
],
text: { format: zodTextFormat(schema, 'tags') },
});
return response.output_parsed;
Grab your video's audio track and build an AI workflow to create translated versions of your videos. Playback dubbed versions of your video with multi-track audio.
Intelligently analyze the content of your video by feeding storyboards and transcripts into AI. Generate tags to keep your content organized and discoverable.
Build a workflow to analyze content and create and name chapter cue points to make navigating your long-form content a breeze.
From background videos to simple player embeds, we’ve got you covered.
Commerce-UI built Lady Gaga’s immersive website with video front and center. After launch, they saw a 128% increase in add-to-cart rate and 55% increase in average order value.
While you perfect your AI models, we take care of encoding, delivery, and scaling your video output reliably and cost-effectively.
Synthesia built their AI video platform on Mux enabling them to affordably scale video generation while focusing on AI innovation rather than building video from scratch.
With videos ready for playback in an average of under 2 seconds you can build what you need for your community.
Glassdoor launched user-generated video and created a new form of content-moderated community engagement in their app in 5 months.
Whether it’s on-demand or live, build video that scales to support your users.
Patreon built native video for a more consistent creator and fan experience, going from limited control with third-party solutions to a fully customized, seamless platform..
Go from MVP to launch in no time with API and docs that are designed for developers to build video quickly.
Typeform integrated video questions and answers into their forms, achieving 24% adoption among Growth plan users and contributing over 2.5% of ARR within six months of launch.
With latency as low as 4 seconds and support for SRT (with HEVC) and RTMP, you can stream live, at scale, and without worry.
Maestro helps creators like Billie Eilish create and monetize interactive live experiences at scale. They enable creators to stream and connect to hundreds of thousands of fans.
You don’t have to reinvent your stack to get great video. We’re compatible with your favorite languages and frameworks.
We researched, candidly, every single option. Mux kept coming up as the number one ease of integration was amazing that it's just a couple of lines of code and "boom".
We were stressing about how long it would take to fix our video streaming, but I was able to open up Github mobile and integrate Mux on my phone. I had something working in two hours. That’s wild.
We built an in-house MVP solution for video, but rather than spending our engineering team’s time navigating and maintaining video infrastructure, we turned to Mux. With Mux, video just works, which means we can focus on building the best product for Substack creators and trust that video is solved.
the documentation and API design for the @MuxHQ api is some of the best I've used in a while - insanely clean UI and has api reference or webhook for everything I need
Mux has enabled us to move 5x faster. We can trust processes like uploading and transcoding are handled really well — and we didn’t have to spend the time and resources on our end building that out.
Working with the Mux team felt like we were all working together, as opposed to the typical vendor/client relationship. Mux was with us every step of the way, from ideation to delivery.
Ran our first live stream via @MuxHQ today after some horrible experiences with a well known alternative who shall remain nameless. Super simple, reliable and looked great!
Mux Data caught a number of issues we would never have found otherwise. And beyond issues, the data helps us identify where there are opportunities for improvement.
Out of all the technologies we use, Mux was the easiest for us to implement. We actually over-budgeted our resources for it.
@MuxHQ is such a great product. Managed to have a live streaming solution set up for a live demo in less than a day. Was able to stream from a second device and display that stream in a player. Converted a prospect into a customer.
Mux has enabled WBD to observe the quality of our viewers' streaming experiences. Being able to filter data across a variety of dimensions helps us pinpoint issues in content and technical systems to ensure that our viewers are enjoying the highest quality experience possible.
We’ve been able to use Mux to resolve incidents faster, sometimes significantly faster, than before. We always learn from our incidents, and the data we’re able to pull from Mux has dramatically accelerated our learnings.
<Video /> is the new <Image /> – Great DX by @MuxHQ
I could have created a custom solution like Amazon S3 to host my video, but it was extremely complex and extremely expensive. And then someone said, but there is Mux and I checked it's exactly what I needed and for much cheaper than using AWS. That's why I had no choice. It was the best solution.
AI enables video at a scale that wasn't possible before, which means cost is a huge consideration. Mux was very proactive in making sure our costs were managed.
No credit card required to start using Mux.