[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6MP1P454E978VV8AKTCGGD5":3,"skill-same:01M6MP1P454E978VV8AKTCGGD5":97},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":46,"linkOnly":47,"markdownContent":48,"markdownBody":49,"frontMatter":50,"refName":57,"commitSha":58,"skillDirectory":59,"forksCount":60,"repositoryHtmlUrl":61,"repositoryHomepageUrl":62,"ownerHtmlUrl":63,"ownerBlogUrl":64,"ownerDescription":65,"updatedAt":66,"install":67,"resources":80},"01M6MP1P454E978VV8AKTCGGD5","remove-ai-watermarks",null,"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\u002FXMP\u002FIPTC metadata, and Sora\u002FVeo\u002FSeedance\u002FDoubao\u002FDola\u002FHailuo\u002FVidu\u002FKling 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.","hashgraph-online\u002Fawesome-codex-plugins","hashgraph-online","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F160371962?v=4","01M6CNB6NRJVNNGN14TR01Q6D3","HOL (Hashgraph Online)","01M6JT1HSKKG9V68KQAQGBA7XP",1575,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fwiltodelta\u002Fremove-ai-watermarks\u002Fskills\u002Fremove-ai-watermarks\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],"remove ai watermarks","remove","when","paid","installer","gemini","NVIDIA","do","asset","cc","c2pa","image","generated","uv","pipx","clean","labels","Meta","sora","stock","Video","images","2026-11-10 10:12:30",false,"---\nname: remove-ai-watermarks\ndescription: \"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\u002FXMP\u002FIPTC metadata, and Sora\u002FVeo\u002FSeedance\u002FDoubao\u002FDola\u002FHailuo\u002FVidu\u002FKling 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.\"\nlicense: Apache-2.0\ncompatibility: 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.\nmetadata:\n  author: wiltodelta\n  version: \"1.0.19\"\n  homepage: https:\u002F\u002Fraiw.cc\n  repository: https:\u002F\u002Fgithub.com\u002Fwiltodelta\u002Fremove-ai-watermarks\n---\n\n# Remove AI watermarks\n\nDrive the `remove-ai-watermarks` CLI. Do not invent detections, do not claim a\nfile is clean, and do not write a one-off remover when this CLI already covers\nthe mark.\n\nThis skill must work in any coding harness and with weaker models. Follow the\nchecklist. Trust `scripts\u002Fprobe.py` over guesses about GPU, Python, or\ninstallers.\n\n## Scope\n\nUse this skill only on content the user generated or edited and is allowed to\nchange.\n\nRefuse automatic removal of stock-agency, marketplace, classifieds,\ntiled-preview, or other marks that protect a third party's paid or copyrighted\nasset, or product branding a paid plan removes, such as \"Made with Gamma\". A\nmark its vendor describes as identifying AI-generated content (the Gemini\nsparkle, the Gemini Notebook watermark) stays in scope whatever plan hides it.\n`erase --region` is allowed only when the user names the file they own and\nsupplies the box themselves. Post-hoc stylometric\u002Fperplexity AI-text detectors\n(GPTZero, Originality.ai, Binoculars) are out of scope; for text files, `text\nidentify` and `text metadata` handle deterministic C2PA text\u002FHTML wrappers,\n`VSRMark`, and Unicode steganography, while `text invisible` and `text all\n--invisible` regenerate unlocked prose spans for token-level LLM watermarks.\n\nRemoving a local signal does not prove the file is human-made, does not erase\nserver-side generation history, and does not make a deceptive origin claim\nlawful. If the user wants to present generated work as human-made, stop.\n\nThe project is research software provided without warranty; the user is\nresponsible for lawful use. Some jurisdictions restrict removing AI labels: in\nmainland China, label removal and removal tools are prohibited by the CAC\nlabeling Measures. Mention this when the user's content carries a China AIGC\nlabel or a Chinese provider's mark.\n\n## Workflow\n\nCopy this checklist and check items off:\n\n```\n- [ ] 1. Scope is allowed\n- [ ] 2. Probe the machine\n- [ ] 3. Install if the CLI is missing or its pixel stack is\n- [ ] 4. Identify first unless the user already named a removal\n- [ ] 5. Run one command with -o\n- [ ] 6. Report from the exit code and output path\n```\n\n### 1. Scope\n\nIf the mark protects someone else's paid asset, stop.\n\n### 2. Probe\n\nThe directory that contains this `SKILL.md` is the skill root. The working\ndirectory is usually NOT that directory, so pass the probe's full path rather\nthan assuming a relative one resolves. Use forward slashes. Try `python3`\nfirst, then `python`:\n\n```bash\npython3 \u003Cskill-root>\u002Fscripts\u002Fprobe.py\npython \u003Cskill-root>\u002Fscripts\u002Fprobe.py\n```\n\nThe probe takes a few seconds: it runs the installed CLI on a blank image it\nwrites itself, because a CLI that exists is not a CLI that works. It checks video\ndependencies through the installed CLI's Python interpreter without loading models.\nAn unrecognized launcher leaves video capability `unverified`.\n\nRead the JSON. Do not infer CUDA, ffmpeg, or an installer from the OS name.\n\n- `pixel_stack` = `missing`: the installed build has no pixel dependencies.\n  Metadata-only routes still answer: `identify`, `metadata`,\n  `batch --mode metadata`, `video metadata`, `video identify --no-visible`, and\n  `video batch --mode metadata`. The identify routes skip visible detectors and\n  say so in their caveats, so read those caveats rather than a quiet verdict. Go\n  to step 3 before running a pixel command.\n- `pixel_stack` = `unknown`: the check gave an unrecognized result. Do not\n  claim a command will work; run it and read the real error.\n- `advice.upgrade_cli` present: the installed CLI is older than this skill's\n  documented surface. Upgrade before reporting a flag as broken.\n- `advice.invisible_images` = `unavailable_no_cuda`: do not run `invisible`\n- `advice.image_all` = `do_not_run_writes_nothing`: do not run `all` or\n  `batch --mode all`. Those commands write no file when the invisible extra is\n  installed but CUDA is missing.\n- `advice.image_all` = `partial_writes_visible_and_metadata`: `all` is still\n  worth running. Without the invisible extra it skips that stage, writes the\n  visible+metadata result and exits 1. Report the file AND the stage it could\n  not do; do not call the exit code a failure.\n- `advice.no_cuda_fallback` is https:\u002F\u002Fraiw.cc. Offer that for invisible image\n  work. Do not invent a CPU or MPS profile.\n\nIf the user does not want a local install, skip to raiw.cc. Visible mark and\nmetadata removal are free there up to 12 MP; above that size, and for invisible\nremoval, it is paid and runs on a GPU. Do not quote a price: check the site.\n\n### 3. Install\n\nInstall when `cli.found` is false OR `pixel_stack` is `missing`. A present\nbinary is not enough: a base-only package carries no pixel dependencies. `visible`, `erase`, `all`, pixel-processing\n`batch` modes, full `video identify`, and the video pixel-processing commands\nstop with an install hint. The metadata-only routes listed in step 2 still work.\nReinstalling with the appropriate extra fixes the pixel commands.\n\nRead [references\u002Finstall.md](references\u002Finstall.md) for the extra list and the\nHomebrew \u002F uv \u002F pipx \u002F pip commands. Default extra is `visible`. Always quote extras:\n`\"remove-ai-watermarks[visible]\"`.\n\n### 4. Choose the command\n\nDefault: inspect first.\n\n| User goal | Command | Stop if probe says |\n| --- | --- | --- |\n| What is on this file? | `identify`, `video identify`, or `text identify` | use `video identify --no-visible` when `pixel_stack=missing` |\n| Known visible AI label on an image | `visible` | |\n| User-supplied box on their own image | `erase` | |\n| AI metadata only | `metadata`, `video metadata`, or `text metadata` | |\n| Known visible AI label on video | `video visible` or `video all` | `video_visible=needs_video_extra`, `needs_ffmpeg`, or `unverified` |\n| Invisible image \u002F image SynthID | `invisible` | `invisible_images=unavailable_no_cuda` |\n| Owned Seedance video, experimental opt-in | `video all --invisible --profile seedance-experimental` | same runtime requirements as Video SynthID; verify profile availability in help |\n| Video SynthID | `video invisible` | `video_invisible=needs_video_and_diffusion_extras`, `needs_ffmpeg`, or `unverified` |\n| Text token watermark \u002F full text clean | `text invisible` or `text all` | `text invisible` and `text all --invisible` need `diffusion` (`torch` + `transformers`) |\n| Everything on an image | `all` | `image_all=do_not_run_writes_nothing` |\n| A directory | `batch` or `video batch` | same as the mode |\n| No signal found, user still wants a guess | `classify` or `classify-source` | it is a guess, not provenance |\n\nFor a public Python API feature without a CLI option, such as draft OCR or the\nONNX classifier backend, use the library in an isolated Python environment.\nRead the canonical [Python API guide](https:\u002F\u002Fgithub.com\u002Fwiltodelta\u002Fremove-ai-watermarks\u002Fblob\u002Fmain\u002Fdocs\u002Fpython-api.md)\nand install the required extras using [references\u002Finstall.md](references\u002Finstall.md).\nDo not invent a CLI flag or assume a tool installation is importable from the\ncurrent application Python.\n\nFlags and mark names: [references\u002Fcommands.md](references\u002Fcommands.md). Read\nthat file only when you need a flag, a mark key, or a video recipe.\n\n### 5. Run\n\nAlways pass `-o` unless the user explicitly asked to overwrite. Image\n`metadata` without `-o` overwrites the source. Video commands never overwrite\nthe source.\n\n### 6. Report\n\nReport ONLY what a command in this session actually did. If no removal command\nran, do not describe a removal, a cleaned file, or a file size: say which step\nis missing and why. Before naming an output path, confirm the file exists. A\nfabricated result is worse than any error you could have quoted, because the\nuser acts on it.\n\nRead the process exit code and whether `-o` exists.\n\n| Exit | Meaning | What to tell the user |\n| --- | --- | --- |\n| 0 | Requested work completed | The output path. Do not add \"this is clean\". |\n| 2 | No targeted signal, or a `batch` directory with no supported file | Unknown, not clean. No new file from `visible`. |\n| 1 | Error, unreadable input, or partial `all` | Quote the error. Say which stage ran, if any. |\n\nExit 2 is ALSO what a bad invocation returns: a path that does not exist, an\nunknown flag, a directory where a file was expected. Read the output before\ncalling it a verdict. A line starting with `Usage:` or `Error: Invalid value`\nmeans the command never ran, so fix it and rerun; only a command that reached\nthe image can say \"no targeted signal\".\n\n`identify` with no signal reports origin unknown. Never rephrase that as \"no\nwatermark\" or \"this is clean\". When `identify` or `metadata` exits 1 with\n`cannot read`, the file is damaged or not an image or video: any report above\nthat line is incomplete, so say the file could not be read.\n\n`metadata --check` and `metadata --remove` answer a narrower question than\n`identify`: embedded AI metadata only. Both print that this is not a clean\nverdict, because a pixel watermark such as SynthID cannot be detected here once\nits metadata proxy is gone. Repeat that caveat; do not summarize it away.\n\n## Examples\n\n### Identify without overstating the result\n\nInput: \"Was `photo.png` AI-generated?\"\n\nAction: probe the machine, then run:\n\n```bash\nremove-ai-watermarks identify photo.png\n```\n\nOutput after exit 2 from a command that reached the image:\n\n> Origin unknown. The command found no local provenance signal. This does not\n> prove that the image is human-made, clean, or free of watermarks.\n\n### Remove a user-named visible AI label\n\nInput: \"Remove the Gemini sparkle from my `generated.png`.\"\n\nAction: after a successful probe, run:\n\n```bash\nremove-ai-watermarks visible generated.png --mark gemini -o generated-clean.png\n```\n\nOutput after exit 0 and confirming that the file exists:\n\n> Removed the targeted Gemini mark. Output: `generated-clean.png`.\n\nOn exit 2, report instead that no targeted Gemini mark was found and no new file\nwas written.\n\n### Route an unavailable invisible removal safely\n\nInput: \"Remove SynthID from my image.\"\n\nAction: run the probe first. If it reports\n`invisible_images=unavailable_no_cuda`, do not run `invisible` locally.\n\nOutput:\n\n> Invisible image removal needs NVIDIA CUDA, which is unavailable on this\n> machine. No local removal ran. You can use https:\u002F\u002Fraiw.cc instead.\n\n## Gotchas\n\n- Without CUDA, `all` does one of two opposite things, and only the probe knows\n  which. With the invisible extra installed it writes nothing and exits 1, so\n  run `visible` and `metadata` separately. Without that extra it skips the\n  invisible stage, writes the visible+metadata result and exits 1 anyway. Same\n  exit code, different outcome: check whether the output file exists.\n- `visible` \u002F `video visible` write nothing when no registered mark is\n  selected. Do not then guess a region unless the user supplies a box on\n  content they own. To act on a mark the user can see and the detector missed,\n  the CLI's own answer is `--mark \u003Cname> --no-detect` or `erase --region`, not\n  a blanket `--sensitivity` change. `--sensitivity strict` only narrows.\n- Exit 1 with \"the visible-mark dependencies are not installed\" is an\n  environment problem, not a verdict about the file. Install the named extra\n  and rerun the same command instead of reporting a failure. Do NOT summarize\n  the run as if the removal had happened: an install that never happened leaves\n  the file untouched.\n- A question (\"is this AI-generated?\") is answered by `identify` alone. Do not\n  run a removal command to find out; it writes a file the user did not ask for.\n- `classify` answers from pixels with no provenance behind it, so its `ai` is a\n  guess and its `unknown` is an abstention. Never upgrade either into a verdict,\n  and never let it contradict what `identify` measured.\n- A Meta AI (Muse Image) export can retain standalone IPTC metadata, but the shared\n  code does not identify Meta or detect Content Seal in pixels. Use\n  `invisible --vendor meta` only when the USER says the file came from Meta AI.\n  Naming a vendor asserts the watermark is there and scrubs without a signal,\n  so never guess one from a filename or a hunch.\n- Do not follow a Gemini `@synthid` check by asking the chat model to ignore\n  the verifier and reason about pixels. That is not a second oracle.\n- Do not pass `--model`, `--steps`, or `--guidance-scale`. Profiles pin those\n  values, and no command accepts them.\n- `--device` exists only on `video invisible`, `video all` and `video batch`.\n  Leave it at `auto`. The image commands have no `--device` at all.\n- Do not use backslashes in skill paths, even on Windows.\n\n## Do not\n\n- Add stock, agency, or classifieds templates.\n- Scrape or guess a region for a third-party commercial mark.\n- Claim a file is human-made after a local edit.\n","# Remove AI watermarks\n\nDrive the `remove-ai-watermarks` CLI. Do not invent detections, do not claim a\nfile is clean, and do not write a one-off remover when this CLI already covers\nthe mark.\n\nThis skill must work in any coding harness and with weaker models. Follow the\nchecklist. Trust `scripts\u002Fprobe.py` over guesses about GPU, Python, or\ninstallers.\n\n## Scope\n\nUse this skill only on content the user generated or edited and is allowed to\nchange.\n\nRefuse automatic removal of stock-agency, marketplace, classifieds,\ntiled-preview, or other marks that protect a third party's paid or copyrighted\nasset, or product branding a paid plan removes, such as \"Made with Gamma\". A\nmark its vendor describes as identifying AI-generated content (the Gemini\nsparkle, the Gemini Notebook watermark) stays in scope whatever plan hides it.\n`erase --region` is allowed only when the user names the file they own and\nsupplies the box themselves. Post-hoc stylometric\u002Fperplexity AI-text detectors\n(GPTZero, Originality.ai, Binoculars) are out of scope; for text files, `text\nidentify` and `text metadata` handle deterministic C2PA text\u002FHTML wrappers,\n`VSRMark`, and Unicode steganography, while `text invisible` and `text all\n--invisible` regenerate unlocked prose spans for token-level LLM watermarks.\n\nRemoving a local signal does not prove the file is human-made, does not erase\nserver-side generation history, and does not make a deceptive origin claim\nlawful. If the user wants to present generated work as human-made, stop.\n\nThe project is research software provided without warranty; the user is\nresponsible for lawful use. Some jurisdictions restrict removing AI labels: in\nmainland China, label removal and removal tools are prohibited by the CAC\nlabeling Measures. Mention this when the user's content carries a China AIGC\nlabel or a Chinese provider's mark.\n\n## Workflow\n\nCopy this checklist and check items off:\n\n```\n- [ ] 1. Scope is allowed\n- [ ] 2. Probe the machine\n- [ ] 3. Install if the CLI is missing or its pixel stack is\n- [ ] 4. Identify first unless the user already named a removal\n- [ ] 5. Run one command with -o\n- [ ] 6. Report from the exit code and output path\n```\n\n### 1. Scope\n\nIf the mark protects someone else's paid asset, stop.\n\n### 2. Probe\n\nThe directory that contains this `SKILL.md` is the skill root. The working\ndirectory is usually NOT that directory, so pass the probe's full path rather\nthan assuming a relative one resolves. Use forward slashes. Try `python3`\nfirst, then `python`:\n\n```bash\npython3 \u003Cskill-root>\u002Fscripts\u002Fprobe.py\npython \u003Cskill-root>\u002Fscripts\u002Fprobe.py\n```\n\nThe probe takes a few seconds: it runs the installed CLI on a blank image it\nwrites itself, because a CLI that exists is not a CLI that works. It checks video\ndependencies through the installed CLI's Python interpreter without loading models.\nAn unrecognized launcher leaves video capability `unverified`.\n\nRead the JSON. Do not infer CUDA, ffmpeg, or an installer from the OS name.\n\n- `pixel_stack` = `missing`: the installed build has no pixel dependencies.\n  Metadata-only routes still answer: `identify`, `metadata`,\n  `batch --mode metadata`, `video metadata`, `video identify --no-visible`, and\n  `video batch --mode metadata`. The identify routes skip visible detectors and\n  say so in their caveats, so read those caveats rather than a quiet verdict. Go\n  to step 3 before running a pixel command.\n- `pixel_stack` = `unknown`: the check gave an unrecognized result. Do not\n  claim a command will work; run it and read the real error.\n- `advice.upgrade_cli` present: the installed CLI is older than this skill's\n  documented surface. Upgrade before reporting a flag as broken.\n- `advice.invisible_images` = `unavailable_no_cuda`: do not run `invisible`\n- `advice.image_all` = `do_not_run_writes_nothing`: do not run `all` or\n  `batch --mode all`. Those commands write no file when the invisible extra is\n  installed but CUDA is missing.\n- `advice.image_all` = `partial_writes_visible_and_metadata`: `all` is still\n  worth running. Without the invisible extra it skips that stage, writes the\n  visible+metadata result and exits 1. Report the file AND the stage it could\n  not do; do not call the exit code a failure.\n- `advice.no_cuda_fallback` is https:\u002F\u002Fraiw.cc. Offer that for invisible image\n  work. Do not invent a CPU or MPS profile.\n\nIf the user does not want a local install, skip to raiw.cc. Visible mark and\nmetadata removal are free there up to 12 MP; above that size, and for invisible\nremoval, it is paid and runs on a GPU. Do not quote a price: check the site.\n\n### 3. Install\n\nInstall when `cli.found` is false OR `pixel_stack` is `missing`. A present\nbinary is not enough: a base-only package carries no pixel dependencies. `visible`, `erase`, `all`, pixel-processing\n`batch` modes, full `video identify`, and the video pixel-processing commands\nstop with an install hint. The metadata-only routes listed in step 2 still work.\nReinstalling with the appropriate extra fixes the pixel commands.\n\nRead [references\u002Finstall.md](references\u002Finstall.md) for the extra list and the\nHomebrew \u002F uv \u002F pipx \u002F pip commands. Default extra is `visible`. Always quote extras:\n`\"remove-ai-watermarks[visible]\"`.\n\n### 4. Choose the command\n\nDefault: inspect first.\n\n| User goal | Command | Stop if probe says |\n| --- | --- | --- |\n| What is on this file? | `identify`, `video identify`, or `text identify` | use `video identify --no-visible` when `pixel_stack=missing` |\n| Known visible AI label on an image | `visible` | |\n| User-supplied box on their own image | `erase` | |\n| AI metadata only | `metadata`, `video metadata`, or `text metadata` | |\n| Known visible AI label on video | `video visible` or `video all` | `video_visible=needs_video_extra`, `needs_ffmpeg`, or `unverified` |\n| Invisible image \u002F image SynthID | `invisible` | `invisible_images=unavailable_no_cuda` |\n| Owned Seedance video, experimental opt-in | `video all --invisible --profile seedance-experimental` | same runtime requirements as Video SynthID; verify profile availability in help |\n| Video SynthID | `video invisible` | `video_invisible=needs_video_and_diffusion_extras`, `needs_ffmpeg`, or `unverified` |\n| Text token watermark \u002F full text clean | `text invisible` or `text all` | `text invisible` and `text all --invisible` need `diffusion` (`torch` + `transformers`) |\n| Everything on an image | `all` | `image_all=do_not_run_writes_nothing` |\n| A directory | `batch` or `video batch` | same as the mode |\n| No signal found, user still wants a guess | `classify` or `classify-source` | it is a guess, not provenance |\n\nFor a public Python API feature without a CLI option, such as draft OCR or the\nONNX classifier backend, use the library in an isolated Python environment.\nRead the canonical [Python API guide](https:\u002F\u002Fgithub.com\u002Fwiltodelta\u002Fremove-ai-watermarks\u002Fblob\u002Fmain\u002Fdocs\u002Fpython-api.md)\nand install the required extras using [references\u002Finstall.md](references\u002Finstall.md).\nDo not invent a CLI flag or assume a tool installation is importable from the\ncurrent application Python.\n\nFlags and mark names: [references\u002Fcommands.md](references\u002Fcommands.md). Read\nthat file only when you need a flag, a mark key, or a video recipe.\n\n### 5. Run\n\nAlways pass `-o` unless the user explicitly asked to overwrite. Image\n`metadata` without `-o` overwrites the source. Video commands never overwrite\nthe source.\n\n### 6. Report\n\nReport ONLY what a command in this session actually did. If no removal command\nran, do not describe a removal, a cleaned file, or a file size: say which step\nis missing and why. Before naming an output path, confirm the file exists. A\nfabricated result is worse than any error you could have quoted, because the\nuser acts on it.\n\nRead the process exit code and whether `-o` exists.\n\n| Exit | Meaning | What to tell the user |\n| --- | --- | --- |\n| 0 | Requested work completed | The output path. Do not add \"this is clean\". |\n| 2 | No targeted signal, or a `batch` directory with no supported file | Unknown, not clean. No new file from `visible`. |\n| 1 | Error, unreadable input, or partial `all` | Quote the error. Say which stage ran, if any. |\n\nExit 2 is ALSO what a bad invocation returns: a path that does not exist, an\nunknown flag, a directory where a file was expected. Read the output before\ncalling it a verdict. A line starting with `Usage:` or `Error: Invalid value`\nmeans the command never ran, so fix it and rerun; only a command that reached\nthe image can say \"no targeted signal\".\n\n`identify` with no signal reports origin unknown. Never rephrase that as \"no\nwatermark\" or \"this is clean\". When `identify` or `metadata` exits 1 with\n`cannot read`, the file is damaged or not an image or video: any report above\nthat line is incomplete, so say the file could not be read.\n\n`metadata --check` and `metadata --remove` answer a narrower question than\n`identify`: embedded AI metadata only. Both print that this is not a clean\nverdict, because a pixel watermark such as SynthID cannot be detected here once\nits metadata proxy is gone. Repeat that caveat; do not summarize it away.\n\n## Examples\n\n### Identify without overstating the result\n\nInput: \"Was `photo.png` AI-generated?\"\n\nAction: probe the machine, then run:\n\n```bash\nremove-ai-watermarks identify photo.png\n```\n\nOutput after exit 2 from a command that reached the image:\n\n> Origin unknown. The command found no local provenance signal. This does not\n> prove that the image is human-made, clean, or free of watermarks.\n\n### Remove a user-named visible AI label\n\nInput: \"Remove the Gemini sparkle from my `generated.png`.\"\n\nAction: after a successful probe, run:\n\n```bash\nremove-ai-watermarks visible generated.png --mark gemini -o generated-clean.png\n```\n\nOutput after exit 0 and confirming that the file exists:\n\n> Removed the targeted Gemini mark. Output: `generated-clean.png`.\n\nOn exit 2, report instead that no targeted Gemini mark was found and no new file\nwas written.\n\n### Route an unavailable invisible removal safely\n\nInput: \"Remove SynthID from my image.\"\n\nAction: run the probe first. If it reports\n`invisible_images=unavailable_no_cuda`, do not run `invisible` locally.\n\nOutput:\n\n> Invisible image removal needs NVIDIA CUDA, which is unavailable on this\n> machine. No local removal ran. You can use https:\u002F\u002Fraiw.cc instead.\n\n## Gotchas\n\n- Without CUDA, `all` does one of two opposite things, and only the probe knows\n  which. With the invisible extra installed it writes nothing and exits 1, so\n  run `visible` and `metadata` separately. Without that extra it skips the\n  invisible stage, writes the visible+metadata result and exits 1 anyway. Same\n  exit code, different outcome: check whether the output file exists.\n- `visible` \u002F `video visible` write nothing when no registered mark is\n  selected. Do not then guess a region unless the user supplies a box on\n  content they own. To act on a mark the user can see and the detector missed,\n  the CLI's own answer is `--mark \u003Cname> --no-detect` or `erase --region`, not\n  a blanket `--sensitivity` change. `--sensitivity strict` only narrows.\n- Exit 1 with \"the visible-mark dependencies are not installed\" is an\n  environment problem, not a verdict about the file. Install the named extra\n  and rerun the same command instead of reporting a failure. Do NOT summarize\n  the run as if the removal had happened: an install that never happened leaves\n  the file untouched.\n- A question (\"is this AI-generated?\") is answered by `identify` alone. Do not\n  run a removal command to find out; it writes a file the user did not ask for.\n- `classify` answers from pixels with no provenance behind it, so its `ai` is a\n  guess and its `unknown` is an abstention. Never upgrade either into a verdict,\n  and never let it contradict what `identify` measured.\n- A Meta AI (Muse Image) export can retain standalone IPTC metadata, but the shared\n  code does not identify Meta or detect Content Seal in pixels. Use\n  `invisible --vendor meta` only when the USER says the file came from Meta AI.\n  Naming a vendor asserts the watermark is there and scrubs without a signal,\n  so never guess one from a filename or a hunch.\n- Do not follow a Gemini `@synthid` check by asking the chat model to ignore\n  the verifier and reason about pixels. That is not a second oracle.\n- Do not pass `--model`, `--steps`, or `--guidance-scale`. Profiles pin those\n  values, and no command accepts them.\n- `--device` exists only on `video invisible`, `video all` and `video batch`.\n  Leave it at `auto`. The image commands have no `--device` at all.\n- Do not use backslashes in skill paths, even on Windows.\n\n## Do not\n\n- Add stock, agency, or classifieds templates.\n- Scrape or guess a region for a third-party commercial mark.\n- Claim a file is human-made after a local edit.\n",{"name":5,"license":15,"metadata":51,"description":7,"compatibility":56},{"author":52,"version":53,"homepage":54,"repository":55},"wiltodelta","1.0.19","https:\u002F\u002Fraiw.cc","https:\u002F\u002Fgithub.com\u002Fwiltodelta\u002Fremove-ai-watermarks","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.","main","2a6d24be2ed571c5ff2319c506b60741bbcb1cb0","plugins\u002Fwiltodelta\u002Fremove-ai-watermarks\u002Fskills\u002Fremove-ai-watermarks",491,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins","https:\u002F\u002Fhol.org\u002Fplugins\u002Fbest-codex-plugins","https:\u002F\u002Fgithub.com\u002Fhashgraph-online","https:\u002F\u002Fhol.org","Open-source standards and developer tools for interoperable AI agents: discovery, identity, communication, payments, privacy and security.","2026-11-14 14:06:13",{"source":8,"skillName":5,"commands":68,"prompt":78,"zipAvailable":79},[69,72,75],{"tool":70,"command":71},"npx","npx skills add hashgraph-online\u002Fawesome-codex-plugins --skill remove-ai-watermarks",{"tool":73,"command":74},"bunx","bunx skills add hashgraph-online\u002Fawesome-codex-plugins --skill remove-ai-watermarks",{"tool":76,"command":77},"pnpm","pnpm dlx skills add hashgraph-online\u002Fawesome-codex-plugins --skill remove-ai-watermarks","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fwiltodelta\u002Fremove-ai-watermarks\u002Fskills\u002Fremove-ai-watermarks\u002FSKILL.md",true,[81,87,91],{"path":82,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":85,"sourceHtmlUrl":86},"references\u002Fcommands.md","REFERENCE","参考文档",10471,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fwiltodelta\u002Fremove-ai-watermarks\u002Fskills\u002Fremove-ai-watermarks\u002Freferences\u002Fcommands.md",{"path":88,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":89,"sourceHtmlUrl":90},"references\u002Finstall.md",4885,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fwiltodelta\u002Fremove-ai-watermarks\u002Fskills\u002Fremove-ai-watermarks\u002Freferences\u002Finstall.md",{"path":92,"resourceType":93,"resourceTypeDesc":94,"sizeBytes":95,"sourceHtmlUrl":96},"scripts\u002Fprobe.py","SCRIPT","脚本",15401,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fwiltodelta\u002Fremove-ai-watermarks\u002Fskills\u002Fremove-ai-watermarks\u002Fscripts\u002Fprobe.py",[98,106,113,120,146,171],{"skillNo":99,"name":100,"nameZh":6,"description":101,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":104,"publishedAt":105},"01M746ZWACVKMZ1BJXJZHYJSSX","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 \u002Fmigrate-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.","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Ftester-army\u002Fe2e\u002Fskills\u002Fmigrate-to-e2e\u002FSKILL.md",[],[],"2026-11-11 15:11:14",{"skillNo":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":112,"publishedAt":105},"01M746ZPTAX1Q0FBKAB1CYND7E","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.","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Ftester-army\u002Fe2e\u002Fskills\u002Fe2e\u002FSKILL.md",[],[],{"skillNo":114,"name":115,"nameZh":6,"description":116,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":119,"publishedAt":105},"01M746ZJN784HVHMDP9MQGCSGG","create-verification-skill","Generate a project-local verify-\u003Capp> 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 \u002Fcreate-verification-skill, \"make a verification skill for this repo\", or when a project has no scripted way to prove UI behavior.","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Ftester-army\u002Fe2e\u002Fskills\u002Fcreate-verification-skill\u002FSKILL.md",[],[],{"skillNo":121,"name":122,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":126,"publishedAt":46},"01M716A6ETNB9B1SQ3GXZC75VR","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.","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fvshulcz\u002Fdeja-vu\u002Fskills\u002Fdeja-search\u002FSKILL.md",[],[127,128,129,130,131,132,133,134,135,136,137,26,138,139,140,141,142,143,144,145],"search","deja search","never","error","ready","memory","re","decide","fix","design","debugging","you","done","reviewer","io","change","cli","merge","past",{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":152,"publishedAt":46},"01M716A3J2W5SENSE9VGMXB375","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.","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fvshulcz\u002Fdeja-vu\u002Fskills\u002Fdeja-reflect\u002FSKILL.md",[],[153,154,155,141,156,157,158,159,160,161,162,163,164,165,132,166,167,168,169,170],"deja reflect","reflect","review","with","record","github","next","https","node","Rules","decisions","brew","remember","project rules","project","session","end","reflection",{"skillNo":172,"name":173,"nameZh":6,"description":174,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":175,"categories":176,"keywords":184,"publishedAt":46},"01M715T3RR4BAYSR57HPPTJ0PF","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.","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Ftmakersas\u002Frevid-skills\u002Fskills\u002Frevid\u002FSKILL.md",[177,178,181],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":179,"categoryName":180,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":182,"categoryName":183,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口",[173,185,44,186,187,188,189,167,190,133,191,192,193,194,26,35,195,196,197,198],"URL","short-form","standalone","PDF","viral","tiktok","short","social","MCP","song","mcp server","schedule","api","publish"]