This page loads the same picture or video from two delivery services, on your own device and network, and times each load with your browser’s own clock. Nothing is simulated.
What decides an image test: one cold first visit. Both services are asked for the picture at a width no earlier test of this report has asked for, and the faster answer is the result, however small the gap. What decides a video test: the time each side takes to deliver the whole file.
Most image reports also time a repeat visit of the entered size.
Image first visit
Every size setting the page knows is tried on both addresses, and the largest copy both deliver at the same pixel size and shape is used. If there is none, the entered address is used.
Both sides are asked for the same width. Each test takes the next width down, one pixel at a time, and no width is given out twice. This way, the test emulates real cold visits. A side whose own response says it already held the width cannot win on it: the next width is asked. A side whose cache status cannot be read shows Unknown but counts, because its width is new.
The faster first visit is the result, however small the gap. If no width gives a like-for-like pair within five tries and a time limit, the report says why there is no result. Where a first visit can never be measured, the repeat visit is the result, if it names a faster side.
Image repeat visit
Unless the entered address is already the original, the entered size is also timed, after one untimed request on each side, in two ways. Each is shown only when it names a faster side.
Five single loads a side: a side is faster only if all five of its loads beat all five of the other’s. Each side’s median is shown.
A page of copies of the entered file, loaded at once, one side at a time: up to 100, the same number on both sides, timed twice in opposite orders. A side is faster only if it led both times.
Video loading
Like an image, a video is loaded as a plain file: the whole file is downloaded and timed, from the request to the last byte. If the times cannot separate the two, a file at least 5% lighter may be named instead, from byte counts the run itself read.
Both sides run through the same code, on the same device and network. No threshold, check or result depends on which service is measured: service names only label each side and ask it for a size.
OrderA coin flip decides which side goes first.
Same questionThe first visit and the video test ask both sides for the same size, and what each delivered is printed, file size and format included, or marked as unreadable. A quality setting is raised on both sides or on neither, and a different format never withholds a result.
Losses shownA result is published whichever side it favours, and green and red follow the result, never the side.
HandicapsA disadvantage on one side, such as a farther server, can explain that side’s loss, never its win.
Checked firstA figure that cannot be true, such as a file too heavy for the resolution printed beside it, stops a result from being shown, and the page says why.
Your eyesThe quality viewer shows both entered files, so you judge quality yourself, not a score.
A test describes one device, one network and one moment, marked Wi‑Fi or cellular when the page can tell. The spread of many visitors’ tests in Compare all tests says more than any single one.
Cache statusRead from each response’s own cache status. Where none can be read, the first visit shows Unknown, and the repeat visit and video show Warm (hit), because this test had already asked for that file.
Wi‑FiOn a phone, the page asks you to turn Wi‑Fi off and test on 4G or 5G. A phone on the go loads pages over the mobile network; on Wi‑Fi, the test measures the home or office line instead.
VPNA test through a VPN the page detects is not run, and you are asked to turn the VPN off: it would measure the tunnel, not the delivery.
PrivacyNo cookies, and no account needed. A saved test keeps the media addresses, the results, a technical record of the run, and the device, browser, screen, network, city, region, country and internet provider it ran on, never your name, email or IP address. It is linked to your account only if you are signed in. Which tests were yours is remembered in your own browser.
We are the team behind SpeedSize, the media AI infrastructure for premium brands. We built this because the one thing a brand actually sells online — its images and its videos — is the one thing nobody could measure cleanly. So we made the measurement, and made it public: including the runs we lose.
The problem
Every performance tool measures your media through your site — its scripts, tags, third parties and page structure all bleed into the number. So you learn how fast your code is, never how fast your media is. And media is the product.
Synthetic tests (Lighthouse, WebPageTest) run in a datacentre on a datacentre link — nobody shops from one. Field data (Core Web Vitals) is Chrome-only by design, so most mobile shoppers — Safari is over 50% of US phone traffic — are simply not in it. LCP is a single above-the-fold element, while your page carries dozens more. And video is timed by none of them.
The honest way to compare CDNs on real media would be true RUM: heavy integration with each provider, the whole catalogue re-encoded and pre-pushed to every visitor, edge caches warmed for weeks before a single number is trustworthy — expensive, slow and complex. So brands avoid it, and the question of whose media truly loads faster goes unanswered.
The solution
This tool measures that real-user experience without any of the pain. It loads the actual media file from two CDNs on your device, over your network, in your browser — past the browser cache, with bytes printed beside the time — and isolates the pure delivery of the images and videos themselves, with your site's code out of the frame entirely.
No integration and no cost. The media is measured on its own, apart from the site’s code, for images and for video alike.