Skip to content

allenk/VeoWatermarkRemover

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Veo Watermark Remover

Download Demo Platform Based on GWT License: MIT Support on Ko-fi Support via PayPal

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 generative fill, no hallucinated pixels, no quality loss — the removal is pure, reversible math. An optional on-device ML assist (--ml) can fine-tune the intensity on tricky clips.

What's New (v0.6.4)

  • More stable by default — the ML assist is now opt-in (--ml). v0.6.3 turned the "Alpha Judge" ML intensity predictor on by default. Across the huge variety of real-world clips, though, it occasionally over-corrected and made a clip worse than the plain analytical estimate. So the default is back to the proven, predictable analytical intensity — reliable for the common case — and Alpha Judge is now a one-flag opt-in (--ml) for the minority of clips whose intensity genuinely varies a lot. By default the tool no longer spins up the GPU for ML either, so it starts clean on more systems.
  • New "Veo" text — more reliable detection + 1080p support. Fixed a case where a clip with the small "Veo" text over a busy foreground (e.g. shot through grass) was misread as the Gemini diamond and left the text in place (#18) — it's now identified correctly. Also added the 1080p small "Veo" wordmark (v0.6.3 handled 720p only).

Previous Release Highlights (v0.6.3)

  • Alpha Judge ML intensity assist (now opt-in via --ml). A small neural network (DNN) that runs entirely on your own machine and predicts the removal intensity from the video, combined with the analytical estimator. Helps clips whose intensity varies a lot; 100% offline, nothing uploaded. (Off by default since v0.6.4 — see above.)
  • Small "Veo" text watermark removal. Google's Flow generator stamps a small "Veo" wordmark in the bottom-right corner of its newest outputs. The tool auto-detects which watermark a clip carries (the Gemini diamond or the small Veo text) and removes the right one — no flags, landscape or portrait.

Previous Release Highlights (v0.6.2)

  • Auto-detects the relocated watermark. Newer Veo portrait outputs (1080×1920, 720×1280) moved the diamond further in from the corner, and v0.6.1 didn't recognise the new spot — it SKIPped those files (#14, #16). v0.6.2 adds the new positions AND a smart bottom-right search that finds the diamond wherever it sits (matching its shape across several frames and requiring them to agree on the position). If the position shifts again, the tool locates it without needing an update — the fixed positions are just a fast path, the search is the safety net.
  • Fixes the "dark hole" over-removal on bright backgrounds. When the watermark drifted across a lit hand, skin, or a bright sky, the per-frame estimator could over-shoot and over-subtract, leaving a dark crater for a run of frames. v0.6.2 anchors each frame's intensity to the stable per-shot value and rejects physically-implausible estimates, so removal stays clean across the whole clip even as the background changes.
  • Keeps partially-occluded frames (#5). When a foreground object partly covers the diamond, the watermark is still there underneath — but v0.6.1 could read the low match score as "no watermark" and skip those frames, leaving it visible. v0.6.2 adds a three-tier confidence gate: high-confidence frames are tuned per frame, low-confidence frames get the shot's consensus intensity applied instead of being skipped, and only genuinely watermark-free frames pass through untouched.
  • Smarter 1080p intensity (#2). 1080p previously used a fixed intensity, but some clips need a noticeably stronger one. v0.6.2 measures the correct intensity per shot with a more accurate least-squares estimator (~20% closer to the ideal value), while staying flicker-free on 1080p by locking one value for the whole shot.

Previous Release Highlights (v0.6.1)

  • 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-2 escape 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.

Previous Release Highlights (v0.6.0)

  • 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: 0x1 line emitted on C2PA-tagged Veo videos) suppressed at default verbosity.

Help Wanted: Other Resolutions

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.

Previous Release Highlights (v0.5.0)

  • 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).
  • --legacy flag 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.

Previous Release Highlights (v0.4.0)

  • 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-size flag
  • End-to-end CI smoke test — every CI build now runs --denoise ai through 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

Previous Release Highlights (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 --verbose for detailed diagnostics

How It Works

Drag & Drop Demo

Just drag and drop. Drop your Veo video onto the executable — it automatically removes the watermark and outputs video_processed.mp4 with audio preserved.

Before / After

Side by Side Comparison

Quick Start

Drag & Drop (Windows — Easiest)

  1. Download GeminiWatermarkTool-Video.exe (see Download below)
  2. Drag your .mp4 file onto the exe
  3. Done — output appears as yourfile_processed.mp4 in the same folder

Command Line (All Platforms)

# Simplest — auto-detects the watermark (Gemini diamond OR the new "Veo" text)
./GeminiWatermarkTool-Video video.mp4

# Older, larger "Veo" text from pre-Gemini-3.5 videos
./GeminiWatermarkTool-Video --legacy old_veo_video.mp4

# Specify output path
./GeminiWatermarkTool-Video -i video.mp4 -o cleaned.mp4

# Enable the ML intensity assist (opt-in) for a clip whose intensity varies a lot
./GeminiWatermarkTool-Video --ml video.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 compact

Which mode do I need?

  • Just run it — no flags. The tool auto-detects what a clip carries — the Gemini diamond (Gemini 3.5 and later) or the new small "Veo" text (Google Flow's latest outputs) — and removes the right one, in landscape or portrait.
  • --legacy is only for the older, larger "Veo" text from pre-Gemini-3.5 videos. New outputs don't need it.

How It Handles Difficult Clips

The v0.6.1 adaptive loop runs once per frame and behaves like a small auto-tuner. For each frame:

  1. 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.
  2. Sample the local background ring around the watermark region.
  3. Pick a candidate alpha intensity (starting from the per-shot seed value learned from the first 12 sample frames).
  4. 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.
  5. 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.

Manual Touch-Up Workflow for Difficult Clips

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

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

Sigma Tuning Tips

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

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

Features

  • 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
  • Relocated-watermark auto-detection (v0.6.2+) — known positions plus a smart bottom-right search that finds the diamond wherever it moves, with cross-frame agreement to avoid false matches
  • Over-removal protection (v0.6.2+) — per-frame intensity is anchored to the stable per-shot value, preventing the dark-hole artifact when the watermark crosses bright/low-contrast areas
  • Partial-occlusion handling (v0.6.2+) — a three-tier confidence gate cleans frames where a foreground object partly covers the diamond instead of skipping them
  • Dynamic 1080p intensity (v0.6.2+) — least-squares per-shot estimate replaces the old fixed multiplier, flicker-free
  • 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
  • --variant escape hatch — force a known 720p geometry if auto-detect can't lock on (very rare with v0.6.1)
  • --sigma for 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

Technical Details

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

System Requirements

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.

Download

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.

Verification & Safety

Every release is built by GitHub Actions from this repository's public, MIT-licensed source — in a clean, throwaway CI runner, with public build logs. No human ever touches the binary between source and release, so there is no step where anything could be tampered with. You can read the source, inspect the build workflow, and rebuild the exact binary yourself.

Independent VirusTotal scans for the v0.6.3 binaries — the SHA256 is in each link, so you can match it against the file you downloaded:

Platform VirusTotal scan
Windows x64 virustotal.com/…de4ab955
Linux x64 virustotal.com/…b43d74f9b
macOS Universal virustotal.com/…1def4d5e

About antivirus false positives. The binaries are unsigned, and every new release is a brand-new file your antivirus has never seen. Heuristic / ML-based scanners are twitchy about unsigned executables with zero reputation, so a fresh release can occasionally trip a generic detection (a Wacatac / AIDetect-style label) even though nothing is wrong — it's about the file being new and unsigned, not about what the program does. If your antivirus flags it, match the SHA256 against the scans above, restore it from quarantine (or add an exclusion), or build it yourself from source. Proper code signing is on the roadmap to stop this recurring.

Verify your download (SHA256):

# Windows (PowerShell)
Get-FileHash .\GeminiWatermarkTool-Video.exe -Algorithm SHA256

# Linux / macOS
sha256sum GeminiWatermarkTool-Video

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

First Run — OS Security Prompts

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 infoRun anyway.

Option B (PowerShell):

Unblock-File .\GeminiWatermarkTool-Video.exe
macOS — "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-Video
Linux — No security prompt

Linux does not quarantine downloaded binaries. Just ensure the file is executable:

chmod +x GeminiWatermarkTool-Video
./GeminiWatermarkTool-Video video.mp4

Demo Build Notice

This 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

What's Next

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.

About GeminiWatermarkTool

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)

Support This Project

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

License

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.

About

Remove Google Gemini 3.5 / Veo video watermarks with mathematically precise reverse alpha blending. Standalone Windows CLI — demo/preview build.

Topics

Resources

Stars

Watchers

Forks

Sponsor this project

Packages

 
 
 

Contributors