Skip to content

These docs are for MetaTana 2.0, coming soon

On this page

NFO Format

NFO files are XML sidecars that travel next to your media. They make metadata portable: MetaTana reads them on scan, writes them after edits, and downstream tools (Plex, Jellyfin, Kodi, Emby) read them on their own scans. This page is the field-level reference.

When MetaTana reads vs writes Reads on every scan (NFO can pin identity before providers weigh in). Writes only on explicit triggers: a scrape with its NFO option on, Write NFO on a title or a Library selection, or Rewrite files for N under Needs attention › NFO out of date. A plain metadata save touches the DB only.

Sample: movie NFO

Big Buck Bunny (2008)/Big Buck Bunny (2008).nfo:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<movie>
  <title>Big Buck Bunny</title>
  <originaltitle>Big Buck Bunny</originaltitle>
  <year>2008</year>
  <plot>A short open-source animated film from the Blender Foundation.</plot>
  <runtime>10</runtime>
  <mpaa>PG</mpaa>
  <genre>Animation</genre>
  <genre>Short</genre>
  <studio>Blender Foundation</studio>
  <country>NL</country>
  <premiered>2008-05-10</premiered>
  <uniqueid type="tmdb" default="true">10378</uniqueid>
  <uniqueid type="imdb">tt1254207</uniqueid>
  <rating name="tmdb" max="10" default="true">
    <value>7.0</value>
    <votes>1234</votes>
  </rating>
  <art>
    <poster>poster.jpg</poster>
    <fanart>fanart.jpg</fanart>
    <clearart>clearart.png</clearart>
    <clearlogo>logo.png</clearlogo>
  </art>
  <actor>
    <name>(public-domain demo content)</name>
    <role>Self</role>
    <order>1</order>
  </actor>
  <playcount>2</playcount>
  <lastplayed>2026-04-15 21:30:00</lastplayed>
  <dateadded>2026-04-01 10:00:00</dateadded>
</movie>

Sample: TV show + episode NFOs

Caminandes/tvshow.nfo:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<tvshow>
  <title>Caminandes</title>
  <originaltitle>Caminandes</originaltitle>
  <plot>A short demo show used in docs screenshots.</plot>
  <genre>Animation</genre>
  <mpaa>NR</mpaa>
  <studio>Blender Foundation</studio>
  <premiered>2013-01-01</premiered>
  <status>Ended</status>
  <uniqueid type="tvdb" default="true">300000</uniqueid>
  <art>
    <poster>poster.jpg</poster>
    <fanart>fanart.jpg</fanart>
    <banner>banner.jpg</banner>
  </art>
</tvshow>

Caminandes/Season 01/Caminandes S01E01.nfo:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<episodedetails>
  <title>Llama Drama</title>
  <showtitle>Caminandes</showtitle>
  <season>1</season>
  <episode>1</episode>
  <aired>2013-01-02</aired>
  <plot>Demo episode metadata.</plot>
  <runtime>3</runtime>
  <uniqueid type="tvdb" default="true">300001</uniqueid>
  <thumb>Caminandes S01E01-thumb.jpg</thumb>
</episodedetails>

Field reference

MetaTana reads and writes these fields. The "Read" column says whether MetaTana pulls the value out of an NFO during scan. The "Write" column says whether MetaTana emits the value when writing a sidecar.

Movie + show common fields

Field Read Write Notes
title ✓ ✓ Display title in current locale
originaltitle ✓ ✓ Title in original language
year (movie) / premiered (show) ✓ ✓ Release year / first-air date
plot ✓ ✓ Long-form summary
outline ✓ ✓ Short summary (fallback to plot if empty)
runtime ✓ ✓ Minutes
mpaa ✓ ✓ Certification (PG, R, TV-14, etc.)
genre (multi) ✓ ✓ Genres
studio (multi) ✓ ✓ Studios / production companies
country (multi) ✓ ✓ Country codes
uniqueid (multi) ✓ ✓ Provider IDs with type (tmdb / imdb / tvdb / mal / anilist) and optional default
rating ✓ ✓ Provider rating with name, max, value, votes
art > poster/fanart/banner/clearart/clearlogo ✓ ✓ Relative paths to artwork files
actor (multi) ✓ ✓ Cast with name, role, order, thumb

Movie-only

Field Read Write Notes
set ✓ ✓ Collection / set membership. Written as so Jellyfin reads the collection's TMDb ID; Kodi ignores the attribute
tagline ✓ ✓ One-line tagline
director (multi) ✓ ✓ Director names
writer (multi) ✓ ✓ Writer names

Show-only

