Load a video to begin
Your work auto-saves continuously. If the tab closes or your browser crashes, you'll be prompted to recover when you reopen. For permanent backup, press Ctrl+S to download a .veil project file.
Each frame can be a keyframe — a saved set of boxes for that frame. Between keyframes, the most recent set carries forward automatically. So you only need a new keyframe when boxes need to change. Every edit auto-saves as a keyframe — no manual save step.
Timeline marks: tan = manual keyframes, green = tracked keyframes. Left-click any mark to jump to it. Right-click any mark for the context menu (delete this, delete from here, mark range).
Browsers can't reliably detect a video's true frame rate, so Veil defaults to 30 fps. The Source panel has an fps override dropdown — set it correctly when you load a video, or the timeline scrubber and frame numbers will be off. Most Wisenet/Hanwha security cameras record at 15 fps; phone cameras are 30 or 60 fps.
Every box you draw is part of a persistent mask — a "subject" with identity across all keyframes. So when you track "Mask 1" forward 200 frames, all 200 boxes still belong to Mask 1. The All Masks panel lists them with keyframe count and frame range. From there you can:
For a busy scene with many people:
If a new face appears mid-video, stop tracking, scrub to where they appear, draw a box on them, check only that new mask, and continue tracking. The At frame button in the masks panel header instantly checks only the masks present at your current frame.
When boxes overlap (like a small face inside a wider region), three ways to grab the one you want:
When tracking goes wrong, surgical cleanup options:
The Track speed dropdown (Slow / Medium / Fast) controls how fast tracking advances so you can watch carefully on tricky footage. Tracking only auto-stops after 10 frames of consistently low confidence — brief occlusions and motion blur won't cut you off.
Toggle ↦ Track on step to make arrow-key frame stepping run tracking instead of just seeking. → tracks 1 frame forward, Shift+→ tracks 10. Combined with multi-select, this tracks all selected masks per arrow press. Great for difficult sections where full auto-track keeps drifting — you control the pace and can correct between presses.
Click a box (or its label) to select it. Drag the middle to move; drag any of the 8 handles to resize. Delete removes it from the current frame. Every change auto-saves.
Two ways to make a box an invert/safe-zone — where everything OUTSIDE the box is blurred:
Invert masks can be auto-tracked just like normal ones. Useful when you want to keep one specific person visible (e.g. a consenting adult) and blur everyone else.
Boxes can be rectangles (default) or ellipses. Ellipses look more natural for faces and heads since they roughly match the shape of what you're covering. Two ways to use them:
Tracking works identically for both shapes — the tracker uses the bounding rectangle either way. Selection and resize handles also use the bounding rect, so an ellipse remains easy to grab and adjust.
If your camera covers more area than you actually care about, you can crop the output video to just the interesting region. The Crop panel in the sidebar has a ✂ Set crop region button — click it, drag a rectangle on the video, then click Apply. The output video will be just that rectangle's dimensions instead of the full frame.
Choose in the Blur Style panel:
For children's faces, Pixelate at intensity 25+ is the sweet spot. For absolute anonymity, use Solid block.
Auto-save — Veil saves to your browser continuously as you work. The "Auto-saved · [time]" indicator in the Project panel shows the latest. If the tab closes or browser crashes, you'll be prompted to recover when you reopen.
.veil project files — for permanent backup or sharing between computers, press Ctrl+S or click ↓ Save .veil. This downloads a small JSON file with all your keyframes, masks, and settings (not the video itself — that stays on your machine). Load it back later with ↑ Load .veil and re-attach the matching video.
Loading a new video while you have unsaved work prompts a confirm dialog so you don't lose anything by accident.
The ¼× / ½× / 1× / 2× / 4× / 8× buttons next to the play button control playback speed. Use ¼× or ½× for careful frame-by-frame review of fast action, and 2-8× for skimming a long video to find what needs blurring. Audio sounds slower/faster accordingly. Export always renders at 1× regardless of preview speed.
The ◀ reverse button (or J) plays the video backwards at the current speed. Useful for tracing motion or finding the moment a subject entered the frame. Audio is silenced in reverse — browsers can't play audio backwards.
This shareable version exports .webm only. WebM is the browser-native video format, so it is fast, reliable, and works without any extra downloads or external services.
Need MP4? Export the WebM file, then open it in HandBrake and convert it to MP4 with a preset such as Fast 1080p30 or Fast 720p30.
If Veil shows "Failed to load" or your video won't open, it usually means the file uses a codec your browser can't decode — most often H.265/HEVC from security cameras or newer phones. The fix is to convert it to H.264 MP4 first with a free tool called HandBrake.
Nowhere. Nothing gets uploaded. Veil runs entirely in your browser. Your video file is loaded from your disk into your browser's memory, processed locally, and the result is downloaded back to your computer. The actual video bytes are never sent to any server.
This shareable version exports WebM only and has no built-in MP4 converter, no CDN downloads, no third-party network calls, nothing. You can verify by disabling your internet entirely — Veil still works.
This shareable version exports WebM only. To make an MP4, open the exported .webm file in HandBrake, choose Fast 1080p30 or Fast 720p30, make sure the format is set to MP4, then click Start Encode.
Most likely it's a codec issue (H.265/HEVC from a security camera or newer phone). Convert it to H.264 MP4 first with HandBrake.
The video's duration metadata isn't readable by your browser. This happens with some Wisenet/Hanwha exports and live-recorded files. Re-encoding with HandBrake fixes it by rebuilding the container properly.
A few common causes and fixes:
Veil auto-stops tracking after 10 consecutive frames where confidence was below 40%. This usually means the face left the frame, got occluded for too long, or the tracker drifted off. You can Ctrl+Z back to where it was good, or use ↶ Undo all track to wipe the whole session and start over.
Deleting a keyframe removes one frame's worth of box positions — boxes from the previous keyframe will carry forward into this frame instead. Useful for cleaning up bad tracking.
Deleting a mask removes that subject from every keyframe in the entire video. Useful when you decide an entire face shouldn't be blurred after all, or when you want to redo it from scratch.
Yes. Draw boxes on all the faces you want to track on the same frame. In the All Masks panel, check the boxes next to each mask you want to track (or click All). Press T — they'll all track forward in parallel. If one drifts, you can uncheck it and continue tracking the others.
Most likely the frame rate is set incorrectly. Open the Source panel and set the fps override to match your video. Security cameras typically record at 15 fps, phones at 30 or 60. If you're unsure, check your camera/recorder's settings.
Veil auto-saves to your browser as you work. When you reopen Veil, you should get a prompt asking if you want to restore your previous session. If not (e.g. you cleared browser data, used Incognito, or switched browsers), the work is gone. For permanent backups, press Ctrl+S to download a .veil project file — these can be loaded back later from any computer.
Yes, but they'll need the original video file too. The .veil file only contains your keyframes, masks, and settings — not the video itself. Send both files together. When they open the .veil, Veil will ask for the matching video and verify they're the same.
Veil exports WebM in this shareable version. WebM plays in modern browsers, modern phones, Google Drive, YouTube, and most web platforms.
If someone specifically needs MP4, convert the exported WebM with HandBrake using a preset such as Fast 1080p30.
Veil renders by playing the video back at normal speed while recording the blurred output. There's no way to make this faster than real-time in the browser — that's a fundamental browser limitation. Plan accordingly for long videos.
Technically yes — the app loads in mobile browsers — but the workflow is clunky on touch screens. The drawing, resize handles, and timeline interactions are designed for mouse/trackpad. Use a desktop or laptop for any real work.
Solid block removes all information from the region and is technically the most private (no information leakage possible).
Pixelate is the recommended default — visually cleaner but still strong against casual viewers. Use intensity 25+ for children's faces.
Gaussian blur is the least private and most reversible — only use it for non-sensitive subjects.
Tracking processes each frame on the CPU, so speed depends on your machine and the video resolution. For best performance: use the Track speed dropdown set to Fast; close other tabs/apps using lots of CPU; use shorter clips or lower-resolution videos when possible. A 1080p 30-second clip should track at 5-15 frames per second on a typical laptop.
Yes. Ctrl+Z undoes individual steps. Ctrl+Y redoes. For bigger reversals, use the ↶ Undo all track button (removes an entire tracking session), ⫶ Delete after (removes everything after the current frame), or right-click any keyframe on the timeline for a context menu with surgical delete options.
Always preview the full output before sharing. Per-frame editing means a missed frame will show an unblurred face. Scrub through the rendered video (or play it back) to verify before distributing. If you spot a gap, come back, fix the keyframes, and re-export.
Veil runs entirely in your browser — your video and your edits never get uploaded anywhere.
That's it. Once converted, the file should load fine. The conversion happens entirely on your computer — your video isn't uploaded anywhere.
Why does this sometimes require HandBrake first? Browsers don't include every video codec, especially H.265/HEVC, so some files need to be re-encoded before Veil can open them. HandBrake is the standard tool — it's free, well-maintained, and good at what it does.