FTDownloader

FTDownlader v1.3 (updated 28/11/25)

I created a program which can download any funscript from FapTap.net, even if the script is not available for download. If FapTap self-hosts the video, the program will also find that and ask if you want to download the source too, specifing from the qualities available. I understand there are moral concerns downloading from FapTap in categories such as paid scripts, but FapTap is public and likely not the place for paid funscripts anyway.

It’s a neat little python script (packaged as .exe) which also handles renaming of the downloaded files for you. The ensures metadata aligns correctly for your own libraries or on StashApp. Files will be saved to the same directory as the .exe.

Github Source Code

Executable File (precompiled)

I packed it as an .exe to save people from needing to download/set up the right python environment. Instead, it bundles an interpreter so you will not be installing anything on your machines. This works on any machine (Linux, Mac, Windows) if running source code in python environment, or the .exe works on windows.

Please let me know what you think and if you have any requests for improvements. Also admins, if this is not allowed I can take it down. Otherwise enjoy!

19 Likes

Can you post github of the code. I dont think ppl will be willing to download and run executables.

Very valid point. I have updated the original post with the source code on Github.

1 Like

A user friendly python app, praise the Lord and thank @susanboyle - if only any developer would take care that much!

Amazing.
Great job, works like a charme, finally a reason to visit FT again.

A tiny, small detail:

  • After downloading a self-hosted video it states - I guess the same if video wasn’t downloaded - ‘Press any key to exit…’ it doesn’t exit by pressing space - the key I usually use in such a case, seems like it needs return key.
  • Settings: Should be ‘Always download video if possible? y/n’ and ‘Always download best quality? y/n’
  • Batch downloading, i.e. a simple textfile with FapTap URL’s, line seperated, could be a specific name for the textfile i.e. ‘BatchURLs.txt’ or something.
  • If the video is not self-hosted, especially in such a batch scenario, it would be great if it could fetch the download link for the video and saves it into a textfile.

Thanks for this amazing app, love it already! :+1: :+1: :+1: :+1: :+1:

1 Like

the command window is nice, how about when finished it just loops to the begining again, we can always kill the window

or a do another y/n prompt with [y] as default

Thank you for your feedback @CertainlyWicked and @qksilver ! I have successfully incorporated all of these suggestions into a new working version which has been updated now.

Changes:

  • Batch downloading added. Just create a ‘bulk.txt’ file with line separated links in the same directory as the .exe or python script. Also addresses the ‘do another y/n prompt/’ situation by adding your links into bulk.txt to iterate through.
  • Auto-download videos (default for any video download is highest quality available)
  • Removed ‘press any key to exit’ prompt as not needed; script will close itself when complete.
  • Terminal redesign for ease of use.

The only thing I cannot add for now is fetching download links of videos that are not self-hosted (EXTServer) for a new .txt file because the source links may be embedded/generated dynamically which prevents grabbing unless I go down the playwright browser manipulation route to trigger JS.

2 Likes

Not packed as an exe this time?
The mega link in the first post is the same.

Thanks for considering, it’s a great app nevertheless. :slight_smile:

My bad, I thought uploading a new version over the MEGA file would automatically sync with the link. I’ve now updated the link for v.1.1. Thank you

2 Likes

Just tested and got an error with one entry of the bulk - others work -, my first guess maybe the filename with the " in it.

Brings me to another suggestion, a log-file, errors if happening, but also the urls from the bulk file (as they are in there, maybe additional the funscript name, an empty line between urls for better readability) for videos that couldn’t get download, so that I can easily copy the links from the log to get those not-downloaded ones manually afterwards.

I’ve updated the code to address these changes and recompiled the .exe, available to download on GitHub here: Release V1.2 · lyra123/FTDownloader · GitHub

Added features:

  • Will generate a failed_downloads.txt and append any videos in auto-download which did not have a source. This helps to keep consistency and knowing what videos you have and do not have.

  • Updated downloader logic to avoid bug which spams console.

  • Now cleans data before downloading and renaming files to avoid breaking loops.

1 Like

Runs - nearly - perfectly, thanks again.
There is just one little cosmetic glitch I came across:

Summary

Happens in bulk as well as with single download, but only with this video, other downloads are displayed as they should.

faptap video link

It’s not a real problem, the download still works fine, I’m happy with the tool as it is, just mention in case you want to fix it.

Confirmed working perfectly without privileges on linux (fedora). Thanks for sharing.

Are there any similar scripts in python that can be used for other download-resisting sites?

1 Like

amazing app! Very fast download. One thing is the converted script’s size is quite bigger than the direct downloaded one. Is there anything to be optimized?

Thank you for the feedback everyone! I’m pushing a new update tonight. @Coreshirataki if you could send me a message with any specific sites or ideas, I can look into this with you. :slight_smile:

Changes:

  • Reduced generated funscript filesize by ~67.2% (thank you @Socket7love for spotting). I was using pretty-print json instead of compact like the original files. All actions are preserved and data integrity has been verified in testing.
  • Line-spam issue has also been fixed (:crossed_fingers:testing welcome). This was caused by terminal buffering issues and has been fixed by replacing print() with sys.stdout.write() and flush() for inline updates.
1 Like

Great update! Thank you! I just wonder why the app needs to close itself automatically after each single download?

Seems like it downloads 720p versions of the video when there are higher resolutions available. Is it possible to select the best resolution available?

Awesome app by the way :slight_smile:

Great, I built an app that hosts the videos and scripts on a website similar to Faptap locally, since I was having issues with videos there before. I can use this to automatically get new videos.