Say hello to `threadcat`!
-
Correct me if I am wrong:
You wrote a tool that enables people to download complete Mastodon threads from other participants / on other instances?
So that's NOT made for collecting OWN content, but for other people's content?
One question:
Isn't that called STEALING?
@khzimmer2 lol. read the post again. the fourth sentence
-
Say hello to `threadcat`! π§Ά

It's a little Rust tool which takes the URL to a Mastodon thread, and converts it to a Markdown file. It also downloads all attached media files (and their alt texts)!
That way, it's really easy to get a "first draft" for a blog post from a thread you wrote!
Installation: `cargo install threadcat`
@blinry this sounds awesome. i keep wasting time copying and pasting my threads into my notes app, i will definitely try this next time
-
`threadcat` downloads files using their original filename on the Mastodon server. So you'll end up with a lot of files like "f55dbddca60e64cb.jpg"β¦
I tried deriving better filenames from the alt text β for example, taking the first two "non-filler" words from the alt text. That gives you filenames like "colorful-circles.jpg", "small-grey.jpg" or "drawing-snow.jpg", and possibly "drawing-snow-2.jpg".
Another option would just be using timestamps: "2026-04-17T13:54Z.jpg"
What do you think?
@blinry those alt text filenames are a fun and useful feature! i think a combo could be good sense, either
[post-id]-colourful-circles.jpgor[timestamp]-colourful-circles.jpg- that way it's both in some useful order and readable as well -
System shared this topic
-
`threadcat` downloads files using their original filename on the Mastodon server. So you'll end up with a lot of files like "f55dbddca60e64cb.jpg"β¦
I tried deriving better filenames from the alt text β for example, taking the first two "non-filler" words from the alt text. That gives you filenames like "colorful-circles.jpg", "small-grey.jpg" or "drawing-snow.jpg", and possibly "drawing-snow-2.jpg".
Another option would just be using timestamps: "2026-04-17T13:54Z.jpg"
What do you think?
@blinry I have not tried using threadcat yet, but my hunch would be to keep the original filename (ensures there are no collisions) and add some metadata.
Depending on how you handle individual posts, maybe add the post ID or the ID of the anchor in your output. Having all media from a specific post in a dedicated subdirectory might be useful? -
@blinry I like "non-filler words from alt text", but maybe prefix with an incremental ID so they are sorted the same as in the post?
@jer @blinry I like that too! (I have a script to generate message IDs for mails which does a similiar thing
https://github.com/rohieb/dotfiles/blob/master/.neomutt/gen-msgid.sh ) -
`threadcat` downloads files using their original filename on the Mastodon server. So you'll end up with a lot of files like "f55dbddca60e64cb.jpg"β¦
I tried deriving better filenames from the alt text β for example, taking the first two "non-filler" words from the alt text. That gives you filenames like "colorful-circles.jpg", "small-grey.jpg" or "drawing-snow.jpg", and possibly "drawing-snow-2.jpg".
Another option would just be using timestamps: "2026-04-17T13:54Z.jpg"
What do you think?
@blinry throwing the post id in there sounds reasonable. Will threadcat also download someone elseβs threads if my account is allowed to read them?
-
Say hello to `threadcat`! π§Ά

It's a little Rust tool which takes the URL to a Mastodon thread, and converts it to a Markdown file. It also downloads all attached media files (and their alt texts)!
That way, it's really easy to get a "first draft" for a blog post from a thread you wrote!
Installation: `cargo install threadcat`
@blinry grand little tool, and just what I need to help in copy/pasting text from toots!
Could do with a Usage message, if I may say so.
$ ~/.cargo/bin/threadcat
thread 'main' (89252287) panicked at
-
@blinry grand little tool, and just what I need to help in copy/pasting text from toots!
Could do with a Usage message, if I may say so.
$ ~/.cargo/bin/threadcat
thread 'main' (89252287) panicked at
@jpmens Already added that today!
https://codeberg.org/blinry/threadcat/commit/7aaa4daec08bc3cb1da35bf3c0cb9ac58a390953 -
@blinry throwing the post id in there sounds reasonable. Will threadcat also download someone elseβs threads if my account is allowed to read them?
@chrismarquardt Jup!
-
@jpmens Already added that today!
https://codeberg.org/blinry/threadcat/commit/7aaa4daec08bc3cb1da35bf3c0cb9ac58a390953@blinry oh, I built just half an hour or so ago; must have missed it
-
Uhm, the poster nick before the alt-text would allow you to group images by the author, too.
-
Say hello to `threadcat`! π§Ά

It's a little Rust tool which takes the URL to a Mastodon thread, and converts it to a Markdown file. It also downloads all attached media files (and their alt texts)!
That way, it's really easy to get a "first draft" for a blog post from a thread you wrote!
Installation: `cargo install threadcat`
@blinry I was looking for a tool like this one 2 days ago lol
-
I've been hacking on it a lot this week, with my silly human hands, and it's been a lot of fun!
Right now, it can only read threads from Mastodon, and only output Markdown, but both directions could be extended.
To try it out, I've been using it to publish one blog post each day this week β you might have noticed!

@blinry@chaos.social
Freakin nice toolI'm on Pleroma so I'm gotta keep an eye out for when that's available

-
`threadcat` downloads files using their original filename on the Mastodon server. So you'll end up with a lot of files like "f55dbddca60e64cb.jpg"β¦
I tried deriving better filenames from the alt text β for example, taking the first two "non-filler" words from the alt text. That gives you filenames like "colorful-circles.jpg", "small-grey.jpg" or "drawing-snow.jpg", and possibly "drawing-snow-2.jpg".
Another option would just be using timestamps: "2026-04-17T13:54Z.jpg"
What do you think?
-
@blinry@chaos.social
Freakin nice toolI'm on Pleroma so I'm gotta keep an eye out for when that's available

@irrlicht The Rust library I'm using even support Pleroma directly, so adding support wouldn't be that hard, I hope! \o/ https://docs.rs/megalodon/latest/megalodon/
-
@waffles That sounds like a tool I'd love, as well, but it seems out of scope for threadcat. Maybe something like that even already exists?
@blinry my terrible memory recalls something like that, but I never really trust βflash in the panβ abandonware, so I was casually hopeful that yours might serve

Anyways, congrats on the new project!
-
R relay@relay.mycrowd.ca shared this topic
οΈ
οΈ