Support Ways to rip entire TikTok profile?

splinterKills

Stanner Supreme
316,458
376
83
Hey boys, I was wondering if there are any applications, programs or browser extensions that let you rip an entire TikTok profile. I've been looking around for something like that for a while now, but only found old, non-working programs or ones that will only let you download one by one. If anyone knows something like that it'd be greatly appreciated! Thank you in advance.
 
Hi there , sorry to bother. So I ended up trying this method, hoping it would work and surprisingly it did. (Not sure if it stops or bugs when it reaches a certain threshold of videos or something, the profile had like 300 videos and managed to grab them all.) However it doesn't download them in what, I believe, could be a higher quality. Ex: Downloading from tiktok directly provides a larger file size, compared to that of the script, not sure if that correlates exactly to higher resolution/quality. (The only real difference, while looking at the property details, are the frame (width & height) and the rates (data, bit and frame) Anyway, to make a long story short, is this meant to happen? or is there a way to get a higher resolution/quality, if any at all? Apologies if anything comes across redundant, just trying to get some clarification, as I'm trying familiarize with these programs. just got around to looking into this. it's an . changing my command to Code: yt-dlp --format "bv*+ba/b" -o "path/to/your/downloads/%(uploader)s/%(id)s.%(ext)s" https://www.tiktok.com/@ChangeUsernameHere would work. although profile pages seem to have broke this morning for yt-dlp, so adding the --format param to my other method should do the trick
 
Since yt-dlp is still broken for crawling user pages, but still works ok for downloading direct video links, I made a bookmarklet for getting them all copied to your clipboard quicker than using other extensions, and typing filters, etc. JavaScript: javascript: function notify(message, username) { var h2 = document.querySelector('h2[data-e2e="user-title"]'); var h1 = document.querySelector('h1[data-e2e="user-subtitle"]'); h2.innerHTML = message; h1.innerHTML = 'from @' + username + '.'; } function send_links_to_list(tiktok_username) { var link_filter = tiktok_username + '/video'; var links = document.getElementsByTagName('a'); var found_links = []; for (var i = 0; i < links.length; i++) { if (links.href.indexOf(link_filter) > -1) { found_links.push(links.href); } } return found_links; } function main() { var current_url = window.location.href; if (current_url.includes("tiktok.com/@")) { var tiktok_username = current_url.split("@")[1].split("/")[0]; if (tiktok_username.includes("?")) { tiktok_username = tiktok_username.split("?")[0]; } var found_links = send_links_to_list(tiktok_username); var copyListener = event => { document.removeEventListener("copy", copyListener, true); event.preventDefault(); let clipboardData = event.clipboardData; clipboardData.clearData(); clipboardData.setData("text/plain", found_links.join("\n")); }; document.addEventListener("copy", copyListener, true); document.execCommand("copy"); document.body.lastElementChild.setAttribute("hidden", "hidden"); document.preventDefault; window.scrollTo(0, 0); notify(found_links.length + " links copied", tiktok_username); } else { alert("This script only works on TikTok profiles."); } } main(); and then just throw that code into to make it a clickable function. so just load up a tiktok profile, scroll to the bottom, click the bookmarklet, then once you have your links, place them into a text file and run this from your terminal Code: yt-dlp -o "path/to/your/tiktoks/%(uploader)s/%(id)s.%(ext)s" -a your_text_file.txt --format "bv*+ba/b" if anyone who's proficient at js would add the scrolling to bottom step to it, please do so. I couldn't get a function for that to work right, since I'm a noob at js, and pretty much using copilot to write this for me, since all i know is python.
 
This would actually be very easy for me to include in my mass downloader. I just don't know if there is any interest. I'd def be interested at least! , if you plan to support full profiles. Since the maintainer of yt-dlp .
 
