- Fixed the npm CLI video path reported in issue #104 by packaging the local video preview page, video app bundle, FDnCNN models, and browser ONNX runtime assets.
- Served the packaged video preview page over a temporary local HTTP URL so the browser runtime can fetch model assets reliably instead of failing from a
file://page. - Kept explicit
--video-denoise-backendCLI selections from being overwritten by automatic video presets.
- Addressed issue #97 by adding BT.709 limited-range color metadata to video exports to improve color grading consistency and player compatibility.
- Added source-structure protection around video watermark cleanup to reduce edge and background-transition artifacts.
- Published
v1.0.29to npm, GitHub Release, the hosted userscript, and the official website fallback extension zip. - Verified the website extension zip at
72891819454366cf5fc9f21e561bc6a0cf0179a34d57cb076e96aa2ae774ff31 / 1092502bytes. - Closed issue #97 as addressed in
v1.0.29; Chrome Web Store propagation remains the only post-release waiting item.
- Added package and SDK regression coverage for packed video assets, local preview-page serving, and packaged CLI video export.
- Refactored the Gemini image pipeline into explicit detection, alpha, repair, and evaluation layers while preserving the current production behavior.
- Added evidence-gated decision-path tracing so accepted and skipped watermark candidates can be audited without changing the pixel path.
- Re-verified the 2026-06-23 to 2026-06-24 online Gemini sample set at
978/1000 = 97.80%pass rate with no newly failing samples against the Phase 5 baseline. - Added strict quality monitoring, visual review packs, alpha ablation reports, and GitHub v1.0.27 comparison sheets for investigating perfect-rate changes.
- Confirmed the observed
perfect strictdrop is primarily a stricter damage/texture metric coverage change, not a visible regression against GitHub v1.0.27 outputs.
- Improved relocated portrait Veo watermark cleanup by selecting the legacy alpha profile for the newly observed
20260619.mp4sample. - Tuned the relocated review preset to lower residual watermark edges while keeping the cleanup bounded to the detected footprint.
- Added
20260619.mp4as a committed video regression fixture so the relocated portrait watermark behavior is pinned in tests. - Added ROI-level alpha regression coverage and re-verified the five-sample video regression batch with all samples passing.
- Added a conservative text-overlap path for 96px Gemini image watermarks that sit on top of high-contrast text, allowing weak-alpha cleanup without erasing the underlying lettering.
- Fixed the
20260618-2.pngbug sample by selecting the canonical96/64/64anchor withstandard+gain+text-overlap+validatedinstead of skipping it asno-watermark-detected.
- Made the Chrome extension zip packaging deterministic by fixing zip entry timestamps, so repeated
pnpm package:extensionruns produce the same hash for the same contents. - Re-verified the external Gemini watermark sample set and bundled sample set after the text-overlap change; only
bug\20260618-2.pngchanged behavior, with no increase in raw visible, calibrated visible, or metric-risk counts.
- Fixed the 2026-06-16 Gemini sample by keeping canonical 96px bottom-right evidence ahead of weak inward candidates and avoiding dark over-removal on textured backgrounds.
- Added conservative smooth-prior cleanup for shallow off-catalog residuals so light star overlays can be reduced without turning into dark artifacts.
- Added regression coverage for the new bug image and bounded weak-residual outcomes.
- Re-verified the external Gemini watermark sample set with 188 of 190 samples passing and no newly failing samples.
- Published this patch as
v1.0.25because the earlier npm1.0.24tarball is immutable and predates this bug fix.
- Improved Veo text watermark detection for stable low-contrast vertical videos, including the newly added Tibet scenery sample.
- Kept detection conservative by requiring repeated default-template evidence plus at least one strong frame before accepting a low-contrast text watermark.
- Added regression coverage for intermittent low-contrast Veo text evidence.
- Re-verified the new 720p, 720x1280, and Veo text sample set through the local video UI preset exporter.
- Published the npm package, GitHub Release assets, userscript artifact, and Chrome extension fallback zip for
v1.0.24. - Synced the official website to the
1.0.24package and release assets. A website-only follow-up now version-tags the video runtime script URL so the fixed runtime path cannot keep serving stale cached JavaScript after a site deploy.
- Fixed the browser video ONNX runtime shape mismatch reported in issue #77 by routing small watermarks to the 104px FDnCNN model and standard or unknown watermarks to the 200px model.
- Added fixed-shape ROI planning and resize fallbacks so every detected video watermark candidate feeds the ONNX runtime with the selected model's expected input size.
- Moved the runtime padding fallback into the video export layer so direct video exports avoid the same fixed-shape mismatch.
- Fixed portrait video framing in the local before/after preview so the bottom-right watermark region remains visible during review.
- Reduced Veo text watermark detection search work and added cooperative progress yielding so the video page stays responsive while detection is running.
- Added regression coverage across the video watermark catalog, including standard, inset, compact, scaled, portrait, 4K, oversized 8K, and undersized-canvas ROI cases.
- Added release-safety checks to prevent the video app and website runtime bundle from returning to a fixed 200px model or hard-coded 64px padding path.
- Clarified the release scope for public notes: current image defaults and guarded image improvements are releasable, while video cleanup remains review-scoped until the release gates promote it.
- Added support for the newly observed near-official Gemini large-margin anchor reported by the 2026-06-13 sample.
- Added evidence-gated small-anchor relocation for visible fixed-local residuals and stronger mid-alpha tuning for high-confidence 48px large-margin residuals.
- Kept unsafe-looking remaining candidates out of the production path when lower residual scores produced visible dark edge artifacts.
- Added regression coverage for the 2026-06-13 anchor, small-anchor relocation, and stronger mid-alpha selection.
- Re-verified the external Gemini watermark sample set with 186 of 189 samples passing and no newly failing samples.
- Added the
@pilio/gemini-watermark-remover/videoSDK entrypoint for local video watermark removal with injectable processors and a Playwright-backed preview-page default. - Re-exported video helpers from the Node SDK and added CLI routing for
.mp4,.webm, and.movinputs. - Added CLI flags for video page selection, denoise backend selection, timeout control, and low-confidence export handling.
- Added the browser AI cleanup path used by the local video preview exporter, including adjacent-frame reuse telemetry for faster repeated watermark regions.
- Moved
sharpout of hard runtime dependencies and into an optional peer so browser consumers do not install the native Node image codec unless they need the CLI default codec. - Documented that CLI users should install
sharpwhen they want the built-in file decoder/encoder path.
- Published the latest Gemini watermark candidate detection improvements as a fresh npm SDK release because
1.0.18is already present on npm. - Kept the SDK packaging surface unchanged so downstream consumers can depend on the public package instead of maintaining a vendored copy.
- Reused the already verified
1.0.18algorithm build as the baseline for this npm-only release.
- Reworked the fixed-core Gemini watermark path around prioritized position and alpha candidates instead of multipass or visual post-processing.
- Added diff-derived artifact scoring so alpha selection can account for residual edges, halo, and newly clipped pixels without treating before/after diff as the only signal.
- Added 2026-06-08 regression samples covering the latest Gemini 48px watermark variants and refined weak-alpha outcomes.
- Moved official extension release packages to the top-level
release/directory while keeping the unpacked local debugging extension indist/extension.
- Documented the fixed-core algorithm findings and the next evolution plan for candidate ranking reports, gold-set manifests, and catalog-driven maintenance.
- Re-verified the release with full tests, production build, sample artifact generation, and extension package generation.
- Added support for the newly observed Gemini 48px watermark at the 96px right/bottom anchor.
- Added prioritized alpha-strength selection so the new weak-alpha chain tries 60% strength first and falls back to the standard 100% chain when needed.
- Kept legacy 96px and 192px-margin candidates evidence-gated so older and full-size outputs continue to resolve safely.
- Added 2026-06-07 regression samples covering the weak-alpha 48px/96px-anchor output.
- Re-verified the current sample benchmark set with all 23 samples passing.
- Added the extension version to the bottom of the popup so installed builds are easier to identify.
- Reused fullscreen image session state after Gemini copy actions so refreshed
blob:images no longer trigger visible page re-processing. - Kept copy fallback results in the full-quality session cache so later copy and download actions can reuse the processed image.
- Added regression coverage for fullscreen dialog action hints, clipboard fallback caching, and refreshed fullscreen image reuse.
- Added support for the updated Gemini 96px watermark alpha map and 192px right/bottom anchor used by newly observed 2K outputs.
- Tightened candidate selection so clean canonical 48px/96px anchors are preserved when smaller preview-anchor candidates leave stronger residual edges.
- Kept preview-anchor cleanup eligible for its own warp and edge-cleanup refinement path, avoiding regressions on real Gemini preview fixtures.
- Added regression fixtures for the new Gemini watermark position, updated 2026-05-20 sample images, and the alternate 96px alpha template.
- Re-verified full tests, production build, and sample benchmark coverage for the current sample set.
- Switched userscript auto-update metadata to the GitHub Release
latest/downloadpermalink so the update endpoint is controlled by the published release assets.
- Updated regression coverage to pin the release-backed userscript auto-update URL.
- Added hosted
@downloadURLand@updateURLmetadata so userscript managers can auto-update from the official userscript permalink.
- Added regression coverage for the hosted userscript auto-update metadata.
- Updated the extension popup to use English copy by default for Chrome Web Store submission.
- Refined the popup visual design with Apple-style spacing, softer panels, a unified blue accent, inline action icons, and a GitHub feedback entry.
- Shortened the extension name to
Gemini Watermark Removerin the Manifest V3 metadata.
- Rebuilt the Chrome extension release artifacts and re-verified the extension build, compatibility adapter, and active cleanup coverage.
- Added a Manifest V3 Chrome extension build that packages the shared userscript runtime through a Tampermonkey-compatible adapter.
- Added the extension popup with an enable toggle, official website link, general watermark remover link, and GitHub issue feedback entry.
- Added a versioned extension release package flow that generates a zip, sha256 checksum, and
latest-extension.jsonfor GitHub Release and official website downloads.
- Added the new public
runtime-browserentrypoint as a side-effect-free blob processor for downstream browser consumers. - Added the new public
runtime-userscriptentrypoint as a narrow userscript runtime wrapper with explicit initialize/process/remove/dispose methods. - Published type declarations for both runtime entrypoints so packed TypeScript consumers can import them directly.
- Updated package exports and published file allowlists so
pnpm packnow includes the runtime entrypoints and their required shared implementation files. - Added isolated consumer smoke coverage that validates runtime subpath imports and rejects deep private imports from
@pilio/gemini-watermark-remover/src/.... - Documented Chrome extension installation in both README files and added release checklist coverage for extension artifacts.
- Added runtime-focused regression tests for side-effect-free browser imports, default processing options, detached runtime methods, and userscript worker fallback behavior.
- Added extension build, compatibility, popup, release metadata, and README ordering regression coverage.
- Re-verified the release with targeted page/runtime/sdk/package-consumer tests and a fresh publish dry run for version
1.0.11.
- Let preview request interception fail open for passive preview fetches so Gemini can keep rendering the original page image when request-layer preview processing fails.
- Hardened fullscreen Gemini copy so stale processed object URLs no longer fall back to CSP-blocked
fetch(blob:...); the clipboard hook now reprocesses Gemini's own clipboard image payload when needed. - Stabilized fullscreen preview replacement by reusing session-stored preview source bindings for blob-backed dialog images and prioritizing fullscreen images ahead of queued preview work.
- Added regression coverage for stale fullscreen clipboard object URLs, fullscreen preview source reuse from the shared image session, and fullscreen-priority page replacement queue behavior.
- Re-verified the release with a fresh full automated test run, production build, and Tampermonkey userscript freshness check against the fixed profile.
- Removed Gemini-original source confirmation from the local app flow and now rely on the user to decide whether the input should be processed.
- Simplified local status messaging so skipped cases are described as "no removable watermark detected" instead of claiming Gemini-specific source knowledge.
- Removed the unused
exifrdependency after deleting the abandoned original-source validation path.
- Disabled browser caching for the local dev static server so the active
pnpm devport, starting fromhttp://127.0.0.1:4173/, is less likely to keep serving stale bundles during watermark validation work.
- Added regression coverage to ensure the app no longer imports Gemini original-source validation helpers and locale files no longer ship the removed origin-confirmation copy.
- Re-verified the release with a fresh full test run, sample benchmark, and production build.
- Fixed Gemini origin confirmation for metadata-stripped inputs by falling back to actual image dimensions instead of EXIF-only width and height fields.
- Expanded the recognized Gemini size catalog to cover the current tall and wide sample outputs used by the project fixtures.
- Softened the non-confirmed origin status copy so confirmed removal quality is no longer described as "not Gemini" when the source is only unconfirmed.
- Removed the local-browser dependency from
benchmark:samplesandexport:samples; both scripts now decode and encode fixtures through the Node pipeline directly. - Updated local regression fixtures and tests to use the remaining WebP sample set as the active release baseline.
- Added regression coverage for no-EXIF origin fallback and Node-only sample decoding/export flows.
- Re-verified the release with full automated tests, SDK smoke validation, sample benchmark/export runs, and a production build.
- Improved watermark anchor recovery for near-official portrait outputs and preview-sized Gemini images that drift away from the default anchor.
- Stopped harmful extra removal passes earlier when the first pass already clears the watermark-shaped residual well enough.
- Kept preview-anchor cleanup on the cheaper edge-cleanup path instead of reintroducing expensive no-op subpixel sweeps.
- Added regression coverage for anchor recovery, pass stopping, and release metadata consistency.
- Added the single-pass versus multipass tradeoff note used during this release cycle.
- Unified Gemini preview, fullscreen, clipboard, and download actions around a shared image-session and
actionContextpipeline. - Reused processed session resources across surfaces so fullscreen copy/download can resolve the same processed image identity more reliably.
- Removed deprecated userscript legacy intent aliases from the active runtime path to simplify release behavior before shipping.
- Added focused coverage for
actionContext, shared image-session resolution, and userscript hook behavior after the release cleanup. - Re-verified the release with a fresh full test run and production build.
- Simplified Gemini page-image replacement into smaller shared helpers for processing preparation, mutation routing, source dispatch, and result application.
- Simplified Gemini original-blob acquisition so preview urls use rendered capture, download urls use background fetch, and inline urls stay on direct fetch.
- Simplified Gemini download interception to keep only in-flight request deduplication instead of retaining processed response cache entries.
- Added focused regression coverage for preview/original source dispatch, candidate image collection, mutation scheduling, and self-written processed blob detection.
- Re-verified the release with full automated tests and a fresh production build.
- Added in-page Gemini preview replacement so page images can be processed before manual download.
- Routed preview fetching through
GM_xmlhttpRequestwhen available, avoiding fallback CORS failures in userscript sandboxes. - Added a restrained
Processing...overlay during preview processing and made failures fail-open so the original image remains visible. - Hardened overlay lifecycle cleanup to avoid stale fade callbacks removing a new processing state.
- Kept page-image replacement behavior aligned with the userscript preview pipeline and processing-state UX.
- Added regression tests for userscript version sync and processing overlay lifecycle edge cases.
- Verified release build with full automated test coverage and production bundle generation.