Skip to content
Tech Stack10 September 2026 · 9 min read

Mux Free Tier Costs: When Self-Hosted Video Wins

Mux gives you 100,000 free delivery minutes a month. Vercel's included 1 TB runs out three times sooner. I measured my own hero video and found the bill lands where I did not expect.

Mux Free Tier Costs: When Self-Hosted Video Wins

I ran ffprobe against my own hero video last Tuesday, expecting to feel fine about it. Eight seconds. 1080p. 4,015,025 bytes.

Four megabytes for eight seconds of a person turning toward a camera, pulled by every visitor who lands on the homepage before they read a single word. I opened this investigation convinced that Mux free tier pricing was the wall I was about to hit, because I assumed a free allowance sized for demos and an autoplay loop served on every page load could only end one way. Then I read the actual numbers, and the wall turned out to be somewhere else entirely.

What does the Mux free tier actually cover?

A tall roll of pale paper standing on a wooden desk, unspooled only a few inches, the short tail marked with one pencil tick and stained by a faint coffee ring

Mux gives you 100,000 minutes of video delivery free every month at any resolution, and that allowance resets each month. It is a recurring allowance rather than a trial credit that burns down once. The Mux Video pricing documentation puts the 2026 rate after that allowance at $0.001 per minute delivered for 1080p on Basic or Plus quality, and $0.0008 per minute at 720p.

Run my eight-second loop through that. One play costs 0.133 minutes. The free allowance covers roughly 750,000 plays a month before Mux invoices a cent. Storage is similarly small at $0.003 per minute per month for 1080p, so keeping my entire video library hot would cost under a dime. Encoding at Basic quality is free outright.

One detail deserves a flag, because it is the part that catches people out. Mux charges for segments that were delivered, not segments that were watched. A player that buffers three segments ahead for a visitor who bounces after two seconds still bills you for three segments, and autoplay widens that gap on every single session.

The bandwidth bill lands before the video bill

Two paper envelopes overlapping on a desk in hard window light, the top one torn open with a statement half pulled out, the one beneath still sealed and marked by a coffee ring

Self-hosting the MP4 starts costing you money at roughly a third of the traffic Mux would charge you for. That finding inverted the assumption I walked in with, and it is the whole argument of this post.

Vercel includes the first 1 TB of Fast Data Transfer on Pro, then charges $0.15 to $0.35 per GB depending on which region the request came from, per its regional pricing table. Divide that 1 TB by my 4.015 MB hero file and you get about 249,000 page loads. Divide Mux's 100,000 free minutes by an eight-second play and you get 750,000. Same video, same traffic, and the metered CDN runs out three times sooner than the video platform everyone assumes is the expensive option.

Actually, that understates it. My hero is not the only video on the site. A find across public/ turns up eighteen files totalling 39.66 MB, including a 56.9-second Callidus demo at 6.2 MB and the 42-second reel on the BookBed property management case study. A visitor who lands on the homepage and then opens two project pages pulls closer to fifteen megabytes than four. If you are running the standard Next.js on Vercel with a Postgres backend, Fast Data Transfer is the meter that decides this question, not compute.

Vercel has been saying this for a while, in politer language than mine. Its knowledge base article on hosting video files on Vercel recommends against serving video from your deployment at all, and points instead at Blob, Mux, Cloudinary, or S3 with a CDN in front. When the platform whose bandwidth you would be buying tells you to buy someone else's, that is worth reading twice.

Mux free tier pricing against self-hosting and Cloudflare Stream

Three paper strips of unequal length pinned to a linen board with brass tacks, casting three shadows of different lengths, the longest strip curling loose at its bottom corner

At every traffic level below half a million monthly visits, Mux is the cheapest of the three options, and it is cheapest by being free. The table models one eight-second 1080p autoplay loop per visit, which is the honest floor rather than a worst case.

