Skip to content

Commit 2dfb82a

Browse files
committed
Update provider benchmark asset
1 parent 596e5f0 commit 2dfb82a

7 files changed

Lines changed: 820 additions & 753 deletions

File tree

apps/site/app/benchmarks/page.tsx

Lines changed: 35 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -47,18 +47,20 @@ const durationSeconds = Math.round(
4747
const ms = (n: number) => `${Math.round(n).toLocaleString("en-US")} ms`;
4848
const resOf = (rendition: string) =>
4949
`${rendition.split("x")[1]}p (${rendition.replace("x", " × ")})`;
50-
const pctSooner = Math.round(
51-
(1 -
52-
rend.metrics.timeToFirstFrameMs.median /
53-
mux.metrics.timeToFirstFrameMs.median) *
54-
100,
55-
);
56-
const europePctSooner = Math.round(
57-
(1 -
58-
europeRend.metrics.timeToFirstFrameMs.median /
59-
europeMux.metrics.timeToFirstFrameMs.median) *
60-
100,
61-
);
50+
const firstFrameComparison = (
51+
region: string,
52+
rendMedian: number,
53+
muxMedian: number,
54+
) => {
55+
const gap = ms(Math.abs(rendMedian - muxMedian));
56+
if (rendMedian < muxMedian) {
57+
return `In the ${region} run, Rend reached the first frame about ${gap} before Mux on median.`;
58+
}
59+
if (muxMedian < rendMedian) {
60+
return `In the ${region} run, Mux reached the first frame about ${gap} before Rend on median.`;
61+
}
62+
return `In the ${region} run, both providers reached the first frame at the same median time.`;
63+
};
6264
const browserLabel = `${latest.environment.browser.automation} ${latest.environment.browser.version}`;
6365
const europeBrowserLabel = `${europe.environment.browser.automation} ${europe.environment.browser.version}`;
6466

@@ -129,20 +131,20 @@ const spread = [
129131
];
130132

131133
const method = [
132-
`The same source video, ${durationSeconds} seconds long, uploaded to both Rend and Mux.`,
134+
`The benchmark test video is ${durationSeconds} seconds long.`,
133135
`${latest.run.sampleCountTarget} samples per provider in each region, with provider order randomized each round.`,
134136
"A fresh browser context for every sample: no cookies, no stored state, and the cache disabled.",
135137
`A ${Math.round(latest.run.watchWindowMs / 1000)} second watch window per sample, timing the first painted frame and counting any stalls.`,
136138
`${browserLabel}, run on a Daytona sandbox with the region set to US for the US results.`,
137139
`${europeBrowserLabel}, run on a Daytona sandbox with the region set to Europe for the Europe results.`,
138-
"Rend is measured on the production native-HLS /watch path with playback assigned from the initial page.",
140+
"Rend is measured on the production native-HLS embed path with playback assigned from the initial page.",
139141
];
140142

141143
const caveats = [
142144
"This is one video, one region, one browser profile, and one run. It is not a universal claim about either service.",
143145
"We did not purge or warm any CDN. Mux serves from its own network and Rend from ours, each in whatever cache state it happened to be in.",
144146
"Encoders, packaging and player implementations differ between the two providers.",
145-
"This is the fastest real Rend playback path, not a forced-resolution run. Rend selected 1080p and Mux selected 720p in the benchmark viewport.",
147+
"This is Rend's production playback path, not a forced-resolution run. Rend selected 1080p and Mux selected 720p in the benchmark viewport.",
146148
"The Europe run used a Daytona sandbox requested in Europe; Daytona reported the sandbox target as eu.",
147149
"Source file identity is not independently verified beyond matching duration and observable metadata.",
148150
];
@@ -211,9 +213,10 @@ export default function BenchmarksPage() {
211213
</h2>
212214
<p className="mt-2 max-w-[680px] text-[15px] leading-[1.6] text-muted">
213215
Time to first frame, median of {latest.run.sampleCountTarget}{" "}
214-
samples per provider. The US run was on {runDate} in a Daytona
215-
sandbox. The Europe run was on {europeRunDate} in a Daytona Europe
216-
sandbox. Both use Rend&apos;s production playback path.
216+
samples per provider. The US run was on {runDate}{" "}
217+
in a Daytona sandbox. The Europe run was on {europeRunDate}{" "}
218+
in a Daytona Europe sandbox. Both use Rend&apos;s production
219+
playback path.
217220
</p>
218221

219222
<div className="mt-6 max-w-[860px] overflow-x-auto">
@@ -269,12 +272,20 @@ export default function BenchmarksPage() {
269272
</div>
270273

271274
<p className="mt-5 max-w-[680px] text-[14px] leading-[1.6] text-muted">
272-
Same source video ({durationSeconds} seconds). Rend selected native
273-
HLS at {resOf(rend.observed.selectedRendition)} while Mux selected{" "}
274-
{resOf(mux.observed.selectedRendition)} in both regional runs. In
275-
the US run, Rend reached the first frame about {pctSooner}% sooner
276-
on median. In the Europe run, Rend reached it about{" "}
277-
{europePctSooner}% sooner on median. Rend had zero stalls and zero
275+
Benchmark test video: {durationSeconds} seconds. Rend selected
276+
native HLS at {resOf(rend.observed.selectedRendition)} while Mux selected{" "}
277+
{resOf(mux.observed.selectedRendition)} in both regional runs.{" "}
278+
{firstFrameComparison(
279+
"US",
280+
rend.metrics.timeToFirstFrameMs.median,
281+
mux.metrics.timeToFirstFrameMs.median,
282+
)}{" "}
283+
{firstFrameComparison(
284+
"Europe",
285+
europeRend.metrics.timeToFirstFrameMs.median,
286+
europeMux.metrics.timeToFirstFrameMs.median,
287+
)}{" "}
288+
Both providers had zero stalls in both regions. Rend reported zero
278289
browser network errors in both regions.
279290
</p>
280291

apps/site/lib/marketing-pages.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ export const marketingPages: MarketingPage[] = [
205205
},
206206
{
207207
q: "Why did Rend serve 1080p and Mux serve 720p?",
208-
a: "The benchmark uses Rend's fastest real production setup for this asset: native HLS from the /watch page. Each player then selected its own rendition, so Rend served full 1920 by 1080 while Mux selected 1280 by 720.",
208+
a: "The benchmark uses Rend's production setup for this asset: native HLS from the embed player. Each player then selected its own rendition, so Rend served full 1920 by 1080 while Mux selected 1280 by 720.",
209209
},
210210
{
211211
q: "Can I reproduce these numbers?",

apps/site/public/benchmarks/providers/europe.json

Lines changed: 84 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
{
22
"schemaVersion": "rend.provider-benchmark.v1",
3-
"generatedAt": "2026-06-17T09:04:06.230Z",
3+
"generatedAt": "2026-06-30T16:36:16.153Z",
44
"run": {
5-
"id": "20260617T085824Z",
5+
"id": "20260630T163034Z",
66
"status": "completed",
7-
"startedAt": "2026-06-17T08:58:24.811Z",
8-
"finishedAt": "2026-06-17T09:04:06.229Z",
7+
"startedAt": "2026-06-30T16:30:34.879Z",
8+
"finishedAt": "2026-06-30T16:36:16.152Z",
99
"region": "daytona-eu",
1010
"regionLabel": "Daytona eu (eu requested)",
1111
"runnerKind": "daytona",
12-
"runnerLabel": "56a11abe-34ca-48c3-ac94-bd19b2d4d4f2",
12+
"runnerLabel": "a7276bca-e840-4429-9799-d80c4f8579d7",
1313
"sampleCountTarget": 5,
1414
"watchWindowMs": 30000,
1515
"delayMs": 3000,
@@ -32,14 +32,14 @@
3232
"rend"
3333
],
3434
[
35-
"mux",
36-
"rend"
35+
"rend",
36+
"mux"
3737
]
3838
]
3939
},
4040
"source": {
4141
"urls": {
42-
"rend": "https://www.rend.so/watch/83971e6c-4fb1-4620-9bfd-6fe71b8b672f?autoplay=1",
42+
"rend": "https://www.rend.so/embed/<asset-id>",
4343
"mux": "https://player.mux.com/A6oZoUWVZjOIVZB6XnBMLagYnXE6xhDhp8Hcyky018hk"
4444
},
4545
"verification": {
@@ -75,14 +75,15 @@
7575
"One video does not represent every workload, codec ladder, region, or viewer device.",
7676
"The harness does not purge or manipulate Mux CDN caches.",
7777
"The harness does not warm only Rend during direct comparisons.",
78-
"Selected resolutions and rendition ladders may differ; current Rend media generation emits an ABR ladder using the supported 720p/1080p/2k/4k billing tiers.",
78+
"Selected resolutions and rendition ladders may differ; current Rend media generation emits a startup-oriented ABR ladder from 360p through the highest applicable tier.",
79+
"Direct object-storage HLS pages use Rend-generated HLS artifacts but bypass Rend's edge cache, site route, and production player shell.",
7980
"Resource timing is summarized only as aggregate counts because detailed URLs can expose provider internals."
8081
]
8182
},
8283
"environment": {
8384
"browser": {
8485
"automation": "Playwright Chromium",
85-
"requestedChannel": "chrome",
86+
"requestedChannel": null,
8687
"version": "149.0.7827.55"
8788
},
8889
"device": {
@@ -102,7 +103,7 @@
102103
"runner": {
103104
"platform": "linux",
104105
"arch": "x64",
105-
"osRelease": "6.8.0-63-generic",
106+
"osRelease": "6.17.0-1007-oracle",
106107
"node": "v24.16.0",
107108
"bun": null
108109
}
@@ -111,7 +112,7 @@
111112
{
112113
"id": "rend",
113114
"name": "Rend",
114-
"url": "https://www.rend.so/watch/83971e6c-4fb1-4620-9bfd-6fe71b8b672f?autoplay=1",
115+
"url": "https://www.rend.so/embed/<asset-id>",
115116
"playerHost": "www.rend.so"
116117
},
117118
{
@@ -137,6 +138,7 @@
137138
"metricLabels": {
138139
"timeToPlayerReadyMs": "Navigation to player ready",
139140
"timeToMetadataMs": "Time to metadata",
141+
"timeToLoadedDataMs": "Time to first loaded frame",
140142
"timeToCanplayMs": "Time to canplay",
141143
"timeToFirstFrameMs": "Time to first frame",
142144
"totalDurationMs": "Total test duration",
@@ -152,43 +154,51 @@
152154
"metrics": {
153155
"timeToPlayerReadyMs": {
154156
"count": 5,
155-
"min": 703.3,
156-
"median": 737.2,
157-
"p75": 774.8,
158-
"p95": 1127.7,
159-
"max": 1215.9
157+
"min": 880.9,
158+
"median": 1021.6,
159+
"p75": 1032.3,
160+
"p95": 2312.6,
161+
"max": 2632.7
160162
},
161163
"timeToMetadataMs": {
162164
"count": 5,
163-
"min": 658.2,
164-
"median": 692.6,
165-
"p75": 727,
166-
"p95": 1074.8,
167-
"max": 1161.7
165+
"min": 570.7,
166+
"median": 703.9,
167+
"p75": 716,
168+
"p95": 1531.3,
169+
"max": 1735.1
170+
},
171+
"timeToLoadedDataMs": {
172+
"count": 5,
173+
"min": 571.4,
174+
"median": 704.3,
175+
"p75": 716.3,
176+
"p95": 1531.7,
177+
"max": 1735.5
168178
},
169179
"timeToCanplayMs": {
170180
"count": 5,
171-
"min": 661,
172-
"median": 694.9,
173-
"p75": 729.1,
174-
"p95": 1077,
175-
"max": 1164
181+
"min": 571.8,
182+
"median": 704.8,
183+
"p75": 716.8,
184+
"p95": 1531.8,
185+
"max": 1735.5
176186
},
177187
"timeToFirstFrameMs": {
178188
"count": 5,
179-
"min": 703.3,
180-
"median": 737.2,
181-
"p75": 774.8,
182-
"p95": 1127.7,
183-
"max": 1215.9
189+
"min": 880.9,
190+
"median": 1021.6,
191+
"p75": 1032.3,
192+
"p95": 2312.6,
193+
"max": 2632.7
184194
},
185195
"totalDurationMs": {
186196
"count": 5,
187-
"min": 30676.2,
188-
"median": 30710.9,
189-
"p75": 30741.4,
190-
"p95": 31093.3,
191-
"max": 31181.3
197+
"min": 30581.7,
198+
"median": 30714.2,
199+
"p75": 30726.5,
200+
"p95": 31646.1,
201+
"max": 31876
192202
},
193203
"stallCount": {
194204
"count": 5,
@@ -217,7 +227,7 @@
217227
"max": 75.2
218228
},
219229
"naturalResolution": "1920x1080",
220-
"renderedResolution": "1078x606",
230+
"renderedResolution": "1280x720",
221231
"playbackMode": "hls",
222232
"selectedRendition": "1920x1080"
223233
},
@@ -231,43 +241,51 @@
231241
"metrics": {
232242
"timeToPlayerReadyMs": {
233243
"count": 5,
234-
"min": 764.8,
235-
"median": 790.8,
236-
"p75": 1891.8,
237-
"p95": 1982.2,
238-
"max": 2004.8
244+
"min": 595.8,
245+
"median": 996.8,
246+
"p75": 1710,
247+
"p95": 1838.5,
248+
"max": 1870.6
239249
},
240250
"timeToMetadataMs": {
241251
"count": 5,
242-
"min": 742,
243-
"median": 772.4,
244-
"p75": 1882.6,
245-
"p95": 1929.5,
246-
"max": 1941.2
252+
"min": 568.7,
253+
"median": 988.8,
254+
"p75": 1704.6,
255+
"p95": 1788.8,
256+
"max": 1809.9
257+
},
258+
"timeToLoadedDataMs": {
259+
"count": 5,
260+
"min": 579,
261+
"median": 999.3,
262+
"p75": 1715.7,
263+
"p95": 1831.2,
264+
"max": 1860.1
247265
},
248266
"timeToCanplayMs": {
249267
"count": 5,
250-
"min": 773.5,
251-
"median": 806.7,
252-
"p75": 1895.7,
253-
"p95": 1988.2,
254-
"max": 2011.3
268+
"min": 579,
269+
"median": 999.4,
270+
"p75": 1715.9,
271+
"p95": 1831.3,
272+
"max": 1860.1
255273
},
256274
"timeToFirstFrameMs": {
257275
"count": 5,
258-
"min": 764.8,
259-
"median": 790.8,
260-
"p75": 1891.8,
261-
"p95": 1982.2,
262-
"max": 2004.8
276+
"min": 595.8,
277+
"median": 996.8,
278+
"p75": 1710,
279+
"p95": 1838.5,
280+
"max": 1870.6
263281
},
264282
"totalDurationMs": {
265283
"count": 5,
266-
"min": 30806.3,
267-
"median": 30924.9,
268-
"p75": 31997.6,
269-
"p95": 32053.4,
270-
"max": 32067.3
284+
"min": 30620,
285+
"median": 31023,
286+
"p75": 31741.7,
287+
"p95": 31858.7,
288+
"max": 31888
271289
},
272290
"stallCount": {
273291
"count": 5,
@@ -305,12 +323,12 @@
305323
}
306324
},
307325
"artifacts": {
308-
"machineReadableUrl": "/benchmarks/providers/europe.json",
309-
"rawSamplesUrl": "/benchmarks/providers/europe.samples.json"
326+
"machineReadableUrl": "/benchmarks/providers/latest.json",
327+
"rawSamplesUrl": "/benchmarks/providers/latest.samples.json"
310328
},
311329
"redaction": {
312330
"status": "passed",
313-
"checkedAt": "2026-06-17T09:04:06.231Z",
331+
"checkedAt": "2026-06-30T16:36:16.154Z",
314332
"patternsVersion": 1,
315333
"findings": []
316334
}

0 commit comments

Comments
 (0)