Just consolidating my solutions into a single post and I will update it for future changes. To attempt to rip entire profiles (updated 2023-12-14): yt-dlp has been broken for scraping entire profiles for a bit, but someone made a working yt-dlp plugin. 1. make sure python 3 is installed and in your path (its a checkbox you need to select during installation) 2. then enter this command in your cmd or terminal. Code: python -m pip install -U https://github.com/bashonly/yt-dlp-TTUser/archive/master.zip 3. then close any terminals/cmd prompts you have open, and then reopen them to update your paths/profile. 4. then run this command in either your cmd or terminal Code: yt-dlp https://www.tiktok.com/@ChangeUsernameHere -o "path/to/your/downloads/%(uploader)s/%(id)s.%(ext)s" --format "bv*+ba/b" --download-archive history.txt To manually grab links and THEN download: 1. Get Tampermonkey 2. Add . JavaScript: // ==UserScript== // @name TikTok Profile Enhancer // @description Just some fun enhancements for TikTok. // @version 1.1.2 // @author ne0liberal // @namespace https://www.tiktok.com/ // @match https://www.tiktok.com/* // @updateURL // @downloadURL // @grant none // @run-at document-idle // @noframes // ==/UserScript== // USAGE: // 1. Open a TikTok profile. // 2. Start the script by pressing "Ctrl + Alt + A". // 3. Wait for the script to complete its operation. // - To halt the script, simply press "Alt + A". The links that were loaded prior to stopping the script will be copied. javascript: (function () { function main() { const sleepTimeout = 750; let shouldStop = false; document.addEventListener("keydown", (event) => { if (event.code === "KeyA" && event.altKey) { shouldStop = true; } }); function notify(message, username) { const h2 = document.querySelector('h2[data-e2e="user-title"]'); const h1 = document.querySelector('h1[data-e2e="user-subtitle"]'); h2.innerHTML = message; h1.innerHTML = `from @${username}.`; } function filterLinks(tiktokUsername) { const linkFilter = `${tiktokUsername}/video`; const links = Array.from(document.querySelectorAll('a')); return links.reduce((foundLinks, link) => { if (link.href.includes(linkFilter)) { foundLinks.push(link.href); } if (link === links[links.length - 1]) { foundLinks.push(""); } return foundLinks; }, []); } function linksToClipboard(tiktokUsername) { const foundLinks = filterLinks(tiktokUsername); navigator.clipboard.writeText(foundLinks.join("\n")); window.scrollTo(0, 0); notify(`${foundLinks.length - 1} links copied`, tiktokUsername); } function jumpToBottom(tiktokUsername) { window.scrollTo(0, document.body.scrollHeight); let intervalCount = 0; const intervalId = setInterval(function () { if (shouldStop) { clearInterval(intervalId); linksToClipboard(tiktokUsername); return; } const currentScrollHeight = document.body.scrollHeight; window.scrollTo(0, currentScrollHeight); if (intervalCount % 500 === 0) { window.scrollTo(0, window.scrollY - 5); } if (window.innerHeight + window.scrollY >= currentScrollHeight) { setTimeout(function () { const updatedScrollHeight = document.body.scrollHeight; if (currentScrollHeight === updatedScrollHeight) { setTimeout(function () { const doubleCheckScrollHeight = document.body.scrollHeight; if (updatedScrollHeight === doubleCheckScrollHeight) { clearInterval(intervalId); linksToClipboard(tiktokUsername); } }, sleepTimeout); } }, sleepTimeout); } intervalCount++; }, 10); } if (window.location.href.includes("tiktok.com/@")) { const tiktokUsername = window.location.href.split("@")[1].split("/")[0].split("?")[0]; jumpToBottom(tiktokUsername); } else { alert("This script only works on TikTok profiles."); } } console.log(`TikTok Profile Enhancer loaded. Version: ${GM_info.script.version}`); document.addEventListener("keydown", (event) => { if (event.code === "KeyA" && event.altKey && event.ctrlKey) { main(); } }); })(); 3. Go to a tiktok profile and press ctrl+alt+a 4. Once it scrolls back to the top all of the links should be in your clipboard. 5. Create a text file, save it somewhere you remember and paste the links inside. 6. Make sure Python 3 is installed and in your path (its a checkbox you need to select during installation) (avoid the microsoft store version) 7. Enter the following line in your command prompt / terminal. Code: yt-dlp -o "path/to/your/tiktoks/%(uploader)s/%(id)s.%(ext)s" -a your_text_file.txt --format "bv*+ba/b" --download-archive history.txt 8. Be sure to alter the paths. And then press enter! Changes: Took a long time, but finally got the most optimal infinite scroll in js I could for tiktok that only took me ~60 seconds to load 1000 videos. Updated the script to ONLY run on "" urls. Sped up the crawl a little more. Added a hotkey (alt + a) to manually stop scrolling if you just want to catch the links as is. Completely moved to a userscript base. Fixed the slippery auto scroll that would happen if we jiggled too soon. Upcoming: Working on a solution to input a list of users, and then have the browser crawl every profile entirely and give you all of the video links when complete. Once that is completed MAYBE turn this whole thing into a wonky unpacked extension.
 
