{"id":"46479323-8f7a-47d1-9e57-1ae560f0e91a","shortId":"7a3YPd","kind":"skill","title":"gwt","tagline":"Remove Gemini AI watermarks from images using GeminiWatermarkTool (GWT). Use this skill whenever the user mentions: Gemini watermark, 浮水印, AI image cleanup, removing logos from Gemini-generated images, Google ImageFX cleanup, batch processing AI-generated photos, or anything abou","description":"# GeminiWatermarkTool Skill for Codex-Like Agents\n\n## Overview\n\nGeminiWatermarkTool (GWT) removes visible Gemini AI watermarks from images using\nmathematically accurate reverse alpha blending, with optional AI denoising\n(FDnCNN + NCNN Vulkan GPU) for residual cleanup.\n\nSource: https://github.com/allenk/GeminiWatermarkTool\n\n---\n\n## Binary Location\n\nSearch in this order:\n\n1. Environment variable: `GWT_BINARY_PATH`\n2. System PATH: `GeminiWatermarkTool` (or `.exe` on Windows)\n3. Codex skill bin directory:\n   - Windows: `%USERPROFILE%\\.codex\\skills\\gwt\\bin\\GeminiWatermarkTool.exe`\n   - Linux/macOS: `~/.codex/skills/gwt/bin/GeminiWatermarkTool`\n4. Repo-local bin directory (validation mode / fallback):\n   - Windows: `.\\bin\\GeminiWatermarkTool.exe`\n   - Linux/macOS: `./bin/GeminiWatermarkTool`\n\nIf not found, run the installer:\n```\npython ~/.codex/skills/gwt/install.py\n```\n\nFor local validation inside this repo only:\n```\npython ~/.codex/skills/gwt/install.py --dir ./bin\n```\n\n**Always pass `--no-banner`** when calling GWT — suppresses ASCII art that wastes tokens.\n\n---\n\n## Decision Logic\n\n### Pipeline selection (automatic, based on flags)\n\n| Flags | Internal behavior |\n|-------|-------------------|\n| No advanced flags | Standard 3-stage NCC detection → process or skip |\n| `--fallback-region` only | Standard detection first → if not found, apply to fallback region |\n| `--fallback-region --snap` | **Skip standard detection entirely** → snap search directly |\n| `--force` | Skip detection, process unconditionally |\n\n### Case A — Standard image (not resized after generation)\n\n```bash\nGeminiWatermarkTool --no-banner -i input.jpg -o clean.jpg\n```\n\nDetection on by default (threshold 25%). Non-watermarked images are skipped safely.\n\n### Case B — Image was resized or recompressed\n\n`--fallback-region --snap` together skips standard detection and goes straight to\nmulti-scale snap search:\n\n```bash\nGeminiWatermarkTool --no-banner \\\n  -i input.jpg -o clean.jpg \\\n  --fallback-region br:64,64,500,500 \\\n  --snap --snap-max-size 320 --snap-threshold 0.60 \\\n  --denoise ai --sigma 50 --strength 120\n```\n\n### Case C — Unknown image (try standard first, fallback on failure)\n\nUse `--fallback-region` **without** `--snap`. Standard detection runs first;\nfallback region only activates if standard detection fails:\n\n```bash\nGeminiWatermarkTool --no-banner \\\n  -i input.jpg -o clean.jpg \\\n  --fallback-region br:64,64,500,500 \\\n  --denoise ai --sigma 50 --strength 120\n```\n\n---\n\n## Full CLI Reference\n\n### Core options\n\n| Flag | Default | Description |\n|------|---------|-------------|\n| `-i, --input <path>` | — | Input file or directory |\n| `-o, --output <path>` | — | Output file or directory |\n| `-f, --force` | false | Skip detection, process unconditionally |\n| `-t, --threshold <0.0-1.0>` | 0.25 | Detection confidence threshold |\n| `--force-small` | — | Force 48×48 watermark size |\n| `--force-large` | — | Force 96×96 watermark size |\n| `-v, --verbose` | false | Detailed output |\n| `-q, --quiet` | false | Suppress output except errors |\n| `--no-banner` | — | Hide ASCII banner (always use in this skill) |\n\n### Region options\n\n| Flag | Description |\n|------|-------------|\n| `--region <spec>` | Explicit watermark region |\n| `--fallback-region <spec>` | Search region when standard detection fails |\n\n**Region spec formats:**\n\n| Format | Meaning |\n|--------|---------|\n| `x,y,w,h` | Absolute pixel coordinates |\n| `br:mx,my,w,h` | Bottom-right: margin_right, margin_bottom, width, height |\n| `bl:mx,my,w,h` | Bottom-left relative |\n| `tr:mx,my,w,h` | Top-right relative |\n| `tl:mx,my,w,h` | Top-left / absolute |\n| `br:auto` | Gemini default position for this image size |\n\n### Snap engine\n\n| Flag | Default | Description |\n|------|---------|-------------|\n| `--snap` | false | Multi-scale snap within region/fallback-region |\n| `--snap-max-size <32-320>` | 160 | Maximum watermark size to search |\n| `--snap-threshold <0.0-1.0>` | 0.60 | Minimum confidence to accept match |\n\n### Denoise / inpaint\n\n| Flag | Default | Description |\n|------|---------|-------------|\n| `--denoise <method>` | off | `ai` \\| `ns` \\| `telea` \\| `soft` \\| `off` |\n| `--sigma <1-150>` | 50 | FDnCNN noise sigma (`ai` only) |\n| `--strength <0-300>` | 120 (ai) / 85 (others) | Blend strength in percent |\n| `--radius <1-25>` | 10 | Inpaint radius (`ns` / `telea` / `soft` only) |\n\n---\n\n## Watermark Size Auto-Detection\n\n| Image dimensions | Watermark | Margin |\n|-----------------|-----------|--------|\n| W ≤ 1024 or H ≤ 1024 | 48×48 | 32px |\n| W > 1024 and H > 1024 | 96×96 | 64px |\n\nOverride with `--force-small` or `--force-large`.\n\n---\n\n## Parameter Tuning Guide\n\n| Situation | Action |\n|-----------|--------|\n| Faint residual | `--denoise ai --sigma 50 --strength 120` |\n| Visible edge artifacts | `--sigma 75 --strength 180` |\n| Strong residual (heavily resized) | `--sigma 100 --strength 250` |\n| Detection keeps skipping | Lower `--threshold 0.15` or add `--fallback-region` |\n| Snap finds nothing | Widen region, increase `--snap-max-size 320` |\n| Snap confidence too low | Lower `--snap-threshold 0.40` |\n| Wrong size detected | `--force-small` or `--force-large` |\n\n---\n\n## Important Notes\n\n1. **AI denoise GPU fallback**: Vulkan GPU used when available, falls back to CPU\n   automatically. If AI init fails entirely, GWT falls back to NS inpainting.\n2. **SynthID cannot be removed**: Statistically embedded during generation,\n   inseparable from image content.\n3. **Supported formats**: jpg, jpeg, png, webp, bmp\n4. **Batch mode**: `-i dir/ -o dir/` processes all images; non-watermarked files\n   are skipped safely by default.","tags":["gwt","integrations","allenk","agent-skills","claude-skills","codex-skills","mcp"],"capabilities":["skill","source-allenk","skill-gwt","topic-agent-skills","topic-claude-skills","topic-codex-skills","topic-mcp"],"categories":["gwt-integrations"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/allenk/gwt-integrations/gwt","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add allenk/gwt-integrations","source_repo":"https://github.com/allenk/gwt-integrations","install_from":"skills.sh"}},"qualityScore":"0.453","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 7 github stars · SKILL.md body (5,626 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:14:18.037Z","embedding":null,"createdAt":"2026-05-18T13:21:53.484Z","updatedAt":"2026-05-18T19:14:18.037Z","lastSeenAt":"2026-05-18T19:14:18.037Z","tsv":"'-1.0':382,534 '-150':555 '-25':575 '-300':564 '-320':523 '/.codex/skills/gwt/bin/geminiwatermarktool':114 '/.codex/skills/gwt/install.py':136,145 '/allenk/geminiwatermarktool':80 '/bin':147 '/bin/geminiwatermarktool':128 '0':563 '0.0':381,533 '0.15':650 '0.25':383 '0.40':675 '0.60':294,535 '1':87,554,574,688 '10':576 '100':642 '1024':593,596,601,604 '120':300,351,565,629 '160':524 '180':636 '2':93,714 '25':236 '250':644 '3':101,177,727 '32':522 '320':290,666 '32px':599 '4':115,735 '48':391,392,597,598 '50':298,349,556,627 '500':283,284,344,345 '64':281,282,342,343 '64px':607 '75':634 '85':567 '96':399,400,605,606 'abou':42 'absolut':452,495 'accept':539 'accur':62 'action':621 'activ':324 'add':652 'advanc':174 'agent':49 'ai':4,21,37,56,68,296,347,548,560,566,625,689,704 'ai-gener':36 'alpha':64 'alway':148,421 'anyth':41 'appli':194 'art':158 'artifact':632 'ascii':157,419 'auto':497,586 'auto-detect':585 'automat':166,702 'avail':697 'b':245 'back':699,710 'banner':152,226,272,333,417,420 'base':167 'bash':222,268,329 'batch':34,736 'behavior':172 'bin':104,111,119,125 'binari':81,91 'bl':469 'blend':65,569 'bmp':734 'bottom':461,466,475 'bottom-left':474 'bottom-right':460 'br':280,341,455,496 'c':302 'call':154 'cannot':716 'case':214,244,301 'clean.jpg':230,276,337 'cleanup':23,33,76 'cli':353 'codex':47,102,108 'codex-lik':46 'confid':385,537,668 'content':726 'coordin':454 'core':355 'cpu':701 'decis':162 'default':234,358,499,508,544,753 'denois':69,295,346,541,546,624,690 'descript':359,429,509,545 'detail':406 'detect':180,189,204,211,231,258,318,327,376,384,441,587,645,678 'dimens':589 'dir':146,739,741 'direct':208 'directori':105,120,365,371 'edg':631 'embed':720 'engin':506 'entir':205,707 'environ':88 'error':414 'except':413 'exe':98 'explicit':431 'f':372 'fail':328,442,706 'failur':310 'faint':622 'fall':698,709 'fallback':123,185,196,199,252,278,308,313,321,339,435,654,692 'fallback-region':184,198,251,277,312,338,434,653 'fals':374,405,410,511 'fdncnn':70,557 'file':363,369,748 'find':657 'first':190,307,320 'flag':169,170,175,357,428,507,543 'forc':209,373,388,390,396,398,611,615,680,684 'force-larg':395,614,683 'force-smal':387,610,679 'format':445,446,729 'found':131,193 'full':352 'gemini':3,18,28,55,498 'gemini-gener':27 'geminiwatermarktool':9,43,51,96,223,269,330 'geminiwatermarktool.exe':112,126 'generat':29,38,221,722 'github.com':79 'github.com/allenk/geminiwatermarktool':78 'goe':260 'googl':31 'gpu':73,691,694 'guid':619 'gwt':1,10,52,90,110,155,708 'h':451,459,473,482,491,595,603 'heavili':639 'height':468 'hide':418 'imag':7,22,30,59,217,240,246,304,503,588,725,744 'imagefx':32 'import':686 'increas':661 'init':705 'inpaint':542,577,713 'input':361,362 'input.jpg':228,274,335 'insepar':723 'insid':140 'instal':134 'intern':171 'jpeg':731 'jpg':730 'keep':646 'larg':397,616,685 'left':476,494 'like':48 'linux/macos':113,127 'local':118,138 'locat':82 'logic':163 'logo':25 'low':670 'lower':648,671 'margin':463,465,591 'match':540 'mathemat':61 'max':288,520,664 'maximum':525 'mean':447 'mention':17 'minimum':536 'mode':122,737 'multi':264,513 'multi-scal':263,512 'mx':456,470,479,488 'ncc':179 'ncnn':71 'no-bann':150,224,270,331,415 'nois':558 'non':238,746 'non-watermark':237,745 'note':687 'noth':658 'ns':549,579,712 'o':229,275,336,366,740 'option':67,356,427 'order':86 'other':568 'output':367,368,407,412 'overrid':608 'overview':50 'paramet':617 'pass':149 'path':92,95 'percent':572 'photo':39 'pipelin':164 'pixel':453 'png':732 'posit':500 'process':35,181,212,377,742 'python':135,144 'q':408 'quiet':409 'radius':573,578 'recompress':250 'refer':354 'region':186,197,200,253,279,314,322,340,426,430,433,436,438,443,655,660 'region/fallback-region':517 'relat':477,486 'remov':2,24,53,718 'repo':117,142 'repo-loc':116 'residu':75,623,638 'resiz':219,248,640 'revers':63 'right':462,464,485 'run':132,319 'safe':243,751 'scale':265,514 'search':83,207,267,437,529 'select':165 'sigma':297,348,553,559,626,633,641 'situat':620 'size':289,394,402,504,521,527,584,665,677 'skill':13,44,103,109,425 'skill-gwt' 'skip':183,202,210,242,256,375,647,750 'small':389,612,681 'snap':201,206,254,266,285,287,292,316,505,510,515,519,531,656,663,667,673 'snap-max-s':286,518,662 'snap-threshold':291,530,672 'soft':551,581 'sourc':77 'source-allenk' 'spec':444 'stage':178 'standard':176,188,203,216,257,306,317,326,440 'statist':719 'straight':261 'strength':299,350,562,570,628,635,643 'strong':637 'support':728 'suppress':156,411 'synthid':715 'system':94 'telea':550,580 'threshold':235,293,380,386,532,649,674 'tl':487 'togeth':255 'token':161 'top':484,493 'top-left':492 'top-right':483 'topic-agent-skills' 'topic-claude-skills' 'topic-codex-skills' 'topic-mcp' 'tr':478 'tri':305 'tune':618 'uncondit':213,378 'unknown':303 'use':8,11,60,311,422,695 'user':16 'userprofil':107 'v':403 'valid':121,139 'variabl':89 'verbos':404 'visibl':54,630 'vulkan':72,693 'w':450,458,472,481,490,592,600 'wast':160 'watermark':5,19,57,239,393,401,432,526,583,590,747 'webp':733 'whenev':14 'widen':659 'width':467 'window':100,106,124 'within':516 'without':315 'wrong':676 'x':448 'y':449 '浮水印':20","prices":[{"id":"ecbd9f5f-df94-49c4-bc0c-c449d4fca497","listingId":"46479323-8f7a-47d1-9e57-1ae560f0e91a","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"allenk","category":"gwt-integrations","install_from":"skills.sh"},"createdAt":"2026-05-18T13:21:53.484Z"}],"sources":[{"listingId":"46479323-8f7a-47d1-9e57-1ae560f0e91a","source":"github","sourceId":"allenk/gwt-integrations/gwt","sourceUrl":"https://github.com/allenk/gwt-integrations/tree/main/skills/gwt","isPrimary":false,"firstSeenAt":"2026-05-18T13:21:53.484Z","lastSeenAt":"2026-05-18T19:14:18.037Z"}],"details":{"listingId":"46479323-8f7a-47d1-9e57-1ae560f0e91a","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"allenk","slug":"gwt","github":{"repo":"allenk/gwt-integrations","stars":7,"topics":["agent-skills","claude-skills","codex-skills","mcp"],"license":"mit","html_url":"https://github.com/allenk/gwt-integrations","pushed_at":"2026-05-09T23:53:34Z","description":"Claude Code Skill and MCP Server for GeminiWatermarkTool — let AI agents remove Gemini watermarks automatically","skill_md_sha":"6c0d05429de8669750d7b158c6fc302d94db9960","skill_md_path":"skills/gwt/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/allenk/gwt-integrations/tree/main/skills/gwt"},"layout":"multi","source":"github","category":"gwt-integrations","frontmatter":{"name":"gwt","description":"Remove Gemini AI watermarks from images using GeminiWatermarkTool (GWT). Use this skill whenever the user mentions: Gemini watermark, 浮水印, AI image cleanup, removing logos from Gemini-generated images, Google ImageFX cleanup, batch processing AI-generated photos, or anything about a semi-transparent logo in the bottom-right corner of an image — even if they don't say \"GeminiWatermarkTool\" explicitly. Also trigger for follow-up requests like \"the corner still looks dirty\" or \"there's still residual artifacts\" after a previous removal attempt."},"skills_sh_url":"https://skills.sh/allenk/gwt-integrations/gwt"},"updatedAt":"2026-05-18T19:14:18.037Z"}}