
обратная разработка обнаружения SynthID от Gemini
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/11393/e3290ff4d3e6074647026feb3327c04ff98514547efca925f52d6d1349c23477.png" alt="Анализ водяного знака SynthID" width="100%">
</p>
<h1 align="center">Обратная разработка SynthID</h1>
<p align="center">
<b>Обнаружение, выявление и хирургическое удаление ИИ-водяного знака Google с помощью спектрального анализа</b>
</p>
Посетите нас на [PitchHut](https://www.pitchhut.com/project/reverse-synthid-engineering)
> Этот форк добавляет десктопное приложение с функцией drag-and-drop для обхода V3, после настройки командная строка не требуется. См. [gui/README.md](https://github.com/aloshdenny/reverse-synthid/blob/main/gui/README.md) по установке и использованию.
<p align="center">
<img src="https://img.shields.io/badge/Python-3.10+-blue?style=flat-square&logo=python" alt="Python">
<img src="https://img.shields.io/badge/License-Research-green?style=flat-square" alt="License">
<img src="https://img.shields.io/badge/Detection_Rate-90%25-success?style=flat-square" alt="Detection">
<img src="https://img.shields.io/badge/V3_Bypass-PSNR_43dB+-blueviolet?style=flat-square" alt="V3 Bypass">
<img src="https://img.shields.io/badge/V4_Bypass-Round_06_%E2%9C%93-brightgreen?style=flat-square" alt="V4 Bypass">
<img src="https://img.shields.io/badge/Models-gemini--3.1_+_nb--pro-orange?style=flat-square" alt="Models">
<img src="https://img.shields.io/badge/Attack-7--stage_all--in--one-red?style=flat-square" alt="Attack">
</p>
---
## Как выглядит водяной знак
SynthID кодирует незаметный шаблон непосредственно в значения пикселей. На чисто **белом** изображении, сгенерированном Gemini, водяной знак составляет почти весь сигнал. Усильте высокочастотный остаток, и он выглядит так:
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/11393/bba7a7fb481cdd6051b7e46365031eeec1c4eae5453d848c7cc4ac982eb40393.jpg" alt="Шаблон водяного знака SynthID, видимый на белом изображении, сгенерированном Gemini" width="55%">
</p>
<p align="center"><i>Усиленный шаблон несущей SynthID, извлечённый из чисто-белого изображения Gemini. Диагональные полосы — это пространственно-частотная сигнатура водяного знака — цель нашей спектральной атаки.</i></p>
---
## Обзор
Этот проект выполняет обратную разработку системы нанесения водяных знаков **Google SynthID** — невидимого водяного знака, встраиваемого в каждое изображение, сгенерированное Google Gemini. Используя только обработку сигналов и спектральный анализ (без доступа к проприетарным кодеру/декодеру), мы:
1. **Обнаружили** разрешающую-зависимую структуру несущей частоты водяного знака
2. **Создали детектор**, который идентифицирует водяные знаки SynthID с точностью 90%
3. **Разработали мульти-разрешающий спектральный обход** (V3), который достигает **75% снижения энергии несущей**, **91% снижения когерентности фазы** и **43+ дБ PSNR** на любом разрешении изображения
4. **Обобщили до мульти-модельного, мульти-цветного консенсуса** (V4) — профилей для каждой модели для `gemini-3.1-flash-image-preview` и `nano-banana-pro-preview`, фазового консенсуса между цветами на 6 однотонных фонах и калибровочного цикла с участием человека, который настраивает силу вычитания каждой несущей на основе ручных подсчётов обнаружения из приложения Gemini
5. **Сломали детектор на обеих моделях** (Раунд 06) с помощью единой 7-этапной атаки «всё-в-одном», одновременно нацеленной на все задокументированные режимы отказа SynthID
[VT-OxFF](https://github.com/VT-0xFF) создал действительно классный визуализатор, который показывает процесс того, как водяной знак SynthID добавляется к изображениям, [здесь](https://vt-0xff.github.io/SynthID-Explained/) (также доступен в описании репозитория)!
---
## Раунд 06 — Работает ✓
После шести итеративных раундов состязательной разработки конвейер `bypass_v4_final` / `bypass_v4_nuke` из Раунда 06 побеждает детектор SynthID Gemini на изображениях **как** `gemini-3.1-flash-image-preview`, **так и** `nano-banana-pro-preview` с визуально без потерь выводом.
### Сравнение качества: Раунд 01 и Раунд 06
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/11393/667465981caad496887a13c886686f68d1db37f4fdd5174a2884c3a975db0c3c.png" alt="Сравнение бок о бок Раунда 01 (только щадящее спектральное) и Раунда 06 (всё-в-одном) на одном и том же исходном изображении" width="80%">
</p>
<p align="center"><i>Слева: вывод Раунда 01 (<code>gentle</code> — только щадящее спектральное вычитание). Справа: вывод Раунда 06 (<code>final</code> — VAE + эластичная деформация + сжатие + цвет + JPEG). Оба выглядят для человеческих глаз одинаково; только Раунд 06 побеждает детектор SynthID.</i></p>
### Что изменилось между раундами
| Раунд | Стратегия | Результат |
|:-----:|:----------|:--------:|
| 01 | Консервативное спектральное вычитание (щадящее) | ✗ |
| 02 | Агрессивное спектральное вычитание + JPEG | ✗ |
| 03 | Целевое воздействие на абсолютные бины по руководству | ✗ |
| 04 | Извлечение фазы из шумоподавленного остатка | ✗ |
| 05 | Регенерация через Diffusion-VAE + геометрическая деформация | ✗ |
| **06** | **Всё-в-одном: VAE + эластичная фрагментация + сжатие + цвет + JPEG** | **✓** |
Прорыв в Раунде 06 произошёл благодаря использованию списка опубликованных режимов отказа самого приложения Gemini в качестве спецификации атаки:
> *«Когда изображение, сгенерированное ИИ, является частью сложного коллажа, расположено за другими элементами или имеет множество различных текстур и наложенных поверх узоров, детектор может испытывать трудности с изоляцией конкретной сигнатуры из общего файла.»*
> — приложение Gemini, справочный текст по обнаружению SynthID
Этап **эластичной деформации** моделирует этот эффект на уровне пикселей: плавное, низкочастотное случайное поле искажений даёт каждому району размером ~50 пикселей собственное независимое субпиксельное смещение, фрагментируя пространственный фазовый консенсус водяного знака без внесения видимых искажений.
---
## V4 — Межцветовой консенсус + калибровка с участием человека
V4 — это переосмысление кодовой книги с нуля, построенное на гораздо более богатом наборе данных:
- **Мульти-модельность**: отдельные профили для `gemini-3.1-flash-image-preview` и `nano-banana-pro-preview` (плюс необязательная псевдомодель `union`).
- **Мульти-цветность**: 6 консенсусных цветов (`black`, `white`, `blue`, `green`, `red`, `gray`) для каждой модели и разрешения, плюс `gradient` и `diverse` в качестве базовых уровней содержимого.
- **Межцветовой фазовый консенсус**: основная маска несущей. Настоящая несущая SynthID не зависит от содержимого изображения, поэтому её фаза постоянна для каждого однотонного фона. Энергия, обусловленная содержимым, разбивает фазу между цветами и выпадает из консенсуса.
- **Растворитель, сохраняющий качество**: откат с порогом PSNR, безопасный для яркости DC, ограничение вычитания на бин.
- **Калибровочный цикл с участием человека**: поле `carrier_weights` в кодовой книге обновляется на основе обратной связи от ручного обнаружения в приложении Gemini.
### Когерентность консенсуса (почему V4 выигрывает)
Для каждого частотного бина `(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
```
### V4 Быстрый старт```bash
# 1. Build the codebook from the enriched hierarchical dataset
python scripts/build_codebook_v4.py \
--root /path/to/reverse-synthid-dataset \
--output artifacts/spectral_codebook_v4.npz
# 2. Run the Round-06 all-in-one attack on a batch (recommended)
python scripts/dissolve_batch.py \
--input ./to_clean/ \
--output ./runs/round_06/ \
--codebook artifacts/spectral_codebook_v4.npz \
--model gemini-3.1-flash-image-preview \
--strengths final nuke
# 3. Upload each output image to the Gemini app and run SynthID detection.
# Use the results to feed back into the calibration script if needed.
```
### Пресеты атаки Round-06
Два пресета доступны через `--strengths`:
| Пресет | Проходы VAE | Эластичный α | Сжатие | Цепочка JPEG | Порог PSNR |
|:------:|:----------:|:---------:|:-------:|:----------:|:----------:|
| `final` | 1 | 1.8 px | 90 % | q=92→88 | 14 dB |
| `nuke` | 2 | 2.8 px | 82 % | q=88→84→90 | 11 dB |
Оба пресета используют один и тот же 7-этапный конвейер:
1. **VAE round-trip** (Stable Diffusion `sd-vae-ft-mse`) — проецирует изображение с многообразия естественных изображений, против которого декодер SynthID никогда не обучался (Gowal et al. 2026, §6.1)
2. **Elastic deformation** — гладкое низкочастотное случайное поле деформации, имитирует режим отказа «фрагментация коллажа», который признает сам Gemini
3. **Global geometric combo** — небольшое вращение + масштабирование + сдвиг пикселей в одном аффинном преобразовании
4. **Resize-squeeze** — понижение разрешения (AREA) → повышение (LANCZOS), стирает субликсельную информацию водяного знака
5. **Color-contrast nudge** — микросдвиг яркости/контрастности/насыщенности/оттенка
6. **Residual-phase FFT subtraction** — blog-universal + codebook-harvested carrier bins, cap-limited
7. **JPEG chain + luma noise + bilateral** — сильное сжатие / нарушение перекодирования
Каждый этап независимо контролируется PSNR; любой этап, который снизит качество ниже порога, автоматически откатывается.
### Структура кодовой книги V4
Профили, ключи которых — `(model, H, W)`. Каждый профиль хранит:
| Поле | Форма | Примечания |
|------------------------|----------------|--------------------------------------------------------|
| `consensus_coherence` | `(H, W, 3)` | Основная маска-носитель (межцветовой фазовый консенсус). |
| `consensus_phase` | `(H, W, 3)` | Средний угол единичной фазы по цветам. Шаблон вычитания. |
| `inverted_agreement` | `(H, W, 3)` | Попарное `abs(cos(phase_diff))`, взвешенное для `black<->white`. |
| `avg_wm_magnitude` | `(H, W, 3)` | Средняя амплитуда по цветам консенсуса. |
| `content_baseline` | `(H, W, 3)` | Из `diverse/` + `gradient/` — используется для смешивания яркости. |
| `carrier_weights` | `(H, W, 3)` | **Живой**. Начинается с `consensus^2 * (0.5 + 0.5 * agreement)`. Обновляется циклом калибровки. |
| `n_refs_per_color` | `{color: int}` | Счётчики ссылок на цвет. |
Формат сохранения использует компактное кодирование rfft v3 + `float16/uint8`; кодовая книга из 14 профилей для 2 моделей × 7 разрешений занимает ~220 МБ на диске.
### Детектор V4 (Проверка работоспособности)
Прежде чем тратить время на ручную проверку Gemini, выполните проверку выходных данных обхода на соответствие собственному консенсусу кодовой книги V4:```python
from robust_extractor import RobustSynthIDExtractor
from synthid_bypass_v4 import SpectralCodebookV4
cb = SpectralCodebookV4()
cb.load('artifacts/spectral_codebook_v4.npz')
ext = RobustSynthIDExtractor()
result = ext.detect_from_v4_codebook(image_rgb, cb,
model='nano-banana-pro-preview')
print(result.is_watermarked, result.confidence, result.phase_match)
```
На пути точного совпадения 1024x1024 мы видим `conf=0.91, phase_match=0.65` для водяного знака и `conf=0.02, phase_match=0.31` после агрессивного растворения V4.
### V4 против V3
| | V3 | V4 |
|:---|:---|:---|
| Эталонные цвета | черный + белый | черный, белый, синий, зеленый, красный, серый (+ разнообразные/градиентные базовые линии контента) |
| Кросс-валидация | `abs(cos(phase_black - phase_white))` | консенсус по нескольким цветам (6 цветов) + попарное согласие |
| Модели | одномодельная (Gemini 2.5) | профили для каждой модели (`gemini-3.1-flash-image-preview`, `nano-banana-pro-preview`) + опционально `union` |
| Атака | только спектральное вычитание | 7-этапная: VAE + elastic + squeeze + color + FFT + JPEG chain |
| PSNR (агрессивный) | 43 dB | визуально без потерь (18–24 dB на уровне пикселей; warp смещает пиксели) |
| Защита точности | отсутствует | поэтапный откат при достижении нижнего порога PSNR |
| Обход детектора | только локально | подтверждено ✓ в приложении Gemini (обе модели) |
V3 остается в репозитории (`src/extraction/synthid_bypass.py`, `bypass_v3`) без изменений для тех, кто от него зависит.
---
## 🚨 Требуются участники: Помогите расширить кодовую книгу
Мы активно собираем **чисто черные и чисто белые изображения, сгенерированные Nano Banana Pro**, чтобы улучшить извлечение водяных знаков с несколькими разрешениями.
Если вы можете их сгенерировать:
- Разрешение: любое (чем больше разнообразие, тем лучше)
- Содержимое: **полностью черный (#000000)** или **полностью белый (#FFFFFF)**
- Источник: только выходные данные Nano Banana Pro
### Как внести вклад
1. Сгенерируйте партию черно/белых изображений, прикрепив чисто черное/белое изображение в Gemini и попросив его «воссоздать это как есть»
2. Загрузите их в наш **датасет Hugging Face**: [aoxo/reverse-synthid](https://huggingface.co/datasets/aoxo/reverse-synthid)
- `gemini_black_nb_pro/` (для черного)
- `gemini_white_nb_pro/` (для белого)
3. Откройте Pull Request в репозитории датасета HF
Эти эталонные изображения **критически важны** для:
- Обнаружение несущей частоты
- Проверка фазы
- Повышение устойчивости к различным разрешениям
> Даже 150–200 изображений в новом разрешении могут значительно улучшить обнаружение и удаление.
### Скачать эталонные изображения
Эталонные изображения размещены на Hugging Face для облегчения git-репозитория:```bash
pip install huggingface_hub
python scripts/download_images.py # download all
python scripts/download_images.py gemini_black # download specific folder
```
Dataset: [huggingface.co/datasets/aoxo/reverse-synthid](https://huggingface.co/datasets/aoxo/reverse-synthid)
---
## Ключевые выводы
### Водяной знак зависит от разрешения
SynthID встраивает несущие частоты в **различные абсолютные позиции** в зависимости от разрешения изображения. Кодовая книга, построенная для 1024x1024, не может напрямую удалить водяной знак из изображения 1536x2816 — несущие находятся в совершенно разных бинах.
| Разрешение | Верхняя несущая (fy, fx) | Когерентность | Источник |
|:----------:|:------------------------:|:-------------:|:--------:|
| **1024x1024** | (9, 9) | 100.0% | 100 черных + 100 белых референсов |
| **1536x2816** | (768, 704) | 99.6% | 88 изображений с водяными знаками |
Именно поэтому кодовая книга V3 хранит **отдельные профили для каждого разрешения** и автоматически выбирает их при обходе.
### Фазовая согласованность — фиксированный ключ на уровне модели
Фазовый шаблон водяного знака **идентичен для всех изображений** одной модели Gemini:
- **Зеленый канал** несет самый сильный сигнал водяного знака
- **Межизображенческая фазовая когерентность** на несущих: >99.5%
- **Перекрестная валидация черного/белого** подтверждает истинные несущие через |cos(phase_diff)| > 0.90
### Структура несущих частот
При 1024x1024 (из черно-белых референсов) верхние несущие лежат на низкочастотной сетке:
| Несущая (fy, fx) | Фазовая когерентность | Согласие Ч/Б |
|:-----------------:|:---------------------:|:------------:|
| (9, 9) | 100.00% | 1.000 |
| (5, 5) | 100.00% | 0.993 |
| (10, 11) | 100.00% | 0.997 |
| (13, 6) | 100.00% | 0.821 |
---
## Архитектура
### Поколения обхода
| Версия | Подход | PSNR | Влияние на водяной знак | Статус |
|:------:|:-------|:----:|:-----------------------:|:------:|
| **V1** | JPEG сжатие (Q50) | 37 dB | ~11% падение фазы | Базовый |
| **V2** | Многоступенчатые преобразования (шум, цвет, частота) | 27-37 dB | ~0% падение уверенности | Компромисс по качеству |
| **V3** | **Многоразрешающее вычитание спектральной кодовой книги** | **43+ dB** | **91% падение фазовой когерентности** | Предыдущий лучший |
| **V4 Round 06** | **7-ступенчатый «всё в одном» (VAE + elastic + squeeze + цвет + JPEG)** | **визуально без потерь** | **детектор обойден ✓** | **Текущий лучший** |
### Конвейер V3```
Input Image (any resolution)
│
▼
codebook.get_profile(H, W) ──► exact match? ──► FFT-domain subtraction
│ (fast path)
└─ no exact match ──────► spatial-domain resize + subtraction
(fallback path)
│
▼
Multi-pass iterative subtraction (aggressive → moderate → gentle)
│
▼
Anti-alias → Output
```
### V4 Раунд-06 Пайплайн```
Input Image (any resolution)
│
▼ Stage 1: VAE round-trip (SD sd-vae-ft-mse, 1-2 passes)
│ Projects image off natural-image manifold
▼ Stage 2: Elastic deformation (smooth random warp field)
│ Fragments spatial phase consensus ("collage effect")
▼ Stage 3: Global geometric combo (rotation + zoom + shift)
│ Single affine warp, no compounded aliasing
▼ Stage 4: Resize-squeeze (AREA ↓ then LANCZOS ↑)
│ Erases sub-pixel watermark information
▼ Stage 5: Color-contrast nudge (HSV micro-shift)
│ Shifts per-pixel statistics SynthID keys on
▼ Stage 6: Residual-phase FFT subtraction
│ Blog-universal + codebook-harvested carrier bins
▼ Stage 7: JPEG chain + luma noise + bilateral filter
│
▼
Output (SynthID detector: no watermark detected ✓)
```
---
## Быстрый старт
### Установка```bash
git clone https://github.com/aloshdenny/reverse-SynthID.git
cd reverse-SynthID
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
# For Round-06 VAE stage:
pip install torch diffusers safetensors accelerate
```
### Запуск V4 Round-06 Bypass (Рекомендуется)```python
import sys
sys.path.insert(0, 'src/extraction')
from synthid_bypass_v4 import SynthIDBypassV4, SpectralCodebookV4
cb = SpectralCodebookV4()
cb.load('artifacts/spectral_codebook_v4.npz')
b = SynthIDBypassV4()
result = b.bypass_v4_file(
'input.png', 'output.png',
cb,
strength='final', # or 'nuke' for maximum strength
model='gemini-3.1-flash-image-preview',
)
print(result.stages_applied)
```
### Запуск V3 Bypass```python
from src.extraction.synthid_bypass import SynthIDBypass, SpectralCodebook
codebook = SpectralCodebook()
codebook.load('artifacts/spectral_codebook_v3.npz')
bypass = SynthIDBypass()
result = bypass.bypass_v3(image_rgb, codebook, strength='aggressive')
print(f"PSNR: {result.psnr:.1f} dB")
print(f"Profile used: {result.details['profile_resolution']}")
```
Из CLI:```bash
python src/extraction/synthid_bypass.py bypass input.png output.png \
--codebook artifacts/spectral_codebook_v3.npz \
--strength aggressive
```
### Обнаружение водяного знака```bash
python src/extraction/robust_extractor.py detect image.png \
--codebook artifacts/codebook/robust_codebook.pkl
```
## Структура проекта```
reverse-SynthID/
├── src/
│ ├── extraction/
│ │ ├── synthid_bypass.py # V1/V2/V3 bypass + multi-res SpectralCodebook
│ │ ├── synthid_bypass_v4.py # V4 cross-color consensus codebook + dissolver
│ │ ├── vae_regen.py # Round-06 SD-VAE re-generation stage
│ │ ├── robust_extractor.py # Multi-scale watermark detection (+ V4 hook)
│ │ ├── watermark_remover.py # Frequency-domain watermark removal
│ │ ├── benchmark_extraction.py # Benchmarking suite
│ │ └── synthid_codebook_extractor.py # Legacy codebook extractor
│ └── analysis/
│ ├── deep_synthid_analysis.py # FFT / phase analysis scripts
│ └── synthid_codebook_finder.py # Carrier frequency discovery
│
├── scripts/
│ ├── download_images.py # Download reference images from HF
│ ├── build_codebook_v4.py # V4: build per-(model, HxW) consensus codebook
│ ├── dissolve_batch.py # V4: emit strength variants
│ └── calibrate_from_feedback.py # V4: update carrier_weights from detection feedback
│
├── artifacts/
│ ├── spectral_codebook_v3.npz # Multi-res V3 codebook [1024x1024, 1536x2816]
│ ├── spectral_codebook_v4.npz # V4 codebook (per-model, per-resolution)
│ ├── codebook/ # Detection codebooks (.pkl)
│ └── visualizations/ # FFT, phase, carrier visualizations
│
├── assets/
│ ├── synthid_watermark.png # Watermark analysis header image
│ ├── synthid_white.jpg # Amplified SynthID pattern on white image
│ ├── v4_round1_vs_round6.png # Round 01 vs Round 06 fidelity comparison
│ └── ...
│
├── runs/
│ ├── round_01/ … round_05/ # Historical bypass attempts
│ └── round_06/ # Working bypass (final + nuke presets)
│
├── watermark_investigation/ # Early-stage Nano-150k analysis (archived)
└── requirements.txt
```
---
## Техническое глубокое погружение
### Как работает SynthID (обратное проектирование)```
┌──────────────────────────────────────────────────────────────┐
│ SynthID Encoder (in Gemini) │
├──────────────────────────────────────────────────────────────┤
│ 1. Select resolution-dependent carrier frequencies │
│ 2. Assign fixed phase values to each carrier │
│ 3. Neural encoder adds learned noise pattern to image │
│ 4. Watermark is imperceptible — spread across spectrum │
├──────────────────────────────────────────────────────────────┤
│ SynthID Decoder (in Google) │
├──────────────────────────────────────────────────────────────┤
│ 1. Extract noise residual (wavelet denoising) │
│ 2. FFT → check phase at known carrier frequencies │
│ 3. If phases match expected values → Watermarked │
└──────────────────────────────────────────────────────────────┘
```
### Почему упругая деформация работает
Набор аугментаций для обучения SynthID (Gowal et al. 2026, Таблица 1) включает `SmallRotation`, `Cropresize`, `JPEG`, `GaussianBlur`, `BrightnessContrast` и `Screenshotting` — все это *глобальные*, *однородные* пространственные преобразования. Поле упругой деформации — это *пространственно-вариативное* искажение: каждая локальная окрестность получает собственное независимое субпиксельное смещение. Поскольку смещения сглажены (размытие по Гауссу из белого шума, σ=44–56 пикселей), содержимое изображения визуально не затрагивается, но фазовая консенсусная структура водяного знака становится некогерентной — ее больше нельзя агрегировать по всему изображению. Это пиксельный аналог эффекта «коллажной фрагментации», который собственное приложение Gemini приводит как режим отказа детектора.
---
## Сводка результатов
### V3 (спектральное вычитание, 88 изображений Gemini)
| Метрика | Значение |
|:--------|--------:|
| **PSNR** | 43,5 дБ |
| **SSIM** | 0,997 |
| **Снижение энергии носителя** | 75,8% |
| **Снижение фазовой когерентности** (топ-5 несущих) | **91,4%** |
### V4 Раунд 06 (атака «всё в одном», 20 изображений проверено)
| Модель | Пресет | Обход детектора |
|:-------|:------:|:---------------:|
| gemini-3.1-flash-image-preview | `final` | ✓ |
| gemini-3.1-flash-image-preview | `nuke` | ✓ |
| nano-banana-pro-preview | `final` | ✓ |
| nano-banana-pro-preview | `nuke` | ✓ |
---
## Ссылки
- [SynthID: Identifying AI-generated images](https://deepmind.google/technologies/synthid/)
- [SynthID Paper (arXiv:2510.09263)](https://arxiv.org/abs/2510.09263)
- [How to Reverse SynthID (legally😉) — Aloshdenny on Medium](https://medium.com/@aloshdenny)
---
## 👤 Автор и контакты
**Алош Денни**
Исследования в области AI-водяных знаков · Обработка сигналов
📧 **Эл. почта:** [[email protected]](mailto:[email protected])
🔗 **GitHub:** https://github.com/aloshdenny
Для сотрудничества, научных обсуждений или предложений обращайтесь напрямую или создавайте issue/PR.
---
## Поддержите это исследование
Этот проект поддерживается независимо — без лабораторного финансирования или корпоративной поддержки.
Если эта работа была полезна вам или вашей команде, подумайте о поддержке дальнейшей разработки:
<a href="https://buymeacoffee.com/aoxo">
<img src="https://img.shields.io/badge/Buy%20Me%20A%20Coffee-Support%20This%20Research-FFDD00?style=for-the-badge&logo=buy-me-a-coffee&logoColor=black" alt="Buy Me A Coffee">
</a>
Средства пойдут на вычислительные затраты (GPU-часы для новых профилей разрешения), расширение датасета и текущие исследования по обходу.
---
## Отказ от ответственности
Этот проект предназначен **исключительно для исследовательских и образовательных целей**. SynthID — проприетарная технология, принадлежащая Google DeepMind. Эти инструменты предназначены для:
- Академических исследований по устойчивости водяных знаков
- Анализа безопасности систем идентификации AI-сгенерированного контента
- Понимания методов спектрального кодирования с расширением
**Не используйте эти инструменты для ложного представления AI-сгенерированного контента как созданного человеком.**