Jackett/Jackett · error · Exception

Duplicate music-search param: {paramStr}

Error message

Duplicate music-search param: {paramStr}

What it means

Thrown by TorznabCapabilities.ParseMusicSearchParams when a music-search parameter is repeated. The music capability list (artist, album, label, year, etc.) must be unique; a duplicate indicates a malformed indexer definition.

Source

Thrown at src/Jackett.Common/Models/TorznabCapabilities.cs:189

                if (Enum.TryParse(paramStr, true, out MovieSearchParam param))
                    if (!MovieSearchParams.Contains(param))
                        MovieSearchParams.Add(param);
                    else
                        throw new Exception($"Duplicate movie-search param: {paramStr}");
                else
                    throw new Exception($"Not supported movie-search param: {paramStr}");
        }

        private void ParseMusicSearchParams(IEnumerable<string> paramsList)
        {
            if (paramsList == null)
                return;
            foreach (var paramStr in paramsList)
                if (Enum.TryParse(paramStr, true, out MusicSearchParam param))
                    if (!MusicSearchParams.Contains(param))
                        MusicSearchParams.Add(param);
                    else
                        throw new Exception($"Duplicate music-search param: {paramStr}");
                else
                    throw new Exception($"Not supported music-search param: {paramStr}");
        }

        private void ParseBookSearchParams(IEnumerable<string> paramsList)
        {
            if (paramsList == null)
                return;
            foreach (var paramStr in paramsList)
                if (Enum.TryParse(paramStr, true, out BookSearchParam param))
                    if (!BookSearchParams.Contains(param))
                        BookSearchParams.Add(param);
                    else
                        throw new Exception($"Duplicate book-search param: {paramStr}");
                else
                    throw new Exception($"Not supported book-search param: {paramStr}");
        }

View on GitHub (pinned to adff194147)

Solutions

  1. Remove the duplicate music-search param from the indexer definition.
  2. De-duplicate (Distinct()) dynamically generated param lists before parsing.
  3. Pull an updated indexer definition from the Jackett repository.

Example fix

// before
capabilities.ParseMusicSearchParams(new[] { "artist", "album", "artist" }); // throws
// after
capabilities.ParseMusicSearchParams(new[] { "artist", "album" });
Defensive patterns

Strategy: validation

Validate before calling

var unique = paramsList?.Distinct(StringComparer.OrdinalIgnoreCase);
capabilities.ParseMusicSearchParams(unique);

Type guard

static bool HasDuplicateMusicParams(IEnumerable<string> p) =>
    p.GroupBy(x => x, StringComparer.OrdinalIgnoreCase).Any(g => g.Count() > 1);

Try / catch

try { capabilities.ParseMusicSearchParams(list); }
catch (Exception ex) when (ex.Message.StartsWith("Duplicate music-search"))
{ logger.Error(ex); }

Prevention

When it happens

Trigger: The list passed to ParseMusicSearchParams contains the same MusicSearchParam twice, so MusicSearchParams.Contains(param) returns true on the second pass.

Common situations: Indexer CapsMapping authored with a duplicated music param; capabilities JSON with repeated tokens; merging definitions without de-duplication.

Related errors


AI-assisted analysis of Jackett/Jackett@adff194147 (2026-08-13). Data as JSON: /api/errors/c6e22cbed5469b20. Report an issue: GitHub.