id-photo-tool

$npx mdskill add aipoch/medical-research-skills/id-photo-tool

Convert ID photos to compliant colors and add watermarks locally.

  • Generates official blue, white, or red background variants from local images.
  • Overlays customizable text watermarks at any corner or center position.
  • Processes only JPG and PNG files without modifying the original source.
  • Outputs results to a specified path while running entirely offline.

SKILL.md

.github/skills/id-photo-toolView on GitHub ↗
---
name: id-photo-tool
description: Replace an ID photo background color (blue/white/red) and/or add a configurable text watermark when you need compliant ID-photo variants from local JPG/PNG files.
license: MIT
author: aipoch
---
> **Source**: [https://github.com/aipoch/medical-research-skills](https://github.com/aipoch/medical-research-skills)

## When to Use
- You need to convert an ID photo background to a required solid color (blue/white/red) for official submissions.
- You need to add a visible “for application only” style watermark to prevent misuse of shared ID photos.
- You need to batch-generate multiple variants while keeping the original image unchanged (explicit output path).
- You need an offline, local-only tool (no network access) for processing sensitive personal images.

## Key Features
- Background color replacement for ID photos:
  - Supported target colors: `blue`, `white`, `red`
  - Detects the dominant background color using edge pixels and replaces it using color-distance matching
- Text watermark overlay:
  - Supported positions: top-left, top-right, bottom-left, bottom-right, center
  - Configurable opacity, font size, and font color
- Input/output constraints:
  - Supports `JPG` and `PNG` only
  - Output keeps the same format as the input
  - Does not overwrite the original file (output path must be provided)
- Local processing only:
  - Reads only from user-provided input paths and writes only to user-provided output paths

## Dependencies
- Python 3.x
- pillow (PIL) — version not pinned
- numpy — version not pinned

Install:
```bash
python -m pip install pillow numpy
```

## Example Usage
Background color replacement (JPG):
```bash
python scripts/id_photo_tool.py change-bg \
  --input input.jpg \
  --output output.jpg \
  --color blue
```

Background color replacement (PNG):
```bash
python scripts/id_photo_tool.py change-bg \
  --input input.png \
  --output output.png \
  --color white
```

Add a text watermark:
```bash
python scripts/id_photo_tool.py add-watermark \
  --input input.jpg \
  --output watermarked.jpg \
  --text "For application use only"
```

## Implementation Details
### Background Color Replacement
- **Background sampling**: The tool estimates the original background color by sampling pixels along the image edges (where background is most likely present).
- **Color-distance based replacement**: Pixels close to the estimated background color (by color distance) are treated as background and replaced with the selected target color.
- **Supported target colors**:
  - `blue`
  - `white`
  - `red`

### Text Watermark
- **Placement**: One of five positions is supported: top-left, top-right, bottom-left, bottom-right, center.
- **Rendering parameters**:
  - Opacity controls watermark transparency.
  - Font size controls text scale.
  - Font color controls text color.
- **Output behavior**: The watermark is composited onto the image and saved to the specified output path without modifying the original input file.

### Security / Compliance Notes
- No network access is used; all processing is performed locally.
- The script only accesses file paths explicitly provided via CLI arguments.
- The tool requires an explicit output path and does not overwrite the original file by default.

More from aipoch/medical-research-skills

SkillDescription
3d-molecule-ray-tracerGenerate photorealistic rendering scripts for PyMOL and UCSF ChimeraX.
abstract-summarizerTransform lengthy academic papers into concise, structured 250-word abstracts.
abstract-trimmerPrecision editing tool that reduces abstract word count through intelligent compression techniques, maintaining scientific rigor while meeting strict journal and conference requirements.
academic-abstract-refinerRefines long medical academic texts into SCI-style unstructured Chinese and English abstracts; use when you need to condense drafts/reports/summaries into bilingual abstracts and generate Summary_Report.md.
academic-cv-generatorGenerate structured academic CVs from free-form Chinese/English text and export to Word (.docx). Use this skill when you are asked to organize, generate, or optimize an academic CV (e.g., publications/projects/awards) into a consistent, formatted document with uniform-colored section headers and optional bilingual output.
academic-highlight-generatorGenerates submission-ready Elsevier/SCI Highlights from manuscript text or extracted PDF/DOCX/TXT content. Use when a user needs 3-5 concise, evidence-grounded highlight bullets for a research paper, review, meta-analysis, case report, or bioinformatics manuscript.
academic-norm-reviewDetects content similarity, verifies standardized citations and abbreviations, and flags potential academic integrity risks; use it before submission, during academic writing QA, or for compliance reviews.
academic-poster-generatorComplete workflow for generating academic research posters from PDF literature; use when you need to extract paper content from PDFs and produce a LaTeX-based poster (beamerposter/tikzposter/baposter) with mandatory figure generation and a final rendered HTML deliverable.
acronym-unpackerIntelligent medical abbreviation disambiguation tool that resolves ambiguous acronyms using clinical context, specialty-specific knowledge, and document-level semantic analysis.
active-comparator-single-soc-faers-safety-comparisonGenerates complete FAERS pharmacovigilance study designs for multi-drug or class-level safety comparison inside one predefined SOC or AE family using active comparators, disproportionality analysis, subgroup characterization, and reviewer-facing evidence control.