Skip to content
curl-x
blueskybluesky videohow-todownload

Download a Bluesky Video From a Share Link (2026)

Got a bsky.app/profile/.../post/... share link? Paste it into curl-x and save the original MP4 in seconds—no app, login, or bsky.app link downloader install.

Share:

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

Open Downloader

To download a Bluesky video from a share link, copy the full bsky.app/profile/HANDLE/post/RKEY URL from the Bluesky app's Share → Copy link button, open curl-x in any browser, paste the link, and save the MP4. That URL already points at one public post—there is no separate video ID to dig up, and no bsky.app login required to fetch it.

This guide is for anyone who received a Bluesky share link in a group chat, Discord server, or another app and wants the actual video file—on iPhone, Android, Windows, or Mac.

TL;DR

  • Bluesky share links look like bsky.app/profile/user.bsky.social/post/3mq5yidyc3c2g.
  • Paste the entire URL—curl-x strips tracking query strings automatically.
  • Open curl-x in a regular browser tab, paste the link, and download the video.
  • curl-x fetches the original uploaded MP4, not a re-encoded stream capture.
  • Handles and did:plc: identifiers both work as the profile segment.
  • Deleted posts, blocked accounts, or profile/feed links won't extract—curl-x needs one specific post.

Key takeaways

  • A Bluesky share link is a direct pointer to one post, not a shortened redirect like Facebook or TikTok share URLs—there's no extra hop to resolve.
  • Bluesky is built on the AT Protocol, and public posts have no login wall, so curl-x reads the same data a logged-out visitor sees.
  • curl-x resolves the link back to the poster's original uploaded blob, sidestepping the HLS-style playlist the Bluesky app streams in the browser.
  • GIFs on Bluesky come in two forms—looping clips stored as MP4, and Tenor-picker GIFs—and curl-x handles both.

In this guide

  1. In the Bluesky app, open the post and tap Share → Copy link
  2. Open a browser and go to curl-x
  3. Paste the full bsky.app/profile/.../post/... URL and start the extraction
  4. Download the MP4 that curl-x returns

That four-step flow works for any public Bluesky post with a video in under a minute. If you'd rather skip the web form entirely, jump to the curl trick further down, or read the fuller walkthrough in how to copy a Bluesky post link and how to download Bluesky videos.

When you tap Share → Copy link on a Bluesky post, the app puts a URL like this on your clipboard:

https://bsky.app/profile/user.bsky.social/post/3mq5yidyc3c2g

Unlike Facebook's /share/v/CODE or TikTok's vm.tiktok.com short links, a Bluesky share link is not a redirect wrapper. It's the canonical address of the post itself: the profile segment names the author, and the post segment carries the record key (rkey)—a short identifier Bluesky's AT Protocol assigns when the post is created. There's no intermediate hop for curl-x to follow before it can read the post.

That directness is a byproduct of how Bluesky is built. It runs on the AT Protocol, an open, federated network where every post is a signed record stored in the author's personal data repository (their "PDS"). The bsky.app web and mobile apps are just one client reading that public data—curl-x is, functionally, another one. If you want the protocol-level detail, atproto.com's documentation covers how posts, repositories, and blob storage fit together.

The segment right after /profile/ can appear in two different forms, and curl-x accepts both:

FormExampleWhere you see it
Handleuser.bsky.social or a custom domain like name.example.comStandard Copy link output
DID (decentralized identifier)did:plc:abc123xyz…Some share sheets, embeds, and third-party tools

A handle is a human-readable name; a DID is the permanent, unique identifier behind it (handles can change owners or expire, DIDs don't). Both resolve to the same underlying account, and curl-x's parser matches either pattern in the profile segment of the URL—you don't need to convert one to the other before pasting.

Why There's No Login Wall

Unlike Facebook or Instagram, where a share link can dead-end at a login prompt, public Bluesky posts have no login wall by design. The AT Protocol treats public posts as, well, public: anyone (a person, a browser, or a script) can read them without an account. curl-x calls the same public AppView endpoint (public.api.bsky.app) that powers the logged-out bsky.app experience, so if you can see a post while signed out, curl-x can extract it too.

The one exception is federation: Bluesky lets people run their own personal server (PDS) instead of Bluesky's. For the small number of accounts that self-host, photo extraction still works, but full-quality video sometimes doesn't resolve—see Bluesky's support docs for how self-hosting works on the network.

In the Bluesky app (iOS or Android):

  1. Open the post with the video
  2. Tap the share icon (or the ··· menu) below the post
  3. Tap Share → Copy link

On desktop (bsky.app in a browser):

  1. Open the post
  2. Click the share icon
  3. Choose Copy link, or just copy the URL from the address bar—it's already the post URL

Confirm the clipboard contains /profile/ and /post/—those two segments mean you copied a single post, not a profile or feed link.

  1. Go to curl-x in Safari, Chrome, Firefox, or Edge
  2. Paste the full URL into the input box
  3. Tap or click Download

curl-x parses the handle (or DID) and record key from the URL, queries Bluesky's public post-thread API, and resolves the video embed back to the original file.

Step 3: Save the MP4

curl-x hands back the original uploaded video, not the HLS playlist the app streams. Tap or click the download button and the MP4 lands in your browser's downloads location—see the device notes below for where to find it.

The curl download trick

Every Bluesky post curl-x can extract also has a dedicated page at /bluesky/[actor]/[rkey]—and that page is a real file when a command-line client asks for it. Take the handle and record key straight out of the bsky.app URL:

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

Run that and curl streams the video back as a file, no browser involved. Open the exact same curl-x.com/bluesky/... URL in a normal browser and you get the regular post page with a download button instead—same link, two audiences. This is the same mechanic that powers curl-x's /[username]/status/[tweetId] pages on Twitter/X.

curl-x's parser matches one URL shape: bsky.app/profile/<actor>/post/<rkey>, with an optional www. prefix and trailing slash.

Link typeExample patternWorks?
Standard handlebsky.app/profile/user.bsky.social/post/3mq5yidyc3c2gYes
Custom-domain handlebsky.app/profile/name.example.com/post/3mq5yidyc3c2gYes
DID formbsky.app/profile/did:plc:abc123.../post/3mq5yidyc3c2gYes
With www.www.bsky.app/profile/user.bsky.social/post/3mq5yidyc3c2gYes
With tracking params.../post/3mq5yidyc3c2g?ref=shareYes—stripped automatically

Does not work:

Link typeWhy
Profile page (bsky.app/profile/user.bsky.social)No single post to extract
Feed, list, or starter pack URLNot a post record
Deleted postAT Protocol record no longer exists
Blocked or deactivated accountPublic API can't see the post
Quote post with no attached mediacurl-x reads media attached to the linked post, not the quoted one

Visibility check: open the link in a private/incognito tab while logged out. If you can see the video there, curl-x can extract it—Bluesky share links inherit the underlying post's visibility, they don't add or remove access.

Video, Images, and GIFs: What You Actually Get

Bluesky posts carry different embed types, and curl-x handles each one differently:

Post containsWhat curl-x returnsNotes
VideoOriginal MP4Resolved from the poster's uploaded blob, not the streaming playlist
Single imageOriginal file (JPEG/PNG/WebP as uploaded)Full resolution, plus the CDN rendition as a fallback
Multi-image post (up to 4 or more)Each photo separately, in orderEvery image gets its own download
Looping GIF clipMP4Bluesky stores "GIFs" recorded in-app as actual video
Tenor/Klipy picker GIF.gif file (with an MP4 rendition when derivable)Picker GIFs are external embeds, not uploaded blobs
Quote post with attached mediaThe attached mediacurl-x does not reach into the quoted post

The practical upshot: right-clicking a video frame in your browser and choosing "Save" doesn't work on Bluesky at all (there's no static image to save), and saving a screen recording throws away resolution and audio sync. curl-x's approach—reading the original blob straight from Bluesky's storage—gets you the same file the poster uploaded.