Monthly visitsSelf-hosted MP4 on Vercel ProMuxCloudflare Stream
100,000$0 (401 GB, inside the 1 TB)$0 (13.3k min, inside free tier)~$18
250,000~$1 (1,004 GB, just over)$0 (33.3k min)~$38
500,000$151–$353 (1 TB over)$0 (66.7k min)~$72
1,000,000$452–$1,055 (3 TB over)~$33 (33.3k billable min)~$138

Cloudflare Stream charges from the first minute with no free allowance: $1 per 1,000 minutes delivered and $5 per month per 1,000 minutes stored, with encoding and egress included in that price. It is the most expensive option at low traffic and the second cheapest at high traffic, which is a reasonable trade if what you want is a bill that grows in a straight line instead of a step function.

One thing shifted two days before I wrote this. Vercel made Flat Rate CDN generally available for Pro teams on 8 September 2026, swapping usage-based CDN billing for a fixed monthly bill that bundles Fast Data Transfer and CDN requests, with spike protection on by default. If you sit in the 500,000-visit row and self-hosting was ruled out by that $151-to-$353 spread, the spread is now something you can convert into a flat number. Read the tier pricing before you assume it rescues the plan.

The Hobby plan is not a fallback here

You cannot fall back to the Hobby plan when the bill arrives, because exceeding a usage limit there pauses the feature for thirty days. That is what Vercel's Hobby plan documentation says happens. No overage to pay, no card to throw at the problem. Hobby is also restricted to non-commercial personal use, which rules it out the moment your portfolio starts doing sales work.

When is self-hosting the MP4 still the right call?

Self-host when the clip is short, cached hard, and your traffic sits comfortably inside the transfer already included in your plan. That describes most portfolios and most marketing sites, and at that scale a video platform adds an integration and a dependency for zero saving.

Three conditions push me toward keeping the file in public/:

  • The clip is under ten seconds and loops. Adaptive bitrate has nothing to adapt to across an eight-second window, and the HLS manifest round trip costs more latency than a rendition switch would ever save you.
  • You control the encode and you actually did the work. My hero sits at 4 MB for 8 seconds, which is roughly 4 Mbps, and that is lazy for a looping background. Re-encoding at 1.5 Mbps with a 720p rendition for narrow viewports cuts the transfer by more than half and nobody notices the difference.
  • The video is decorative and nobody ever scrubs it.

Push toward a platform when any of those break: long-form video where viewers seek, a library that grows every month, or an audience on connections you cannot predict. That last one is the real argument for adaptive bitrate. A single MP4 has exactly one bitrate, so the viewer on hotel wifi is handed the same 4 Mbps stream as the viewer on fibre, and then waits.

There is a delivery question sitting underneath all of this that is worth understanding on its own terms, and it is why Vercel quotes a per-GB range instead of a number. Bytes cost different amounts depending on where they are served from, which is how edge delivery changes the cost of a byte.

How do you find your own crossover point?

Measure the payload per visit, multiply by monthly visits, and compare that against the transfer already included in your plan. Do it before you open a single vendor pricing page. Twenty minutes, from a terminal.

  1. List every video asset you ship, with its exact byte count. find public -type f -name "*.mp4" -printf "%s\t%p\n" | sort -rn ranks the whole set worst first. Mine surfaced a 6.2 MB file I had forgotten was autoplaying on a project page.
  2. Get the duration of each one with ffprobe -v error -show_entries format=duration -of csv=p=0 <file>. You need seconds as well as bytes, because platform pricing meters minutes while CDN pricing meters bytes, and the two rank your files in a different order.
  3. Open analytics and find the real number of sessions that reach each page carrying video. Total sessions will overstate it badly. The homepage number and the project-page number are usually far apart.
  4. Multiply bytes by sessions for the CDN column. Multiply seconds by sessions and divide by sixty for the platform column.
  5. Compare both figures against the allowance included in the plan you are already paying for. If both land under it, you have no decision to make this quarter, and the correct move is to go build something else.
  6. Set a spend alert at seventy percent of the included transfer. Everyone skips this step, and it is the only one that catches the crawler that walks your whole library at 3am.

That last case is not hypothetical. A bot with no cache and no range-request discipline will pull every file you expose, and a metered CDN will bill you for the walk.

