In this article
When you export a WhatsApp chat with media, the zip can contain photos, videos, and voice messages. Most people assume everything gets uploaded.
When you export a WhatsApp chat with media, the zip can contain photos, videos, and voice messages. Most people assume everything gets uploaded.
ThreadRecap does not work that way.
Photos never leave your device, and the video files themselves are never uploaded. Your browser reads them so it can show you what is in the export and resume an interrupted upload, and it keeps them in its own storage until you clear that data. The picture in a video never reaches us.
There is one thing worth being precise about, because it is easy to get wrong: a video can contain speech, and speech is exactly what a recap needs. If you include videos in the analysis, your browser strips the picture and extracts the audio track on your device, and only that extracted audio is sent for transcription. Leave videos out in the preview and nothing from them leaves your device at all.
We only send what is required to produce a useful recap. You can read more in our privacy policy. Here is what gets uploaded:
Everything else stays local.
Understanding exactly why this architecture was chosen — and what it means in practice — requires a closer look at how WhatsApp exports are structured, how ThreadRecap processes them, and what the technical difference is between never uploading a file and simply not storing it after the fact.
A typical export looks like:
ThreadRecap reads the zip locally in your browser, extracts the chat text, identifies voice message files, and leaves photos and video files on your device.
WhatsApp uses predictable naming conventions inside its export ZIPs. Photos are typically named with a timestamp prefix such as `IMG-20240601-WA0001.jpg`, videos follow a similar pattern with `VID-` prefixes, and voice messages use `PTT-` prefixes with `.opus` or `.m4a` extensions. GIFs exported from WhatsApp chats appear as `.mp4` files. Stickers are usually small `.webp` images. ThreadRecap's local parsing step reads these filenames and extensions to categorise every file in the ZIP before anything else happens. Files in the photo and video categories are read in your browser and held in the browser's own storage, so that an upload interrupted halfway can pick up where it left off. Those files never go anywhere else, and they are gone when you clear the browser's data. If you include videos in the analysis, a separate step run in the browser produces a small audio-only file from each one, and that is what is uploaded.
WhatsApp gives you two export options: with media and without media. When you export without media, the ZIP contains only the `_chat.txt` file. Inline references to media in that file read as `<Media omitted>`. When you export with media, photos, videos, voice messages, and documents are bundled alongside the transcript. ThreadRecap handles both cases. If you export without media, only the chat text is processed and no audio or media upload occurs at all. If you export with media, ThreadRecap uploads the chat text, any voice message audio files it finds, and, when you include videos, the audio track extracted from them in your browser; the photo, video, and document files themselves stay where they are.
ThreadRecap uploads only:
Because summaries, decisions, and action items come from the conversation timeline.
The `_chat.txt` file is a plain-text log. It contains timestamps, sender names, and message content. This is the primary input for the AI recap. Without it, there is no conversation to summarise. The file is typically small — a chat with thousands of messages is rarely more than a few megabytes of plain text — so upload time is negligible compared to the total ZIP size when media is included.
Because voice messages often contain the most important information, and transcription requires sending audio to a speech-to-text model.
WhatsApp exports voice messages in `.opus` format and sometimes `.m4a`. ThreadRecap sends these files to OpenAI's audio transcription service. Clear audio is easier to transcribe, so check anything important against the original recording. Once transcribed, the text is placed in the chat timeline at the matching timestamp. The audio file is kept alongside the recap so you can play it beside its transcript; it goes when you delete the audio, the recap, or your account.
If there are no voice messages, no audio is uploaded.
Because a video can carry the same spoken decision a voice message does, and the picture is not needed to read it.
The preview screen lists the videos found in your export and lets you decide whether they take part in the analysis. When they do, your browser runs the conversion itself: the picture is discarded and a small mono audio file is produced from the sound track alone. That audio file joins the voice messages in the upload and is transcribed the same way. The original video never goes on the network, and if you switch videos off in the preview, nothing is extracted and nothing is sent.
ThreadRecap does not upload:
Even if those files exist in your exported zip, they stay on your device.
Some tools describe their privacy protection in terms of what they delete after processing. That framing still requires the file to travel across the network and reach a server. ThreadRecap's approach is categorically different: photos and video files are identified during the local ZIP unpacking step and are never placed into the upload queue. They stay inside your browser, and what a video contributes to the analysis is extracted from it there rather than uploaded with it. There is no server-side deletion because there is no server-side arrival. For a user concerned about whatsapp export privacy, this distinction is meaningful: a file that never leaves your device cannot be intercepted, logged, or retained by mistake.
Photos and videos can include faces, locations, private scenes, screens, and documents. None of that imagery is uploaded, which dramatically reduces exposure.
To be concrete about the scope: a WhatsApp chat exported with a year of media might contain hundreds of photos spanning personal events, shared screenshots, location images, and documents photographed on a phone. Each of these carries metadata and visual content that is unrelated to the conversation summary you are trying to generate. Keeping all of that local is not just a privacy preference — it is the architecturally correct decision for a tool whose only goal is to summarise conversation text and spoken audio.
Media files are often the largest part of an export, and larger still when privacy settings block part of it and you have to redo it. Skipping the photo and video files keeps the upload lighter and the analysis faster.
In practice, a single high-resolution photo from a modern smartphone is between 3 MB and 8 MB. A one-minute video clip can easily be 50 MB or more. A chat with a year of media shared between a group might contain gigabytes of files. By contrast, the `_chat.txt` file for the same period is almost always under 5 MB, and voice messages are typically small files of 30 seconds to a few minutes. Skipping photo and video uploads reduces both privacy risk surface and upload size in a way that compounds quickly as group chat exports grow larger.
Most tools vaguely say "we respect privacy." The real trust builder is a hard technical constraint: do not upload what you do not need.
ThreadRecap's whatsapp chat analyzer privacy model is built on this constraint. The question "do WhatsApp photos get uploaded?" has a binary answer here: no, because the code that processes the ZIP never puts them on the network. Whatsapp video privacy and whatsapp voice messages transcription privacy are treated differently from each other because the use case is different: what a video contributes is what was said in it, so the browser takes the audio track and leaves the file behind; a voice message is already only audio, so it is uploaded and transcribed as it is. The distinction is functional, not arbitrary.
The key line: no photo or video file is ever uploaded, and from a video only its audio track can be, and only if you ask for it.
When you select your ZIP file in the ThreadRecap interface, the browser's native file-reading APIs are used to decompress and inspect the archive without sending anything to a server. This is the same mechanism that powers local file editors and offline web apps. The unpacking step reads every file in the archive, categorises it, and builds two lists: files to upload (chat text, voice messages) and files that stay on your device (everything else). The second list is held in the browser's own storage so an interrupted upload can resume, and it disappears when you clear that data; only the first list is ever put on the network. Including videos adds one item to the first list, and it is not the video: it is the audio-only file your browser produces from it. This local-first approach means that even if your network connection were being monitored, an observer would see chat text and audio in transit, never a photo or a video. If you select a video, your browser extracts and sends only its audio track for transcription. The video and its visual content stay on your device.
The AI that generates your recap — whether that is a model from OpenAI or Claude — receives the parsed chat text and any transcripts produced from voice messages and from the audio of videos you included. It never receives your photos, your video files, or anything from the picture in them. The chat text itself still marks the point where a photo or a video was sent, so the recap can note that one was shared without ever seeing it. The recap is generated entirely from the text layer of your conversation.
No. Photos stay on your device; nothing about their content is ever sent.
No. The video file stays on your device and the picture is never sent. If you include videos in the analysis, your browser extracts their audio track and only that audio goes for transcription; leave them out and nothing from them is sent.
In the MVP, only chat text, voice messages, and the audio extracted from included videos are uploaded. Other attachments stay on your device.
Because transcription requires sending audio to a speech-to-text model. Without voice messages, the recap often misses decisions and commitments that were spoken.
Yes. Export without media and only the chat text is used.
Want a recap without uploading sensitive media? Export your WhatsApp chat, upload the zip, and generate a structured summary. Photos never leave your device and the video files are never uploaded: only chat text, voice messages, and the audio track of any videos you choose to include are used.
ThreadRecap never uploads your photos or video files. Only chat text, voice messages and the audio track of videos you include are sent. Try it free today.
Already have your .zip? That is exactly what ThreadRecap reads.
Analyze your chatUpload the .zip you just created and get a full recap, insights, and voice message transcriptions in minutes.
Upload the .zip you just created and get a full recap, insights, and voice message transcriptions in minutes.