npx skills add ...
npx skills add faas-tech/extend-my-claude-code --skill watermark-removal
Universal watermark removal with ML-based inpainting and automatic detection. Works on ANY watermark type (Google SynthID, Midjourney, DALL-E, stock photos, logos). Four methods: inpaint (ML, best quality), aggressive (fast), crop (fastest), paint (basic). Auto-detects watermark location in any corner. Use when: (1) Removing ANY type of watermark, (2) Google AI/Imagen/Gemini watermarks, (3) Stock photo watermarks, (4) Logo overlays, (5) Cleaning images for production, (6) Batch processing, or (7) User mentions 'watermark', 'remove watermark', 'clean image', 'SynthID'
npx skills add faas-tech/extend-my-claude-code --skill watermark-removal
Remove watermarks from ANY image source using intelligent detection and proven methods. Smart routing: automatically detects Google SynthID and uses the proven aggressive method, falls back to ML inpainting for unknown watermark types.
⚠️ IMPORTANT: Always ask user before batch processing, especially with crop/aggressive methods that alter dimensions.
The skill automatically detects Google SynthID watermarks and routes to the optimal removal method:
Characteristics analyzed:
Smart routing logic:
If Google SynthID detected → Uses aggressive method (proven to work perfectly)
If unknown/other watermark → Uses inpaint method (ML-based)
What it does: ML-based inpainting with automatic watermark detection
Features:
Pros:
Cons:
pip install opencv-python)Use when:
What it does: Auto-detects corner, crops 120px, removes alpha channel, paints remnants
Pros:
Cons:
Use when:
What it does: Auto-detects and crops watermark corner
Pros:
Cons:
Use when:
What it does: Paints over watermark without cropping (no auto-detection)
Pros:
Cons:
Use when:
BALANCE DOMAIN KNOWLEDGE WITH DIMENSION PRESERVATION
Smart default behavior:
aggressive method (proven perfect, crops 120px)inpaint method (preserves dimensions)User override available:
--method inpaint flag--method aggressive flagUser approval required for batch cropping:
NEVER start batch processing without user confirmation:
Show what will happen:
Get explicit approval:
Prefer non-destructive:
inpaint for batch processingaggressive if user specifically requests speed over qualityCommon watermark types:
Smart Default Workflow (NEW):
aggressive method (proven perfect)inpaint method (ML-based, preserves dimensions)Method Selection Guide:
--method inpaint (ML-based, works on any watermark)--method aggressive (crops 120px, perfect for SynthID)--method crop (fastest, crops but may leave remnants)--method paint (basic, preserves dimensions but less reliable)Smart auto-detection (recommended):
Force dimension preservation:
Fast batch processing:
Disable auto-detection (force bottom-right):
Scenario: User has 3 Google AI images for website, watermarks need removal
Output:
Scenario: Client needs exact 1920x1080 image, can't crop
Scenario: Watermark is bigger than usual (70px)
See references/synthid-watermark.md for:
Required:
pip install Pillowpip install numpyOptional (for ML inpainting):
pip install opencv-pythonInstall all dependencies:
Note: The inpaint method requires OpenCV. Other methods work without it.
Performance:
Quality:
Backup:
Testing:
--size flag if needed# Recommended: Preserves dimensions
python .claude/skills/watermark-removal/scripts/batch-process.py \
/path/to/input-dir \
/path/to/output-dir \
--method inpaint
# Alternative: Fast but crops 120px (requires user approval)
python .claude/skills/watermark-removal/scripts/batch-process.py \
/path/to/input-dir \
/path/to/output-dir \
--method aggressive# Force ML inpainting even for Google SynthID (preserves dimensions)
python scripts/remove-watermark.py input.png output.png --method inpaint
# Force aggressive method for non-Google watermarks
python scripts/remove-watermark.py input.png output.png --method aggressive
# Disable auto-detection (assume bottom-right corner)
python scripts/remove-watermark.py input.png output.png --no-detectpython scripts/remove-watermark.py input.png output.pngpython scripts/remove-watermark.py input.png output.png --method inpaintpython scripts/batch-process.py ./input ./output --method aggressivepython scripts/remove-watermark.py input.png output.png --method inpaint --no-detectpython scripts/remove-watermark.py INPUT OUTPUT [OPTIONS]
Arguments:
INPUT Input image path
OUTPUT Output image path
Options:
--method {crop|inpaint} Removal method (default: crop)
--size INT Watermark size in pixels (default: 60)python scripts/batch-process.py INPUT_DIR OUTPUT_DIR [OPTIONS]
Arguments:
INPUT_DIR Directory with images to process
OUTPUT_DIR Directory for cleaned images
Options:
--method {crop|inpaint} Removal method (default: crop)
--pattern PATTERN File pattern to match (default: *.png)
--size INT Watermark size in pixels (default: 60)# Batch process all PNG images
python scripts/batch-process.py \
./public/images \
./public/images-clean \
--method crop \
--pattern "*.png"Found 3 images to process
Input: ./public/images
Output: ./public/images-clean
Method: crop
[1/3] Processing: ad-design-bedroom.png
✅ Saved to: ad-design-bedroom.png
[2/3] Processing: ad-design-kitchen.png
✅ Saved to: ad-design-kitchen.png
[3/3] Processing: ad-designs-bathroom.png
✅ Saved to: ad-designs-bathroom.png
✅ Successfully processed: 3/3python scripts/remove-watermark.py \
hero-image.png \
hero-image-clean.png \
--method inpaintpython scripts/batch-process.py \
./images \
./images-clean \
--method crop \
--size 70pip install Pillow numpy opencv-python