foobar2000:Components/External Tags (foo_external_tags)

From Hydrogenaudio Knowledgebase
Jump to: navigation, search
External Tags

Developer(s) Janne Hyvärinen (Case)
Release information
Initial release June 14, 2018
Stable release 1.5.8 (October 21, 2019)
Preview release
foobar2000 compatibility
Minimum version 1.4 alpha
Maximum version
UI module(s) N/A
Additional information
Use Tagging
License ISC (modified)
Discussion thread N/A

External Tags adds transparent tagging support to non-taggable file formats.

External tags can be stored in an SQLite database or written to files in the same directories as the target audio files. This differs from m-TAGS in that the latter creates playlist-like files that must be loaded in place of the actual audio files, while external tags behave just like regular internal tags.

The component was originally created to allow ReplayGaining tracker modules.[1]


Some audio file types, like MIDI or game ROM rips, lack file-level tagging support. Vanilla foobar2000 fills this gap by storing tags added to such files in an internal database. These tags are kept in sync with their files across foobar2000's file operations and conversions, but cannot be accessed outside foobar2000 and are more prone to being lost than file-stored tags.

External Tags is a pseudo-codec component that claims support for storing tags of any audio file type, and defers actual codec operations to each audio format's preferred codec. It stores tags in either a central SQLite database (similar to foobar2000's own solution), or in individual .tag files corresponding 1:1 to each audio file.

Required configuration[edit]

In Preferences > Playback > Decoding, the "External Tags (reader)" decoder, if visible (i.e. in foobar2000 versions below v1.5 beta 8[2]), must have higher priority than the format to be externally tagged. The "External Tags (writer)" decoder should have lowest priority so that external tags won't take priority over any format's native tags by default.


External Tags can be configured in Preferences > Advanced > Tagging > External Tags.

Note: several relevant but infrequently used context commands in the Tagging submenu are only visible in the extended context menu — when you shift-right-click on files — to avoid menu clutter.

Use the "Create External Tags" command on audio files to open the familiar Properties dialog, and then click OK or Apply to externalize their tags. Any current internal tags will be copied and then left alone. If External Tags is configured to use tag files rather than SQLite, each audio file will now have a corresponding .tag file with the same name: e.g. test.mp3.tag next to test.mp3.

Once a file has external tags, all tag operations are applied to its external tags only.[3] File operations in foobar2000 will transparently be applied to .tag files belonging to affected audio files so that they stay together. The "Edit file tags" command can be used to delete internal tags from files after copying their values to external tags.

Files may be reverted to default internal tag handling with the "Remove External Tags" command, which will delete any relevant .tag files and SQLite entries.


extended Tagging context menu

Manipulation of external tags outside foobar2000 — such as deleting, editing, or restoring .tag files from a backup — will not be reflected in foobar2000 automatically due to its tag cache.[4]

Note: the following paragraph is experimentally determined at the time of writing and subject to future developments and changes.

External Tags keeps an internal inventory of the files it controls the tags of: manually adding a .tag file to an audio file does not configure the file for functional external tagging, and deleting the .tag file of an externally tagged audio file does not revert it to internal tagging. Invoking External Tags commands on files not controlled by External Tags will cause unpredictable behavior: for example, "Edit External Tags" does not bypass internal tags, despite the label.

Context commands[edit]

TODO: explain remaining context menu commands like Wrap[5], Commit, and Find Edited After

Interaction with vanilla foobar2000 context commands[edit]

Note: this section applies only to files actually managed by External Tags.

  • "Reload info from file(s)" will update displayed tags with values currently in SQLite and .tag files. Useful after changes to .tag files outside foobar2000.
  • "Remove tags from file(s)" will reset .tag files to their default empty state but not delete them, and subsequent tag changes will continue to be stored by External Tags.
  • "Rewrite file tags" will not write External Tags back to internal tags, despite the ambiguity with External Tags' "Edit file tags" command. This command is rather intended to flush foobar2000's cached values to tag storage, i.e. the reverse of "Reload info from file(s)", which should never be needed.

.tag file format[edit]

.tag file in a text editor

.tag files are essentially binary dumped APE tags and can be viewed or edited with an advanced text editor if necessary.

See also[edit]


  1. External Tags origin story on hydrogenaudio
  2. Decoder priority on hydrogenaudio
  3. Misc. usage facts on hydrogenaudio
  4. Tag caching on hydrogenaudio
  5. Wrap command on hydrogenaudio

External links[edit]