upload-lint

Drop your export. Find out exactly why YouTube, Shorts, TikTok, Reels or X will reject, letterbox or crush it — before you spend an hour uploading it.

🔒 Runs entirely in your browser — your video is never uploaded
Drop video files here
or tap to choose — MP4, MOV, plus JPG/PNG thumbnails

upload-lint Pro — $15 once

The free checker tells you about one platform at a time. Pro answers the question you actually have: where can I post this exact file, unchanged?

Get Pro — $15
Already bought? Enter the receipt number from your Stripe receipt email (looks like 2814-9033):

Upload specs, from the platforms' own docs

PlatformAspectResolutionMax lengthMax size
YouTube Shorts9:161080×19203 min256 GB
YouTube (landscape)16:91920×108012 hr256 GB
TikTok9:161080×192010 min4 GB app / 1 GB web
Instagram Reels9:161080×192015 min4 GB
X / Twitterany1920×10802:20512 MB

Why uploads fail

Why does my video upload fail with no error message?

Nine times out of ten it is the codec, not the file. A .mov straight out of Final Cut or Premiere is often Apple ProRes or DNxHD — perfectly valid video that no social platform ingests. The uploader accepts the file, chews on it, and then fails silently or sits at 0% forever. Re-export as H.264 in an MP4. upload-lint reads the codec fourcc straight out of the file's stsd box and tells you which one you have.

Why is my TikTok / Reel showing with big bars down the sides?

You exported landscape. Vertical feeds are 9:16 (1080×1920); a 1920×1080 landscape file gets pillarboxed into a strip about a third of the screen height, which crushes watch time. This is the single most common avoidable mistake and it is invisible until the video is already live.

Why does my video have no sound after uploading?

Check whether it has an audio track at all. Exporting a timeline with the audio track disabled, or using a "video only" preset, produces a file that plays fine locally (you hear nothing and assume the room is quiet) and gets suppressed once posted — silent clips are heavily deprioritised in every short-form feed.

What is a "moov atom" and why does my upload stall?

An MP4 stores its index — the moov atom — either at the front or the back. If it is at the back, a player or uploader must read the entire file before it knows anything about it. That is why some exports stall at 99% or time out in a browser uploader. Most encoders call the fix "faststart" or "optimise for web".

What frame rate should I export at?

30 or 60 fps for short-form. 25/50 fps is the PAL standard and uploads fine, but feeds tuned for 30/60 will re-time it. Above 60 fps the platform re-encodes and the result is usually worse than if you had exported 60 in the first place. Mixing frame rates across a series is the one that really hurts — the cuts judder.

What size should a YouTube thumbnail be?

1280×720 minimum, 16:9, and under 2 MB. JPG or PNG — the uploader rejects WebP, which is now the default export in several design tools. Drop your thumbnail in above alongside the video and it gets checked too.

Is my video actually uploaded to your server?

No. There is no server to upload to. The checker reads the file's headers with File.slice() in your own browser — a few kilobytes out of a multi-gigabyte export never leave your machine. You can put your laptop in airplane mode after the page loads and it still works.