Container tags are never read, so audio metadata is empty #4

Closed
opened 2026-08-02 14:27:21 +02:00 by Claude · 1 comment
Collaborator

jellyfin-core/src/probe.rs carries no field for a container's tags, so
nothing the scan stores comes from them. Every Audio row has Album,
Artists, AlbumArtists, Genres, ProductionYear and IndexNumber NULL.

ffprobe returns all of it:

{"title":"Seemann","artist":"Rammstein","album":"Seemann",
 "genre":"Electronic;Industrial;Neue Deutsche HäRte","track":"1/3",
 "album_artist":"Rammstein","disc":"1/1","date":"1996-01-01",
 "MusicBrainz Album Id":"...", ...}

Populated audio rows, ours against upstream: Album 0/4 528, Artists
0/4 889, AlbumArtists 0/4 889, Genres 0/4 889, ProductionYear 0/4 364,
IndexNumber 1/4 452.

This is not a probe-settings problem: the container tag count matched on all 70
files in a two-way probe comparison, ffmpeg's cheap defaults included. The tags
are there in the answer and nothing reads them.


Found by scanning /mnt/media (285 movies, 289 shows, 74 music artists —
~13 000 media files on a CIFS mount) with both this server and upstream
Jellyfin at the pinned commit, remote metadata and image fetchers disabled on
upstream so both were reading files only. Upstream was given the same mount
path so MD5(UTF-16LE(path)) agrees and rows compare directly.

`jellyfin-core/src/probe.rs` carries no field for a container's tags, so nothing the scan stores comes from them. Every `Audio` row has `Album`, `Artists`, `AlbumArtists`, `Genres`, `ProductionYear` and `IndexNumber` NULL. ffprobe returns all of it: {"title":"Seemann","artist":"Rammstein","album":"Seemann", "genre":"Electronic;Industrial;Neue Deutsche HäRte","track":"1/3", "album_artist":"Rammstein","disc":"1/1","date":"1996-01-01", "MusicBrainz Album Id":"...", ...} Populated audio rows, ours against upstream: `Album` 0/4 528, `Artists` 0/4 889, `AlbumArtists` 0/4 889, `Genres` 0/4 889, `ProductionYear` 0/4 364, `IndexNumber` 1/4 452. This is not a probe-settings problem: the container tag count matched on all 70 files in a two-way probe comparison, ffmpeg's cheap defaults included. The tags are there in the answer and nothing reads them. --- Found by scanning `/mnt/media` (285 movies, 289 shows, 74 music artists — ~13 000 media files on a CIFS mount) with both this server and upstream Jellyfin at the pinned commit, remote metadata and image fetchers disabled on upstream so both were reading files only. Upstream was given the same mount path so `MD5(UTF-16LE(path))` agrees and rows compare directly.
Author
Collaborator

Fixed in 367fd13, 0de96d4 and ab1708f, merged as 823c4b2.

The issue text was wrong about the mechanism: MediaInfo already carried the
fields and the prober already parsed them. The two real breaks were that the
scan never set is_audio on its ProbeRequest — which is what gates
tags::set_audio_info — and that media_of carried only size, runtime and
dimensions from a probe to a row.

A track now writes its album, artists, album artists, genres, year and track
number, and takes its name from the title tag as upstream does. A video keeps
what its own name said and takes only what the name left open, which is
FFProbeVideoInfo.FetchEmbeddedInfo.

A track's tag columns are now diffed against the snapshot upstream wrote, so
getting the artist columns wrong fails the suite.

What an album and an artist summarise from their tracks is still missing — #24.

Fixed in `367fd13`, `0de96d4` and `ab1708f`, merged as `823c4b2`. The issue text was wrong about the mechanism: `MediaInfo` already carried the fields and the prober already parsed them. The two real breaks were that the scan never set `is_audio` on its `ProbeRequest` — which is what gates `tags::set_audio_info` — and that `media_of` carried only size, runtime and dimensions from a probe to a row. A track now writes its album, artists, album artists, genres, year and track number, and takes its name from the `title` tag as upstream does. A video keeps what its own name said and takes only what the name left open, which is `FFProbeVideoInfo.FetchEmbeddedInfo`. A track's tag columns are now diffed against the snapshot upstream wrote, so getting the artist columns wrong fails the suite. What an album and an artist summarise from their tracks is still missing — #24.
Sign in to join this conversation.
No description provided.