# video-hosting-bench – round 1 (2026-10-12 to 2026-10-12) ## Storage and traffic per minute (with cap) | rung | MB/min | Mbit/s | GB/h | |---|---|---|---| | 360p | 4.18 | 0.56 | 0.25 | | 540p | 8.17 | 1.09 | 0.49 | | 720p | 12.80 | 1.71 | 0.77 | | 1080p | 25.43 | 3.39 | 1.53 | ## Costs per month (EUR, net) | provider | S | M | L | |---|---|---|---| | YouTube | 0.00 | 0.00 | 0.00 | | Vimeo (Einzelpersonen) | Standard 22.36 | no plan fits (videos a year, one seat) | no plan fits (videos a year, one seat) | | Vimeo Studio | 357.75 | 357.75 | no plan fits (bandwidth) | | Bunny Stream | 0.93 | 9.29 | 92.92 | | Bunny Stream (Volume) | 0.89 | 4.99 | 49.85 | | Cloudflare Stream | 11.18 | 76.02 | 737.86 | | Eigener Server | 20.56 | 24.34 | 63.40 | | Eigener Server + CDN | 21.46 | 32.95 | 149.54 | Model at equal assumed byte volumes, using our H.264 encodes for Bunny storage/delivery and Vimeo delivery; provider encodes and equivalent visual quality were not measured. No video preload before playback, extra buffering/repeated delivery, labour, original archive, backups or spare storage are priced. Cloudflare delivery uses continuous minutes without per-segment rounding. Storage is a monthly snapshot, not a growing yearly inventory. Studio includes team features and support not replaced by a bare server. ### Sensitivity: all delivery at 1080p (EUR/month) | provider | S | M | L | |---|---|---|---| | Bunny Stream (Volume) (all 1080p) | 0.92 | 9.21 | 92.07 | | Eigener Server (all 1080p) | 20.56 | 24.34 | 63.40 | Peak viewers (mean concurrency x peak factor): S 2, M 17, L 174. Provisioned Hetzner Volume (minimum 10 GB, rounded up to whole GB, no spare capacity): S 10 GB, M 76 GB, L 759 GB. ## Volumes per scenario (for recalculating) | scenario | MB per delivered minute (mix) | traffic GB/month | storage GB (all rungs) | uploads in the first year | originals GB (project) | originals GB (test clips) | re-encode h (4 CPUs) | |---|---|---|---|---|---|---|---| | S | 12.84 | 96 | 7.6 | 80 | 1.7 | 9.7 | 2.0 | | M | 12.84 | 963 | 75.9 | 800 | 17.0 | 97.4 | 19.6 | | L | 12.84 | 9,631 | 758.5 | 8,000 | 170.5 | 973.8 | 195.9 | Traffic at the scenario's views with 50% watched; uploads in the first year = inventory + 12 x 5% of it; originals at 11.4 MB/min (project) and 64.9 MB/min (test clips); re-encoding at 0.78 x real time on 4 CPUs. ## Break-even (scenario M, views per month) | from | views (half watched) | a quarter watched | all watched | |---|---|---|---| | own server cheaper than Cloudflare Stream | 11,000 | 23,000 | 6,000 | | own server cheaper than Bunny Stream | 137,000 | 275,000 | 69,000 | | own server cheaper than Bunny Stream (Volume Network) | 275,000 | 549,000 | 137,000 | | own server cheaper than Vimeo (plans for individuals) | never in the range | never in the range | never in the range | | own server cheaper than Vimeo Studio (companies) | 1,000 | 1,000 | 1,000 | | no Vimeo plan for individuals fits (uploads a year, storage or 2 TB a month) | 1,000 | 1,000 | 1,000 | | Vimeo Studio does not fit (36 TB a year) | 156,000 | 311,000 | 78,000 | | model exceeds measured lab capacity (not a production capacity guarantee) | 9,216,000 | never in the range | 4,608,000 | ## Embedded players (median of 5 Lighthouse runs; capture before and after the click) | variant | kB before | third-party hosts before | cookies before | new hosts after | playing | main-thread TBT ms (mobile emulation) | |---|---|---|---|---|---|---| | baseline | 1 | 0 | 0 | 0 | False | 0 | | own | 165 | 0 | 0 | 0 | True | 228 | | youtube_facade | 105 | 1 | 0 | 7 | True | 0 | | youtube_nocookie | 1244 | 7 | 0 | 1 | True | 0 | | youtube | 1235 | 9 | 5 | 1 | True | 0 | | vimeo | 548 | 4 | 3 | 0 | False | 0 | | bunny | 4471 | 17 | 0 | 11 | True | 0 | | cloudflare | 411 | 3 | 0 | 0 | True | 0 | LCP and Lighthouse aggregate scores are not compared: Lighthouse evaluates the main frame only, and the iframe variants varied between passes (DEVIATIONS.md, 2026-10-13). TBT describes main-thread work in this setup, not player performance overall; raw values stay in summary.json. ## Bitrate cap (top rung / original) | case | n | median | q1–q3 | above the original | |---|---|---|---|---| | test clips, cap | 13 | 0.402 | 0.271–0.523 | 0% | | test clips, no cap | 13 | 0.402 | 0.271–0.523 | 0% | | project, all, cap | 546 | 0.771 | 0.674–0.869 | 1% | | project, sample, cap | 60 | 0.898 | 0.832–0.926 | 2% | | project, sample, no cap | 60 | 1.059 | 0.939–1.173 | 63% | Project: the cap applies to 212 of 546 videos (39%); mirror of 2026-09-24. ## Load test | type | EUR/month | viewers (mix) | Gbit/s | p95 ms | viewers (all 1080p) | Gbit/s | |---|---|---|---|---|---|---| | cpx22 | 19.99 | 2400 | 3.99 | 45 | ≥ 1600 | 5.43 | | cpx32 | 35.99 | ≥ 3200 | 5.43 | 14 | ≥ 1600 | 5.35 | ≥: no other target carried the stage where this series broke down, so the cause (the server or the test set-up, e.g. the generator) is not identified; the value is a lower bound. Network check (iperf3, 8 streams, 20 s, without TLS): cpx22 to ccx33 13.5 Gbit/s, cpx32 + cpx22 to ccx33 13.0 Gbit/s, cpx32 to ccx33 12.7 Gbit/s.