NEW: Watch the demo video on YouTube — Veo Watermark Remover in Action
Warning
This is a DEMO/PREVIEW build — CLI only, unsigned executable, early testing phase. See Demo Build Notice for details and known limitations. Windows/macOS may block the executable on first run — see First Run — OS Security Prompts below.
This is a demo/preview build of the upcoming Veo watermark removal feature for GeminiWatermarkTool. Once stabilized, this functionality will be merged into the main GWT release with full GUI support.
Remove the "Veo" text watermark from Google Veo-generated videos using mathematically precise reverse alpha blending — the same proven technique behind GeminiWatermarkTool.
No cloud services. No AI hallucination. No quality loss. Just math.
- Survives intro fade-ins. Many community-supplied 720p clips start with a brief fade-in or splash where the watermark isn't yet composited, and v0.6.0 saw NCC = 0 on frame 0 and SKIPped the whole file. v0.6.1 probes 12 frames spread across the video's first 90% and picks the best (sample, tuple) pair, so fade-ins no longer cause a false SKIP. Five previously-skipped community samples now auto-detect cleanly.
- Adaptive per-frame alpha refinement. The new bisection feedback loop doesn't just estimate the alpha intensity — it APPLIES the candidate value, evaluates whether the result looks like the surrounding background, and adjusts up (residue remained) or down (dark hole) for up to five rounds per frame. Visual-consistency goal rather than pure prediction, so clips with foreground motion or heterogeneous backgrounds get a per-frame scale that actually fits.
- Per-shot seed + per-frame change cap. A stable per-video baseline (median of 12 sample-frame estimates) anchors the bisection, and a small per-frame change cap (±0.05) prevents any single bad assessment from causing a visible flash. Output stays smooth even on content where the bisection metric is locally noisy.
--variant 720p-1/--variant 720p-2escape hatch in the SKIP hint. When auto-detect can't lock on, the SKIP message now suggests the manual override flags directly. Useful for clips that auto fails on (rare with v0.6.1's multi-frame probe, but the escape hatch is documented).- Honest limit acknowledged. Some clips with very strong per-frame content motion (medical illustrations with hair strands, rapid-cut animation, etc.) still produce a small residue on a few frames. See Manual touch-up workflow below for the recommended workflow when the automatic result isn't good enough.
- 720p Gemini 3.5 diamond removal — now auto-detected. Both geometries observed in real Veo 720p outputs are calibrated: 720p-1 standard (48×48 at margin 72,72, ~1.5 Mbps tier) and 720p-2 compact (44×44 at margin 29,40, ~7 Mbps tier). Auto-detect picks the right one via NCC scoring.
- Dynamic per-frame alpha estimation. First release with per-frame alpha intensity recovery instead of a static multiplier. v0.6.1 evolved this into the adaptive bisection above.
- Position refinement at video startup. A ±4 px local NCC search around the tuple anchor snaps to the actual diamond position, absorbing encoding-tier drift without recalibration.
- Transcoder timing fidelity. Output frame count, duration, and FPS metadata match input exactly — no more silently dropping tail frames or shifting duration. Three classic libavcodec API misuses (decoder flush, packet duration stamping, frame-rate metadata propagation) fixed in one go.
- Quieter default output — FFmpeg container parser warnings
(e.g. the
Unknown cover type: 0x1line emitted on C2PA-tagged Veo videos) suppressed at default verbosity.
If you have a Gemini 3.5 video at 4K, square 1:1, 9:16 short-form, or any resolution not in 1080p / 720p, please open an issue with a sample so we can calibrate that size too. The diamond shape is consistent across resolutions; we mainly need the position and size for each new encoding profile.
- Gemini 3.5 diamond watermark removal (1080p) — the first release to handle Gemini 3.5's new diamond watermark by default (no flag needed). 1920×1080 landscape and 1080×1920 portrait validated end-to-end against community samples (issue #2, #3).
--legacyflag for older Veo videos — videos generated before Gemini 3.5 (with the "Veo" text watermark) need--legacy; the diamond and the text are different shapes at different positions, so applying the wrong removal would damage the frame.- No fallback between profiles — if a diamond-mode result still
shows the old "Veo" text, the video is pre-Gemini-3.5 — re-run
with
--legacy. - Tighter encode — CRF 14 / preset slow (was 18 / medium). PSNR improved by ~2-3 dB on encoding-only regions; visually identical to source on most content.
- macOS stability fix — addresses the SIGBUS crash on Apple Silicon reported in upstream GeminiWatermarkTool #30 / #31. The Vulkan loader is probed before NCNN's GPU init; if it's absent (the default on macOS without MoltenVK), AI denoise transparently falls back to CPU instead of crashing
--snap-min-size— finer snap-search control on the image-watermark side (default 16, range 8-64), mirroring the existing--snap-max-sizeflag- End-to-end CI smoke test — every CI build now runs
--denoise aithrough a real inference pipeline (Windows / Linux / macOS) before publishing. The previous--version-only check never touched the AI denoise init path, which is how the macOS crash slipped past CI in v0.3.0
- Improved watermark masks — remastered 720p and 1080p alpha maps using golden frame-differencing from multiple video sources (10+ transition pairs)
- Better output quality — upgraded video encoder (High profile, B-frames, multi-reference)
- Enhanced AI cleanup — tuned per-resolution denoise parameters with expanded inference context
- Progress bar — real-time ASCII progress indicator during video processing
- Quieter output — reduced log verbosity in normal mode; use
--verbosefor detailed diagnostics
Just drag and drop. Drop your Veo video onto the executable — it automatically removes the watermark and outputs video_processed.mp4 with audio preserved.
- Download
GeminiWatermarkTool-Video.exe(see Download below) - Drag your
.mp4file onto the exe - Done — output appears as
yourfile_processed.mp4in the same folder
# Simplest — Gemini 3.5 diamond removal (default mode, 1080p + 720p auto-detected)
./GeminiWatermarkTool-Video video.mp4
# Pre-Gemini-3.5 video with the old "Veo" text watermark
./GeminiWatermarkTool-Video --legacy old_veo_video.mp4
# Specify output path
./GeminiWatermarkTool-Video -i video.mp4 -o cleaned.mp4
# Pre-3.5 with explicit input / output
./GeminiWatermarkTool-Video --legacy -i old_video.mp4 -o cleaned.mp4
# Force a specific 720p variant if auto-detect picks wrong (rare):
./GeminiWatermarkTool-Video --variant 720p-1 video.mp4 # 48x48 standard
./GeminiWatermarkTool-Video --variant 720p-2 video.mp4 # 44x44 compactWhich mode do I need?
- Videos generated by Gemini 3.5 or later carry the diamond logo in the bottom-right corner → use default mode (no flag).
- Videos generated before Gemini 3.5 carry the "Veo" text in the bottom-right corner → use
--legacy.- Some mixed-vintage portrait outputs carry both watermarks. Run default first, then
--legacyon the output. There is no automatic fallback between the two modes — applying the wrong one at the wrong position would damage the frame, so you have to pick.
The v0.6.1 adaptive loop runs once per frame and behaves like a small auto-tuner. For each frame:
- Compute the per-frame NCC against the calibrated diamond template. If NCC is below the gate (heavy foreground occlusion), the frame is left untouched — leaving the diamond visible on those few frames is more honest than scribbling synthetic content over them.
- Sample the local background ring around the watermark region.
- Pick a candidate alpha intensity (starting from the per-shot seed value learned from the first 12 sample frames).
- APPLY the candidate, measure whether the resulting region matches
the surrounding background:
- Brighter than surroundings → residue still present → increase intensity.
- Darker than surroundings → over-subtracted (dark hole) → decrease intensity.
- Up to 5 bisection rounds. The change between adjacent frames is capped at ±0.05 so any single bad assessment can't cause a visible flash.
The goal is visual consistency with the local context, not a prediction of some "true" alpha value. Same content + same diamond → same removal. Different scenes within a clip get different per-frame intensities, but each is correct for its own surroundings.
The automatic pipeline handles most Gemini 3.5 video samples cleanly, but some content classes still resist a fully automatic solution — heavy per-frame motion, foreground objects overlapping the watermark region, medical-illustration backgrounds with high-frequency detail next to the diamond, etc. If you run a video through v0.6.1 and a small number of frames still show residue or a faint outline, the practical workflow is:
# 1. Run the automatic pipeline first
GeminiWatermarkTool-Video video.mp4
# 2. Decompose the auto-processed output into individual frames
ffmpeg -i video_processed.mp4 frames/frame_%04d.png
# 3. Open GUI mode (image-side GeminiWatermarkTool) on the problem
# frames only. Use Custom region mode and tune the Alpha intensity
# slider until that frame looks clean. Save the touched-up PNG
# back to the same path.
# (See https://github.com/allenk/GeminiWatermarkTool for the GUI
# build that ships the Alpha intensity slider in Custom mode.)
# 4. Re-encode the frames back into a video, copying audio from the
# original
ffmpeg -framerate 24 -i frames/frame_%04d.png \
-i video.mp4 -map 0:v -map 1:a \
-c:v libx264 -crf 14 -preset slow -pix_fmt yuv420p \
-c:a copy \
video_touched_up.mp4For most clips you'll only need to manually fix a handful of frames.
The GUI's Custom-mode Alpha intensity slider lets you dial in the
exact value visually; values around 0.55-0.70 (V1-relative) cover
most current Gemini 3.5 720p content.
The default AI denoise sigma is tuned for photographic / video content (sigma = 50 for 1080p, sigma = 20 for 720p Veo). If your output looks too blurry or has slight unnatural artifacts on illustration / animation content, try a smaller sigma:
# Anime / illustration content often looks best with sigma ~15
GeminiWatermarkTool-Video --sigma 15 video.mp4
# Photographic content where AI denoise is too aggressive
GeminiWatermarkTool-Video --sigma 25 video.mp4Lower sigma = less smoothing = sharper output but residual H.264 ringing artifacts may stay visible near the WM edges. Higher sigma = more smoothing = cleaner edges but slight loss of detail. The defaults are a compromise; for content classes with distinct aesthetics, manual tuning helps.
- Single executable — standalone, zero dependencies, zero installation
- Cross-platform — Windows, Linux, and macOS (Universal Binary)
- Direct mp4-to-mp4 — no intermediate files, no external tools needed
- Audio preserved — original audio track is kept without re-encoding
- AI denoise — GPU-accelerated FDnCNN cleanup for residual artifacts (Vulkan)
- Gemini 3.5 diamond removal (default, v0.5.0+) — handles the new watermark layout out of the box; v0.6.0 adds 720p (both standard and compact variants) alongside 1080p
- Adaptive per-frame alpha refinement (v0.6.1+, 720p) — bisection feedback loop applies a candidate intensity, measures the result against the local background, and adjusts up/down per frame; the change between adjacent frames is capped to prevent visible flashes
- Multi-frame detection probe (v0.6.1+) — probes 12 frames across the video instead of just frame 0, so intro fade-ins no longer cause a false SKIP
- Tick-exact transcoder timing (v0.6.0+) — frame count, duration, and FPS metadata match input exactly; no drift in NLE / editor alignment
--variantescape hatch — force a known 720p geometry if auto-detect can't lock on (very rare with v0.6.1)--sigmafor content-aware denoise — lower for animation / illustration, higher for photographic content- Legacy "Veo" text removal (
--legacy) — for pre-Gemini-3.5 videos; the previous default behaviour still available behind a single flag - Progress bar — real-time processing progress in the terminal
This tool uses the same reverse alpha blending algorithm as GeminiWatermarkTool:
original = (watermarked - alpha * logo_value) / (1 - alpha)
The Veo watermark alpha maps were extracted using frame differencing from Veo-generated videos with watermark on/off transitions. Multiple golden pairs (Lightning flash, Light bulb, Sunrise scenes) were averaged for maximum accuracy. AI denoise (FDnCNN, NCNN + Vulkan GPU) handles residual edge artifacts from video compression.
For the full technical background on reverse alpha blending, see: Removing Gemini AI Watermarks: A Deep Dive into Reverse Alpha Blending
| Component | Requirement |
|---|---|
| OS | Windows 10/11 x64, Linux x64, macOS (Intel + Apple Silicon) |
| GPU | Vulkan-capable GPU for AI Denoise acceleration (or fallback to CPU) |
| RAM | 4 GB minimum |
Note: AI denoise prefers a Vulkan GPU but transparently falls back to CPU when no Vulkan loader is available.
macOS users: macOS does not ship Vulkan natively — install the LunarG Vulkan SDK (which bundles MoltenVK) for GPU acceleration. Otherwise the tool runs in CPU mode by default; this is fully supported but slower than Vulkan inference.
Single file download — no installer, no setup.
| Platform | File | Notes |
|---|---|---|
| Windows x64 | GeminiWatermarkTool-Video.exe |
Drag & drop supported |
| Linux x64 | GeminiWatermarkTool-Video |
chmod +x before running |
| macOS Universal | GeminiWatermarkTool-Video |
Intel + Apple Silicon |
Download the latest release from the Releases page.
SHA256 checksums are provided on each release page. Verify with:
# Windows (PowerShell)
Get-FileHash .\GeminiWatermarkTool-Video.exe -Algorithm SHA256
# Linux / macOS
sha256sum GeminiWatermarkTool-VideoIf you're not comfortable running an unsigned executable, that's completely fine. This is a demo build for early testing. The Veo removal feature will be integrated into the main GeminiWatermarkTool release when ready, with full source code, CI/CD builds, and cross-platform support.
Downloaded binaries are not code-signed, so your OS may show a security warning on first launch. This is normal for open-source software distributed outside app stores.
Windows — SmartScreen "Windows protected your PC"
Option A: Click More info → Run anyway.
Option B (PowerShell):
Unblock-File .\GeminiWatermarkTool-Video.exemacOS — "Apple cannot check it for malicious software"
Option A (recommended): Right-click the binary → Open → click Open in the dialog. You only need to do this once.
Option B (terminal):
xattr -dr com.apple.quarantine GeminiWatermarkTool-Video
chmod +x GeminiWatermarkTool-VideoLinux — No security prompt
Linux does not quarantine downloaded binaries. Just ensure the file is executable:
chmod +x GeminiWatermarkTool-Video
./GeminiWatermarkTool-Video video.mp4This is a preview/demo build with the following limitations:
- CLI only — GUI support is planned for the main GWT release
- Video only — this build processes video files (.mp4/.mkv/.mov); for Gemini image watermarks, use the main GeminiWatermarkTool
When the Veo feature is stable, it will be merged into GeminiWatermarkTool as a unified release supporting both Gemini image and Veo video watermark removal.
GeminiWatermarkTool is an open-source tool for removing Gemini AI visible watermarks from images. It supports GUI + CLI dual-mode operation, cross-platform deployment (Windows / Linux / macOS / Android), and optional AI denoise with NCNN + Vulkan GPU acceleration.
Author: Allen Kuo (@allenk)
If this tool saved you time and you'd like to help keep it going, you can support via Ko-fi or PayPal — both go to the same place; pick whichever works for you (a few users have reported Ko-fi checkout issues from their region, so PayPal is the dependable fallback). Every public release goes through GitHub Actions CI on Windows / Linux / macOS, and the binary archives live in the Releases section — small contributions help cover runner minutes and storage so the project can keep building cross-platform binaries for free. Not required, just appreciated.
Bug reports, sample videos, and pull requests remain the most valuable contributions and always will be — if you don't have anything to send via Ko-fi, opening an issue with a clip the tool can't handle is just as helpful (often more so).
This demo build is based on GeminiWatermarkTool (MIT License).
It includes third-party open-source components (NCNN, OpenCV, etc.) under their respective permissive licenses. Full license texts are available in the respective project repositories.

