Skip to content

docs: cover every folder and filename form Silo reads, Mixed classification, and Ambiguous Roots #41

Description

@Quick104

Prepare media folders and filenames covers the common layouts but leaves out many forms Silo reads. It also doesn't cover how Silo links episode files that have no season, which extras folders and suffixes it recognizes, what it skips, or when a file needs a manual match. Add and manage libraries doesn't explain how a Mixed library decides between movie and series. It also leaves out the Ambiguous Roots panel, where an administrator corrects that decision. Administrators who bring an existing collection to Silo run into these gaps first. The server repository is removing its copy of this material in Silo-Server/silo-server#1635.

The old server page is linked for reference. Parts of it were stale, so check each claim against current silo-server code before publishing. The parser lives in internal/naming, the skip lists and extras folders in internal/scanner/scanner.go, and episode linking in internal/metadata/unseasoned_episode.go.

What to change

src/content/docs/docs/running-a-server/media-folders.md

  • Season folders. Extend the "Season folder names" row:
    • Add Season.01 beside Season 01, Season_01, and S01.
    • Localized labels: Staffel, Stagione, Sæson, Säsong, Temporada, Seizoen, Kausi, Sezon, Sezona, Sezóna, Sezonul, 시즌, シーズン, сезон, and Series (as in Series 2). The number can also come first, as in 3.Staffel.
    • Text after the number is fine: Season 01 - Arc Name.
    • Specials or Special holds season 0.
    • Season packs such as Show.Name.S01.COMPLETE work as the show folder itself or inside a matching show folder.
    • Fix: the table lists 01 without a condition. A bare number is a season folder only in a Series library, or when the file name also has a season-and-episode token. In a Mixed library, Show Name/01/E03.mkv is classified as a movie.
  • Episodes directly in the show folder work when the name has a token such as S01E03, for example Show Name/Show Name S01E03.mkv.
  • More episode forms for the "Also supported" table:
    • Show Name S 01 E 03.mkv
    • Show Name - S01E01.001 - Pilot [Bluray-1080p][x265].mkv, read as S01E01
    • Season 02/003.Episode.Title.mkv
    • Specials/E01.mkv
    • 2009x03-E15 in the "Several episodes in one file" row
  • Episode numbers without a season. Expand the "Numbers without season context" paragraph:
    • In a Series library, Show Name/E03.mkv, Show Name/03.mkv, and [Group] Show Name - 136 [720p].mkv are read as episodes with no season.
    • Such a file links when its number matches exactly one episode in the series and that episode is in season 1, where absolute and per-season numbering agree. If the file name also carries an episode title, the title must match that episode.
    • A distinctive episode title that matches exactly one episode links the file to that episode in any season, so absolute numbering works when titles are present.
    • Otherwise the file stays unlinked. It never becomes a Special.
  • Compact codes and absolute numbers:
    • A three-digit number that is the whole name, or is joined by dots or underscores, is a compact code. Show.Name.103.mkv is season 1 episode 3, and Show Name/301.mkv is season 3 episode 1.
    • A number set off by spaces or dashes is an episode number with no season: Show Name 103.mkv is episode 103.
    • A season folder wins over a compact code that disagrees with it. Season 21/301.mkv is season 21 episode 301, and Season 2/105 - Pilot.mkv is season 2 episode 105. When the two agree, Season 3/301.mkv is season 3 episode 1.
    • A season in the file name wins over the folder: Season 02/Show Name S01E05.mkv is season 1 episode 5.
    • Episode numbers can have up to five digits. Longer digit runs are ignored, not truncated.
    • Numbers in trailer and extras folders never become episode numbers.
  • Air dates. Names such as Show Name - 2026-04-24 - Episode Title.mkv and Show.Name.2026.04.24.mkv work in a Series library. A file links only when the series metadata has one episode on that date. When several match, Silo narrows them by the series' TVDB, then TMDB, then IMDb ID. In a Mixed library, a date alone doesn't make a file an episode; it's classified as a movie.
  • Which show a file belongs to:
    • Several shows can share one library folder when each file name carries its show: Show.One.S01E01.mkv, Show.Two.S01E01.mkv, Show.Name.2026.04.24.mkv.
    • A show folder's name wins over the file name: Show Name/Pilot - S01E01.mkv belongs to Show Name.
    • If a folder holds several shows without per-show folders, add that folder as its own library folder. Silo then treats it as a container instead of a show.
  • Files that need a manual match:
    • absolute or DVD order that disagrees with the provider's order and has no matching episode title;
    • disc tracks such as title00.mkv, because track order isn't episode order;
    • episode files that don't name their show, in a folder that doesn't name it either;
    • conflicting provider IDs, or folder and file names that disagree.
  • Movies:
    • Release names without a year: Movie.Name.1080p.BluRay.x264-GROUP.mkv.
    • A year in square brackets: Movie Name [2024] 720p 6ch.mkv.
    • Generic file names inside an identified movie folder: Movie Name (2024)/title00.mkv, Movie.Name.2024.1080p.BluRay/title_t00.mkv, Movie Name {imdb-tt1234567} {tmdb-12345}/Movie.Name (2023) [Remux-1080p].mkv. A bracketed year, a provider tag, or a release name with a year and release details identifies the folder. A title00.mkv in an unidentified folder needs an NFO or Match Item.
    • Title brackets such as [REC] and dotted acronyms stay in the search title.
  • Provider IDs. Say that tags work in file names as well as folder names, and add the other accepted forms:
    • round brackets: (tmdb-12345);
    • tmdb, tvdb, or imdb, with or without id, followed by - or =: {tmdb=12345};
    • a bare IMDb ID in brackets: [tt1234567], {tt1234567}, (tt1234567);
    • a folder name ending in a bare IMDb ID: Movie Name tt1234567.
    • A bare number is never read as an ID.
  • Extras. Expand "Sidecars and extras":
    • Folder names, case-insensitive, with ., _, or - counting as spaces: Trailers/Trailer, Teasers/Teaser, Featurettes/Featurette, Behind the Scenes, Deleted Scenes/Deleted Scene, Clips/Clip, Bloopers, Shorts, Interviews, Scenes, Extras/Extra, Other.
    • The same folders work directly inside a show folder, for extras that belong to the series.
    • Suffixes for extras kept beside the movie file, such as Movie (2020)-trailer.mkv: -trailer, -teaser, -featurette, -clip, -behindthescenes, -bloopers, -deleted, -deletedscene, -interview, -scene, -short, -extra, -other. A . works in place of the -.
    • Extras appear in the title's Extras section and are never offered as versions.
    • In a series Extras folder, a file named S00E01 is a special and S01E01 belongs to season 1.
  • Skipped content. Add a section:
    • Sample and Samples folders, and Sample.mkv-style files.
    • Subs and Subtitles folders; subtitle detection reads these separately.
    • System folders: @eaDir, @Recycle, #recycle, .recyclebin, $RECYCLE.BIN, .trash, .deleted, .inbound, .downloads.
  • Ignore files. Add a section based on docs/architecture/scanner-ignore-files.md:
    • A .nomedia file skips its folder and everything below it.
    • .ignore follows Jellyfin's rules. An empty file, or one with no valid pattern, skips the folder. Otherwise each line is a gitignore pattern.
    • .siloignore works like Plex's .plexignore: one glob per line, relative to the file's folder. * doesn't cross /, so use a path such as Season 2/*.mkv for subfolders.
    • Adding an ignore file to a folder that was already scanned removes its titles from the library at the next scan.

