Skip to content
This repository has been archived by the owner on Sep 5, 2023. It is now read-only.


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?


Failed to load latest commit information.
Latest commit message
Commit time
April 24, 2022 10:38
April 27, 2020 15:32
December 6, 2021 16:42
September 5, 2023 21:30
October 5, 2019 21:59
August 13, 2019 22:39
November 16, 2019 14:02
January 2, 2022 21:06
September 5, 2023 21:29
November 5, 2019 23:04
March 10, 2019 10:31
April 24, 2022 10:31
April 24, 2022 09:59
April 24, 2022 09:59
April 24, 2022 09:59
November 24, 2018 11:12


On April 4, 2023, Twitter suspended @this_vid, after nearly 5 years and millions of users. 😢

Easily download videos/GIFs off Twitter. Mention the bot (@this_vid) in a reply to the tweet containing the video, and it'll reply with a download link in a few minutes.

License: GPL v3

How this works



The bot consists of several AWS Lambda functions that work in tandem:


This function runs every 4 minutes and checks for new mentions. It publishes these new mentions as a new notification on an SNS topic. The 4-minute interval is so as to not hit Twitter's rate limits and minimize AWS Lambda usage time, while being near-realtime.


This is triggered by new notifications on the SNS topic. It:

  • processes the tweets in the message body,
  • calls Twitter's API to retrieve media links. Any video links retrieved for a tweet are stored in Redis for faster repeated access (other users requesting the same video).
  • adds the download details to the user's store in Redis. The user's store is an entry in Redis where all downloads requested by a user are cached for a certain period (48 hours).
  • attempts to reply to the user with a link to the user's download page (see section below). "Attempts" because Twitter enforces tweet limits (2400 per day, counted in 15-minute periods). If the API limits have been reached, the bot will "cool down" (not send any replies) for 10 minutes.


This is triggered by a HTTP request to the / (for instance, It renders a page showing a list of the user's recent downloads.


Renders the homepage 😁. See


This re-publishes failed tasks (stored in Redis) as a new SNS message. For now, it can only be triggered manually.