From 23cc351f77e4fb1a00cfe089ea717de64f5e2619 Mon Sep 17 00:00:00 2001 From: Andy Date: Sun, 15 Feb 2026 12:08:27 -0700 Subject: [PATCH] feat(tracks): prioritize Atmos audio tracks over higher bitrate non-Atmos --- unshackle/core/tracks/tracks.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/unshackle/core/tracks/tracks.py b/unshackle/core/tracks/tracks.py index 7d22291..e815f7e 100644 --- a/unshackle/core/tracks/tracks.py +++ b/unshackle/core/tracks/tracks.py @@ -221,13 +221,15 @@ class Tracks: self.videos.sort(key=lambda x: not is_close_match(language, [x.language])) def sort_audio(self, by_language: Optional[Sequence[Union[str, Language]]] = None) -> None: - """Sort audio tracks by bitrate, descriptive, and optionally language.""" + """Sort audio tracks by bitrate, Atmos, descriptive, and optionally language.""" if not self.audio: return - # descriptive - self.audio.sort(key=lambda x: x.descriptive) - # bitrate (within each descriptive group) + # bitrate (highest first) self.audio.sort(key=lambda x: float(x.bitrate or 0.0), reverse=True) + # Atmos tracks first (prioritize over higher bitrate non-Atmos) + self.audio.sort(key=lambda x: not x.atmos) + # descriptive tracks last + self.audio.sort(key=lambda x: x.descriptive) # language for language in reversed(by_language or []): if str(language) in ("all", "best"):