src/content/docs/docs/running-a-server/libraries.md

  • How a Mixed library classifies each file. Replace the one-line description with the order Silo applies:
    1. A season folder (Season 01, Specials, or a numeric folder when the file name has an episode token) makes it an episode.
    2. A parent folder that looks like a movie folder, because it has a provider tag or is named Title (Year) and matches the file, makes it a movie.
    3. A season-and-episode token such as S01E02 or 1x02 makes it an episode.
    4. Anything else is a movie.
  • State the consequence: in a Mixed library, Show Name (2024) {tvdb-12345}/Show Name S01E03.mkv with no season folder is classified as a movie. Tell readers to put every episode in a Mixed library inside a Season NN or Specials folder.
  • Ambiguous Roots. Add a section:
    • Admin > Libraries has an Ambiguous Roots section. It lists, per library, the folders Silo keeps out of unattended matching, with Type, Confidence, and Files columns and a filter by path, title, or sample file.
    • A folder lands there when its files point to both movie and series, when it has no provider tag and no usable title, when a single file contradicts its folder, or when the folder and file names give different titles and no provider tag settles it (On Fire (2024)/Soul on Fire (2025) [WEBDL-1080p].mkv). Adding a provider tag to the folder resolves the last case.
    • Override sets Type (Auto, Movie, or Series), Title, Year, TMDB ID, IMDb ID, TVDB ID, and a Note. Saving doesn't scan; the override applies at the next library scan, and later scans keep it.
    • Resolve appears when the folder already has a matched item and opens that item. A folder whose files belong to several items can't be overridden; use the item's Split Versions instead.

Don't carry over

  • The old page's list of localized season labels is incomplete. Use the list above.
  • Its extras suffix list leaves out -bloopers, -deletedscene, -scene, and -extra, and its extras folder list leaves out Bloopers and the singular forms.
  • The "What The Dev Anime Library Validated" audit counts and the source-file references are server-side history, not user guidance.

AI disclosure: drafted with Claude Code (claude-opus-5-5[1m]) from an audit of the server repository's docs against the manual and current server code.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentation

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions