MCPcopy Create free account
hub / github.com/Martchus/tageditor

github.com/Martchus/tageditor @v3.9.10

Chat with this repo
repository ↗ · DeepWiki ↗ · release v3.9.10 ↗ · + Follow
946 symbols 1,897 edges 105 files 202 documented · 21% updated 18d agov3.9.10 · 2026-05-14★ 87313 open issues

Browse by type

Functions 776 Types & classes 170
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Tag Editor

A tag editor with a Qt GUI and a command-line interface. It supports MP4 (iTunes), ID3, Vorbis, Opus, FLAC, and Matroska.

Supported formats

The tag editor can read and write the following tag formats:

  • iTunes-style MP4/M4A tags (MP4-DASH is supported)
  • ID3v1 and ID3v2 tags
    • Conversion between ID3v1 and different versions of ID3v2 is possible.
    • These tags are mainly for use in MP3 files, but can be added to any kind of file.
  • Vorbis, Opus and FLAC comments in Ogg streams
    • Cover art via "METADATA_BLOCK_PICTURE" is supported.
  • Vorbis comments and "METADATA_BLOCK_PICTURE" in raw FLAC streams
  • Matroska/WebM tags and attachments

Further remarks:

  • Unsupported file contents (such as unsupported tag formats) are generally preserved as is.
  • Note that APE tags are not supported. APE tags at the beginning of a file are strongly unrecommended and are thus discarded when applying changes. APE tags at the end of the file are preserved as is when applying changes.

Additional features

The tag editor can also display technical information such as the ID, format, language, bitrate, duration, size, timestamps, sampling frequency, FPS and other information of the tracks.

It also allows one to inspect and validate the element structure of MP4 and Matroska files.

Backup/temporary files

Sometimes the tag editor has to rewrite the entire file to apply changes. This leads to the creation of a temporary file. With the GUI's default settings, this is even enforced to be conservative as the temporary files also serve as a backup in case something goes wrong (e.g., your computer crashes while saving, or a bug within the tag editor breaks particularly structured files). When using the CLI, it is therefore also recommended to use --force-rewrite.

The next section describes how to tweak settings to avoid rewriting at the cost of having no backup, having some padding within the files and/or storing tags at the end of the file.

Nevertheless, it will not always be possible to avoid rewriting a file in all cases. You can configure a directory for temporary files within the GUI settings or with the CLI option --temp-dir. Then you can easily clean up all temporary files at once. For efficiency, the temporary directory should be on the same file system as the files you are editing. A feature to delete temporary files automatically has not yet been implemented.

File layout options

Tag position

The editor allows you to choose whether tags should be placed at the beginning or at the end of an MP4/Matroska file. Placing tags at the end of the file can avoid having to rewrite the entire file to apply changes.

In the CLI, this is controlled via the --tag-pos option. To enforce a specific --tag-pos, even if this requires the file to be rewritten, combine it with the --force option.

ID3v2 tags and Vorbis/Opus comments can only be placed at the beginning. ID3v1 tags can only be placed at the end of the file. Hence, this configuration has no effect when dealing with such tags.

Index position

It is also possible to control the position of the index/cues. However, this is currently only supported when dealing with Matroska files.

Note: This can not be implemented for MP4 since tags and index are tied to each other. When dealing with MP4 files, the index position will always be the same as the tag position.

Faststart

Putting the index at the beginning of the file is sometimes called faststart.

For forcing faststart via the CLI, the following options are required:

tageditor set --index-pos front --force

Padding

Padding allows for adding additional tag information without rewriting the entire file or appending the tag. The usage of padding can be configured: - minimum/maximum padding: The file is rewritten if the padding would fall below or exceed the specified limits. - preferred padding: If the file is rewritten, the preferred padding is used.

It is also possible to force rewriting the entire file to ensure the preferred padding is used.

The relevant CLI options are --min-padding, --max-padding, --preferred-padding and --force-rewrite.

Taking advantage of padding is currently not supported when dealing with Ogg streams (it is supported when dealing with raw FLAC streams).

Avoid rewriting files

As explained in the "Backup/temporary files" section, this is not a good idea, as the temporary file that is created when rewriting the entire file also serves as a backup. However, if you nevertheless want to avoid rewriting the file as much as possible, set the following in the GUI's "File layout" settings:

  • "Force rewrite…" option: unchecked
  • "Use preferred position…" options: unchecked
  • Minimum padding: 0
  • Maximum padding: 429496729 (simply a very high number)

When using the CLI, you just need to add --max-padding 429496729 to the CLI arguments (and avoid any of the other arguments mentioned in the previous sections).

Improve performance

Editing large files (especially Matroska files) can take some time. To improve performance, put the index at the end of the file (CLI option --index-pos back) because then the size of the index will never have to be recalculated. Also, follow the advice from the "Backup/temporary files" section to force rewriting and to put the temporary directory on the same filesystem as the file you are editing. Forcing a rewrite can improve performance because then the tag editor will not even try to see whether it could be avoided and can thus skip computations that can take a notable amount of time for large Matroska files.

Of course, being able to avoid a rewrite would still be more optimal. Check out the previous section for how to achieve this. To improve performance further when avoiding a rewrite, put the tag at the end (CLI option --tag-pos back). Then the tag editor will not even try to put tags at the front and can thus skip a few computations. (Avoiding a rewrite is still not a good idea in general.)

