mirror of
https://github.com/wiltodelta/remove-ai-watermarks.git
synced 2026-08-07 22:48:37 +02:00
47 lines
2.0 KiB
Markdown
47 lines
2.0 KiB
Markdown
# Gemini (Nano Banana) visible sparkle capture
|
|
|
|
> **Status (captured 2026-05-31):** the required black capture is committed
|
|
> here. The sparkle-on-black assets
|
|
> `gemini_bg_{96,48}.png` are rebuilt by `scripts/visible_alpha_solve.py gemini`.
|
|
> They support detection and footprint geometry. Current pixel recovery uses the
|
|
> shared fill backend, not reverse-alpha inversion.
|
|
|
|
Google Gemini (Nano Banana) stamps a four-point sparkle icon in the bottom-right corner
|
|
via alpha compositing: `watermarked = a*logo + (1-a)*original`. Unlike the Doubao/Jimeng
|
|
text marks, the sparkle is captured over a **pure-black** background, where
|
|
`watermarked = a*255` (logo is near-white), so the alpha reads directly off the capture
|
|
(`alpha = max(R,G,B)/255`) -- no background fit needed. This is the "golden" capture case.
|
|
|
|
## What the captures confirmed (2026-05-31)
|
|
|
|
- The sparkle at a 2048-wide image is **96x96 px** (width_frac ~0.047), bottom-right,
|
|
margins ~0.031, alpha max ~0.51 -- matching the engine's existing 96px asset.
|
|
- Our own controlled capture matches the previously third-party-sourced
|
|
`gemini_bg_96.png` to **NCC 0.9998**, so the bundled asset is validated and now
|
|
reproducible from our own capture.
|
|
|
|
## How to capture (image-edit path)
|
|
|
|
For each locally generated black, gray, or white 2048 px seed:
|
|
|
|
1. Open Gemini image generation, image-edit / reference mode, upload the seed.
|
|
2. Prompt: `Recreate this image exactly as it is, keep it identical, do not add or change anything`
|
|
3. Download the ORIGINAL output (not a screenshot). Do not crop / edit / re-save.
|
|
|
|
Black is the key one (sparkle on black -> exact alpha). Gray/white cross-check.
|
|
|
|
## Committed input
|
|
|
|
```
|
|
gemini_black_2048.png # the key capture (sparkle on black)
|
|
```
|
|
|
|
The gray and white captures were calibration cross-checks and are not needed to
|
|
rebuild the assets. Synthetic seeds and real-content validation downloads stay
|
|
local.
|
|
Rebuild the assets with:
|
|
|
|
```
|
|
uv run python scripts/visible_alpha_solve.py gemini # or: all
|
|
```
|