Skip to content
curl-x
blueskybluesky videohow-todownload

How to Download Bluesky Videos: The 2026 Guide

Download Bluesky videos, photos, and GIFs in original quality in 2026. Step-by-step for iPhone, Android, PC, and Mac—plus the curl trick—no login required.

Share:

Want to try it now? Paste a post link from any supported platform to download its media instantly.

Open Downloader

To download Bluesky videos, copy the public post link from the Bluesky app (Share > Copy link), paste it into a web-based Bluesky video downloader like curl-x, and save the original MP4 to your device. Bluesky has no native "save video" button, and right-clicking the player in a browser does not work the way it does on older video sites—but any public post's video, photos, or GIFs can be extracted once you have the correct bsky.app link.

This guide is for anyone who wants to save a Bluesky video for offline viewing, archiving, or reference—on iPhone, Android, Windows, or Mac—without installing an app or logging into anything.

TL;DR

  • Bluesky doesn't offer a built-in download button, and its player streams video as chunked HLS segments—not a single saveable file.
  • Copy the link to one specific post: bsky.app/profile/HANDLE/post/RKEY.
  • Paste it into curl-x, which fetches the original uploaded MP4 straight from the poster's data server, not a stream capture.
  • Public posts need no login. Private, blocked, or deleted posts can't be downloaded by any honest tool.
  • Command-line fans can skip the web UI entirely with curl -OJ.

Key takeaways

  • Bluesky video is not stored as a single downloadable file the way the app plays it—curl-x resolves the post back to the original blob on the poster's Personal Data Server (PDS) instead of capturing the streaming playlist.
  • Both handles (user.bsky.social, custom domains) and DID identifiers (did:plc:…) work as the profile segment of a post URL.
  • A single post can carry a video, up to four standalone photos, a newer 5–10 photo gallery carousel, or a GIF—curl-x handles all of them the same way.
  • Because Bluesky posts are public by default, extraction needs no account, no API key, and no browser extension.

In this guide

How Bluesky Actually Serves Video (And Why That Matters)

Bluesky runs on the AT Protocol, an open, federated network where each account's posts and media live in a personal repository hosted on a Personal Data Server (PDS)—usually Bluesky's own infrastructure, but sometimes a self-hosted server the account owner runs. Uploaded media (a video, a photo, a GIF) is stored as a blob, referenced by a content-addressed identifier called a CID. You can read the underlying spec at atproto.com.

When you open a video post in the Bluesky app or on bsky.app, the player does not load one MP4 file. It streams an adaptive HLS playlist—small chunked segments assembled on the fly for smooth playback across connection speeds. That is convenient for viewing and terrible for saving: there is no single file for a browser's "Save video as…" to grab, which is why most manual tricks for downloading Bluesky video fail or produce a broken partial clip.

curl-x sidesteps the stream entirely. It reads the post through Bluesky's public AppView API (public.api.bsky.app, the same getPostThread endpoint the app itself calls), pulls the video blob's CID out of the response, and requests the original file directly from the PDS via the com.atproto.sync.getBlob method—entering through Bluesky's bsky.social entryway, which redirects to whichever host actually stores that account's data. The result is the complete file the poster uploaded, not a screen-recorded or stitched-together copy. For the full rundown of what shipped, see curl-x Now Supports Bluesky.

Do You Need a Bluesky Account to Download Video?

No. Bluesky posts are public by default, and the AppView API that curl-x reads is the same public endpoint a logged-out visitor's browser calls when it loads bsky.app. If you can open the post without signing in, curl-x can extract it.

The flip side: if a post requires login to view—because the account is private, blocked, deactivated, or the post was deleted—the public API can't see it, and neither can curl-x or any other legitimate tool. There is no workaround that doesn't involve stolen credentials, and you shouldn't trust any downloader that claims otherwise.

curl-x needs a link to one specific post, not a profile, a feed, or a list. If you're unsure how to grab the exact URL from the app, How to Copy a Bluesky Post Link walks through every device.