Run that find command against your own public/ directory tonight and read the top line. If the biggest file on the list is something you added for polish and never re-encoded, you have just found a bandwidth line item that costs nothing to fix and needs no vendor migration to fix it. If you are weighing the wider build economics rather than only the delivery bill, the app cost estimator covers the rest of the picture, and the same arithmetic decides whether WordPress or a custom website is cheaper to run once media enters the equation.

So: what is your payload per visit, and does anyone on your team know the number?

Free resource

Free SaaS MVP Scope Template

A Notion document with the full feature checklist, MVP vs. nice-to-have table, pre-build questions, and cost signals — so you walk into any developer call knowing exactly what to ask for.

Get the template →
DL

Dusko Licanin

Full-Stack Developer · Banja Luka, Bosnia

Full-stack developer shipping SaaS MVPs, web apps, and mobile apps using AI-augmented workflows — without agency coordination overhead. Live portfolio: BookBed, Callidus, Pizzeria Bestek.

Frequently Asked Questions

How much does the Mux free tier actually give you?

Mux gives you the first 100,000 minutes of video delivery free every month, at any resolution, and the allowance resets monthly. After that, 2026 list pricing is $0.001 per minute delivered at 1080p on Basic or Plus quality and $0.0008 at 720p, according to Mux's own 2026 pricing documentation. Storage runs $0.003 per minute per month at 1080p, and Basic-quality encoding is free outright. For an eight-second autoplay loop, that free allowance covers roughly 750,000 plays a month. One catch is worth knowing: Mux meters segments delivered rather than segments watched, so a player buffering ahead for a visitor who bounces after two seconds still costs you minutes.

Is Mux cheaper than self-hosting video?

For short autoplay clips on a marketing site, Mux usually wins, because its free tier outlasts the data transfer included in your hosting plan. Run the arithmetic on one eight-second 1080p loop weighing about 4 MB. Vercel Pro's included 1 TB of Fast Data Transfer covers roughly 249,000 page loads before the first overage byte, while Mux's 100,000 free minutes cover about 750,000 plays. Self-hosting therefore starts billing at roughly a third of the traffic. That flips once your library gets long or your clips get watched end to end, since platforms meter minutes while a CDN meters bytes, and long video is expensive in minutes.

How do you calculate video streaming bandwidth for a website?

Multiply the byte size of each video file by the number of sessions that actually load it, then add the results together. That gives your monthly CDN transfer directly, with no calculator involved. Get exact sizes with a `find` over your public directory sorted by size, and exact durations with `ffprobe -v error -show_entries format=duration`. You need both numbers, because CDN pricing meters bytes while video platforms meter minutes, and the same library ranks differently under each. Then compare the result against the transfer already included in your plan rather than against a vendor pricing page, since the included allowance is what decides whether you have a decision to make at all.

Can you host video files on Vercel?

You can, but Vercel's own knowledge base recommends against serving video from your deployment, because large files drive excessive bandwidth usage. It points instead at Vercel Blob, Mux, Cloudinary, or S3 behind a CDN. On Pro, video draws from the same Fast Data Transfer meter as everything else: the first 1 TB is included, then $0.15 to $0.35 per GB by region. On Hobby it is worse, since exceeding a usage limit pauses the feature for thirty days with no overage to pay, and Hobby is restricted to non-commercial personal use anyway. Short, well-compressed, hard-cached clips are fine. A growing library is a different problem.

When should you self-host an MP4 instead of using a video platform?

Self-host when the clip runs under ten seconds, loops, is cached hard, and your traffic sits inside the transfer your plan already includes. Adaptive bitrate has nothing to adapt to across an eight-second window, and the HLS manifest round trip costs more latency than a rendition switch would save. Do the encode properly, though. A 1080p loop at 4 Mbps is lazy for a background video, and re-encoding at 1.5 Mbps with a 720p rendition for narrow viewports halves the transfer without anyone noticing. Move to a platform when viewers seek through long-form content, when the library grows every month, or when your audience sits on connections you cannot predict.