Veil

Docs updated · v9.22.1
Single-file WebM
Edit Auto-track
Tool
Shape
Mode
Zoom 100%
Track speed

Load a video to begin

Drag & drop, or use the panel →
Tracking...
0:00 · frame 0 / 0
Idle

How Veil works

Per-frame privacy blur · runs entirely in your browser

Quick start

  1. Drop a video on the page (or use the Source panel)
  2. Confirm the frame rate matches your video (15 fps for most security cams, 30 for phones)
  3. Step to the first frame where someone needs blurring
  4. Drag a box over their face — it auto-saves and becomes "Mask 1"
  5. Press T to auto-track the face forward
  6. Watch carefully. Press Esc when it drifts
  7. Repeat for any other faces / sections
  8. Render & Download when done

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.

The keyframe model

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).

Frame rate (important!)

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.

Masks (subjects)

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:

Working with multiple faces

For a busy scene with many people:

  1. Scrub to the first frame where the action starts
  2. Draw a box on each face — each becomes its own mask
  3. Optionally rename them ("Boy in red", "Girl by window") so you can tell them apart
  4. In the All Masks panel, click All to check every mask
  5. Press T — all checked masks track forward in parallel
  6. Status banner shows aggregate confidence and how many are still tracking
  7. When someone leaves frame or is occluded, uncheck them and keep tracking the rest

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.

Selecting overlapping boxes

When boxes overlap (like a small face inside a wider region), three ways to grab the one you want:

Auto-tracking flow

  1. Position the box(es) accurately on the start frame
  2. Press T or click ▶ Track forward
  3. The video advances, updating boxes each frame. Banner shows confidence and any "waiting" or "lost" masks
  4. Press Esc or click the button again to stop the moment something drifts

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.

Track on step (manual frame-by-frame)

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.

Editing boxes

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.

Invert mode (blur outside the box)

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.

Box shapes (rectangle / ellipse)

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.

Cropping the output

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.

Blur styles

Choose in the Blur Style panel:

For children's faces, Pixelate at intensity 25+ is the sweet spot. For absolute anonymity, use Solid block.

Keyboard shortcuts

Saving your work

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.

Playback speed

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.

Export format

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.

Privacy: your video is processed entirely in your browser. Nothing is uploaded anywhere, and this version does not use CDNs or built-in MP4 conversion.

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.

Trouble loading a video?

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.

Frequently asked questions

Where do my videos go? Is my data uploaded anywhere?

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.

How do I make an MP4 from my export?

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.

I can't load my video. What do I do?

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 scrubber jumps to the end and won't move

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.

Tracking keeps drifting / losing the face

A few common causes and fixes:

  • Box too tight on the face — try a slightly larger box that includes some surrounding head/hair for more context
  • Box too large — if it contains background, the tracker may follow the background instead. Crop closer to the face.
  • Lighting changed dramatically (door opened, sun came out) — stop, fix the box manually on a fresh frame, and resume
  • Subject turned away or moved fast — use Track on step with arrow keys for fine control through difficult sections
  • Multiple similar-looking subjects close together — the tracker may "jump" between them. Manually fix where it confused them.
Tracking stopped on its own — why?

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.

What's the difference between deleting a mask and deleting a keyframe?

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.

Can I track multiple faces at once?

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.

Why is my frame counter wrong?

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.

I closed my browser tab and lost everything

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.

Can I share my .veil project file with someone else?

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.

What format does Veil export?

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.

Why is the export the same length as my video, even on Fast browser?

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.

Can I use this on my phone?

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.

What blur style is most private?

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 is slow on my computer

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.

I made a mistake — can I undo?

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.

Important reminder

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.

Your video needs converting first

Veil couldn't decode the file — usually a codec issue
Most common cause: the video uses H.265 / HEVC encoding, which browsers don't natively decode. This is typical for Wisenet/Hanwha security cameras, newer iPhones, GoPros, and drones. The fix is to re-encode to H.264 MP4, which works everywhere — including Veil.

How to convert with HandBrake (free, easy)

  1. Download HandBrake from handbrake.fr (free, available for Windows, Mac, and Linux)
  2. Install and open it
  3. Click Open Source and pick your video file
  4. In the right-hand presets panel, choose Fast 1080p30 (or Fast 720p30 if you want a smaller file)
  5. At the bottom, check that Format is set to MP4
  6. Click Browse to pick where the converted file should go
  7. Click Start Encode at the top
  8. Wait — usually about as long as the video plays
  9. Load the new .mp4 file into Veil

That's it. Once converted, the file should load fine. The conversion happens entirely on your computer — your video isn't uploaded anywhere.

Other common issues

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.