Link typeExampleWorks?
Standard handle linkbsky.app/profile/user.bsky.social/post/3mq5yidyc3c2gYes
Custom-domain handlebsky.app/profile/name.example.com/post/3mq5yidyc3c2gYes
DID form (from some share sheets)bsky.app/profile/did:plc:abc123.../post/3mq5yidyc3c2gYes
Link with tracking parametersbsky.app/profile/user.bsky.social/post/3mq5yidyc3c2g?ref_src=...Yes—stripped automatically
Profile pagebsky.app/profile/user.bsky.socialNo—no single post to extract
Feed, list, or starter packNo—same reason

A handle (like user.bsky.social or a custom domain) and a DID (like did:plc:z72i7hdynmk6r22z27h6tvur) point at the same account—Bluesky's share sheet sometimes hands you one, sometimes the other, and curl-x accepts both without any conversion on your part.

What You Can Download From a Bluesky Post

Media typeWhat it isTypical save format
VideoStandard uploaded clipsMP4 (original, not HLS)
Looping GIF clipsShort clips posted as a "GIF"—Bluesky actually stores these as videoMP4
Tenor picker GIFsGIFs added from Bluesky's built-in GIF searchGIF (with an MP4 rendition offered too)
Single photoOne image attached to a postJPEG/PNG at full resolution
Multi-image postUp to four photos in one postOne file per image, in order
Gallery carouselNewer 5–10 photo formatOne file per image, in order
Quote post with attached mediaYour own media on a quote postSame as video/image above

What curl-x cannot fetch:

  • Text-only posts—there's simply no media to extract.
  • The quoted post's own media—curl-x only pulls media attached to the post you link, not media buried inside a quoted post. Link the quoted post directly instead.
  • Deleted posts and blocked or deactivated accounts.
  • Full-quality video from a small number of self-hosted accounts—Bluesky is federated, and a handful of users run their own PDS outside Bluesky's infrastructure; photo downloads from those accounts still work, but video sometimes doesn't.

Step-by-Step: Download a Bluesky Video With curl-x

  1. Open the specific post in the Bluesky app or at bsky.app—not your home feed or the account's profile grid.
  2. Copy the link. Tap the menu on the post, then Share > Copy link. On desktop, copy the URL straight from the address bar.
  3. Paste the URL into curl-x on the homepage.
  4. curl-x fetches the post's public data and lists what it found—a video, a GIF, or every photo in a multi-image post.
  5. Pick the item you want. Multi-image and gallery posts list each photo individually with its own download button.
  6. Save the file. Video and native GIFs return as MP4, ready for your device's Downloads folder or Files app.

If you started from a link someone shared in a chat rather than copying it yourself, the flow is identical—see Download a Bluesky Video From a Share Link for that exact path.

The curl Trick: Download Straight From the Terminal

Every Bluesky post curl-x supports also has a dedicated page at curl-x.com/bluesky/HANDLE/RKEY. Open that URL in a regular browser and you get the normal post page with a download button. Hit the same URL with curl or wget and you get the media file streamed back directly—no HTML, no browser needed:

curl -OJ https://www.curl-x.com/bluesky/user.bsky.social/3mq5yidyc3c2g

Swap in the handle (or DID) and record key from the bsky.app link you copied. The -O flag saves the file under its server-provided name, and -J uses the Content-Disposition header so the extension matches the actual file type. This is the same mechanic that powers curl-x's signature trick on Twitter/X and Reddit links—one paste box, one CLI command, same output either way.

Download on iPhone and iPad

  1. Open curl-x in Safari.
  2. Paste the Bluesky post link and tap Download.
  3. Confirm Safari's download prompt, then tap the download arrow beside the address bar to open the file.
  4. Tap Share > Save Video (or Save to Files) to move it into Photos or iCloud Drive.

Apple documents this download-then-move flow in Download items in Safari on iPhone. If the MP4 opens inline instead of saving, use Download Linked File from the share sheet—the same fix applies whether the source link came from Bluesky or Twitter/X.

Download on Android

  1. Copy the post link in the Bluesky app.
  2. Open Chrome (or Firefox) and go to curl-x.
  3. Paste the link, tap Download, and confirm the system save prompt.
  4. Find the file in Files or Gallery > Downloads.

If Chrome plays the video instead of saving it, use the three-dot menu > Download while the file is loading, or return to curl-x and use the direct download link it returns.