Field Read Write Notes
status ✓ ✓ Continuing / Ended / Cancelled / On Hiatus
season — — Per-season details live in season.nfo or as art overrides. Season 0's season.nfo is titled "Specials" in every format
episodeguide ✓ ✓ Read on import and kept when MetaTana rewrites tvshow.nfo; MetaTana does not create one where none existed

Episode-only

Field Read Write Notes
showtitle ✓ ✓ Parent show title
season ✓ ✓ Season number under the active episode-order policy
episode ✓ ✓ Episode number under the active policy
displayseason / displayepisode ✓ ✓ Override numbers for clients that follow display vs storage order. Written only to place a season 0 special before a season and episode, never as a DVD or absolute numbering
aired ✓ ✓ Air date
thumb ✓ ✓ Episode-specific thumbnail filename

Playback / progress

Field Read Write Notes
playcount ✓ ✓ Watch count
lastplayed ✓ ✓ Timestamp
resume (position / total) ✓ ✓ Partial-watched position
dateadded ✓ ✓ When MetaTana first indexed the file
Playback fields don't reach Plex via NFO Plex ignores Kodi-style playcount, lastplayed, and resume by default. For Plex watched-state propagation, use MetaTana Sync to push directly to the Plex API. See Troubleshooting: playback client can't see files.

Overwrite behavior

There is no overwrite switch. An explicit NFO write replaces the fields MetaTana manages, keeps unknown or hand-added XML, and skips the write when the output would be byte-identical. To write a clean file from current metadata only, use the Clean NFO policy in Library's bulk sidecar actions.

NFO file settings

Flavour in Settings › Files › NFO files chooses the format: Kodi (default), Emby, Jellyfin, Plex, or MediaPortal. Its More options are Lock data (Emby only), Include stream details, Write a short outline, Write artwork URLs, and Single studio. A folder can use its own format instead (Edit folder on the Folders page).

Sidecar file names follow the media file:

Item Sidecar
Movie .nfo (movie.nfo at the root of a Blu-ray or DVD folder)
Multi-part movie (cd1, cd2) movie.nfo; with the Kodi format also .nfo for the parts' shared name
Show tvshow.nfo
Episode .nfo

Kodi, Jellyfin, and Emby all read this layout. Plex needs a local-NFO agent or plugin to read NFO files.

Kodi reads movie.nfo only when the library folder is set to one movie per folder. Otherwise it reads a multi-part movie's NFO by the parts' shared name, so for Dune.1984.cd1.avi and Dune.1984.cd2.avi the Kodi format also writes Dune.1984.nfo. When the parts share a folder with other movies, only Dune.1984.nfo is written. Rename gives it the new name with the parts, and Delete moves it to the trash with them.

Which files get an NFO:

  • Scrape on a show writes tvshow.nfo in the show folder, next to the episode NFOs.
  • Write NFO on a show's episodes also writes the show's tvshow.nfo when the show folder has none. It never replaces a tvshow.nfo that is already there, and writes none in a folder that holds episodes of other shows or at the top of a library folder.
  • An episode NFO carries the episode's own IDs in , never the show's IDs.
  • An episode with no season or episode number (an absolute-numbered anime file that is not mapped yet, for example) gets no NFO until it is mapped to a season and episode.
  • Samples, trailers, and extras get no NFO.
  • Save in the metadata editor marks the title's NFO as out of date, and it appears under Library › Needs attention › NFO out of date. In a folder where Write NFO files is Always, Save also rewrites the NFO MetaTana wrote.

Per-format details:

  • Emby and Jellyfin: after , the NFO also has a flat (the default rating, 0 to 10) and (Rotten Tomatoes, 0 to 100). Without them, Jellyfin could show the last row, often a 0 to 100 score, as the community rating.
  • Kodi, Emby, and Jellyfin: in stream details is a decimal such as 1.777778, taken from MediaInfo's display aspect ratio when there is one.
  • Season art names depend on the format. See Reference: file layout.
  • Plex gets its own poster, episode image, and subtitle names (poster.jpg and fanart.jpg in show and movie folders, .jpg, Movie.en.sdh.srt), and Kodi-style formats get discart.png, landscape.jpg, and extrafanart/fanart1.jpg. See Reference: file layout.

Differences from upstream Kodi NFO

MetaTana follows the Kodi NFO spec where possible. Notable extensions and constraints:

  • uniqueid with type="mal" for MyAnimeList is MetaTana-specific; Kodi clients ignore it gracefully
  • lockedfields is not currently emitted (lock state is DB-only); future versions may add it
  • art paths are written as relative names (poster.jpg), not absolute paths, so the layout survives a folder move

Going deeper