How SaveNowX Downloads X Videos Without Storing a Single One
I built savenowx.com. , a free tool that resolves a public X (Twitter) post into a downloadable video — no account, no watermark, no history. The interesting part isn't the UI, it's the constraint I set at the start: nothing touches disk on the server, ever. No stored video files, no download history, nothing to clean up or leak. That one constraint forced a handful of design decisions that…
At savenowx.com, a free tool was created that converts X (Twitter) posts into downloadable videos without storing any video files on the server. The primary constraint was to ensure no video bytes, downloads, or history were stored on the server at any time. This requirement led to several key design decisions:
1. The resolution step, which checks for a video, avoids downloading or proxying video bytes. It only fetches metadata and CDN URLs from X's public syndication endpoint or falls back to yt-dlp if needed. This approach keeps the resolution step fast and cheap, even when under load, as it is simply making API calls instead of transferring files.
2. A caching mechanism is implemented using Redis or an in-process dictionary, with two different time-to-live (TTL) values: 1 hour for a successful resolution and 5 minutes for a "no video" or "not found" case. This prevents repeated requests for a bad or mistyped link from generating unnecessary backend load.
3. When a direct MP4 URL is available from X's CDN, the download button is directed to a Cloudflare Worker. The Worker's sole job is to set the Content-Disposition: attachment header, which allows browsers to download the file without altering the HTML download attribute on cross-origin links.
4. For posts that only have HLS (HTTP Live Streaming) files, such as videos with only .m3u8 playlists and .ts segments, a job system is used. This system downloads and remuxes the segments using yt-dlp/ffmpeg, reporting progress to the frontend as it streams the finished file back to the user. The temporary files generated by the job system are deleted immediately after being sent, ensuring that no video files are stored on the server.
5. MP3 extraction is handled by streaming the audio directly to the client through ffmpeg, without creating any intermediate files. This endpoint is capped for concurrent conversions to prevent server overload.
By treating the "store nothing" constraint as an architectural requirement rather than a policy, savenowx.com achieved a stack consisting of Next.js, FastAPI, and Cloudflare Workers. This design allows for fast and secure video downloads while maintaining user privacy and preventing data leakage.
Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.