Sorry, new post to followup to my past post: Found that the "playwright" has a prerequisite, that's why the playwright install didnt work pip install pytest-playwright then playwright install after that post works!! edit2: after it downloads all the video stream URLs it then starts downloading the entire account, so dont worry if you dont see videos appearing when it has '[tiktok:user] 7200888471676833067: Downloading video feed'! - it will batch it all at the end edit: need 's input but the script throws some errors sometimes, not sure if its just because of random videos/missing content, or the like, i will have to check the individual tiktok video IDs with the error output, its probably due to the fork they suggested/used due to the official/main fork being broken for full profile scrapes, i would output all downloading to a txt file so you can find the 'missing' ones and try with alternate methods or a teleg bot EDIT2: the errors I believe are probably due to non-video tiktoks, those 'slideshows' i have seen a few times, because I tried both the full profile scrape method + the URL grab via 's userscript, both outputted the same # of files, despite the input # being different (i.e. an account had 204 links scraped via the userscript, but the full profile scrape only got me 198, and the output was 197 files - who knows)
 
I'm really glad to see other people trying to find ways to rip entire tiktok profiles with no watermark. This thing has been driving me mad for the past two months. I used to use the firefox extension "TikTokTik", which gave low resolution, watermaked vids, but that was good enough. But then Tiktok decided to change their watermark a few months ago, and now instead of having a discreet watermark in the corners, they have a huge watermark right in the middle of the video. Since then I have been trying to find a way to download entire tiktok profiles without watermark, and I have tried SO MANY different scripts and extensions that either don't work anymore, or do work but are not downloading everything. Currently, here are the best contenders : - . You feed it a list of links (I used the Google chrome extension "Link Grabber" before but neoliberal's script works even better), and it downloads videos without watermark in 576p (sadly not max res but close) and manages to pull every video every time. Has one major issue though : the videos downloaded don't have the video ID in the filename. This means that if this program ever breaks down, it will be a nightmare to use something else and mix the files. Also, doesn't create folders for accounts on its own. - . Works amazingly well with douyin links, you can feed it a profile link and it gets every video and image posts without watermark in full res (720p), and creates a folder for each account. Sadly, I didn't manage to make it work with tiktok profile/video links. It would have been the perfect tool if it did. - . If you feed it a single video link, it will let you download it without watermark in full res (720p). To my knowledge it is the only way to get full res videos from tiktok, other sites like Snaptik only give 576p. You can also feed it a profile link, but it won't get every video, and you'll only be able to get 576p versions, so it doesn't work for full profiles but I had to mention it for the single 720p vids. - Link grabbing script + Jdownloader2. Gets vids without watermark in 576p. Some of the vids don't get downloaded and you have to go grab them manually. You have to make folders for each account manually. Slow, tedious, makes me wanna kms, but that's what I'm currently using. - And lastly, neoliberal's custom solution using yt-dlp, "To manually grab links and THEN download" (not the yt-dlp profile ripper, I had already tried that before and it didn't work). Looks super promising and I was really hyped when I read this thread, but weirdly, maybe 80% of the videos that it downloads are missing frames and freezing during the first second. If you compare those videos with the same video downloaded with another tool, you can see that they much smaller in size too. I don't know if it's a problem on my end or if it's a new bug with yt-dlp that wasn't there when neoliberal wrote his post. If it wasn't for this bug, this would defintely be the solution that I use. Edit : Problem was on my end. neoliberal's solution works perfectly, downloads in full HD no watermark, and creates folders for each account. It's the best. Though there is one thing I noticed, some of the vids can't be pulled with yt-dlp, but TikDown can. It would be nice if yt-dlp created a .txt files to let us know which urls didn't get downloaded. I'll see if this can be added to the command.
 