Download on PC and Mac

  1. Copy the Bluesky post URL.
  2. Open curl-x in Chrome, Firefox, Safari, or Edge.
  3. Paste the link and download.
  4. Play the MP4 from your Downloads folder with VLC, QuickTime, or your default player.

No extension or desktop client is required, and there's nothing to install—avoid any "Bluesky downloader" that asks you to run an .exe or .dmg installer.

Troubleshooting Common Errors

ProblemLikely causeFix
"Post not found"Deleted post, deactivated/blocked account, or a link to a profile/feed instead of a postRe-copy the link from the specific post; see Which Bluesky links work
Invalid URL errorPasted a profile grid or search result URLOpen the exact post and use Share > Copy link
Video won't extract but photos on the same account doRare case—account uses a self-hosted PDSNo workaround; this is a known limitation, not a bug
Download is only a thumbnail imageInterrupted request while fetching the original blobRetry—curl-x falls back to the CDN rendition only for images, never for video
Image looks lower-resolution than expectedThe CDN "fullsize" fallback was used instead of the original blobRetry the extraction; the original file is the default when the blob is reachable
curl -OJ returns an HTML error page instead of mediaHandle/record key typed incorrectly, or the post isn't publicRe-copy the exact bsky.app URL and rebuild the curl-x.com/bluesky/… link from it

For the full list of edge cases curl-x's Bluesky extractor won't cross—deleted posts, blocked accounts, self-hosted PDS video—see curl-x Now Supports Bluesky.

Legal: saving public media for personal, offline use sits in a similar gray area across every social platform—it depends on your country, the poster's rights, and how you reuse the file. Re-uploading someone else's video without permission can violate copyright law regardless of which app it came from. Bluesky's own Terms of Service govern what you may do with content on the network; when in doubt, ask the poster or repost via an embed/share instead of a re-upload.

Etiquette and safety: stick to browser-based tools that only ever ask for a public URL—never your Bluesky password or an app password. A legitimate downloader has no reason to authenticate as you: no login, no sideloaded apps, no "connect your account" prompts.

FAQ: Download Bluesky Videos

Does curl-x download Bluesky videos in original quality?

Yes. curl-x fetches the video blob directly from the poster's Personal Data Server via the AT Protocol's getBlob method, returning the exact file that was uploaded—not a re-encoded stream capture of the HLS playlist the app plays in your browser.

Do I need a Bluesky account to download a video?

No. Public posts require no login to view or extract. If the post needs an account to open—because it's private, blocked, or the account is deactivated—no downloader, including curl-x, can retrieve it.

Can I download every photo in a multi-image Bluesky post?

Yes. Standard posts hold up to four photos, and the newer gallery format holds five to ten; curl-x lists each image individually, in order, at its original uploaded resolution rather than the compressed feed preview.

Does curl-x work with Bluesky GIFs?

Yes, both kinds it supports: looping clips posted as "GIFs" (which Bluesky actually stores as MP4 video) download as MP4, and GIFs added from the built-in Tenor picker download as real .gif files with an MP4 rendition offered too.

Why did I get "post not found" on a link that opens fine in the app?

The most common causes are a deleted post, a deactivated or blocked account, or a URL that points at a profile or feed instead of a single post. Re-copy the link from the specific post using Share > Copy link and confirm it contains /post/.

Can I use curl or wget instead of the website?

Yes. Every supported post has a page at curl-x.com/bluesky/HANDLE/RKEY; hitting that URL with curl -OJ or wget streams the media file back directly, while the same link opened in a browser shows the normal download page.

Downloading public media for personal offline use is generally low-risk, but re-uploading or redistributing someone else's video without permission can violate copyright and Bluesky's Terms of Service. When you plan to repost rather than just view offline, get permission first.

Bottom Line

Downloading Bluesky videos comes down to one habit: copy the public post's link, paste it into a tool that fetches the original blob instead of the streaming playlist, and save the file. Handles, custom domains, and DID links all work the same way, and the identical trick covers photos, multi-image posts, and GIFs.

Grab a public Bluesky link you already have permission to save and try it on curl-x now. The same paste box handles Twitter/X, Threads, and Facebook too—see How to Download Twitter Videos, Threads vs. Twitter/X: Downloading Media Compared, and How to Download Facebook Videos.

Ready to download from any platform?

Try curl-x — free, fast, and no login required.

Download Now
Share: