Skip to main content
Glama
README.md
# ๐ŸŽฏ Stamp it - Apply a full-screen watermark to an image

A professional image watermarking service built with FastMCP, supporting both text and image watermarks with intelligent color adaptation.

[ไธญๆ–‡ๆ–‡ๆกฃ](README_CN.md) | English

## โœจ Key Features

- ๐Ÿ–ผ๏ธ **Dual Watermark Modes**: Support for both text and image watermarks
- ๐Ÿ“‚ **Local File Processing**: Professional local image file handling
- ๐ŸŽจ **Smart Adaptive Colors**: Automatic color selection based on image brightness
- ๐Ÿ“ **Tilted Watermark Effects**: Customizable angle tilting (default 30ยฐ upward right)
- ๐ŸŒ **Multi-language Support**: Chinese, English, Japanese, Korean and more
- ๐ŸŽฏ **High-density Coverage**: Complete coverage of every corner with no gaps
- ๐Ÿ’Ž **High Definition**: BICUBIC resampling for smooth edges
- ๐Ÿ“ **Smart Saving**: Auto-save in the same directory as original image
- โšก **Performance Optimized**: Font caching, intelligent scaling, memory management
- ๐Ÿ› ๏ธ **Rich Format Support**: Supports 7 common image formats


## ๐Ÿ“– Usage

### MCP Client Configuration

#### Cherry Studio (Recommended)

1. **Open Cherry Studio Settings**
   - Go to Settings โ†’ MCP Servers
   - Click "Add Server"

2. **Configure MCP Server**
   
   ![Cherry Studio MCP Configuration](images/cherry-studio-config.png)

3. **Save and Connect**
   - Click "Save" to add the server
   - The server will automatically connect
   - You can now use the watermark tools in Cherry Studio
   
   ![Cherry Studio MCP Tools](images/cherry-studio-tools.png)

#### Cursor

1. **Open Cursor Settings**
   - Use shortcut `Cmd+,` (Mac) or `Ctrl+,` (Windows/Linux)
   - Or click Settings โ†’ Preferences

2. **Configure MCP Server**
   - Find "MCP Servers" configuration option
   - Add the following configuration:

```json
{
  "mcpServers": {
    "stampit": {
      "command": "uvx",
      "args": [
        "mcp-stampit"
      ]
    }
  }
}
```

3. **Save and Restart**
   - Save the configuration file
   - Restart Cursor for changes to take effect
   - You can now use the watermark tools in Cursor

## ๐Ÿ“ฆ Preview

![preview-1.png](images/preview-1.png)

![preview-2.png](images/preview-2.png)

![preview-3.png](images/preview-3.png)

![preview-4.png](images/preview-4.png)

## ๐Ÿš€ Installation

### Using uv (Recommended)

```bash
# Install dependencies
uv pip install fastmcp pillow

# Or install using project configuration
uv pip install -e .
```

### Using pip

```bash
pip install fastmcp pillow
```

### Start the MCP Server (Standalone)

```bash
python main.py
```

After the server starts, you will see output similar to:
```
โ•ญโ”€ FastMCP 2.0 โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚   ๐Ÿ–ฅ๏ธ  Server name:     Stamp it - Apply a full-screen watermark to an image    โ”‚
โ”‚   ๐Ÿ“ฆ Transport:       STDIO                                                    โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
```

### Available MCP Tools

#### `add_text_watermark` - Text Watermark

Add intelligent text watermarks to images with multi-language support and adaptive colors.

**Parameters:**
- `image_path` (str): Local image file path
- `watermark_text` (str): Watermark text content
- `angle` (float, optional): Watermark tilt angle, default 30ยฐ

**Usage Examples:**
```python
# Basic text watermark
add_text_watermark("/Users/photos/vacation.jpg", "My Copyright")

# Custom angle
add_text_watermark("./document.png", "Confidential", angle=45)

# Multi-language watermark
add_text_watermark("photo.jpg", "Copyright ยฉ 2024 All Rights Reserved")
```

#### `add_image_watermark` - Image Watermark

Add image watermarks to photos, supporting logos, signatures, and other images as watermarks.

**Parameters:**
- `image_path` (str): Local image file path
- `watermark_image_path` (str): Watermark image file path
- `angle` (float, optional): Watermark tilt angle, default 30ยฐ

**Usage Examples:**
```python
# Add logo watermark
add_image_watermark("/Users/photos/product.jpg", "/Users/logos/company_logo.png")

# Custom angle logo watermark
add_image_watermark("photo.jpg", "signature.png", angle=0)

# Brand watermark
add_image_watermark("marketing_image.jpg", "brand_watermark.png", angle=15)
```

## ๐ŸŽจ Watermark Features

### ๐Ÿ“ Text Watermark Features

- **Smart Color Adaptation**
  - Bright images: Automatically use dark watermarks (RGB 20,20,20)
  - Dark images: Automatically use light/white watermarks (RGB 240,240,240)
  - Medium brightness: Intelligently select optimal contrast colors

- **Multi-language Font Support**
  - Auto-detect and load system's best Chinese fonts
  - Support for PingFang SC, Microsoft YaHei, SimHei, etc.
  - Perfect display of Chinese, Japanese, Korean, and English

- **High-quality Rendering**
  - Font caching for improved performance
  - BICUBIC resampling for smooth edges
  - Centered rendering with excellent rotation effects

### ๐Ÿ–ผ๏ธ Image Watermark Features

- **Smart Scaling**: Auto-scale to appropriate size (default 15%)
- **Opacity Control**: Automatic opacity adjustment without affecting original image
- **Aspect Ratio Preservation**: Maintain watermark image aspect ratio
- **High-quality Scaling**: Use LANCZOS algorithm for clarity

### ๐ŸŽฏ Layout Algorithm

- **Complete Coverage**: Start from outside image boundaries for 100% coverage
- **Staggered Arrangement**: Odd-even row offset for more natural visual effect
- **Dense Distribution**: Optimized spacing algorithm, 40% higher density than traditional methods
- **Edge Handling**: Complete watermark coverage in all four corners

## ๐Ÿ“ File Output

### Save Rules
- **Save Location**: Auto-save in the same directory as original image
- **Naming Convention**: Original filename + `_watermark` + extension
- **Format Preservation**: Maintain original image format and quality
- **Optimized Saving**: Enable compression optimization to reduce file size

### Output Examples
```
Input:  /Users/photos/vacation.jpg
Output: /Users/photos/vacation_watermark.jpg

Input:  ./designs/logo.png
Output: ./designs/logo_watermark.png

Input:  document.pdf.png
Output: document.pdf_watermark.png
```

## ๐Ÿ› ๏ธ Supported Image Formats

| Format | Extensions | Read | Save | Transparency | Optimized |
|--------|------------|------|------|--------------|-----------|
| JPEG | .jpg, .jpeg | โœ… | โœ… | โŒ | โœ… |
| PNG | .png | โœ… | โœ… | โœ… | โœ… |
| GIF | .gif | โœ… | โœ… | โœ… | โœ… |
| BMP | .bmp | โœ… | โœ… | โŒ | โœ… |
| TIFF | .tiff, .tif | โœ… | โœ… | โœ… | โœ… |
| WebP | .webp | โœ… | โœ… | โœ… | โœ… |

## ๐ŸŒ Multi-language Font Support

### Supported Languages
- **Chinese**: Simplified & Traditional Chinese
- **Japanese**: ใฒใ‚‰ใŒใชใ€ใ‚ซใ‚ฟใ‚ซใƒŠใ€ๆผขๅญ—
- **Korean**: ํ•œ๊ธ€ (Hangul)
- **English**: Latin character set
- **Others**: Most Unicode characters

### Font Priority

