Why Pinterest Videos Come as M3U8 Playlists, and How You Get an MP4
Open your browser's developer tools while a Pinterest video plays and you will not see a single video file being fetched. You will see a text file ending in .m3u8, followed by a stream of short chunks. Yet when you download the same pin through KeepPin, you receive one ordinary .mp4. This article closes the gap between those two views: what the playlist is, why Pinterest uses it, and where the MP4 comes from.
What an .m3u8 file actually is
An .m3u8 file is a playlist, and the format it belongs to is HTTP Live Streaming, usually shortened to HLS. The protocol is documented in RFC 8216, and its core idea is simple: instead of serving a video as one large file, the server cuts it into segments of a few seconds each and publishes a text file that lists them in order.
There are typically two layers of playlist. A master playlist lists the available variants of a video, one line per resolution and bitrate, each pointing to a media playlist. A media playlist lists the segment files for that variant. Stripped down, a media playlist looks like this:
#EXTM3U
#EXT-X-TARGETDURATION:4
#EXTINF:4.0,
segment0.ts
#EXTINF:4.0,
segment1.ts
#EXTINF:3.2,
segment2.ts
#EXT-X-ENDLIST
The player reads the list, fetches segment0, starts playing, fetches segment1 while segment0 plays, and so on. Nothing in the playlist is video. It is a table of contents pointing at video.
Why Pinterest streams rather than serving one file
HLS solves problems that matter to a feed of short videos.
Adaptive quality. Because the master playlist offers several variants, the player can start on a small one to get the first frame on screen fast, then move up to a larger one once it has measured your connection, and drop back down if the connection worsens. The switch happens at a segment boundary and you rarely notice it. The resolution ladder those variants describe is the subject of what resolution Pinterest videos really are.
Partial viewing. Most videos in a feed are scrolled past after a few seconds. Delivering segments means Pinterest only sends the seconds you actually watch, instead of pushing the whole file for a video you abandon.
Caching. Small segments and playlists cache well on a content delivery network, and identical segments can be served to many viewers from edge servers near them. That CDN is pinimg.com, and how its hosts split the work between images and video is covered in where Pinterest actually stores your pins.
For a viewer scrolling in the app, all of this is invisible and beneficial. For someone who wants a file to keep, it is the wrong shape.
Why a playlist is not a download
Save an .m3u8 file to your computer and you have a small text file. The segments it names are still on Pinterest's servers, and the addresses may stop working once the page is gone. Some desktop players can open a playlist and stream it, but only while you are online and the links remain valid; that is not a saved video.
What you want instead is a container. A container is a file format that packages video frames, audio samples and timing information together so that any player can open it offline. MP4 is the most widely supported container, and MDN's guide to media containers explains how a container differs from the codecs inside it. Pinterest's segments already use the H.264 codec that MP4 expects; the problem is purely that they are scattered across many small files rather than joined into one.
Pinterest keeps MP4 renditions on the same CDN
Here is the part that makes a clean download possible. In our experience, when Pinterest transcodes an upload it produces the HLS variants and, alongside them, progressive MP4 files for the same renditions. Both live on v1.pinimg.com, and the pin's page data lists both. The MP4s exist so that clients without an HLS player, and certain embed contexts, can still play the video as a single file.
That means a downloader does not have to reassemble segments at all. It only needs to find the MP4 rendition that Pinterest already stored, choose the largest one, and deliver it unchanged. The MP4 is the same encoding as the streamed version, so nothing is lost relative to what the app shows, and nothing is added.
What KeepPin does to find the MP4
The steps behind the KeepPin video downloader are straightforward once you know the MP4s exist.
- Read the pin. KeepPin fetches the pin page as a logged-out visitor and locates the media block that describes the video.
- List the renditions. That block includes the streaming playlist and the MP4 renditions with their dimensions.
- Pick the largest MP4. The rendition with the greatest resolution is selected. Commonly that is 720p; higher only when the upload carried it.
- Sign a link. KeepPin creates a short-lived download link that points at the file on v1.pinimg.com. The link expires after five minutes, after which you parse the pin again.
- Stream to you. Your browser receives the bytes directly from Pinterest's CDN. Nothing is stored on KeepPin's servers and no log of the pasted link is kept.
No decoding, no re-encoding, no stitching. The file that reaches your device is the file Pinterest made.
When only HLS exists
Occasionally a pin's page data lists playlist variants but no MP4 rendition. In our experience this shows up with very recent uploads that Pinterest is still processing, and with some multi-page Idea Pins where the media is structured differently. In that situation a downloader has two honest options: join the segments into an MP4 itself, or tell you it could not find a file.
KeepPin's parser tries several ways of locating an MP4 before giving up. If none succeeds, you get a clear failure rather than a playlist masquerading as a video. Waiting a while and pasting the link again often works for fresh uploads. If it keeps failing, the ordered checklist in Pinterest video won't download: 9 causes and fixes covers the other reasons a pin can refuse to resolve, from secret boards to deleted pins.
Silent MP4s that look like GIFs
One more place where the MP4 rendition matters. Pinterest often stores animated pins not as .gif files but as short MP4s with no audio track, because MP4 compresses far better for the same motion. When you save one of those, you get an MP4 even though the app calls it a GIF. The GIF downloader returns a real .gif when Pinterest has one and an MP4 when that is what Pinterest stores. How to tell the two apart, and what to do with a silent MP4 afterwards, is covered in saving Pinterest GIFs and animated pins.
Checking that you got a real MP4
A quick sanity check after any download:
- The file name ends in .mp4, not .m3u8 or .ts.
- It is measured in megabytes, not bytes. A playlist is tiny; a video is not.
- It plays in your device's built-in player with the network switched off.
- Its properties show the dimensions you expect, commonly 1280 by 720 or 720 by 1280.
If all four hold, you have the rendition Pinterest stored, in a container any player understands, with nothing between you and the original bytes but a five-minute signed link.
Related reading
Ready to Save a Pin?
Paste any Pinterest link into KeepPin and keep the original file. Free, no account.
Download Now