<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: WENMING LU</title>
    <description>The latest articles on DEV Community by WENMING LU (@wenminglu).</description>
    <link>https://dev.to/wenminglu</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4236671%2F46997e12-1a08-4386-8091-715d19e198d7.png</url>
      <title>DEV Community: WENMING LU</title>
      <link>https://dev.to/wenminglu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/wenminglu"/>
    <language>en</language>
    <item>
      <title>What I learned about TikTok's hidden video copies while building a downloader</title>
      <dc:creator>WENMING LU</dc:creator>
      <pubDate>Tue, 10 Nov 2026 09:11:57 +0000</pubDate>
      <link>https://dev.to/wenminglu/what-i-learned-about-tiktoks-hidden-video-copies-while-building-a-downloader-53f2</link>
      <guid>https://dev.to/wenminglu/what-i-learned-about-tiktoks-hidden-video-copies-while-building-a-downloader-53f2</guid>
      <description>&lt;p&gt;I recently launched &lt;a href="https://tiktik.download" rel="noopener noreferrer"&gt;TikTik&lt;/a&gt;, a small web tool that saves public TikTok videos without the watermark, photo slideshows as the original images, and audio as MP3. Building it taught me a few things about how TikTok serves media that I didn't expect.&lt;/p&gt;

&lt;h2&gt;
  
  
  One video, several files
&lt;/h2&gt;

&lt;p&gt;When you upload a video, TikTok doesn't keep just one file. It keeps several copies at the &lt;strong&gt;same resolution&lt;/strong&gt; but different bitrates, so it can stream a light copy on a weak connection.&lt;/p&gt;

&lt;p&gt;For one 27-second sample, the copies were:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Copy&lt;/th&gt;
&lt;th&gt;Bitrate&lt;/th&gt;
&lt;th&gt;Size&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Smallest&lt;/td&gt;
&lt;td&gt;293 kbps&lt;/td&gt;
&lt;td&gt;1.0 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Middle&lt;/td&gt;
&lt;td&gt;422 kbps&lt;/td&gt;
&lt;td&gt;1.4 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best&lt;/td&gt;
&lt;td&gt;800 kbps&lt;/td&gt;
&lt;td&gt;2.7 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Many download tools return whichever copy comes first. That explains a very common complaint: "my TikTok download looks blurry". The resolution is fine; the bitrate isn't. In TikTik I group the options by codec and resolution and label them &lt;em&gt;best quality&lt;/em&gt;, &lt;em&gt;smaller file&lt;/em&gt; and &lt;em&gt;smallest file&lt;/em&gt;, so people can pick on purpose. I wrote up the user-facing side of this here: &lt;a href="https://tiktik.download/solutions/tiktok-video-blurry-after-download" rel="noopener noreferrer"&gt;why TikTok downloads look blurry&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  H.264 vs H.265
&lt;/h2&gt;

&lt;p&gt;Some copies are H.265 (HEVC). They're smaller at the same quality, but plenty of Windows PCs can't play them without the paid HEVC extension, and some video editors won't import them. So H.264 is always listed first, even when H.265 is smaller.&lt;/p&gt;

&lt;h2&gt;
  
  
  Photo posts aren't videos
&lt;/h2&gt;

&lt;p&gt;TikTok slideshows look like videos in the app, but under the hood they're a list of separate images plus a music track. Treating them as video gives you a low-quality screen-recording-like result. Instead, TikTik lists each image, saves them as JPG one by one or as a ZIP numbered in order, and offers the music separately (&lt;a href="https://tiktik.download/solutions/how-to-save-tiktok-slideshow-photos" rel="noopener noreferrer"&gt;guide&lt;/a&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Python, FastAPI, and &lt;a href="https://github.com/yt-dlp/yt-dlp" rel="noopener noreferrer"&gt;yt-dlp&lt;/a&gt; for reading public posts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; Nuxt with server-side rendering (pages need to be readable by search engines without JavaScript)&lt;/li&gt;
&lt;li&gt;Video files are relayed, not stored. Nothing is kept after the download.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Things I'd do differently
&lt;/h2&gt;

&lt;p&gt;I underestimated how much of the work is not the download itself but &lt;strong&gt;explaining choices&lt;/strong&gt; to users: which file to pick, where the file went on an iPhone (the Files app, not Photos), and why some videos can't be downloaded at all (private accounts). Writing short guides for those questions turned out to be as useful as the tool.&lt;/p&gt;

&lt;p&gt;Only public posts can be downloaded, and I ask users to save only content they own or have permission to use.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I'm the developer of TikTik.&lt;/em&gt; Feedback welcome!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>python</category>
      <category>showdev</category>
      <category>tiktok</category>
    </item>
  </channel>
</rss>
