{"full_name":"guillaumemeyer/watermarks-remover","owner":"guillaumemeyer","name":"watermarks-remover","url":"https://github.com/guillaumemeyer/watermarks-remover","description":"A privacy-first app that strips AI watermarks from content you own.","homepage":"https://github.com/guillaumemeyer/watermarks-remover","topics":[],"language":"Python","license":"MIT","avatar":"https://avatars.githubusercontent.com/u/1385518?u=81fd00e9a721dd41c42f87c04c6ed6c3a79b335e&v=4","created_at":"2026-08-11T16:32:38Z","pushed_at":"2026-11-09T20:25:47Z","metrics":{"stars":26939,"forks":3062,"watchers":117,"issues":129,"prs":281,"releases":9,"issues_open":null,"issues_closed":null,"prs_open":null,"prs_closed":null,"prs_merged":null,"discussions":21},"growth":{"day":{"stars":159,"forks":10,"base_day":"2026-11-09"},"week":{"stars":943,"forks":98,"base_day":"2026-11-03"},"month":{"stars":3557,"forks":377,"base_day":"2026-10-11"}},"history":{"dates":["2026-09-06","2026-09-07","2026-09-08","2026-09-09","2026-09-10","2026-09-11","2026-09-12","2026-09-13","2026-09-14","2026-09-15","2026-09-16","2026-09-17","2026-09-18","2026-09-19","2026-09-20","2026-09-21","2026-09-22","2026-09-23","2026-09-24","2026-09-25","2026-09-26","2026-09-27","2026-09-28","2026-09-29","2026-09-30","2026-10-01","2026-10-02","2026-10-03","2026-10-04","2026-10-05","2026-10-06","2026-10-07","2026-10-08","2026-10-09","2026-10-10","2026-10-11","2026-10-12","2026-10-13","2026-10-14","2026-10-15","2026-10-16","2026-10-17","2026-10-18","2026-10-19","2026-10-20","2026-10-21","2026-10-22","2026-10-23","2026-10-24","2026-10-25","2026-10-26","2026-10-27","2026-10-28","2026-10-29","2026-10-30","2026-10-31","2026-11-01","2026-11-02","2026-11-03","2026-11-04","2026-11-09","2026-11-10"],"stars":[17856,18239,18504,18729,18902,19014,19219,19821,20060,20279,20563,20772,21209,21379,21526,21629,21732,21805,21999,22093,22155,22235,22309,22371,22510,22588,22668,22738,22816,22880,23008,23079,23200,23235,23288,23382,23457,23525,23608,23702,23777,23930,23998,24088,24178,24258,24314,24457,24534,24605,24661,24722,24805,24981,25065,25302,25536,25657,25996,26117,26780,26939],"forks":[2061,2112,2146,2179,2196,2211,2239,2300,2311,2348,2377,2395,2437,2460,2477,2490,2505,2507,2536,2548,2558,2565,2575,2585,2603,2608,2614,2618,2624,2631,2638,2643,2656,2664,2668,2685,2695,2698,2706,2719,2730,2746,2754,2768,2780,2784,2790,2803,2808,2821,2831,2839,2843,2865,2869,2880,2907,2924,2964,2976,3052,3062],"watchers":[88,86,87,87,88,87,89,90,89,90,95,96,99,101,102,102,104,104,105,106,106,108,107,107,108,106,106,106,106,105,106,107,106,107,109,111,111,112,112,110,111,110,110,110,111,112,112,115,115,115,116,117,112,114,113,113,114,113,114,116,117,117],"issues_open":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"prs_open":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]},"boards":{"weekly":127,"monthly":147,"weekly_rate":111,"monthly_rate":115},"same_owner":[],"issues":[{"number":434,"title":"[bug] Layer B rewrite (local Ollama) changed meaning in 54% of 151 paragraphs","comments":1,"created_at":"2026-11-05T13:36:00Z"},{"number":369,"title":"`--no-backup` from #286: was it dropped? `clean_file.py --in-place` still always writes `<file>.bak`","comments":1,"created_at":"2026-09-24T09:20:13Z"},{"number":327,"title":"[bug] .ogg/.opus/.aac route to unknown — the audio chain lists them but classify_bytes can't reach them","comments":1,"created_at":"2026-09-05T14:07:57Z"},{"number":248,"title":"Layer B: minimum-divergence rewrite search (minimal strength, --minimal-select, --ladder)","comments":1,"created_at":"2026-08-26T19:14:01Z"},{"number":436,"title":"[bug] clean_file.py --in-place drops the executable bit, even when nothing is removed","comments":0,"created_at":"2026-11-07T07:40:30Z"},{"number":433,"title":"Remove watermarks","comments":0,"created_at":"2026-11-04T09:38:13Z"},{"number":432,"title":"Question: ChatGPT Work skill persistence returns HTTP 422","comments":0,"created_at":"2026-11-03T11:42:30Z"},{"number":427,"title":"Claude rejection","comments":0,"created_at":"2026-11-02T15:02:00Z"}],"discussions":[{"number":403,"title":"Me Abre Equivocado!!?","comments":0,"category":"General","created_at":"2026-10-17T00:15:53Z"},{"number":388,"title":"Claude rejects install stealer","comments":0,"category":"Q&A","created_at":"2026-10-14T03:12:45Z"},{"number":386,"title":"Does not work with images","comments":0,"category":"General","created_at":"2026-10-10T15:58:17Z"},{"number":383,"title":"how can i download it to chat gpt?","comments":0,"category":"General","created_at":"2026-10-08T23:50:14Z"},{"number":370,"title":"Claude blocks this now! :(","comments":0,"category":"General","created_at":"2026-09-24T11:15:23Z"},{"number":355,"title":"Install \"Remove AI marks\" in Claude Free Web","comments":0,"category":"Ideas","created_at":"2026-09-16T11:36:49Z"},{"number":276,"title":"Help please","comments":2,"category":"Q&A","created_at":"2026-08-29T17:48:38Z"},{"number":275,"title":"I am unabke to use ths ai watermark remover","comments":1,"category":"Q&A","created_at":"2026-08-29T17:15:48Z"}],"latest_release":{"name":"v0.7.0 — /clean Layer B rewrite, watermark-stealing module, audio/video watermark removal, and benchmark/tooling breadth","tag":"v0.7.0","published_at":"2026-09-03T20:55:51Z","body":"v0.7.0 brings the Layer B statistical-mark rewrite into the `/clean` service itself, driven by a configurable, benchmark-tuned strategy (`paraphrase@0.8,mlm@0.2`). Alongside it: a black-box watermark-stealing module, destructive audio and per-frame video watermark removal, a substantially richer rewrite benchmark, and a stack of hardening, security, and tooling fixes.\n\n## Layer B rewriting in the service\n\n- `/clean` now runs the Layer B rewrite for text after Layer A. The default comes from `config/clean_strategy.json`; a per-request `options.strategy` overrides it, and `/clean` rejects with 400 when the required backend isn't configured (#315). Config precedence: `--strategy-config` > `WATERMARKS_CLEAN_STRATEGY_FILE` > `config/clean_strategy.json`.\n- New `mlm` rewrite tactic: mask a fraction of content words and infill with `roberta-large` — a non-autoregressive local edit, so the output mixes the original token stream with masked-LM predictions (#311).\n- The `humanize` tactic now applies the humanizer-skill pass deterministically (straight quotes, no em/en dashes, filler collapses, `utilize`→`use`) and names the human-writer rules in the prompt (#311). `rewrite_text.py` gained a `--strategy` CLI path.\n- Rewrite correctness: Unicode word tokenization in lexical divergence (#305); compare raw margins before rounding and record selection metadata / ranked p-values (#249).\n\n## Benchmark\n\n- SynthID recipe search + robust measurement (#280); renamed rewrite vocabulary, cross-input search, and humanize-last ordering (#302); recommend only strategies that still clear after the humanize polish (#307).\n- Pangram bulk API as a human-likeness backend (#296); hardened minimal-rewrite-level benchmark with a 30-doc corpus (#257); validated weight grid + widened recipe search (#294); Polish benchmark corpus (#295).\n\n## Watermark stealing\n\n- New black-box watermark-stealing module and prompt-corpus downloader (#303); clear stale state on start-over probe failure (#310).\n\n## Audio / video / image\n\n- Destructive audio watermark removal chain for silentcipher/AudioSeal/WavMark (tempo + pitch + EQ + low-bitrate re-encode → M4A) (#266).\n- Per-frame TrustMark video purification that collapses the temporal vote (#265).\n- C2PA content-provenance `uuid` box recognized on MP4/MOV/AVIF/HEIC (#264).\n- Preserve truncated MP4 tails during stripping (#242); keep the audio re-encode dest distinct from the container-clean dest (#278).\n- Skip discarded exiftool output and redundant SynthID in the post-clean scan (#261); degrade cleanly when exiftool can't process a PDF (#281).\n- Cap decompressed PNG `zTXt`/`iTXt` at 1 MiB (#308); strip SVG XML DOCTYPE/ENTITY declarations (#288); keep DOCX binary members byte-safe (#314); preserve OOXML `AppVersion` (#289).\n\n## HTTP service & CLI\n\n- `/clean` option to keep exotic spaces, mirroring the CLI (#274); `/inspect` exposes explicit evidence classes in the suspicious payload (#277); timestamps in HTTP request logs (#256); thread payload bytes into HTTP SynthID scoring and `inspect_*` to avoid a redundant read-back.\n- `clean_file.py` gained `-q`/`--quiet`/`--only-changed` (#254).\n\n## Skills, plugin & hooks\n\n- Stylometry scoring and detector levers for `clean-user-facing-text` (#258); PostToolUse hook launcher made cross-platform (#255); pre-commit hook treats byte-identical clean non-text files as changed (#238).\n\n## Audit\n\n- `audit_dir.py` scans source, docs, and i18n files the router walked past (#284); scans `.ts/.tsx/.jsx/.gd` and aligns space confidence across formats (#273); `audit_website.py --sarif` support (#194); harden in-place backups, clean-file status, SynthID verdict, truncated ID3v2, and zip routing (#201).\n\n## Security\n\n- Remove polynomial ReDoS in data-URI and JSON-LD scans (#306); block HTTP redirects in the SynthID scorer to prevent SSRF (#252).\n\n## CI, tooling & docs\n\n- CI fails when optional backend requirements can't resolve (#301); Docker image reports ffmpeg as usable and installs Ghostscript (#"},"readme":true,"readme_zh":false,"news":[{"title":"Show HN: Watermarks Remover: Clean LLM watermarks from text and files","url":"https://github.com/guillaumemeyer/watermarks-remover","hn":"https://news.ycombinator.com/item?id=49481577","source":"Hacker News","lang":"en","date":"2026-08-28","points":5,"comments":1},{"title":"Watermarks-remover: Strip multi-vendor AI provenance marks","url":"https://github.com/guillaumemeyer/watermarks-remover","hn":"https://news.ycombinator.com/item?id=49282033","source":"Hacker News","lang":"en","date":"2026-08-13","points":3,"comments":0},{"title":"GitHub 6.8k Star：watermarks-remover，一条命令清理AI文本里的隐形字符和图片的溯源信息","url":"https://blog.csdn.net/qq_34958121/article/details/163779489","source":"blog.csdn","lang":"zh","date":"2026-09-03"},{"title":"Dev lança 'removedor' de marca d'água para textos de IA do Claude","url":"https://www.msn.com/pt-br/noticias/noticias/dev-lan%C3%A7a-removedor-de-marca-d%C3%A1gua-para-textos-de-ia-do-claude/ar-AA2aUqX4","source":"Estadão on MSN","lang":"en","date":"2026-08-20"},{"title":"AI 内容去水印工具在 GitHub 上超 12k Star","url":"https://www.sohu.com/a/1064677062_121118947","source":"搜狐","lang":"zh","date":"2026-08-19"},{"title":"因为一枚看不见的AI水印，Anthropic又成了大反派","url":"https://news.qq.com/rain/a/20260819A0A7DP00","source":"腾讯网","lang":"zh","date":"2026-08-19"},{"title":"watermarks-remover GitHub Tool Strips AI Provenance Marks","url":"https://techmymoney.com/2026/08/16/watermarks-remover-github-tool-strips-ai-provenance-marks/","source":"techmymoney.com","lang":"en","date":"2026-08-16"},{"title":"Tool Open Source Ini Bisa Hapus Watermark AI dari Teks","url":"https://telset.id/news/ai/tool-open-source-ini-bisa-hapus-watermark-ai-dari-teks","source":"telset","lang":"en","date":"2026-08-13"},{"title":"Someone built a free tool to scrub AI watermarks from OpenAI, Gemini-generated text and files","url":"https://www.digitaltrends.com/computing/this-github-project-wants-to-strip-ai-watermarks-from-your-content-and-things-are-getting-interesting/","source":"digitaltrends.com","lang":"en","date":"2026-08-12"},{"title":"一款清除AI水印的Claude Code插件一天内冲到1.9万星","url":"https://news.google.com/rss/articles/CBMilgFBVV95cUxNSGo4aFYzMzNaSHE0UXBMa2o1djhVX1ZBU21fa3l2V3hvcDFpN21oRmdUMjliUlJ5NUh3V3dHMEtqcFpFaHYxVkU1NDk3YXA5NUF1bDEwNnJPd3RicVpfTnNrTXJycDJkV1lsTFBxdThLaGF2V2ZBRGNkU2FFSklTZ2VRWmNUaUlIaTJKWWsxZldrUWJieEE?oc=5","source":"Pasquale Pillitteri","lang":"zh","date":"2026-08-28"},{"title":"Guillaume Meyer's watermark remover tops 14,000 GitHub stars as Claude detection details remain unpublished","url":"https://news.google.com/rss/articles/CBMiiwFBVV95cUxON2Z6T2x5cnhMajJwS09lOTV2WWkxMDFmcl9IN1NpZklMQjUyN2hvSmo4OHd2NEtjTnByVEtxb0RrYVBnblZuc0RNamhMQlp2Y3E2OFpFWTIwZDhHazJKR1pnVGxOZTJ1akxwWkJJYk9DYUp4SW4xbkN6ZnNhQWFlNHpzV3d0MHoyMncw?oc=5","source":"RuntimeWire","lang":"en","date":"2026-08-23"},{"title":"刚刚，Claude水印一夜变废纸！","url":"https://news.google.com/rss/articles/CBMiSEFVX3lxTE1oUTkyV1E1Z3VERTQxLXRxTmpFUFQ2ZnVaZm51V2pxTDU0ZUtuMk90TGg2NV9JYzZoY1JyNTUxbUk1aDNjaUhRMA?oc=5","source":"智源社区","lang":"zh","date":"2026-08-18"},{"title":"Claude隐形水印被光速破解，GitHub一天狂揽2.6k星","url":"https://news.google.com/rss/articles/CBMiSEFVX3lxTE83SjZTVDZyVTRSOHVZbEJjYkdmV1pOSm9YT2YzMEpacGc0Wkg4aHFYbF8xTTdfak9jQmZjS3pySkFBU3RFeWgzSg?oc=5","source":"智源社区","lang":"zh","date":"2026-08-17"},{"title":"Claude's watermark protection has been cracked, gaining 11k Stars, but it will be rejected during installation.","url":"https://news.google.com/rss/articles/CBMiU0FVX3lxTE5jTW1xTFkycUVWbzZmV1dVTV9mZWozYUZXRFU2V25rbVpJd0JfWnQ1MEFScDczT2tEeGE0RGNVd0hJRlZnRmdVZGx0OFhQZ3NDRlE0?oc=5","source":"36Kr","lang":"en","date":"2026-08-16"},{"title":"Claude Watermark Removal Tool Gains 11K Stars on GitHub","url":"https://news.google.com/rss/articles/CBMikwFBVV95cUxNQUtCTzUtaTQ4OWdfX2YyOFVSOVFDb2E3dlBXLUtUeTVaMjFUd0kyeDhINE9YMnlMdkhEZzhCTjR0WFpZb1F5MjF3dGtvOHFPMkFPbVVfWnBJZGVWSzBUWTJ6aC02YkdZNmZfaWcydTc5SG5VaTFiMUlLczZOZzl6SkVFcTBfMV9lc18ya2FSUmhDMXM?oc=5","source":"KuCoin","lang":"en","date":"2026-08-16"},{"title":"Claude Watermark Remover on GitHub: What Works and What Doesn't (I Tested Them)","url":"https://news.google.com/rss/articles/CBMiigFBVV95cUxOTUJXc3lWR3drQllUbXEtRWVKTHRaMkZjWkxIdzVPZmdraVp3d3FoMG03Q2lKM19iUmR6dllQUXZrb2JOcy10enhxRDZvbDZuX2FWNmtmZ2ZkUDhXMkYtWlUzaWFWN3ZjLVBLb0wySzFOYUgwRUtsc1VsZGJLc0pPd08yb3JfUW5PalE?oc=5","source":"Pasquale Pillitteri","lang":"en","date":"2026-08-12"},{"title":"Claude水印去除工具评测: 我在GitHub上逐一实测, 哪些真的有效, 哪些不行","url":"https://news.google.com/rss/articles/CBMiiAFBVV95cUxOU0hDbk5xNVZvREl6a2RNa0E4cGpIWTJJaWZKdWdfb0JONUtBUDAwRm1JRHppX1Rra3NHUl96eWxjdmdMXzhXUE5zczhwTU83SThfdm91YnpVcE5HZVlvTWxkbnRuOWFHblNGUEdoS2hUamI4ODJrTmh6MmxNNWJnMzVON0paREFO?oc=5","source":"Pasquale Pillitteri","lang":"zh","date":"2026-08-12"}],"stale":false,"snapshot_at":"2026-11-10T09:35:25Z","history_start":"2026-09-06"}