yt-dlp Command Generator for TikTok
Build a yt-dlp command for a TikTok video or a whole creator profile, with file names that stay readable.
Notes for TikTok
TikTok titles are the first line of the caption, which makes for long and often unusable file names. The preset names files by uploader and id instead, which stays sortable and never collides.
Whether an unwatermarked stream is offered varies by video and region — run the command with -F to see what actually exists before assuming it is missing. Private and followers-only posts need cookies from an account that can see them.
TikTok is more than vertical video now: photo-mode posts and slideshows are served from the same URL shapes, and yt-dlp treats the multi-item ones as playlists — every slide its own entry, the backing sound as a separate audio entry where one exists. That is the platform's shape, not a failure, and there is no option that merges a slideshow back into one file. A command that seems to "only download images" has in fact downloaded exactly what the post is.
A profile URL — tiktok.com/@handle — downloads every video on the account, and it paginates, which on a prolific creator is a long run. The likes and saved tabs are visible only to the account that owns them, so those need cookies from a signed-in session. Combine whole-playlist handling with the archive file and keep-going-on-errors: a prolific account will contain at least one deleted post, and without those two options one deleted post stops the other thousand.
TikTok throttles aggressively. A download that starts fast and then crawls, or dies with a 403 partway through, is usually rate limiting rather than a broken extractor — add a speed limit, lower the parallel fragment count, and space out repeated runs. Cookies from a logged-in session raise the ceiling considerably. A VPN endpoint that many other people are also using tends to make throttling worse rather than better: the IP is already suspect before you send a request.
For the audio, -x extracts the soundtrack of a TikTok the same as anywhere else, and skips the video entirely. The "original sound" of a video is a separate item with its own page, so a track you heard on someone else's post can be fetched from the sound page without the video at all. File naming matters more here than on most platforms — caption-as-title collides the moment two posts start with the same words — which is why this preset names files by uploader and video id.