Matroska-related remarks

The Matroska container format (and WebM, which is based on Matroska) deviates from common conventions. As a result, not all CLI examples provided below are applicable to these file types.

In general, a single Matroska file can contain multiple tags, each with a target that determines what the tag's fields apply to, such as an individual song or the entire album. When using the CLI or GUI, it is important to be mindful of which tag/target you are adding fields to.

Matroska also does not use one combined field for the track/disk number and total as other formats do. It instead uses the separate fields part and totalparts, which again need to be added to a tag of the desired target (e.g., 50/"ALBUM" for the track number and total).

Check out the official Matroska documentation on tagging for details. It also contains examples for audio content and video content.

Note that Tag Editor does not support the XML format mentioned in the Matroska documentation. In the GUI, you can simply add/remove/edit tags and their targets via the controls at the top of the editor. In the settings, you can also specify that tags of certain targets should be added automatically when loading a file. When using the CLI, you can specify that a field should be added to a tag of a certain target by specifying the target before that field. You can also explicitly remove tags of certain targets. Examples of the concrete CLI usage can be found below.

Download

Source

See the release section on GitHub.

Packages and binaries

  • Arch Linux
  • Tumbleweed, Leap, Fedora
    • RPM *.spec files and binaries are available via the openSUSE Build Service.
  • Exherbo
  • Gentoo
  • Void Linux
  • Other GNU/Linux systems
    • For generic, self-contained binaries, check out the release section on GitHub.
      • Requires glibc>=2.26, OpenGL, and libX11.
        • openSUSE Leap 15, Fedora 27, Debian 10, and Ubuntu 18.04 are recent enough (be sure the packages libglx0, libopengl0, and libegl1 are installed on Debian/Ubuntu).
      • Supports X11 and Wayland (set the environment variable QT_QPA_PLATFORM=xcb to disable native Wayland support if it does not work on your system).
      • Binaries are signed with the GPG key B9E36A7275FC61B464B67907E06FE8F53CDC6A4C.
  • Windows
    • For binaries, check out the release section on GitHub.
      • Windows SmartScreen will likely block the execution (you'll get a window saying "Windows protected your PC"); right-click on the executable, select properties, and tick the checkbox to allow the execution.
      • Antivirus software often wrongly considers the executable harmful. This is a known problem. Please don't create issues about it.
      • The Qt 6-based version is stable and preferable but only supports Windows 10 version 1809 and newer.
      • The Qt 5-based version should still work on older versions down to Windows 7, although this is not regularly checked.
      • The Universal CRT needs to be installed.
      • Binaries are signed with the GPG key B9E36A7275FC61B464B67907E06FE8F53CDC6A4C.
    • There is also a Chocolatey package maintained by bcurran3.
    • For mingw-w64 PKGBUILDs, check out my GitHub repository.

Usage

The Tag Editor has a Qt-based GUI and a command-line interface. For a C++ library interface, check out the underlying tagparser library.

GUI

The GUI should be self-explanatory; a lot of the UI elements have tooltips with further explanations. The basic workflow is quite simple:

  1. Open a file
  2. Edit the tags
  3. Save changes

You can set the behavior of the editor to keep previous values, so you don't have to enter information like the album name or artist for all files in an album again and again.

Limitations

The GUI does not support setting multiple values of the same field (besides covers of different types). If a file already contains fields with multiple values, the additional values are discarded. Use the CLI if support for multiple values per field is required. Not all tag formats support this anyway, though.

The GUI does not support batch processing. I recommend using the CLI for this.

Screenshots

Main window under Openbox/qt5ct with Breeze theme/icons

main window/Openbox/qt5ct/Breeze theme

Main window under Plasma 5 with dark Breeze theme/icons

This screenshot shows the experimental MusicBrainz/LyricWiki search.

main window/Plasma 5/dark Breeze theme

Settings

Check out the settings dialog. You can: - Customize which fields the editor shows and in which order. - Change settings regarding the tag processing (ID3 version(s) to be used, preferred character set, usage of padding, etc.). - Set whether unknown/unsupported tags should be ignored/kept or removed. - Set whether ID3v1 and ID3v2 tags should be edited together or separately. - Set the directory used to store temporary files. - Set the desired file layout options (see section "File layout options"). - Enable auto-correction features like trimming whitespaces.

Settings of the GUI do not affect the CLI.

File renaming

There is also a tool to rename files using the tag information stored in them. The new name for each file is generated by a small JavaScript that can be customized. An example script is provided. Before any actual changes are made, you will see a preview with the gener

Core symbols most depended-on inside this repo

Shape

Method 650
Class 143
Function 126
Enum 27

Languages

C++96%
TypeScript4%

Modules by API surface

cli/scriptapi.cpp55 symbols
gui/tageditorwidget.cpp45 symbols
cli/helper.cpp37 symbols
cli/helper.h35 symbols
gui/tagfieldedit.cpp33 symbols
gui/dbquerywidget.cpp33 symbols
misc/htmlinfo.cpp31 symbols
gui/picturepreviewselection.cpp31 symbols
gui/settingsdialog.cpp29 symbols
gui/mainwindow.cpp29 symbols
tests/cli.cpp26 symbols
dbquery/dbquery.cpp25 symbols

For agents

$ claude mcp add tageditor \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page