Device-Specific Save Tips

iPhone and iPad (Safari)

  1. After curl-x serves the file, tap the download arrow in Safari's toolbar
  2. Open the MP4 from Files → Downloads
  3. Tap Share → Save Video to move it into Photos

If Safari tries to play the video inline instead of downloading it, long-press the player and choose Download Linked File. The same steps apply on Twitter—see how to save Twitter videos to Files on iPhone for the equivalent walkthrough.

Android (Chrome)

  1. Pull down the notification shade and tap the finished download
  2. To make the clip show up in Gallery, move it to DCIM/Camera or trigger a media scan

Windows, Mac, and Chromebook

The MP4 saves straight to your browser's Downloads folder—drag it into a video editor or slideshow from there.

SymptomLikely causeFix
Invalid URLCopied a profile or feed link, not a postRe-copy from Share → Copy link on the specific post
Post not foundPost deleted, account blocked/deactivatedOpen the link in a private tab logged out to confirm it still loads
No media foundText-only post, or media only in a quoted postLink the post (or the quoted post) that actually has the attachment
Video missing on a working postRare case: poster's account self-hosts its own PDSPhoto extraction still works; full video may not resolve
Extraction times outBluesky API is momentarily slowWait a few seconds and retry
Rate limitedToo many rapid extractionsWait 30–60 seconds and try again
Only a GIF preview, no videoThe post used an external Tenor/Klipy embed, not uploaded videoExpected—curl-x still returns the .gif/MP4 file for that embed

Copy the post's bsky.app/profile/HANDLE/post/RKEY link using Share → Copy link, then paste it into curl-x and download the MP4 it returns. No account or app install is required as long as the post is public.

curl-x acts as one: paste any public bsky.app post URL and it returns the original video, photo, or GIF as a file. It also runs the same extraction from the command line via curl -OJ https://www.curl-x.com/bluesky/HANDLE/RKEY.

Can I save a Bluesky video without the app?

Yes. The share link is a normal web URL, so you never need the Bluesky app itself—open it on desktop, paste it into curl-x, and save the MP4 directly to your computer or phone's Downloads folder.

Yes. curl-x's parser accepts both a handle (user.bsky.social, or a custom domain) and a did:plc: identifier in the profile segment of the URL—both point at the same account and extract identically.

Why did my share link fail with "post not found"?

The most common causes are a deleted post, a deactivated or blocked account, or a link that actually points to a profile or feed instead of one post. Double-check you copied the link from Share → Copy link on the post itself, not the author's profile page.

Do I need to be logged in to Bluesky to download a video?

No. Public Bluesky posts have no login wall—curl-x reads them the same way a logged-out visitor's browser would. If a post requires login to view (a private account or a blocked relationship), no downloader can bypass that.

Downloading public media for personal, offline viewing is generally low-risk, but re-uploading someone else's video without permission can violate copyright and Bluesky's Terms of Service and community guidelines. When in doubt, ask the poster or repost the original link instead of re-uploading the file.


Bottom line: a Bluesky share link already points straight at the post—paste it into curl-x, skip the login wall entirely, and save the original MP4 in a couple of clicks. For the full rundown of what shipped and where support currently stops, read curl-x now supports Bluesky, or go deeper on link formats and multi-image posts with how to copy a Bluesky post link and how to download Bluesky videos. The same paste-and-download flow works across curl-x's other platforms too: Twitter/X, Facebook, Instagram, Threads, Reddit, and TikTok.

Ready to download from any platform?

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

Download Now
Share: