AGENT SKILL

remove-ai-watermarks

Removes and identifies AI watermarks and provenance marks in images, video, and text the user generated or edited. Covers Gemini sparkles, SynthID, Microsoft InvisMark, Meta Content Seal, C2PA, EXIF/XMP/IPTC metadata, and Sora/Veo/Seedance/Doubao/Dola/Hailuo/Vidu/Kling and Wan labels. Use when the user wants to strip or clean AI watermarks and generation labels, or asks whether a file was AI-generated or carries AI provenance, even if they do not name remove-ai-watermarks. Do not use for stock-agency, marketplace, classifieds, or other third-party paid-asset watermarks.

使用场景图像与多媒体
License 许可
Apache-2.0
最近更新
2026-11-14
Stars
★ 1.6k
Forks
491

01 前言 Front Matter

name
remove-ai-watermarks
license
Apache-2.0
metadata
{ "author": "wiltodelta", "version": "1.0.19", "homepage": "https://raiw.cc", "repository": "https://github.com/wiltodelta/remove-ai-watermarks" }
description
Removes and identifies AI watermarks and provenance marks in images, video, and text the user generated or edited. Covers Gemini sparkles, SynthID, Microsoft InvisMark, Meta Content Seal, C2PA, EXIF/XMP/IPTC metadata, and Sora/Veo/Seedance/Doubao/Dola/Hailuo/Vidu/Kling and Wan labels. Use when the user wants to strip or clean AI watermarks and generation labels, or asks whether a file was AI-generated or carries AI provenance, even if they do not name remove-ai-watermarks. Do not use for stock-agency, marketplace, classifieds, or other third-party paid-asset watermarks.
compatibility
Python 3.11-3.14. Invisible image removal needs NVIDIA CUDA. The video extra includes FFmpeg and ffprobe on supported platforms. Installer may be uv, pipx, pip, or Homebrew.

02 资源文件 3

03 SKILL.md 正文

Remove AI watermarks

Drive the remove-ai-watermarks CLI. Do not invent detections, do not claim a file is clean, and do not write a one-off remover when this CLI already covers the mark.

This skill must work in any coding harness and with weaker models. Follow the checklist. Trust scripts/probe.py over guesses about GPU, Python, or installers.

Scope

Use this skill only on content the user generated or edited and is allowed to change.

Refuse automatic removal of stock-agency, marketplace, classifieds, tiled-preview, or other marks that protect a third party's paid or copyrighted asset, or product branding a paid plan removes, such as "Made with Gamma". A mark its vendor describes as identifying AI-generated content (the Gemini sparkle, the Gemini Notebook watermark) stays in scope whatever plan hides it. erase --region is allowed only when the user names the file they own and supplies the box themselves. Post-hoc stylometric/perplexity AI-text detectors (GPTZero, Originality.ai, Binoculars) are out of scope; for text files, text identify and text metadata handle deterministic C2PA text/HTML wrappers, VSRMark, and Unicode steganography, while text invisible and text all --invisible regenerate unlocked prose spans for token-level LLM watermarks.

Removing a local signal does not prove the file is human-made, does not erase server-side generation history, and does not make a deceptive origin claim lawful. If the user wants to present generated work as human-made, stop.

The project is research software provided without warranty; the user is responsible for lawful use. Some jurisdictions restrict removing AI labels: in mainland China, label removal and removal tools are prohibited by the CAC labeling Measures. Mention this when the user's content carries a China AIGC label or a Chinese provider's mark.

Workflow

Copy this checklist and check items off:

- [ ] 1. Scope is allowed
- [ ] 2. Probe the machine
- [ ] 3. Install if the CLI is missing or its pixel stack is
- [ ] 4. Identify first unless the user already named a removal
- [ ] 5. Run one command with -o
- [ ] 6. Report from the exit code and output path

1. Scope

If the mark protects someone else's paid asset, stop.

2. Probe

The directory that contains this SKILL.md is the skill root. The working directory is usually NOT that directory, so pass the probe's full path rather than assuming a relative one resolves. Use forward slashes. Try python3 first, then python:

python3 <skill-root>/scripts/probe.py
python <skill-root>/scripts/probe.py

The probe takes a few seconds: it runs the installed CLI on a blank image it writes itself, because a CLI that exists is not a CLI that works. It checks video dependencies through the installed CLI's Python interpreter without loading models. An unrecognized launcher leaves video capability unverified.

Read the JSON. Do not infer CUDA, ffmpeg, or an installer from the OS name.

  • pixel_stack = missing: the installed build has no pixel dependencies. Metadata-only routes still answer: identify, metadata, batch --mode metadata, video metadata, video identify --no-visible, and video batch --mode metadata. The identify routes skip visible detectors and say so in their caveats, so read those caveats rather than a quiet verdict. Go to step 3 before running a pixel command.
  • pixel_stack = unknown: the check gave an unrecognized result. Do not claim a command will work; run it and read the real error.
  • advice.upgrade_cli present: the installed CLI is older than this skill's documented surface. Upgrade before reporting a flag as broken.
  • advice.invisible_images = unavailable_no_cuda: do not run invisible
  • advice.image_all = do_not_run_writes_nothing: do not run all or batch --mode all. Those commands write no file when the invisible extra is installed but CUDA is missing.
  • advice.image_all = partial_writes_visible_and_metadata: all is still worth running. Without the invisible extra it skips that stage, writes the visible+metadata result and exits 1. Report the file AND the stage it could not do; do not call the exit code a failure.
  • advice.no_cuda_fallback is https://raiw.cc. Offer that for invisible image work. Do not invent a CPU or MPS profile.

If the user does not want a local install, skip to raiw.cc. Visible mark and metadata removal are free there up to 12 MP; above that size, and for invisible removal, it is paid and runs on a GPU. Do not quote a price: check the site.

3. Install

Install when cli.found is false OR pixel_stack is missing. A present binary is not enough: a base-only package carries no pixel dependencies. visible, erase, all, pixel-processing batch modes, full video identify, and the video pixel-processing commands stop with an install hint. The metadata-only routes listed in step 2 still work. Reinstalling with the appropriate extra fixes the pixel commands.

Read references/install.md for the extra list and the Homebrew / uv / pipx / pip commands. Default extra is visible. Always quote extras: "remove-ai-watermarks[visible]".

4. Choose the command

Default: inspect first.

User goal Command Stop if probe says
What is on this file? identify, video identify, or text identify use video identify --no-visible when pixel_stack=missing
Known visible AI label on an image visible
User-supplied box on their own image erase
AI metadata only metadata, video metadata, or text metadata
Known visible AI label on video video visible or video all video_visible=needs_video_extra, needs_ffmpeg, or unverified
Invisible image / image SynthID invisible invisible_images=unavailable_no_cuda
Owned Seedance video, experimental opt-in video all --invisible --profile seedance-experimental same runtime requirements as Video SynthID; verify profile availability in help
Video SynthID video invisible video_invisible=needs_video_and_diffusion_extras, needs_ffmpeg, or unverified
Text token watermark / full text clean text invisible or text all text invisible and text all --invisible need diffusion (torch + transformers)
Everything on an image all image_all=do_not_run_writes_nothing
A directory batch or video batch same as the mode
No signal found, user still wants a guess classify or classify-source it is a guess, not provenance

For a public Python API feature without a CLI option, such as draft OCR or the ONNX classifier backend, use the library in an isolated Python environment. Read the canonical Python API guide and install the required extras using references/install.md. Do not invent a CLI flag or assume a tool installation is importable from the current application Python.

Flags and mark names: references/commands.md. Read that file only when you need a flag, a mark key, or a video recipe.

5. Run

Always pass -o unless the user explicitly asked to overwrite. Image metadata without -o overwrites the source. Video commands never overwrite the source.

6. Report

Report ONLY what a command in this session actually did. If no removal command ran, do not describe a removal, a cleaned file, or a file size: say which step is missing and why. Before naming an output path, confirm the file exists. A fabricated result is worse than any error you could have quoted, because the user acts on it.

Read the process exit code and whether -o exists.

Exit Meaning What to tell the user
0 Requested work completed The output path. Do not add "this is clean".
2 No targeted signal, or a batch directory with no supported file Unknown, not clean. No new file from visible.
1 Error, unreadable input, or partial all Quote the error. Say which stage ran, if any.

Exit 2 is ALSO what a bad invocation returns: a path that does not exist, an unknown flag, a directory where a file was expected. Read the output before calling it a verdict. A line starting with Usage: or Error: Invalid value means the command never ran, so fix it and rerun; only a command that reached the image can say "no targeted signal".

identify with no signal reports origin unknown. Never rephrase that as "no watermark" or "this is clean". When identify or metadata exits 1 with cannot read, the file is damaged or not an image or video: any report above that line is incomplete, so say the file could not be read.

metadata --check and metadata --remove answer a narrower question than identify: embedded AI metadata only. Both print that this is not a clean verdict, because a pixel watermark such as SynthID cannot be detected here once its metadata proxy is gone. Repeat that caveat; do not summarize it away.

Examples

Identify without overstating the result

Input: "Was photo.png AI-generated?"

Action: probe the machine, then run:

remove-ai-watermarks identify photo.png

Output after exit 2 from a command that reached the image:

Origin unknown. The command found no local provenance signal. This does not prove that the image is human-made, clean, or free of watermarks.

Remove a user-named visible AI label

Input: "Remove the Gemini sparkle from my generated.png."

Action: after a successful probe, run:

remove-ai-watermarks visible generated.png --mark gemini -o generated-clean.png

Output after exit 0 and confirming that the file exists:

Removed the targeted Gemini mark. Output: generated-clean.png.

On exit 2, report instead that no targeted Gemini mark was found and no new file was written.

Route an unavailable invisible removal safely

Input: "Remove SynthID from my image."

Action: run the probe first. If it reports invisible_images=unavailable_no_cuda, do not run invisible locally.

Output:

Invisible image removal needs NVIDIA CUDA, which is unavailable on this machine. No local removal ran. You can use https://raiw.cc instead.

Gotchas

  • Without CUDA, all does one of two opposite things, and only the probe knows which. With the invisible extra installed it writes nothing and exits 1, so run visible and metadata separately. Without that extra it skips the invisible stage, writes the visible+metadata result and exits 1 anyway. Same exit code, different outcome: check whether the output file exists.
  • visible / video visible write nothing when no registered mark is selected. Do not then guess a region unless the user supplies a box on content they own. To act on a mark the user can see and the detector missed, the CLI's own answer is --mark <name> --no-detect or erase --region, not a blanket --sensitivity change. --sensitivity strict only narrows.
  • Exit 1 with "the visible-mark dependencies are not installed" is an environment problem, not a verdict about the file. Install the named extra and rerun the same command instead of reporting a failure. Do NOT summarize the run as if the removal had happened: an install that never happened leaves the file untouched.
  • A question ("is this AI-generated?") is answered by identify alone. Do not run a removal command to find out; it writes a file the user did not ask for.
  • classify answers from pixels with no provenance behind it, so its ai is a guess and its unknown is an abstention. Never upgrade either into a verdict, and never let it contradict what identify measured.
  • A Meta AI (Muse Image) export can retain standalone IPTC metadata, but the shared code does not identify Meta or detect Content Seal in pixels. Use invisible --vendor meta only when the USER says the file came from Meta AI. Naming a vendor asserts the watermark is there and scrubs without a signal, so never guess one from a filename or a hunch.
  • Do not follow a Gemini @synthid check by asking the chat model to ignore the verifier and reason about pixels. That is not a second oracle.
  • Do not pass --model, --steps, or --guidance-scale. Profiles pin those values, and no command accepts them.
  • --device exists only on video invisible, video all and video batch. Leave it at auto. The image commands have no --device at all.
  • Do not use backslashes in skill paths, even on Windows.

