github peterdu1109/NotifySync v5.5.10.2
🔔 NotifySync v5.5.10.2

latest releases: v5.5.11.2, v5.5.11.1, v5.5.11.0...
5 hours ago

🇬🇧 English

📝 In Short

Codec re-encodes between modern codecs (AV1 ↔ x265, x264 → HEVC, in-place re-encodes…) are now correctly classified as UPD Codec instead of falling through to UPD Minor.

🐛 What's Fixed

  • Codec changes between two modern codecs were misclassified — When the filename moved from one codec marker to another (e.g. Anime.AV1.mkvAnime.x265.mkv), the previous classifier only fired on "no codec → some codec" transitions, so codec swaps fell through to UPD Minor. Now the classifier compares codec families and triggers UPD Codec for any change (including AV1 ↔ HEVC ↔ x264).
  • In-place re-encodes were misclassified as Minor — Tools that rewrite the file while keeping the same filename (Sonarr "Atomic Move", custom post-processing) produced no path change. The classifier now also fires UPD Codec when the path is unchanged but the file size moved >10% or >50 MB.
  • "Minor" is now stricter — Triggers only when the path is unchanged and the size delta is under 10 MB. Subtitles, metadata refreshes, and tiny re-muxes still land here. Larger changes get a more accurate category (Codec, Quality, etc.).

📝 Heads-up

Existing notifications that were already classified as UPD Minor under the old rules keep their label until they fade out (72h badge persistence) or the file is replaced again. New upgrades from 5.5.10.2 onward use the new classifier.


🔧 Technical details for the curious

ClassifyUpgrade refactor in NotificationManager.cs:

  • New helper DetectCodec(path) returns "av1", "hevc", "x264", or null based on word-boundary token matching against the filename.
  • Old path codec ≠ new path codec (with at least one non-null) → Codec. Catches AV1↔x265, x264→HEVC, etc.
  • Path unchanged AND (sizeRatio > 10% OR sizeDelta > 50 MB) → Codec. Catches in-place re-encodes.
  • Standalone Quality threshold tightened to >50% growth AND >500 MB absolute growth, so small files don't false-positive on codec re-encodes that happen to grow modestly.
  • Minor threshold tightened to <10 MB delta (down from <50 MB). Subtitle additions and metadata refreshes still match.

The unused CodecNewTokens static array was removed (replaced by DetectCodec).

Phase B (item.GetMediaStreams() for fingerprint-based diff) would eliminate the remaining ambiguity (audio re-mux vs codec re-encode at similar size). Still on the roadmap.


🇫🇷 Français

📝 En bref

Les ré-encodages entre codecs modernes (AV1 ↔ x265, x264 → HEVC, ré-encodages in-place…) sont maintenant correctement classés en MAJ Codec au lieu de tomber sur MAJ Mineur.

🐛 Corrections

  • Les changements de codec entre deux codecs modernes étaient mal classés — Quand le filename passait d'un marqueur codec à un autre (ex. Anime.AV1.mkvAnime.x265.mkv), l'ancien classificateur ne se déclenchait que sur les transitions "pas de codec → codec", donc les changements entre codecs tombaient sur MAJ Mineur. Maintenant, le classificateur compare les familles de codecs et déclenche MAJ Codec pour n'importe quel changement (incluant AV1 ↔ HEVC ↔ x264).
  • Les ré-encodages in-place étaient mal classés en Mineur — Les outils qui réécrivent le fichier en gardant le même filename (Sonarr "Atomic Move", post-processing custom) ne produisent aucun changement de path. Le classificateur déclenche maintenant aussi MAJ Codec quand le path est inchangé mais la taille a bougé >10% ou >50 MB.
  • "Mineur" est maintenant plus strict — Ne se déclenche que si le path est inchangé et le delta de taille est inférieur à 10 MB. Les sous-titres, refresh metadata et petits re-muxes y tombent toujours. Les changements plus importants reçoivent une catégorie plus précise (Codec, Qualité, etc.).

📝 À noter

Les notifications déjà classées en MAJ Mineur avec les anciennes règles gardent leur label jusqu'à ce qu'elles disparaissent (persistance badge 72h) ou que le fichier soit remplacé à nouveau. Les nouveaux upgrades à partir de 5.5.10.2 utilisent le nouveau classificateur.


🔧 Détails techniques pour les curieux

Refactor de ClassifyUpgrade dans NotificationManager.cs :

  • Nouveau helper DetectCodec(path) renvoie "av1", "hevc", "x264", ou null basé sur un match word-boundary des tokens dans le filename.
  • codec(oldPath) ≠ codec(newPath) (avec au moins un non-null) → Codec. Capture AV1↔x265, x264→HEVC, etc.
  • Path inchangé ET (sizeRatio > 10% OU sizeDelta > 50 MB) → Codec. Capture les ré-encodages in-place.
  • Seuil Quality standalone resserré à >50% growth ET >500 MB absolu, pour éviter les faux positifs sur les petits fichiers.
  • Seuil Minor resserré à <10 MB delta (au lieu de <50 MB). Les ajouts de sous-titres et refreshes metadata y tombent toujours.

L'array statique CodecNewTokens (inutilisé après refactor) a été retiré.

La Phase B (item.GetMediaStreams() pour un diff basé sur les fingerprints) éliminerait l'ambiguïté restante (re-mux audio vs ré-encodage codec à taille similaire). Toujours sur la roadmap.

Don't miss a new NotifySync release

NewReleases is sending notifications on new releases.