Releases: allenk/GeminiWatermarkTool
v0.2.6
v0.2.6 - Snap Detection Fix, Standalone Build, Veo Demo
Snap Detection Improvements:
- Reduced guided_detect coarse scale step from 8 to 4 for finer resolution
- Replaced sqrt with cbrt size penalty — less over-penalization of small
watermarks (~28px preview tier from Gemini web UI) - Lowered CLI snap min_size from 32 to 16 (both fallback-region and
explicit-region snap call sites) - Added snap_min_size state field and Min Size slider (8-64px) to GUI
Custom mode alongside existing Max Size slider - Standard 48x48 (65%→72%) and 96x96 (91%) snap regression-free
- Preview 28x28 watermarks now correctly detected at 51% (was 32x32 at 41%)
Standalone Build Fix:
- Disabled OpenMP to eliminate VCOMP140.DLL runtime dependency
- MSVC OpenMP runtime (vcomp140.dll) cannot be statically linked
- Vulkan GPU inference path completely unaffected
- CPU fallback path runs single-threaded (still functional, slightly slower)
- Result: true zero-dependency standalone executable on all platforms
Veo Video Watermark Remover (Demo):
- New companion project for removing Google Veo video watermarks
- Uses the same reverse alpha blending engine as GeminiWatermarkTool
- Demo build available: https://github.com/allenk/VeoWatermarkRemover
Documentation:
- Pinned Veo demo announcement in README
- Added gwt-integrations (Claude Code Skill + MCP Server) to README
- Updated project badges and author notice
v0.2.5
v0.2.5 - AI Denoise + Advanced CLI
AI Denoise (FDnCNN + NCNN Vulkan GPU):
- FDnCNN model (1.3 MB FP16) embedded in executable via ncnn2mem
- NCNN static build with Vulkan GPU acceleration, CPU fallback
- Gradient-masked blending: only repairs edge artifacts, preserves background
- AI Denoise set as default inpaint method (strength=120%, sigma=50)
- New UI: sigma slider, GPU device info, strength up to 300%
- Adjustable Snap search range (32-320px) for resized watermarks
Advanced CLI:
- --region for explicit watermark position (absolute or corner-relative)
- --fallback-region for search area when standard detection fails
- --snap with --snap-threshold (default 60%) to reject false positives
- --denoise ai/ns/telea/soft/off with --sigma, --strength, --radius
- Smart routing: --fallback-region + --snap skips standard detection
- Fully backward-compatible: no new flags = identical to previous behavior
Cross-platform CI with NCNN submodule on Windows/Linux/macOS.
New dependencies: NCNN (submodule, BSD-3-Clause), volk (vcpkg, MIT)
AI model: FDnCNN Color from KAIR (MIT License)
Build flag: ENABLE_AI_DENOISE=ON (default in all presets)
v0.2.4
v0.2.4 — File Dialog Crash Fix & D3D11 Resize Jitter
Fixes:
-
Fix crash when opening Save/Open file dialog (ImGui NewFrame assert)
· Win32 modal dialog loop triggers SDL EXPOSED events
· Event watch callback re-entered mid-frame → double NewFrame()
· Added reentrant rendering guard to both callback and main loop -
Fix D3D11 image preview jitter during horizontal window resize
· Remove Flush() CPU stall before ResizeBuffers
· Use event-provided pixel dimensions (not stale SDL query)
· Skip vsync on resize frames to push content before DWM composites
· Only process PIXEL_SIZE_CHANGED (correct on HiDPI)
v0.2.3
v0.2.3 — Software Inpainting, Guided Detection & Rendering Fixes
New Features:
-
Multi-scale guided watermark detection (Snap Engine)
· Coarse-to-fine NCC template matching in user-drawn search region
· Variable watermark sizes (24-160px) with scale step refinement
· Auto-snap on draw/move release, manual re-snap via [Snap] button
· Dual-box overlay: blue search region + green/yellow/red snap result
· Process uses snap result (effective_rect) when available -
Software Inpainting cleanup for residual artifacts
· Three methods: NS (Navier-Stokes), TELEA, Soft Inpaint
· Gradient-weighted masks derived from watermark alpha channel
· Configurable strength, radius, and method in Custom mode UI
· Addresses images degraded by post-watermark resize/recompression
Rendering:
- Fix window resize flickering (DXGI_SCALING_NONE replaces STRETCH)
- Fix D3D11 image preview jitter during horizontal resize
· Remove Flush() stall, skip vsync on resize frames
· Use pixel-accurate event dimensions for ResizeBuffers - Only process SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED (HiDPI correct)
v0.2.2
v0.2.2 - macOS Compatibility Release
Fixes macOS-specific issues with window sizing, Retina rendering, and
first-run security, plus preview enhancements across all platforms.
-
Fix fullscreen clipping on small displays (e.g. MacBook 1280x800)
- Root cause: kMinHeight (888) exceeded macOS usable screen height (708)
- Minimum window size now adapts to 95% of display usable area
-
Retina font clarity: rasterize font atlas at 2x framebuffer resolution
with FontGlobalScale compensation — pixel-perfect text on HiDPI -
Ad-hoc code signing in CI — eliminates "app is damaged" error
- Users can now right-click → Open instead of using xattr command
-
Enable GUI build for both x64 and arm64 architectures
-
Zoom-to-cursor: mouse wheel zooms toward cursor position
-
Zoom buttons and shortcuts zoom toward viewport center
-
Outlined text labels (4-directional dark outline) for readability
on both light and dark image backgrounds -
Hold C to temporarily hide all region overlays for clean inspection
-
Updated shortcut table in sidebar and README
-
Fix toolbar separator artifact (stray horizontal line between buttons)
on all platforms — move Separator to toolbar top as menu/toolbar divider -
Rewrite DXGI initialization to cooperative mode
- Factory-first flow, no exclusive flags, no mode switching
- Resolves mutual exclusion with MPC-HC/BE, games, and other D3D11 apps
-
Lightweight is_available() with zero device creation side effects
-
SetMaximumFrameLatency(1) to reduce GPU present queue footprint
-
Add --banner/--no-banner flags with TTY auto-detection
-
Auto-hide ASCII banner when piped or redirected (AI agent friendly)
-
Add "First Run — OS Security Prompts" guide (macOS / Windows / Linux)
-
Update keyboard shortcuts in README
v0.2.1
v0.2.1 - Windows Compatibility Release
This release significantly improves Windows compatibility, especially for
virtualized environments and CJK (Chinese/Japanese/Korean) users.
- Add D3D11 as the preferred render backend on Windows
- Automatic WARP (software rasterizer) fallback when no GPU available
- Works in Hyper-V, Docker, Remote Desktop, and other virtualized environments
- Cooperative DXGI mode: no exclusive flags, no mode switching
- Factory-first init: CreateDXGIFactory1 → EnumAdapters → CreateDevice
- Lightweight is_available() with zero device creation side effects
- Resolves mutual exclusion with MPC-HC/BE, Forza Horizon 5, and other D3D11 apps
- SetMaximumFrameLatency(1) to reduce GPU present queue footprint
- ClearState() + Flush() for clean shutdown
- Use --backend=opengl to force OpenGL if needed
Tested:
-
NVIDIA RTX PRO 6000 (Hardware D3D11) alongside MPC-BE and Forza Horizon 5
-
Microsoft Basic Render Driver (WARP fallback in Hyper-V)
-
Zoom-to-cursor: mouse wheel zooms toward cursor position
-
Zoom buttons/shortcuts zoom toward viewport center
-
Outlined text labels (4-dir 1px dark outline) for readability on any background
-
Hold C to temporarily hide all region overlays for clean result inspection
-
Updated shortcut table: C (hold), Ctrl +/-, Ctrl 0, Scroll
-
Add --banner/--no-banner flags with TTY auto-detection
-
Auto-hide ASCII banner when piped or redirected (AI agent friendly)
-
--no-banner for scripted/automated usage, --banner to override
-
Fix crash when drag-dropping files with CJK characters (中文/日本語/한국어)
-
Add path_from_utf8() for correct SDL UTF-8 to filesystem path conversion
-
Improve CLI error messages with guidance for CJK path issues
-
Centralize console UTF-8 setup for both CLI and GUI modes
-
Clamp initial window size to 95% of usable screen area
-
Prevent window from being larger than display on small screens
-
Disable imgui.ini generation (unused with viewport-based layout)
-
Add WIL (Windows Implementation Libraries) for D3D11 COM management
-
Add imgui[dx11-binding] for D3D11 ImGui integration
v0.2.0
v0.2.0 - GUI Application & Watermark Detection
-
Full graphical desktop application with ImGui + SDL3
- Drag & drop single image or multiple files for batch processing
- Drag & drop entire folder to load all supported images
- Real-time before/after comparison, zoom, pan, fit-to-window
- Custom watermark mode: draw region interactively with 8-point anchors, WASD fine-tuning
- Keyboard shortcuts: X (process), V (compare), Z (revert)
- CJK font support (Chinese/Japanese/Korean filename display)
- Native file dialogs with Linux fallback (zenity/kdialog)
-
Three-stage NCC detection algorithm — inspired by @dannycreations (#13)
- Stage 1: Spatial NCC with alpha map correlation (50% weight)
- Stage 2: Gradient NCC via Sobel edge matching (30% weight)
- Stage 3: Statistical variance analysis (20% weight)
- Circuit breaker at 0.25 to short-circuit obvious non-matches
-
Confidence scoring with configurable threshold (default: 25%)
-
CLI: --force to skip detection, --threshold for custom value
-
GUI: interactive threshold slider (0-100%, 5% steps)
-
Thumbnail atlas preview (4-column grid, 220px cells, filename labels)
-
Status overlays per image: OK / SKIP / FAIL
-
Confirmation dialog before overwriting originals
-
Progress bar with scrollable result log
-
Thumbnails refresh after completion
-
Reorganized source into src/core/, src/cli/, src/gui/
-
Core engine shared between CLI and GUI
-
Theme constants extracted to �atch_theme namespace in style.hpp
-
C++ standard updated from C++17 to C++20
-
@dannycreations - Watermark detection concept (#13)
Commits since v0.1.3:
- 278492b feat(gui): batch processing UX improvements and directory drop support
- 2da7a83 feat(detection,gui): three-stage NCC detection, CLI batch processing, and UI enhancements
- b81599b feat(gui): complete UI implementation with CJK support, live resize and UX improvements
- d21b69d feat(gui): implement ImGui scrollbar-based image panning and fix stability issues
- 12c865c refactor!: reorganize project structure and relocate files
v0.1.3
v0.1.3 - Multiple files support & UTF-8 path fix
-
Multiple files support in simple mode (#12) - Thanks @dannycreations!
- Drag & drop multiple files onto the executable
- Process multiple files with single command: GeminiWatermarkTool file1.jpg file2.png file3.webp
- Summary reporting shows success/failure counts after batch processing
-
Windows UTF-8 path display fix
- Fixed garbled characters when processing files with non-ASCII names (e.g., Chinese, Japanese, Korean)
- Paths like "複製.png" now display correctly instead of " ƻs.png"
-
Refactored CLI with unified ProcessResult tracking
-
Extracted process_single helper to reduce code duplication
-
Consolidated result printing across simple and batch modes
-
@dannycreations - Multiple files support (#12)
Commits:
v0.1.2
v0.1.2 - Cross-Platform Release
This release brings full cross-platform support with pre-built binaries for Windows, Linux, and macOS.
-
Cross-platform support: Windows, Linux, macOS
-
macOS Universal Binary (Intel + Apple Silicon)
-
CMakePresets.json for standardized builds
-
GitHub Actions CI/CD for automated releases
-
Windows: Windows 10/11 x64
-
Linux: x64, glibc 2.35+ (Ubuntu 22.04+, Debian 12+)
-
macOS: macOS 11.0+ (Intel or Apple Silicon)
For older Linux systems (Ubuntu 20.04+), build from source using:
cmake --preset linux-x64-Release
cmake --build --preset linux-x64-Release
See README.md for full build instructions.
v0.1.1 - Open Source Release
🎉 Open Source Release
This release marks the full open source release of Gemini Watermark Tool. The complete source code is now available!
✨ Features
- Reverse Alpha Blending - Mathematically accurate watermark removal
- Auto Size Detection - Automatically detects 48×48 or 96×96 watermark
- Simple Mode - Just
GeminiWatermarkTool.exe image.jpgfor in-place edit - Batch Processing - Process entire directories at once
- Standalone Binary - Single
.exe, no dependencies
🔧 Build Modes
| Mode | Command | Description |
|---|---|---|
| Standalone | `cmake -B build | Embedded assets, single exe |
📐 Watermark Size Rules
| Image Size | Watermark |
|---|---|
| W ≤ 1024 or H ≤ 1024 | 48×48 (32px margin) |
| W > 1024 and H > 1024 | 96×96 (64px margin) |
🐛 Bug Fixes
- Fixed: 1024×1024 images now correctly use Small (48×48) watermark
- Fixed:
--force-small/--force-largeflags now work correctly - Fixed: Output quality improved (JPEG 100, WebP lossless)
📦 Downloads
| File | Description |
|---|---|
GeminiWatermarkTool.exe |
Windows x64 standalone executable |
Source code (zip) |
Full source code |
Source code (tar.gz) |
Full source code |
🛠️ Build Requirements
- CMake 3.20+
- C++20 compiler (MSVC 2022, GCC 11+, Clang 14+)
- vcpkg (for dependencies)
📋 Dependencies
- OpenCV 4.x
- CLI11
- spdlog
- fmt
⚠️ Disclaimer
Always backup original images before processing. See README for full disclaimer.
Full Changelog: https://github.com/allenk/GeminiWatermarkTool/commits/v0.1.1