How I built a browser-based AI watermark remover with Next.js and Canvas API
The Problem AI tools like Gemini and Doubao add watermarks to generated images. Removing them usually requires desktop software or paid services. I wanted something instant, free, and private. ## The Solution CleanMark — 4 tools, all running client-side in the browser. Gemini Watermark Remover (auto-detect remove) Doubao Watermark Remover (auto-detect remove) Manual Eraser (brush tool for any custom watermark) Logo Overlay (cover watermarks with your own brand) ## Tech Stack Next.js 16 App Router Canvas API for image processing next-intl for i18n (EN/ZH) ## How the Watermark Removal Works The core idea is Canvas-based inpainting — analyze pixels around the watermark and fill with surrounding colors. ### For Gemini Doubao (Automatic) These AI tools embed watermarks at fixed, predictable pos
The Problem
AI tools like Gemini and Doubao add watermarks to generated images. Removing them usually requires desktop software or paid services. I wanted something instant, free, and private.
The Solution
CleanMark — 4 tools, all running client-side in the browser.
-
Gemini Watermark Remover (auto-detect & remove)
-
Doubao Watermark Remover (auto-detect & remove)
-
Manual Eraser (brush tool for any custom watermark)
-
Logo Overlay (cover watermarks with your own brand)
Tech Stack
-
Next.js 16 App Router
-
Canvas API for image processing
-
next-intl for i18n (EN/ZH)
How the Watermark Removal Works
The core idea is Canvas-based inpainting — analyze pixels around the watermark and fill with surrounding colors.
For Gemini & Doubao (Automatic)
These AI tools embed watermarks at fixed, predictable positions. So we:
-
Load the image onto an HTML canvas
-
Identify the watermark region (known coordinates/pattern)
-
Sample neighboring pixels outside the watermark area
-
Fill the region using a weighted average of surrounding pixels
For Manual Eraser
The user paints over the watermark with a brush:
-
Sample pixels around each stroke point
-
Apply blur/average to blend with surroundings
-
Result looks natural because it inherits local texture
Why Client-Side?
All processing uses the native browser Canvas API — no server needed. The image never leaves the device, zero privacy risk, instant results.
Try it
Sign in to highlight and annotate this article

Conversation starters
Daily AI Digest
Get the top 5 AI stories delivered to your inbox every morning.
More about
geminiservicegithub
I can't use the service anymore
I get this message while having a pro subscription: Error: Failed to perform inference: You have depleted your monthly included credits. Purchase pre-paid credits to continue using Inference Providers. Can you help me? Thank you Louis 1 post - 1 participant Read full topic

STEEP: Your repo's fortune, steeped in truth.
This is a submission for the DEV April Fools Challenge What I Built Think teapot. Think tea. Think Ig Nobel. Think esoteric. Think absolutely useless. Think...Harry Potter?...Professor Trelawney?...divination! Tea leaf reading. For GitHub repos. That's Steep . Paste a public GitHub repo URL. Steep fetches your commit history, file tree, languages, README, and contributors. It finds patterns in the data and maps them to real tasseography symbols, the same symbols tea leaf readers have used for centuries. Mountain. Skull. Heart. Snake. Teacup. Then Madame Steep reads them. Madame Steep is an AI fortune teller powered by the Gemini API. She trained at a prestigious academy (she won't say which) and pivoted to software divination when she realized codebases contain more suffering than any teac

Stop Explaining Your Codebase to Your AI Every Time
Every conversation with your AI starts the same way. "I'm building a Rails app, deployed on Hetzner, using SQLite..." You've typed this a hundred times. Your AI is smart. But it has no memory. Every chat starts from zero. Your project context, your conventions, your past decisions — gone. What if your AI already knew all of that? Here are five notes that make that happen. 1. Your stack, saved once Write one note with your tech stack, deployment setup, and conventions. Now every conversation starts with context. Now ask: "Write a background job that syncs user data to Stripe." Your AI reads the note. It knows it's Rails, knows you use Solid Queue, knows your conventions. No preamble needed. 2. Error fixes you'll hit again You spend 45 minutes debugging a Kamal deploy. You find the fix. A we
Knowledge Map
Connected Articles — Knowledge Graph
This article is connected to other articles through shared AI topics and tags.
More in Products

I can't use the service anymore
I get this message while having a pro subscription: Error: Failed to perform inference: You have depleted your monthly included credits. Purchase pre-paid credits to continue using Inference Providers. Can you help me? Thank you Louis 1 post - 1 participant Read full topic

your media files have an expiration date
A photo uploaded to your app today gets views. The same photo from two years ago sits in storage, loaded maybe once when someone scrolls back through an old profile. You pay the same rate for both. I have seen this pattern in every media-heavy application I have worked on. The hot data is a thin slice. The cold data grows without stopping. If you treat all objects the same, your storage bill reflects the worst case: premium pricing for data nobody touches. Tigris gives you two mechanisms to deal with this. You can transition old objects to cheaper storage tiers, or you can expire them outright. Both happen on a schedule you define. This post covers when and how to use each one. how media access decays Think about a social media feed. A user uploads a photo. For the first week, that photo a

STEEP: Your repo's fortune, steeped in truth.
This is a submission for the DEV April Fools Challenge What I Built Think teapot. Think tea. Think Ig Nobel. Think esoteric. Think absolutely useless. Think...Harry Potter?...Professor Trelawney?...divination! Tea leaf reading. For GitHub repos. That's Steep . Paste a public GitHub repo URL. Steep fetches your commit history, file tree, languages, README, and contributors. It finds patterns in the data and maps them to real tasseography symbols, the same symbols tea leaf readers have used for centuries. Mountain. Skull. Heart. Snake. Teacup. Then Madame Steep reads them. Madame Steep is an AI fortune teller powered by the Gemini API. She trained at a prestigious academy (she won't say which) and pivoted to software divination when she realized codebases contain more suffering than any teac



Discussion
Sign in to join the discussion
No comments yet — be the first to share your thoughts!