{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/ringid-rethinking-tree-ring-watermarking-for","title":"RingID: Rethinking Tree-Ring Watermarking for Enhanced Multi-Key Identification","arxiv_id":"2404.14055","date":"2024-04-22","proceeding":null,"authors":["Hai Ci","Pei Yang","Yiren Song","Mike Zheng Shou"],"abstract":"We revisit Tree-Ring Watermarking, a recent diffusion model watermarking method that demonstrates great robustness to various attacks. We conduct an in-depth study on it and reveal that the distribution shift unintentionally introduced by the watermarking process, apart from watermark pattern matching, contributes to its exceptional robustness. Our investigation further exposes inherent flaws in its original design, particularly in its ability to identify multiple distinct keys, where distribution shift offers no assistance. Based on these findings and analysis, we present RingID for enhanced multi-key identification. It consists of a novel multi-channel heterogeneous watermarking approach designed to seamlessly amalgamate distinctive advantages from diverse watermarks. Coupled with a series of suggested enhancements, RingID exhibits substantial advancements in multi-key identification. Github Page: https://github.com/showlab/RingID","url_abs":"https://arxiv.org/abs/2404.14055v3","url_pdf":"https://arxiv.org/pdf/2404.14055v3.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"ringid-rethinking-tree-ring-watermarking-for","repo_url":"https://github.com/showlab/ringid","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok"}}],"tasks":[],"methods":[{"method_slug":"diffusion","method_name":"Diffusion"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2404.14055","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2404.14055"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/showlab/ringid","reach":{"status":"ok"}}],"summary":{"ran_draft_wrong":3,"ran_violates":1,"ran_honours":1,"unverified":9},"by_repo_kind":{"official":{"samples":14,"ran":5,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":14,"samples":[{"code_sha256_prefix":"cfd76fd0d89574a4","entry":"approx_standard_normal_cdf","repo":"showlab/ringid","repo_kind":"official","path":"guided_diffusion/losses.py","file_url":"https://github.com/showlab/ringid/blob/HEAD/guided_diffusion/losses.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"cfd76fd0d89574a4"}},{"code_sha256_prefix":"f19962ebb134b3d7","entry":"convert_to_custom_text_state_dict","repo":"showlab/ringid","repo_kind":"official","path":"open_clip/model.py","file_url":"https://github.com/showlab/ringid/blob/HEAD/open_clip/model.py","link_basis":"harvester_set","language":"python","status":"ran_violates","verification_level":1,"contract_check":"VIOLATES","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"f19962ebb134b3d7"}},{"code_sha256_prefix":"cd33283d615fb3d7","entry":"discretized_gaussian_log_likelihood","repo":"showlab/ringid","repo_kind":"official","path":"guided_diffusion/losses.py","file_url":"https://github.com/showlab/ringid/blob/HEAD/guided_diffusion/losses.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"cd33283d615fb3d7"}},{"code_sha256_prefix":"dcd422d66b0581d8","entry":"get_cast_dtype","repo":"showlab/ringid","repo_kind":"official","path":"open_clip/model.py","file_url":"https://github.com/showlab/ringid/blob/HEAD/open_clip/model.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"dcd422d66b0581d8"}},{"code_sha256_prefix":"cf2798b666b231ca","entry":"normal_kl","repo":"showlab/ringid","repo_kind":"official","path":"guided_diffusion/losses.py","file_url":"https://github.com/showlab/ringid/blob/HEAD/guided_diffusion/losses.py","link_basis":"harvester_set","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"cf2798b666b231ca"}},{"code_sha256_prefix":"b9d521d7021e46bb","entry":"backward_ddim","repo":"showlab/ringid","repo_kind":"official","path":"inverse_stable_diffusion.py","file_url":"https://github.com/showlab/ringid/blob/HEAD/inverse_stable_diffusion.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"b9d521d7021e46bb"}},{"code_sha256_prefix":"57f1602ed20a9c21","entry":"build_model_from_openai_state_dict","repo":"showlab/ringid","repo_kind":"official","path":"open_clip/model.py","file_url":"https://github.com/showlab/ringid/blob/HEAD/open_clip/model.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"57f1602ed20a9c21"}},{"code_sha256_prefix":"3b89ab9f937dccdd","entry":"forward_ddim","repo":"showlab/ringid","repo_kind":"official","path":"inverse_stable_diffusion.py","file_url":"https://github.com/showlab/ringid/blob/HEAD/inverse_stable_diffusion.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"3b89ab9f937dccdd"}},{"code_sha256_prefix":"ddcbd45e940484ee","entry":"gather_features","repo":"showlab/ringid","repo_kind":"official","path":"open_clip/loss.py","file_url":"https://github.com/showlab/ringid/blob/HEAD/open_clip/loss.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"ddcbd45e940484ee"}},{"code_sha256_prefix":"075fbc6126eeefe6","entry":"hf_read_jsonlines","repo":"showlab/ringid","repo_kind":"official","path":"io_utils.py","file_url":"https://github.com/showlab/ringid/blob/HEAD/io_utils.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"075fbc6126eeefe6"}},{"code_sha256_prefix":"81cef8be4a138b63","entry":"load_jsonlines","repo":"showlab/ringid","repo_kind":"official","path":"io_utils.py","file_url":"https://github.com/showlab/ringid/blob/HEAD/io_utils.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"81cef8be4a138b63"}},{"code_sha256_prefix":"fb651d0a97fd4d3f","entry":"prepare_inputs_for_generation","repo":"showlab/ringid","repo_kind":"official","path":"open_clip/coca_model.py","file_url":"https://github.com/showlab/ringid/blob/HEAD/open_clip/coca_model.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"fb651d0a97fd4d3f"}},{"code_sha256_prefix":"2a377da4a76a2d44","entry":"register_pooler","repo":"showlab/ringid","repo_kind":"official","path":"open_clip/hf_model.py","file_url":"https://github.com/showlab/ringid/blob/HEAD/open_clip/hf_model.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"2a377da4a76a2d44"}},{"code_sha256_prefix":"afbb28c04b32db08","entry":"resolve_globs","repo":"showlab/ringid","repo_kind":"official","path":"io_utils.py","file_url":"https://github.com/showlab/ringid/blob/HEAD/io_utils.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"afbb28c04b32db08"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}