downloads videos from bsky and looks decent. dl.wlo.moe/
bluesky
Rust 27.8%
TypeScript 24.5%
CSS 15.7%
Nix 1.3%
HTML 0.7%
Shell 0.3%
Other 29.7%
8 1 0

Clone this repository

https://tangled.org/vt3e.cat/bsky-video-dl https://tangled.org/did:plc:2hcnfmbfr4ucfbjpnvjqvt3e/bsky-video-dl
git@tangled.org:vt3e.cat/bsky-video-dl git@tangled.org:did:plc:2hcnfmbfr4ucfbjpnvjqvt3e/bsky-video-dl

For self-hosted knots, clone URLs may differ based on your setup.

Download tar.gz
README.md

bsky video downloader#

download videos from bluesky posts with rust + wasm.

development setup#

git clone https://github.com/sillowww/bsky-video-dl
cd bsky-video-dl-rs
nix develop # if you use nix.

building#

wasm-pack build --target web --out-dir pkg

usage#

import init, {
  check_has_video,
  get_video_info,
  download_video,
  resolve_handle,
  parse_url
} from './pkg/bsky_video_dl.js';

await init();

// check if a post has a video
const hasVideo = await check_has_video('https://bsky.app/profile/handle.bsky.social/post/abc123');

// get video metadata
const info = await get_video_info('https://bsky.app/profile/handle.bsky.social/post/abc123');
console.log(info.cid, info.mimeType, info.size, info.aspectRatio);

// download video as bytes
const videoBytes = await download_video('https://bsky.app/profile/handle.bsky.social/post/abc123');

// create download link
const blob = new Blob([videoBytes], { type: info.mimeType });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = `video.${info.mimeType.split('/')[1]}`;
a.click();

// utility functions
const did = await resolve_handle('handle.bsky.social');
const [handle, rkey] = parse_url('https://bsky.app/profile/handle.bsky.social/post/abc123');

copying#

this project is licensed under the gnu agplv3, you can find a copy of the license in COPYING