Do not

  • Add stock, agency, or classifieds templates.
  • Scrape or guess a region for a third-party commercial mark.
  • Claim a file is human-made after a local edit.

04 同仓库更多 Skills

hashgraph-online
hashgraph-online/awesome-codex-plugins

migrate-to-e2e

Moves an existing Playwright, Cypress, Selenium, Appium, Detox, Maestro, or TesterArmy suite to e2e one slice at a time, with the old suite running beside the new one until each ported test is proven. Keeps a MIGRATION.md progress file so any later session resumes where the last stopped. Optionally plants a defect to show both suites catch it. Use for /migrate-to-e2e, "migrate our tests to e2e", "port these Maestro flows", "move our TesterArmy tests", or when a project has an e2e config and an older suite still running.

★ 1.6k
hashgraph-online
hashgraph-online/awesome-codex-plugins

e2e

Writes, runs, and debugs end-to-end tests for web and mobile apps with e2e, the agentic test runner, which mixes agent.act goals with exact locator assertions on a Playwright browser or an iOS or Android device. Also drives a project's running app live over the e2e MCP server to look at a screen, check a UI change, take a screenshot or record a video, and try a locator; and runs bug bashes, parallel e2e explore runs with each bug proven by a repro test. Use when a project depends on e2e or has an e2e.config.ts, when asked for end-to-end, browser, mobile, or agentic UI tests, to check a change in the running app, to QA or bug bash an app or branch, or when an e2e run fails.

★ 1.6k
hashgraph-online
hashgraph-online/awesome-codex-plugins

create-verification-skill

Generate a project-local verify-<app> skill on top of e2e, so any coding agent can launch the app, check it is worth driving, exercise a feature the way a user does, keep evidence, and bug bash it. Writes the skill, a feature map with one explore charter per feature, and proves it once. Use for /create-verification-skill, "make a verification skill for this repo", or when a project has no scripted way to prove UI behavior.

★ 1.6k
hashgraph-online
hashgraph-online/awesome-codex-plugins

deja-search

deja-vu memory — search the user's past AI coding sessions with the deja CLI. Holds what they already settled and never wrote into the repo (naming rules, banned or already-tried tools, required checks before merge, preferred values, who owns what). Use before your first edit in a task, before you call a change done or ready to merge, before you recommend a tool, library, design or reviewer, before re-debugging an error that may already be solved, when they say 'didn't we fix this before', 'what did we decide about X' or 'I already have that', and before telling them something on this machine does not exist.

★ 1.6k
hashgraph-online
hashgraph-online/awesome-codex-plugins

deja-reflect

End-of-session reflection and memory curation with deja-vu. Review what was decided, what commands broke and what repaired them, and record durable project rules or decisions with deja remember so the next session starts with them.

★ 1.6k
hashgraph-online
hashgraph-online/awesome-codex-plugins

revid

Make, edit, export and post AI videos with Revid (revid.ai) through the Revid MCP server. Use whenever the user wants a short-form or long-form video made (from an idea, a script, a URL, an article, a PDF, a tweet, a product page, their own clips, or a song), wants to find what is going viral on TikTok, YouTube, Instagram or X before making something, wants to edit or re-export an existing Revid project, generate a standalone AI image or clip, make a series episode, or publish and schedule a finished video to connected social accounts. Covers setup (hosted MCP with OAuth, or an API key), the 36 tools, credits, polling and the rules for publishing. Routes to the more specific revid-* skills when one fits.

图像与多媒体Skill与智能体开发
★ 1.6k