How the removal actually works
Nothing here erases a watermark. What happens is repainting: you mark the pixels you want gone, and a diffusion model invents plausible pixels to stand in their place, using what surrounds the mark as its guide.
a 512×512 crop around your strokes → repainted → composited back at the crop's original size, with every unpainted pixel untouched
So what comes back is a good guess at what the picture would have looked like, not a recovery of what was underneath. The model works on a 512-pixel square, so rather than shrink the whole picture — which would cost the entire image its detail — this tool crops a square around what you painted, at that area's own resolution, which is why a logo in the corner of a 4000-pixel photograph is repainted at close to its original scale. That crop and a black-and-white mask of your strokes go to a Cloudflare Worker and on to Stable Diffusion 1.5 Inpainting on Workers AI: unlike most tools on this site, this one does send part of your picture, and only that part.
Painting a mask that works
The mask is the whole job. The model repaints exactly what you mark and nothing else, so a stroke that misses part of a letter leaves that part of the letter behind.
| What you are removing | How to mask it | What to expect |
|---|---|---|
| A logo in a corner | Cover the mark and a little past its edge. Anti-aliased edges fade out further than they look, though the mask sent upstream is already grown slightly to catch them. | The best case by far. Corners are usually sky, wall, grass or blur, and a model continues any of those without trouble. |
| Text tiled across the whole frame | Paint over all of it, in as many strokes as it takes. Expect the crop to grow to the picture's shorter side, since the square has to cover everything you marked. | The weakest case. Masking the whole frame leaves the model almost nothing unmasked to match against, and the crop is now the whole picture, so detail is lost. |
| A mark over a face or fine detail | Mask tightly, one stroke at a time, and run it again if the first attempt is wrong. | Diffusion models reproduce faces, hands and text badly. Over a busy or meaningful subject, expect something plausible from a distance and wrong up close. |
| A whole object you want gone | Cover the object and its shadow. Missing the shadow is the single most common reason a removal looks wrong. | Often convincing against a simple background, and often a smear against a complicated one. |
Two habits help more than anything else. Mask tightly: every pixel you paint is a pixel the model gets to invent, so a generous stroke across a detailed area gives away detail you wanted to keep. And run it more than once — diffusion is not deterministic, so the same mask on the same picture gives a different repaint each time, and it is normal for the third attempt to be the one worth keeping.
The brush slider is measured in screen pixels, so it covers the same visible area whatever the preview is scaled to, while the strokes themselves are stored in the picture's own pixels. Without a pointer, focus the canvas and move the crosshair with the arrow keys — hold Shift to cross the picture faster — then press Enter or Space to dab at that spot. Undo removes one whole stroke; Clear mask removes all of them.
Every control on this page
One drop zone, one brush, and the things you do with a result.
| Control | What it does | Reach for it when |
|---|---|---|
| Image | Holds the picture to clean up. Click the panel or drop a file onto it. Choosing a different file discards the mask and the current result. | Always — one JPEG, PNG or WebP, up to 10 MB. |
| Brush | Sets the brush diameter in screen pixels, from 6 to 96. Strokes are recorded in the picture's own pixels, so resizing the window afterwards cannot move a mark you already painted. | Larger for a broad watermark, smaller for tracing around detail you want to keep. |
| The canvas | Drag across the picture to paint the mask. It also takes keyboard focus: arrow keys move a crosshair, Enter or Space dabs at it. | After choosing a file, and before the Remove button will do anything. |
| Undo stroke | Removes the last stroke — the whole drag, not part of it. | One stroke went too far. |
| Clear mask | Removes every stroke and leaves the picture in place. | Starting the mask over on the same picture. |
| Remove watermark | Crops the square around your mask, uploads it with the mask, and composites the repainted square back onto the original. Stays disabled until the file passes the format and size rules, something has been painted, and the bot check has passed. | Once the status line under the drop zone says it is ready. |
| Comparison divider | Slides across the result to reveal the original underneath it. Drag it, or give it focus and use the arrow keys, Home and End. | Checking whether the repainted edge is findable — sweep the divider back and forth across it. |
| Download PNG | Saves the composited picture at its original pixel dimensions, named after the file you started from. | When the repaint is one you want to keep. |
| Clear | Drops the picture, the mask and the result. | Before cleaning up a different image. |
| Bot check | A Cloudflare Turnstile widget above the buttons. It normally clears itself; now and then it asks for a click. Every removal has to carry the single-use token it issues. | Only when it asks for a click — otherwise it runs on its own and renews after each attempt. |
Undo and Clear mask stay disabled until something has been painted, and Remove needs all four of a valid file, a painted mask, a solved bot check, and no attempt already running. The status line under the drop zone always names whichever one is missing, so a disabled button is never unexplained.
A token can be spent only once, so the Remove button greys out for a moment after each attempt while a fresh one is issued. If the bot check reports an error, reload the page — the widget cannot recover on its own.
The Gemini tab: undoing a blend instead of guessing at one
The picture tab sends a square to an inpainting model and gets back something plausible. The Gemini tab sends nothing anywhere, and gets back what was actually there — because a generator does not paint over its output, it blends into it, and blending is an operation with an inverse.
None of that asks the reader where to look. Choosing a file starts the run, and all four corners are measured before one is chosen — the strongest peak wins, where “peak” is how far the brightest found pixel stood above its own surroundings. Which corner a generator signs in is a fact about the generator and its version rather than about the file: Gemini has used more than one, Veo signs bottom-right, and an image cropped since is signed wherever it ended up. A default corner is therefore wrong for somebody, and the somebody it is wrong for gets “no watermark found” on a picture that plainly has one.
A mark is laid on as o = (1 − a)·b + a·W: the picture b still present underneath, white W applied at strength a. Rearranged, b = (o − a·W) / (1 − a). Every value on the right is knowable, so the pixels underneath come back with their own grain and texture rather than being invented in the shape of the mark.
The one unknown is a, and this is where the tab differs from the clip tab rather than from the picture tab. A clip offers two dozen moments and everything that moves averages away, leaving the fixed mark standing. A still offers one moment, so the picture under the mark is estimated by fitting a smooth surface across the corner from the ring of untouched pixels around it; what stands above that surface is the mark, and how far above it stands is a. On sky, a wall or a gradient that estimate is near exact. On foliage, a crowd or text it has real error in it, and the division by 1 − a magnifies that error — which is why the tool cross-fades to a rebuilt fill wherever the mark is thick, and why the whole-box switch is within reach.
| Control | What it does | When to reach for it |
|---|---|---|
| Choose image | Reads a JPEG, PNG, WebP or AVIF from your device. Nothing is uploaded. | First and usually only step. The file is decoded in your browser, the mark is searched for and removed, and nothing is sent anywhere. |
| Signed corner | Moves the search box to a corner, plans a fresh box there and runs again. | Only when the automatic search picked the wrong corner. It measures all four on the first run and tells you which one it used. |
| Search area | Drag the box so the mark sits inside it with clean picture all the way around. | Whenever the default box does not land on the sparkle. Only what is found inside the box is ever written to. |
| Resize handle | Grows or shrinks the square from its outer corner. Arrow keys move it; + and − resize it. | Make it bigger when the mark is clipped by the box's edge, smaller when the box drags in a caption or a subject. |
| Repaint the whole box | Skips detection and rebuilds every pixel of the box from its edges. | Only when nothing is found, or the mark sits on detail the detector will not separate. It shows over a busy picture. |
| Back to the corner | Puts the box back where it started for the chosen corner. | After a drag that went somewhere unhelpful. |
| Remove watermark | Runs the detection and the un-blend again, against whatever the box is now. | The first run happens on its own. This is for running it again after a correction that did not already re-run it. |
| Before and after | Slides a divider across one picture rather than putting two side by side. | To judge the seam. Drag it, or use the arrow keys. |
| Download | Saves the cleaned PNG at the original size. | When the corner reads as unmarked. |
The download is a PNG whatever went in, and that is not a preference. Re-encoding a JPEG to change one corner of it would put the whole picture through a second lossy pass; a lossless container is the only way to promise that every pixel outside the repainted rectangle is exactly the one you handed over.
It will not help with a tiled watermark across the whole frame, a stock-library bar, or a mark that is not white — those are blends this tab cannot invert, and the picture tab's model is the better answer for them. And the corner search is a comparison rather than a verdict: handed a picture with no mark at all it will name its brightest corner and repaint a little of it, which the before-and-after view shows you and Clear undoes.
Cleaning a Gemini or Veo clip
The video tab is a different machine from the picture tab, and it is worth knowing which one you are using. Nothing is uploaded: your browser opens the container, decodes the frames through its own codecs, repaints one fixed rectangle in each of them, and writes a new MP4. There is no model, no server and no queue — which is why it costs a minute of your laptop rather than a second of somebody's GPU.
Gemini and Veo sign in the same place every time: a small white sparkle in the bottom-right corner, at a size that scales with the frame. The tool averages that corner across two dozen moments spread through the clip. Footage that moves washes out of an average; a mark that never moves does not, so what is left standing brighter than its own surroundings is the watermark. It is found twice over: once roughly, against a blurred copy of the corner, and then again against a proper estimate of the footage underneath — reconstructed by interpolating the averaged corner across the rough mark. The second pass is what catches the glow. Measured against a blur, a sparkle's halo is wide enough to have been averaged into the blur itself, so it reads as background and survives; measured against the reconstruction, it stands at its true height.
What the tool then knows is not where a hole is but how strongly the mark covers each pixel. A watermark is not a hole: it is white laid over the footage at a strength that falls from the core to nothing, so the observed pixel is (1 − a) × footage + a × white. With the opacity a known per pixel and the white known, that equation has one unknown left, and rearranging it hands back the footage exactly — grain, texture, gradient and all. Only the few pixels at the very centre, where the mark is effectively solid and the division stops being stable, have nothing left to recover; those are rebuilt from the pixels around them by a harmonic fill, after the rest has already been cleaned, so what they read from is real footage rather than leftover glow.
| Control | What it does | Reach for it when |
|---|---|---|
| Choose a video | Reads the container and reports the clip's size, length and frame rate without decoding a frame. | Always first. A clip past the size or length ceiling is refused here rather than after a minute of work. |
| Search box | Drag it anywhere on the frame. Only what is inside it is ever looked at or changed. | The default corner covers Gemini and Veo. Move it for a mark somewhere else. |
| Corner handle | Drags the box's top-left corner, growing or shrinking the square while its bottom-right corner stays put. | The mark is clipped by the box, or the box is large enough to be picking up something else. |
| Frame slider | Moves the preview through the clip so the box can be checked against more than the first frame. | The first frame is a fade, or the corner is dark enough that the mark is hard to see. |
| Repaint the whole box | Skips the search and rebuilds every pixel inside the box from its edges. | Nothing is found, or the mark sits on something the detector will not separate. Expect a visible smudge over detailed footage. |
| Back to the corner | Puts the box back where it started, flush into the bottom-right corner at its default size. | After moving the box around and wanting the Gemini default again. |
| Remove watermark | Runs the four stages — read, find, repaint, write — and hands back a new MP4. | Once the box sits over the mark. |
| Cancel | Stops the run and releases the decoder, the encoder and the muxer. Nothing is written. | The box was wrong and there is no point waiting for the answer. |
| Before and after | Two players, each with its own controls, so both can be put on the same moment. | Checking the corner at the moment the footage behind it is busiest. |
| Download MP4 | Saves the finished clip under the original's name plus a timestamp. | The result holds up. |
Both tracks are re-encoded, and it is worth knowing why neither can simply be copied. A compressed video frame is not a grid of pixels you can edit in place, so changing one corner of it means decoding, painting and encoding again. The audio is a subtler case: AAC inside an MP4 carries a few hundred samples of encoder priming, which puts its first sample fractionally before zero, and a file that has to start at zero has to be trimmed — which cannot be done to encoded packets. AAC is asked for on the way out, so on a browser that can encode it the result is AAC again; where one cannot, the tool falls back to Opus and says so above the download. The picture keeps its original dimensions, frame rate and length either way.
Two things it cannot do. Where the mark is effectively solid there is nothing left underneath to recover, so that core is rebuilt from its own edges rather than reconstructed — over strong texture a large solid mark will read as a smudge, which is why the search is deliberately narrow and why a sparkle, whose solid part is a dozen pixels, comes out clean. And a mark that moves, fades or changes shape between frames is not what this is: the whole premise is that the corner holds one thing that never moves and covers each pixel by the same amount every time.
What a good result looks like, and what it costs
The repaint is generated, so it will not match the original at the pixel level. Over sky, water, foliage, carpet, a plain wall or any soft blur, that is invisible. Over brickwork, printed text, a regular pattern or a face it is obvious, because those are what a diffusion model reproduces worst.
The patch also comes back through the model's own encoder, so its grain and sharpness differ slightly from the pixels beside it. The composite fades the edge to hide the join, and confining the change to the mask means the rest of the photograph keeps its original grain rather than being re-encoded along with it.
Because the crop is square and taken at native resolution, small marks come back sharp and large ones come back softer: a mask covering most of a picture forces a crop as large as the picture, which the model then sees at 512 pixels. When a result looks soft, the fix is usually a tighter mask rather than another attempt.
Your browser puts the answer back itself. The repainted square is scaled to the crop's original size and composited onto the picture through your strokes, with a soft edge so the join does not show. Every pixel you did not paint over is the pixel you started with, at the size you started with, and the download is a PNG at the original dimensions.
What this tool is for
This is a general image editor: it repaints a region of a picture you supply, and the watermark case is simply the most common reason to want that. It is meant for your own photographs and for images you hold the rights to — clearing a preview watermark from a frame you have licensed, taking your own overlay off an export whose source file is long gone, removing a date stamp burnt into a holiday photo, deleting a bin or a passer-by from a shot you took, or clearing the visible mark a generator left on an image you made with it.
It is not a way around someone else's licence. Removing a watermark grants you no rights to the work underneath, and a watermark is often there precisely because those rights have not been granted. Taking a credit, signature or provenance mark off an image and passing it on as your own is straightforward infringement, and removing rights-management information is separately unlawful in many places. Doing it through a model changes none of that.
The judgement is therefore yours, and it cannot be made here: the tool cannot see who owns the picture in front of it. A workable test is whether you would be comfortable telling the person who made the image what you are about to do to it. Anything whose point is to leave someone misled about where an image came from is not a use this tool is for.
What this cannot do
It cannot recover what a watermark covered. There is no original underneath to find — those pixels were overwritten before the file ever reached you, and what comes back is invention, however convincing it looks.
It cannot remove an invisible watermark. Statistical marks spread across a whole image, SynthID and similar provenance signals among them, are not what this touches; masking a region says nothing about them. It also cannot repaint an animation, which is why GIF is not accepted at all.
And it cannot do very much of it. The worker accepts five uploads a minute in total across everyone using the page, not five per person, so a busy moment arrives as a rate-limit message. Repainting runs twenty diffusion steps on a shared queue, so a single attempt can take the better part of a minute.
JPEG, PNG and WebP, up to 10 MB, one at a time. GIF and BMP are refused because a single still repaint of an animation is not a useful answer, and SVG, AVIF and HEIC because the pipeline cannot decode them — convert to PNG or JPEG first. Both rules are checked in your browser and again on the server. The download is always a PNG whatever went in, because the composite has to be lossless to avoid re-compressing the pixels it did not change.
What leaves your browser
Most tools on ToolForge run entirely on your device. This one cannot: inpainting needs an image model, and the model runs on Cloudflare's network.
Only the square you marked is uploaded — cropped in your browser, scaled to 512 pixels, and sent alongside a black-and-white mask of your strokes. The rest of the picture never leaves the page, and nothing at all leaves it until you press Remove. The compositing that produces the final image happens in your browser too, so the full-resolution result exists only on your own device.
Do not upload anything confidential. Even a crop can carry a face, a document or an address. When the marked area is sensitive, the honest answer is not to run it here.
