remove-ai-watermarks-low-vram is my unofficial adaptation of wiltodelta/remove-ai-watermarks designed to make AI-watermark removal practical on older NVIDIA hardware. I developed and tested it on a GeForce GTX 1050 with only 4 GB of VRAM, an Intel Core i7-7700HQ processor, and 16 GB of system memory.
The project addresses a practical problem: modern image-regeneration pipelines can require far more GPU memory than an older computer provides. Instead of requiring a new graphics card, this version uses CPU offloading, attention slicing, VAE slicing and tiling, selective model loading, and a completely optional face-processing stage. The original image is always preserved, while the processed copy receives a configurable suffix.
What the project provides
The repository contains the complete upstream application together with three Bash commands tailored to different situations:
cleanImage.shruns the complete pipeline, including face detection and face refinement. It is intended for systems with substantially more GPU memory and storage.cleanImageNoFace.shskips all face-related models and performs the global SDXL regeneration. This is the recommended general-purpose command for a 4 GB GPU.cleanImageNoFaceText.shalso skips face processing but adds experimental protection for small writing through PaddleOCR, LaMa, and crop-based Qwen-VAE reconstruction.
By default, the first two commands add _cleaned before the file extension. The text-preserving version adds _cleaned_text and creates a JSON report describing the text regions it processed. Existing outputs are never overwritten.
Why text needs special treatment
Invisible-watermark removal works by regenerating the image pixels. Even at a conservative strength, this can damage small letters because an image model treats them as visual shapes rather than as exact typography. Large decorative words integrated into an illustration are often preserved adequately, while captions, prices, footnotes, and other small text are more vulnerable.
The text-aware command first uses PaddleOCR to locate individual oriented text boxes and compare the original with the regenerated candidate. It ignores text taller than 10% of the image, since large lettering generally does not need intervention. For selected small lines, LaMa removes damaged glyph pixels and the compact VAE component of Qwen reconstructs only context-rich crops. It does not download or load the approximately 57 GiB full Qwen transformer.
How the watermark-removal process works
The software does not decode SynthID and erase a known payload. Its SDXL image-to-image pipeline instead regenerates the pixels under structural guidance. This changes the fine statistical patterns in which an invisible watermark can be embedded while attempting to retain the visible composition. A subsequent step removes supported C2PA, EXIF, and other metadata from the newly generated file.
This remains a generative operation. Colors, textures, faces, or lettering can change, particularly at higher strength values. Every result should therefore be inspected visually and tested with the relevant provider's verification service.
A verified ChatGPT example
The repository includes a 1448×1086 test image generated with ChatGPT and its processed counterpart. On 25 August 2026, the exact files were uploaded separately to OpenAI Verify. The original was reported as containing SynthID, while no supported OpenAI provenance signal was detected in the processed output.
As OpenAI itself explains, a result of “not detected” means that the service did not find a supported signal; it does not establish that an image was never created or edited with AI.
Installation on Linux
The repository includes an installer for Python 3.11 or 3.12 and an NVIDIA GPU with a compatible driver:
git clone https://github.com/jsfan3/remove-ai-watermarks-low-vram.git cd remove-ai-watermarks-low-vram ./install.sh
The installer creates a main CUDA environment and a separate CPU PaddleOCR environment. It states the expected transfer size and asks for confirmation before proceeding. Model weights are not stored in the Git repository: the required components are downloaded automatically on first use and retained in the normal Hugging Face and PaddleX caches.
Starting from an empty cache, the complete face-free installation and its first execution may transfer roughly 15 GB and occupy about 18 GiB, including Python environments and model caches. At least 25 GiB of free disk space is recommended. These figures are estimates because model revisions and Python packages can change over time.
Basic usage
For an ordinary image on a 4 GB GPU:
./cleanImageNoFace.sh image.png
For an image containing small text:
./cleanImageNoFaceText.sh image.png
Multiple files and normal Bash wildcards are accepted:
./cleanImageNoFace.sh *.jpg *.png ./cleanImageNoFaceText.sh --strength 0.10 scans/*.png
The default strength is 0.15. The accepted range is 0.05 to 1.00: lower values change the image less, while higher values regenerate it more aggressively. Processing occurs at the original resolution by default, without the 1024-pixel downscaling used in some memory-saving configurations. JPEG output is saved at quality 100 with 4:4:4 chroma subsampling to minimize additional loss.
Safety, limitations, and project status
Each script calculates the source hash before processing and checks it again before publishing the output. Temporary files are used until the operation succeeds, and neither an existing result nor the source is overwritten. The built-in identification command runs before and after processing, although an “unknown” result is not proof that SynthID is absent.
The low-VRAM path is slower than execution on a modern GPU because model components move between system memory and video memory. The face-free scripts intentionally omit face refinement, and OCR-based text restoration remains experimental. Results vary with the source image, strength, installed model revisions, and the detector used for verification.
The code is published under the Apache License 2.0, retains the upstream history and attribution, and clearly documents every modified upstream file.
The source code, installation instructions, before-and-after example, technical changes, and current test status are available at github.com/jsfan3/remove-ai-watermarks-low-vram.
(August 26, 2026)