**macOS System:**
1. PingFang SC (Apple's default Chinese font)
2. STHeiti Light (Chinese typography)
3. Hiragino Sans GB (Winter Blue font)
4. Arial Unicode (Universal Unicode font)

**Windows System:**
1. Microsoft YaHei
2. SimSun
3. SimHei

**Linux System:**
1. DejaVu Sans
2. Liberation Sans
3. Noto Sans CJK
4. WenQuanYi Zen Hei

## ๐Ÿ“‚ Project Structure

```
stampit/
โ”œโ”€โ”€ main.py                   # Main program and MCP server
โ”œโ”€โ”€ pyproject.toml            # Project configuration
โ”œโ”€โ”€ README.md                 # English project documentation
โ”œโ”€โ”€ README_CN.md              # Chinese project documentation
โ”œโ”€โ”€ uv.lock                   # Dependency lock file
โ””โ”€โ”€ LICENSE                   # License file
```

## ๐Ÿงช Quick Testing

### Test Text Watermark
```bash
# 1. Start server
python main.py

# 2. Call in MCP client
add_text_watermark("path/to/your/image.jpg", "Test Watermark")
```

### Test Image Watermark
```bash
# 1. Prepare a logo image
# 2. Call in MCP client
add_image_watermark("path/to/your/photo.jpg", "path/to/logo.png")
```

## โš™๏ธ Technical Details

### Core Algorithms
- **Brightness Calculation**: Grayscale conversion + pixel average algorithm
- **Color Adaptation**: Four-tier classification system based on brightness thresholds
- **Position Calculation**: Staggered grid + edge offset algorithm
- **Rendering Optimization**: BICUBIC/LANCZOS resampling technology

### Performance Optimization
- **Font Caching**: Avoid repeated font file loading
- **Smart Scaling**: Brightness calculation using 50x50 small images for speed
- **Memory Management**: Timely release of temporary layers and cache
- **Batch Processing**: Support for efficient batch image processing

### Quality Assurance
- **Edge Smoothing**: Use high-quality resampling algorithms
- **Color Fidelity**: Preserve original image color space and mode
- **Transparency Handling**: Proper RGBA channel processing
- **Format Compatibility**: Smart conversion between different image formats

## ๐Ÿ”ง Advanced Configuration

You can adjust parameters by modifying the `WatermarkConfig` class:

```python
class WatermarkConfig:
    DEFAULT_FONT_SIZE = 36          # Default font size
    DEFAULT_ANGLE = 30              # Default tilt angle
    SPACING_X_FACTOR = 1.1          # Horizontal spacing multiplier
    SPACING_Y_FACTOR = 0.9          # Vertical spacing multiplier
    BRIGHTNESS_THRESHOLDS = {       # Brightness thresholds
        'very_bright': 180,
        'medium': 120,
        'dark': 60
    }
```

### Custom Parameter Suggestions
- **Dense Watermarks**: Lower spacing multipliers (0.8, 0.7)
- **Sparse Watermarks**: Higher spacing multipliers (1.5, 1.3)
- **Large Fonts**: Increase font size (48, 54)
- **Small Fonts**: Decrease font size (24, 30)

## ๐ŸŽ›๏ธ Usage Tips

### Text Watermark Tips
1. **Copyright Info**: Use "ยฉ 2024 Company Name" format
2. **Multi-language**: Mixed Chinese-English works better
3. **Angle Selection**: 30ยฐ most natural, 45ยฐ more prominent, 0ยฐ for documents

### Image Watermark Tips
1. **Logo Design**: Use transparent background PNG format
2. **Size Control**: Logo shouldn't be too large, recommend within 15% of original
3. **Color Matching**: Choose logo colors with appropriate contrast to original image

## ๐Ÿ’ก Best Practices

### Batch Processing Recommendations
```python
# Recommended batch processing method
images = ["photo1.jpg", "photo2.jpg", "photo3.jpg"]
watermark_text = "ยฉ 2024 My Company"

for image_path in images:
    result = add_text_watermark(image_path, watermark_text)
    print(result)
```

### Performance Optimization Suggestions
1. **Use same font size in batches** to leverage font caching
2. **Avoid frequent angle changes** to reduce computational overhead
3. **Use small-sized image watermarks** to improve processing speed

## ๐Ÿ“„ License

This project is licensed under the Apache 2.0 License - see the LICENSE file for details.

## ๐Ÿค Contributing

Issues and Pull Requests are welcome!

### Contributing Guidelines
1. Fork the project
2. Create a feature branch
3. Commit your changes
4. Submit a Pull Request

## ๐Ÿ“ž Technical Support

For questions or suggestions:
1. Submit GitHub Issues
2. Check project documentation
3. Contact development team

---

**๐ŸŽ‰ Thank you for using Stamp it!**

TDQS

A3.8/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have clearly distinct purposes: one adds an image watermark, the other adds a text watermark. There is no ambiguity or overlap between them.

Naming Consistency5/5

Both tools follow a consistent verb_noun pattern (add_image_watermark, add_text_watermark) with underscore separation, making naming predictable and clear.

Tool Count4/5

With only 2 tools, the server is very focused on watermarking. While minimal, it covers the two primary watermark types, so the count feels appropriate for a simple utility.

Completeness4/5

The server covers the core watermarking operations (image and text). Missing advanced options like opacity or position, but the essential functionality is complete for a basic stamping tool.

Maintenance

ActivityInactive
ResponsivenessNo issues