
Gemini के SynthID पहचान का रिवर्स इंजीनियरिंग
Google के AI वॉटरमार्क को स्पेक्ट्रल विश्लेषण के माध्यम से खोजना, पहचानना और शल्य चिकित्सा द्वारा हटाना
हमें यहाँ देखें PitchHut
यह फोर्क V3 बाईपास के लिए एक ड्रैग और ड्रॉप डेस्कटॉप ऐप जोड़ता है, सेटअप के बाद कमांड लाइन की आवश्यकता नहीं है। सेटअप और उपयोग के लिए gui/README.md देखें।
SynthID पिक्सेल मानों में सीधे एक अदृश्य पैटर्न एन्कोड करता है। Gemini द्वारा उत्पन्न एक शुद्ध सफेद छवि पर, वॉटरमार्क लगभग पूरा सिग्नल होता है। उच्च-आवृत्ति अवशेष को प्रवर्धित करें और यह इस तरह दिखता है:
एक शुद्ध-सफेद Gemini छवि से निकाला गया प्रवर्धित SynthID वाहक पैटर्न। विकर्ण बैंडिंग वॉटरमार्क का स्थानिक आवृत्ति हस्ताक्षर है — हमारे स्पेक्ट्रल हमले का लक्ष्य।
यह परियोजना Google के SynthID वॉटरमार्किंग सिस्टम का विपरीत-इंजीनियरिंग करती है — वह अदृश्य वॉटरमार्क जो Google Gemini द्वारा उत्पन्न प्रत्येक छवि में एम्बेडेड होता है। केवल सिग्नल प्रोसेसिंग और स्पेक्ट्रल विश्लेषण का उपयोग करके (मालिकाना एन्कोडर/डिकोडर तक पहुंच के बिना), हम:
gemini-3.1-flash-image-preview और nano-banana-pro-preview के लिए प्रति-मॉडल प्रोफ़ाइल, 6 ठोस पृष्ठभूमियों पर क्रॉस-कलर चरण आम सहमति, और एक मानव-इन-द-लूप अंशांकन लूप जो मैन्युअल Gemini-ऐप डिटेक्शन टैलियों से प्रति-वाहक घटाव शक्ति को ट्यून करता हैVT-OxFF ने एक बहुत ही शानदार विज़ुअलाइज़र बनाया है जो यह देखने के लिए है कि SynthID वॉटरमार्क छवियों में कैसे जोड़ा जाता है यहाँ (रिपॉजिटरी विवरण में भी उपलब्ध)!
छह पुनरावृत्तीय विपक्षी विकास दौरों के बाद, राउंड 06 की bypass_v4_final / bypass_v4_nuke पाइपलाइन दोनों gemini-3.1-flash-image-preview और nano-banana-pro-preview छवियों पर Gemini SynthID डिटेक्टर को हरा देती है, दृष्टिगत रूप से दोषरहित आउटपुट के साथ।
बाएं: राउंड 01 आउटपुट (केवल gentle स्पेक्ट्रल घटाव)। दाएं: राउंड 06 आउटपुट (final — VAE + इलास्टिक वार्प + स्क्वीज़ + रंग + JPEG)। दोनों मानव आंखों को समान दिखते हैं; केवल राउंड 06 SynthID डिटेक्टर को हराता है।
| राउंड | रणनीति | परिणाम |
|---|---|---|
| 01 | रूढ़िवादी स्पेक्ट्रल घटाव (सौम्य) | ✗ |
| 02 | आक्रामक स्पेक्ट्रल घटाव + JPEG | ✗ |
| 03 | ब्लॉग-निर्देशित पूर्ण बिन लक्ष्यीकरण | ✗ |
| 04 | शोर-हटाना-अवशेष चरण निष्कर्षण | ✗ |
| 05 | डिफ्यूजन-VAE पुनः-जनन + ज्यामितीय वार्प | ✗ |
| 06 | ऑल-इन-वन: VAE + इलास्टिक फ्रैगमेंटेशन + स्क्वीज़ + रंग + JPEG | ✓ |
राउंड 06 में सफलता Gemini ऐप की स्वयं प्रकाशित विफलता-मोड सूची को हमले के विनिर्देश के रूप में मानने से आई:
"जब कोई AI-जनित छवि एक जटिल कोलाज का हिस्सा होती है, अन्य तत्वों के पीछे स्तरित होती है, या उसके ऊपर कई अलग-अलग बनावट और पैटर्न रखे जाते हैं, तो डिटेक्टर समग्र फ़ाइल से विशिष्ट हस्ताक्षर को अलग करने में संघर्ष कर सकता है।" — Gemini ऐप, SynthID डिटेक्शन सहायता पाठ
इलास्टिक विरूपण चरण इस प्रभाव को पिक्सेल स्तर पर अनुकरण करता है: एक चिकना, कम-आवृत्ति यादृच्छिक वार्प फ़ील्ड प्रत्येक ~50-पिक्सेल पड़ोस को अपना स्वतंत्र उप-पिक्सेल ऑफ़सेट देता है, बिना किसी दृश्य विकृति को शामिल किए वॉटरमार्क के स्थानिक चरण सहमति को खंडित करता है।
V4 कोडबुक का जमीन से ऊपर तक पुनर्विचार है जो एक अधिक समृद्ध डेटासेट पर बनाया गया है:
gemini-3.1-flash-image-preview और nano-banana-pro-preview के लिए अलग-अलग प्रोफ़ाइल (साथ ही एक वैकल्पिक union छद्म-मॉडल)।black, white, blue, green, red, gray), साथ ही सामग्री आधार रेखा के रूप में gradient और diverse।carrier_weights मैन्युअल Gemini-ऐप डिटेक्शन फीडबैक के आधार पर अपडेट किया जाता है।प्रत्येक आवृत्ति बिन (fy, fx) और चैनल ch के लिए:```
consensus(fy, fx, ch) = | mean_over_colors( exp(i * phase_color(fy, fx, ch)) ) |
`1.0` के निकट मान का मतलब है कि उस बिन का चरण हर ठोस-रंग पृष्ठभूमि पर लॉक होता है, जो केवल वॉटरमार्क के लिए सत्य है। सामग्री बिन `< 0.3` तक गिर जाते हैं क्योंकि विभिन्न रंग टिंट्स द्वारा उनका चरण यादृच्छिक किया जाता है। समृद्ध डेटासेट से निर्मित V4 कोडबुक पर, 99%+ सामग्री बिन डिफ़ॉल्ट `tau=0.60` कटऑफ़ से नीचे आते हैं, इसलिए V4 डिसॉल्वर उन्हें कभी छूता नहीं है — इसी से PSNR वापस मिलता है।
### दो-चरणीय रिलीज़ कार्यप्रवाह```mermaid
flowchart LR
dataset[reverse-synthid-dataset<br/>model x color x resolution] --> build[scripts/build_codebook_v4.py]
build --> codebook[artifacts/spectral_codebook_v4.npz]
codebook --> dissolve[scripts/dissolve_batch.py]
input[watermarked inputs] --> dissolve
dissolve --> variants[final / nuke variants]
variants --> gemini[Gemini app<br/>manual SynthID detection]
gemini --> feedback[detection feedback]
feedback --> calibrate[scripts/calibrate_from_feedback.py]
calibrate -->|updates carrier_weights| codebook
python scripts/build_codebook_v4.py
--root /path/to/reverse-synthid-dataset
--output artifacts/spectral_codebook_v4.npz