When Google Gemini started adding a watermark to generated images (including Nano Banana images), I wanted a way to download the original outputs without cropping or post-processing.
Over a few iterations I tried three approaches:
1) OpenCV heuristics
Fixed-position detection + color estimation + inpainting.
Fast, but fragile: works on flat backgrounds, fails on textured images.
3) Lightweight watermark-specific algorithm
Inspired by community implementations and optimized for Gemini’s logo pattern:
geometry-aware detection + edge-preserving fill, no neural model.
• Binary < 2MB
• Millisecond latency
• Runs fully locally in browser
Everything runs locally; images never leave the machine.
I also used this as a small experiment in building a paid micro-utility: payments, licensing, and basic marketing turned out harder than the algorithm itself.
Happy to answer questions about detection, inpainting tradeoffs, or browser-side image processing.
Comments
When Google Gemini started adding a watermark to generated images (including Nano Banana images), I wanted a way to download the original outputs without cropping or post-processing.
Over a few iterations I tried three approaches:
1) OpenCV heuristics Fixed-position detection + color estimation + inpainting. Fast, but fragile: works on flat backgrounds, fails on textured images.
https://geminiwatermarkcleaner.com/changelog/v1-1-0.html
2) LaMa inpainting High-quality reconstruction using a local LaMa model. Very accurate, but slow (~30s/image on CPU) and heavy to ship.
https://geminiwatermarkcleaner.com/changelog/v2-0-0.html
3) Lightweight watermark-specific algorithm Inspired by community implementations and optimized for Gemini’s logo pattern: geometry-aware detection + edge-preserving fill, no neural model. • Binary < 2MB • Millisecond latency • Runs fully locally in browser
https://geminiwatermarkcleaner.com/changelog/v3-0-0.html
I packaged this into a Chrome extension and a local web Gemini Watermark Remover tool: https://geminiwatermarkcleaner.com/gemini-watermark-remover....
Everything runs locally; images never leave the machine.
I also used this as a small experiment in building a paid micro-utility: payments, licensing, and basic marketing turned out harder than the algorithm itself.
Happy to answer questions about detection, inpainting tradeoffs, or browser-side image processing.