you can hijack the tikwm link for any video by pasting the end of the tiktok video URL in this format: e.g. for the following video (ID is 7203265886373874987; idk how to disable the embed) it would be and it'll redirect you to the . so if you get all the URLs for a profile using something like neoliberal's script, you can easily automate getting all the associated tikwm links. this won't work for images, but tiktok doesn't lock down image albums as much as they do videos so it's a lot easier to write a script to scrape those
 
Interesting! Awesome, I'm going to mess with this. Re: the captcha. It's just the norm of how automating tiktok works atm. If you're interested in how the current fork of yt-dlp works that bypasses that: i'll take a look at that, thanks! will take me a while to understand it though lol edit - you linked the wrong branch. the link for the one you posted earlier that works is:
 
wrote a new scraper based on the yt-dlp fork. too long to post here, so uploaded to 0bin: decryption key (add to URL after a #) is: fn+erbWj9iYmRc6RkSmHxQ46RudIySnW9zeIXukBnYe inputs: - MAX_RETRIES (for getting video IDs) - PRINT_OUTPUTS (obvious) - RETRY_FAILED (retry failed downloads from previous runs) - HOME_DIR (where to save files relative to .py file) - USER_NAME_LIST (list of user names) python packages: - - - (optional)
 
curious, does your script grab a) videos in 1080p ? b) images+m4a for the slideshow posts ? thanks for the contribution. may check it out soon when i have a chance, currently i found my own workarounds, but the past script i used off that forked yt-dlp only gave me 720p@hevc a) it grabs the tikwm hd download. it has gotten 1080*1920 videos for me (e.g. ) b) it grabs images. does not grab audio
 
to get it running: 1) install 2) install the packages in my post with pip (they are not auto installed) 3) save the code in a file called app.py (or another name) 4) enter the inputs as explained in my post 5) run the program by putting " app.py" in cmd/terminal
 
also, is there any software to download tiktok lives? I use . Just open a live in a tab, select it in the extension, and it will start downloading it. You can even change tabs and do something else and it will keep downloading the live in the background.
 
, do u know how to solve? Code: Scraping profile 1/1 Scraping *username Creating new json for *username Could not find latest video ID for *username Skipping *username there's no tiktok account called *username
 
its an example of account name lol. real user is viviane.mei i can't figure out what's wrong without the username. it's not working because her embed says her profile is not available: if you change the get_latest_video_id_list function to: Python: def get_latest_video_id_list(self): return ['7198336588873469189'] it should work. this will only work for her account, since 7198336588873469189 is a video ID from her account. you'll have to change it back to the original function for other accounts.
 
updated the code to fix some bugs. key: FPHd5xVbTaZVA-AsM1lqAPcrrgsQvOaz/9eLiqxtL6U new input: - CHECK_INPUTS (will check if inputs are formatted correctly)
 
updated the code to fix some bugs. key: FPHd5xVbTaZVA-AsM1lqAPcrrgsQvOaz/9eLiqxtL6U new input: - CHECK_INPUTS (will check if inputs are formatted correctly) Btw how do i fix it that there isn't no preview like in every mp4? Because my folder basically looks like this
explorer_WN7c5FnMBe.md.png
 

Log in

or Log in using

Log in

or Log in using
Top