KID3(1) Kid3 KID3(1) (NAME) kid3, kid3-qt, kid3-cli - ID3 (SYNOPSIS) kid3 [ | --help | --author | --version | --license | --desktopfile FILE ] [FILE...] kid3-qt [--portable] [Qt-options] [FILE...] kid3-cli [--portable] [--dbus] [ | -h | --help ] [-c COMMAND1] [-c COMMAND2...] [FILE...] (OPTIONS) --portable kid3.ini . FILE FILE . . kid3 --help . --author . --version . --license . --desktopfile FILE (desktop entry) . kid3-qt Qt-options : qt5options(7). --dbus D-Bus. -c . -c . kid3-cli . -h|--help . (INTRODUCTION) Kid3 ID3v1 ID3v2 MP3 . MP3 . Ogg/Vorbis Opus DSF FLAC MPC APE MP4/AAC MP2 Speex TrueAudio WavPack WMA WAV AIFF (MOD S3M IT XM) . Kid3 MP3 (rip/grab) ID3 . ID3v1 ID3v2 Kid3 ID3v2 . (genre) . . . . . gnudb.org[1] MusicBrainz[2] Discogs[3] Amazon[4] . (regular expressions) . . KID3 (USING KID3) Kid3 (Kid3 features) o ID3v1.1 o ID3v2.3 ID3v2.4 o o ID3v1 ID3v2 o MP3 Ogg/Vorbis Opus DSF FLAC MPC APE MP4/AAC MP2 Speex TrueAudio WavPack WMA WAV AIFF o o o o o o o gnudb.org[1] MusicBrainz[2] Discogs[3] Amazon[4] o CSV HTML Kover XML . CSV . (Example Usage) Kid3 . MP3 <> <> . <> One Hit Wonder - Let's Tag . <> ( MP3 ) ( MP3 CD mkisofs ). . : 01 Intro.mp3 02 We Only Got This One.mp3 03 Outro.mp3 Kid3 . File -> Open ( ) . . . To: Tag 1 File . . <<2002>> Date <> (combobox) Genre . (checkboxes) . . . File -> Save ( ) . File -> Create Playlist ( ) One Hit Wonder - Let's Tag.m3u . (COMMAND REFERENCE) (The GUI Elements) (GUI) Kid3 : File Tag 1 Tag 2 Tag 3 . . . o Alt+Left: (Command+[ macOS(R)) o Alt+Right: (Command+] macOS(R)) o Ctrl+Shift+V: o Ctrl+C: o Ctrl+V: o Shift+Delete: o F2: o Insert: o Delete: (File List) ( *.mp3 *.ogg *.opus *.dsf *.flac *.mpc *.aac *.m4a *.m4b *.m4p *.mp4 *.mp2 *.spx *.tta *.wv *.wma *.wav *.aiff *.ape) . . . . Name Size Type Date Modified . (context menu) . (drag and drop) . . . : (V1 V2 V1V2 NO TAG ). . . ..PP : o Expand all: ( Shift ) o Collapse all: o Rename: o Move to Trash: o Play: Play . . o Edit: Edit Playlist . o User Actions Configure Kid3 . . Select file on play . Edit Playlist Create Playlist . Edit . . . . . Shift Ctrl Alt ( macOS(R)) . . Ctrl+Shift+Up Ctrl+Shift+Down ( macOS(R) Command Ctrl ). Delete . : ( ) . Save Cancel . . . . Edit Play . Export Playlist Folder . Folder List (.) (..) . Open . file list . File (MP3 Ogg Opus DSF FLAC MPC APE MP2 MP4 AAC Speex TrueAudio WavPack WMA WAV AIFF) . Name ( ). Save . (combo box) Format . () . : o %s %{title} () o %a %{artist} o %l %{album} o %c %{comment} o %y %{year} o %t %{track} ( 01) o %t %{track.n} n ( 001 %{track.3}) o %T %{tracknumber} ( 1) o %g %{genre} o %{ignore} . %{albumartist} %{discnumber.1} %{bpm} %{popm}. . . %{title} [%{subtitle}] . [] . %{title}%{" ["subtitle"]"} . . Filename from tag File . Format ( ) . . (line edit) . Tag from filename File . (regular expression) . (captures) "/%{track}(\d+) %{title}(.*)" . From: Tag 1 Tag 2: . To: Tag 1 Tag 2: . Format . : o Artist - Album/Track Song o Album/Track - Artist - Song o /Artist - Album - Track - Song o Album/Artist - Track - Song o Album/Artist - Song o Artist/Album/Track Song GUI . . (Tag 1) (line edit) Title Artist Album Comment Date Track Number Genre . Save Quit (check box) . . . Title Artist Album Comment Date Track Number 0 (combo box) Genre . . Save . . . . . Save . ( ) . . From Tag 2: tag 1 tag 2 . GUI tag 2 . . Copy: Tag 1 . Paste . Paste: GUI . Remove: GUI . tag 1 . (Tag 2) GUI Tag 1 . Genre tag 2 (combo box) . tag 2 tag 1 (frame) . tag 2 . Edit: . . Add: . . Delete: . Drag album artwork here ( ) . (drag and drop) . . (Tag 3) . Tag 3 : o MP3 ID3v1.1 ID3v2 ( 2.3.0 2.4.0) APE . APE replay gain . Tag 3 APE Remove . o (chunk) RIFF INFO WAV Tag 3 Tag 1 ID3v1.1 . Tag 2 ID3v2.4.0 WAV RIFF INFO . o FLAC Vorbis comment . FLAC ID3v1 ID3v2 Tag 1 Tag 3 . ID3 FLAC TagLib OggFlacMetadata Plugins settings () . GUI Tag 2 . (Synchronized Lyrics and Event Timing Codes) . ID3v2.3.0 ID3v2.4.0 . Add - Synchronized Lyrics Event Timing Codes. . ..PP ID3v2 Add Synchronized Lyrics . Synchronized Lyrics Edit . . SYLT . Latin 1 UTF16 ( UTF8 ID3v2.4.0) . ISO-8859-1 . Lyrics . Add . . . : . . ( ) . 00:00.00 . Delete Clear . Insert row From Clipboard Import . Delete Delete rows . Import . LRC . . . Add . From Clipboard . Export LRC . . SYLT . ID3 specification[5] . . Kid3 SYLT Editor[6] . . ('_') ('#') . SYLT . SYLT (line feed 0A) . SYLT Kid3 . . . Add offset . . Seek to position . o Lyrics -> Embed Lyrics . o Lyrics Ctrl+C . o (Add... Synchronized Lyrics OK) From Clipboard . o (0:0:0.00). . o . o Add Alt+A . o . Delete Clear . Seek to position . MP4 MP4 .m4b . Kid3 "Chapters" Synchronized Lyrics . MP4 : "Nero" "QuickTime (QT)". MP3 "Chapter" (CHAP) "Table of Contents" (CTOC) . "Chapters" ID3v2 . : Description Text Time . Time Text . File -> Open... ( Ctrl+O ) . . File -> Open Recent . File -> Open Folder... ( Ctrl+D ) . . File -> Reload ( F5 ) . . . File -> Save ( Ctrl+S ) . . . File -> Revert . . File -> Import... Import freedb.org MusicBrainz Discogs Amazon . freedb.org From Server: gnudb.org . Find www.gnudb.org[7] . . freedb.org CGI . . OK . (URL) . Kid3 . gnudb.org[8] Token . Discogs Discogs . gnudb.org . Token RESTful Discogs API . Discogs[9] (Settings/Developers Generate new token). Save Settings . Standard Tags . Additional Tags . Cover Art . Amazon Amazon . gnudb.org . Additional Tags . Cover Art . MusicBrainz From MusicBrainz Release . From gnudb.org . MusicBrainz From MusicBrainz Fingerprint . freedb . . MusicBrainz <> . (fingerprint) . MusicBrainz ( ) . <> . OK Apply Cancel . MusicBrainz . From File/Clipboard . <> <> Export . CSV (tab) . <> <> . (double quote) . Kid3 <> . <> <> CSV . <> HTML freedb.org[10] . freedb . From Clipboard . OK . (Tag 1 Tag 2 Tag 1 and Tag 2) (combo box) . . . <> HTML . From File . () HTML . <> . Add . . (genre) . . Qt(TM) Perl . <<(..)>> Kid3 . : o %s %{title} () o %a %{artist} o %l %{album} o %c %{comment} o %y %{year} o %t %{track} o %g %{genre} o %d %{duration} ( ) .m3u "%{track}(\d+)\s+%{title}(\S[^\r\n]*)\.mp3[\r\n]" . Save Settings . kid3rc . . Remove . Accuracy . . Cover Art URL . . Check maximum allowable time difference (sec): . . . Match with Length Track Title . Ctrl . Shift Delete . . (Tag 1 Tag 2 Tag 1 and Tag 2) (combo box) Destination . . . CD CD CD . (context menu) . . Destination Destination . Save Settings . From Tags . . import from file/clipboard . Album Album Artist Composer Conductor Track Number Title . Subtitle Title . Subtitle Comment . Add "Subtitle to Comment". "%{subtitle}" Source "%{comment}(.*)" Extraction Save Settings . Source . Source Extraction . . import from file/clipboard . Import from Tags... File . ( ) . "%{__return}" CLI QML . File -> Import from gnudb.org... freedb.org gnudb.org. Import... gnudb.org . File -> Import from Discogs... Discogs. Import... From Discogs . File -> Import from Amazon... Amazon. Import... From Amazon . File -> Import from MusicBrainz Release... MusicBrainz. Import... From MusicBrainz Release . File -> Import from MusicBrainz Fingerprint... MusicBrainz. Import... From MusicBrainz Fingerprint . File -> Import from Tags... From Tags . File -> Automatic Import... Automatic Import . . . (Tag 1 Tag 2 Tag 1 and Tag 2) Destination . . (All MusicBrainz Discogs Cover Art) Add Profile . . . Move Up Move Down . Edit . Server . Standard Tags Additional Tags Cover Art . Accuracy . . Add . Remove . Start . . Abort . File -> Browse Cover Art... Browse Cover Art . Artist/Album . Source . URL . URL "%u{artist}" "%u{album}" Configure Kid3 User Actions . "Custom Source" "Custom Source" Enter URL Save Settings . Browse . . Kid3 . URL Kid3 URL . URL . URL . URL extraction . Match URL . Picture URL ( \1 ) . URL . Amazon Google Images . . File -> Export... Export Dialog (clipboard) . . . . : ( "CSV unquoted") . . (trailer) . %- . . . o %s %{title} () o %a %{artist} o %l %{album} o %c %{comment} o %y %{year} o %t %{track} ( 01) o %t %{track.n} n ( 001 %{track.3}) o %T %{tracknumber} ( 1) o %g %{genre} o %f %{file} o %p %{filepath} o %{modificationdate} o %{creationdate} o %u %{url} URL o %{dirname} o %d %{duration} : o %D %{seconds} o %n %{tracks} o %e %{extension} o %O %{tag1} (ID3v1.1 ) o %o %{tag2} (ID3v2.3.0 ID3v2.4.0 ID3v2.2.0 ID3v2.2.1 Vorbis APE MP4 ASF ) o %b %{bitrate} kbit/s o %v %{vbr} VBR ( ID3v2.3 id3lib) o %r %{samplerate} Hz o %m %{mode} (Stereo Joint Stereo) o %h %{channels} (1 2) o %k %{codec} ( MPEG 1 Layer 3, MP4, Ogg Vorbis, FLAC, MPC, APE, ASF, AIFF, WAV) . <> (tab) . Kid3 . <> (double quotes) . . <> <> . <> HTML . <> Kover . <> (bit rate) (sample rate) . <> . kid3rc . . (Source) (Tag 1 Tag 2) (combo box) . To File To Clipboard . OK Cancel OK . <- (File -> Create Playlist...) . . Same as folder name ( ) Format () "%{artist} - %{album}" . Export () . Format Files (settings) . Create new empty playlist . . Create in . (Current folder) . . . (Every folder) . (Top-level folder) ( ) . (Format) M3U PLS XSPF . Include only the selected files . . . Sort by file name . Sort by tag field . "%{track.3}" ( ".3" ). "%{genre}%{year}" (genre) . Use relative path for files in playlist Use full path for files in playlist . Write only list of files . Write info using . <- (File -> Quit) ( Ctrl+Q ) . (The Edit Menu) <- (Edit -> Select All) ( Alt+A ) . <- (Edit -> Deselect) ( Ctrl+Shift+A ) . <- (Edit -> Select All in Folder) . <- (Edit -> Previous File) ( Alt+Up ) . <- (Edit -> Next File) ( Alt+Down ) . <- ... (Edit -> Find...) ( Ctrl+F ) . Find () Replace () . <- ... (Edit -> Replace...) ( Ctrl+R ) . Select all ( ) . . . (The Tools Menu) <- (Tools -> Apply Filename Format) Automatically apply format ( ) . ( ). <- (Tools -> Apply Tag Format) Automatically apply format ( ) . ( ). <- (Tools -> Apply Text Encoding) Text encoding ( ) Settings -> Configure Kid3... -> Tags -> Tag 2 . UTF8 ID3v2.3.0 UTF16 UTF8 . <- ... (Tools -> Rename Folder...) . . (Edit) . : o %s %{title} () o %a %{artist} o %l %{album} o %c %{comment} o %y %{year} o %t %{track} ( 01) o %t %{track.n} n ( 001 %{track.3}) o %T %{tracknumber} ( 1) o %g %{genre} o %{dirname} ( %{year" "}%{dirname} ) o %{max-year} "year" o %{min-year} o %{unq-year} <> . Action Create Folder Rename Folder . ( Source ) Tag 1 and Tag 2 Tag 1 Tag 2 . From To . . Tools -> Number Tracks... . . . Total number of tracks . . () . Reset counter for each folder . Start number . . . Tools -> Filter... . . (import) (export) . o %s %{title} (Song) o %a %{artist} o %l %{album} o %c %{comment} o %y %{year} o %t %{track} ( 01) o %t %{track.n} n ( 001 %{track.3}) o %T %{tracknumber} ( 1) o %g %{genre} o %f %{file} o %p %{filepath} o %e %{extension} o %O %{tag1} 1 (ID3v1.1 ) o %o %{tag2} 2 (ID3v2.3.0 ID3v2.4.0 ID3v2.2.0 ID3v2.2.1 Vorbis APE MP4 ASF ) o %b %{bitrate} kbit/s o %v %{vbr} VBR ( ID3v2.3 id3lib) o %r %{samplerate} Hz o %m %{mode} (Stereo Joint Stereo) o %h %{channels} (1 2) o %k %{codec} ( MPEG 1 Layer 3 MP4 Ogg Vorbis FLAC MPC APE ASF AIFF WAV) o %w %{marked} 1 ( ) o %1a %1{artist} ... 1 1 o %2a %2{artist} ... 2 2 : o s1 equals s2: s1 s2 (true) . o s1 contains s2: s1 s2 s2 s1 (true) . o s matches re: s re (true) . 1 0 . 1 true on yes 0 false off no . not and or ( ) . : All - "[filtered]" - . (true) . Filename Tag Mismatch not (%{filepath} contains "%{artist} - %{album}/%{track} %{title}") . . (No Tag 1) %{tag1} equals "" Tag 1 . (No Tag 2) %{tag2} equals "" Tag 2 . ID3v2.3.0 (ID3v2.3.0 Tag) %{tag2} equals "ID3v2.3.0" ID3v2.3.0 . ID3v2.4.0 (ID3v2.4.0 Tag) %{tag2} equals "ID3v2.4.0" ID3v2.4.0 . Tag 1 != Tag 2 not (%1{title} equals %2{title} and %1{album} equals %2{album} and %1{artist} equals %2{artist} and %1{comment} equals %2{comment} and %1{year} equals %2{year} and %1{track} equals %2{track} and %1{genre} equals %2{genre}) Tag 1 Tag 2 . Tag 1 == Tag 2 %1{title} equals %2{title} and %1{album} equals %2{album} and %1{artist} equals %2{artist} and %1{comment} equals %2{comment} and %1{year} equals %2{year} and %1{track} equals %2{track} and %1{genre} equals %2{genre} Tag 1 Tag 2 . (Incomplete) %{title} equals "" or %{artist} equals "" or %{album} equals "" or %{year} equals "" or %{tracknumber} equals "" or %{genre} equals "" (title artist album date track number genre) . (No Picture) %{picture} equals "" . (Marked) not (%{marked} equals "") ID3 (truncated) . (Custom Filter) . "The" "Custom Filter" "The Bands" Enter . : %{artist} matches "The.*" Save Settings . Apply . "+" "-" . "The" "[filtered]" . -> ID3v2.3 ID3v2.4 (Tools -> Convert ID3v2.3 to ID3v2.4) ID3v2.3 ID3v2.4 . TagLib . . -> ID3v2.4 ID3v2.3 (Tools -> Convert ID3v2.4 to ID3v2.3) ID3v2.4 ID3v2.3 . . -> (Tools -> Play) . (Play/Pause Stop playback Previous Track Next Track Close) . . . (The Settings Menu) -> (Settings -> Show Toolbar) . -> (Settings -> Show Statusbar) . -> (Settings -> Show Picture) . -> (Settings -> Auto Hide Tags) . File Tag 1 Tag 2 -/+ . -> ... (Settings -> Configure Shortcut keys...) . next file previous file select all. -> Kid3... (Settings -> Configure Kid3...) . Tags Tag 1 Tag 2 Tag 3 All Tags . Mark truncated fields ID3v1.1 . ID3v1.1 (comment) . ID3v2 . . Text encoding ID3v1 ID3v1 . ISO-8859-1 . ID3v1 ID3v2 Unicode . Use track/total number of tracks format ID3v2 . Genre as text instead of numeric string ID3v2 ID3v1 . ID3v1 ( ID3v2.3 ). Metal "Metal" "(9)" . ID3v1 . . WAV files with lowercase id3 chunk RIFF ID3v2 WAV "ID3 " "id3 " . Kid3 TagLib WAV ID3v2 WAV "ID3 " . "id3 " ( JRiver Media Center foobar2000) . Mark standard violations ID3v2 . (tooltip) : o o o (Carriage return) o (Owner) o o / o DDMM o HHMM o YYYY o o / ISO 8601 o A-G b # m o o ISO 639-2 o ISRC o '|' o ID3 : o ID3 tag version 2.3.0[11] o ID3 tag version 2.4.0 - Main Structure[12] o ID3 tag version 2.4.0 - Native Frames[5] Text encoding ID3v2 ISO-8859-1 UTF16 UTF8 . UTF8 ID3v2.3.0 UTF16 . ID3v2.4.0 . Version used for new tags ID3v2 2.3.0 2.4.0. Track number digits Track Number . . "05" . Comment field name Ogg/Vorbis FLAC . "COMMENT" XMMS Amarok "DESCRIPTION" . Ogg/Vorbis Picture field name "METADATA_BLOCK_PICTURE" "COVERART" . FLAC . "COVERART" Vorbis . . Matroska Write mode . . / () Avoid insert . : o Compact: . . o Do not shrink: . (insert) . o Avoid insert: Do not shrink : . Mark if larger than (bytes) . . ( ) . Custom Genres "Gothic Metal". Genre Tag 2 . ID3v1.1 . Genre . Metal Gothic Metal Ancient Hard Rock Show only custom genres . Genre Tag 2 . Metal Hard Rock tag 1 . Show only custom genres . Custom Frames . Quick Access Frames Tag 2 . Add . . Track number field name RIFF INFO . RIFF "ITRK" "IPRT" . Tag Format . Automatically apply format . Validation / / . Case conversion No changes All lowercase All uppercase First letter uppercase All first letters uppercase . (locale-aware) . . From To . ("/") (regular expression) . (capturing groups) \1 \2 ... To . From ( backspace). . String replacement . Rating . Rating . . . Kid3 . "RATING" Vorbis "IRTD" RIFF INFO. ID3v2 "POPM" Popularimeter "Email" . ID3v2 "POPM.Windows Media Player 9 Series" Windows Media Player "POPM" POPM "Email". "POPM" . Kid3 Popularimeter "POPM" "Email" . . . Name 1 5 . . 1 64 128 196 255 . Windows(R) Explorer . 1. Rating +------+------+-------+--------+---------+---------+ |Name | 1 | 2 | 3 | 4 | 5 | +------+------+-------+--------+---------+---------+ |POPM | 1 | 64 | 128 | 196 | 255 | +------+------+-------+--------+---------+---------+ |Range | 1-31 | 32-95 | 96-159 | 160-223 | 224-255 | +------+------+-------+--------+---------+---------+ Files Load last-opened files Kid3 . Preserve file timestamp . Filename for cover . Text encoding (Export, Playlist) . System . Mark changes . File List . Filter . Include folders Exclude folders . (wildcard) */Music/* Music */iTunes/* iTunes . . Filename from tag Tag from filename Format Format ( ) File . Playlist Create Playlist . Filename Format . Tag Format . Maximum length . CD . Use for playlist and folder names . User Actions . Confirm . Output ( ) . Name . Command . : o %F %{files} ( ) o %f %{file} o %uF %{urls} URL ( ) o %uf %{url} URL o %d %{directory} o %s %{title} () o %a %{artist} o %l %{album} o %c %{comment} o %y %{year} o %t %{track} ( 01) o %t %{track.n} n ( 001 %{track.3}) o %T %{tracknumber} ( 1) o %g %{genre} o %b %{browser} o %q %{qmlpath} QML @separator . @beginmenu @endmenu . Name @beginmenu . QML @qml . QML . %{qmlpath}/script/ ( Linux(R) /usr/share/kid3/qml/script/ Windows qml/script/ macOS(R) kid3.app/Contents/Resources/qml/script/). . QML GUI @qmlview @qml . QML getArguments() . QML QML Interface . %{browser} Web browser . %{browser} %{browser} http://lyricwiki.org/%u{artist}:%u{title} LyricWiki[13] . "u" %u{artist} %u{title} URL-encode %{artist} %{title} . Google[14]: %{browser} http://images.google.com/images?q=%u{artist}%20%u{album} Google Amazon . . Add Picture . Picture ID3v2 MP4 FLAC Ogg ASF . . Network (port) . . Plugins . . Metadata Plugins & Priority . . . TaglibMetadata . TaglibMetadata . TagLib . o Id3libMetadata: ID3v1.1 ID3v2.3 MP3 MP2 AAC id3lib[15] . TagLib . o OggFlacMetadata: Ogg libogg[16] libvorbis, libvorbisfile[17] FLAC libFLAC++ and libFLAC[18] . . o TaglibMetadata: TagLib[19] . Kid3 . o Mp4v2Metadata: mp4v2[20] Kid3 M4A . TagLib M4A . Available Plugins . (check boxes) . o AmazonImport: Import from Amazon... . o DiscogsImport: Import from Discogs... . o FreedbImport: Import from gnudb.org... . o MusicBrainzImport: Import from MusicBrainz Release... . o AcoustidImport: Import from MusicBrainz Fingerprint... Chromaprint[21] libav[22] . . . Kid3 . -> Kid3 . -> Kid3 Kid3 . (Commands) kid3-cli Kid3 . . . . -c . . . kid3-cli . . . (Help) help [COMMAND-NAME] COMMAND-NAME . (Timeout) timeout [ | default | off | TIME ] (timeout) . CLI . ls albumart autoimport filter . TIME . (Quit application) exit [force] . force . (Change folder) cd [FOLDER] FOLDER (home) . . . (Print current folder filename) pwd . (Folder list) ls . (GUI) Kid3 . . o > . o * . o 1 (tag 1) '-' . o 2 '-' . o 3 '-' . kid3-cli> ls 1-- 01 Intro.mp3 > 12- 02 We Only Got This One.mp3 *1-- 03 Outro.mp3 . . save select [ | all | none | first | previous | next | FILE... ] select all select none . select first select next select previous . . (wildcard) select *.mp3 MP3 . kid3-cli> select first kid3-cli> ls > 1-- 01 Intro.mp3 12- 02 We Only Got This One.mp3 *1-- 03 Outro.mp3 kid3-cli> select next kid3-cli> ls 1-- 01 Intro.mp3 > 12- 02 We Only Got This One.mp3 *1-- 03 Outro.mp3 kid3-cli> select *.mp3 kid3-cli> ls > 1-- 01 Intro.mp3 > 12- 02 We Only Got This One.mp3 >*1-- 03 Outro.mp3 tag [TAG-NUMBERS] TAG-NUMBERS . . 12 . TAG-NUMBERS 1 2 3 . . get [ | all | FRAME-NAME ] [TAG-NUMBERS] ( all ) . '*' . kid3-cli> get File: MPEG 1 Layer 3 192 kbps 44100 Hz Joint Stereo Name: 01 Intro.mp3 Tag 1: ID3v1.1 Title Intro Artist One Hit Wonder Album Let's Tag Date 2013 Track Number 1 Genre Pop kid3-cli> get title Intro : get picture:'/path/to/folder.jpg' LRC : get SYLT:'/path/to/lyrics.lrc' get POPM.Email Email Popularimeter. Vorbis get performer[0] get performer[1] . "selected" get artist.selected artist 1 0 . "ratingstars" "rating" (0 5) . "rating" . set {FRAME-NAME} {FRAME-VALUE} [TAG-NUMBERS].PP . FRAME-VALUE . kid3-cli> set remixer 'O.H. Wonder' : set picture:'/path/to/folder.jpg' 'Picture Description' LRC : set SYLT:'/path/to/lyrics.lrc' 'Lyrics Description' Counter Popularimeter: set POPM.Counter 5 Popularimeter TXXX "rating" ( ). TXXX kid3-cli TXXX "rating" . kid3-cli> set rating "" kid3-cli> set TXXX.Description rating kid3-cli> set rating 5 POPM set rating 5 POPM TXXX . set TXXX.Text 5 TXXX . Vorbis: kid3-cli> set performer[0] 'Liza don Getti (soprano)' kid3-cli> set performer[1] 'Joe Barr (piano)' "selected" . set '*.selected' 0 set artist.selected 1 artist . "ratingstars" "rating" ( ) . "rating" . "ratingstars" . kid3-cli -c "set ratingstars 2" * for f in *; do kid3-cli -c "set ratingstars 2" "$f"; done . revert ( ) . import {FILE} {FORMAT-NAME} [TAG-NUMBERS] FILE FORMAT-NAME ( "CSV unquoted" Import ) . tags FILE . FORMAT-NAME SOURCE EXTRACTION ( Import from Tags ). tags tagsel . EXTRACTION %{__return}(.+) . autoimport [PROFILE-NAME] [TAG-NUMBERS] PROFILE-NAME ( Automatic Import "All" ). albumart {URL} [all].PP URL. Browse Cover Art ( Amazon) (URL) . set . kid3-cli> albumart http://www.amazon.com/Versus-World-Amon-Amarth/dp/B000078DOC export {FILE} {FORMAT-NAME} [TAG-NUMBERS] FILE FORMAT-NAME ( "CSV unquoted" Export ) . playlist Create Playlist . filenameformat Apply Filename Format . tagformat Apply Tag Format . textencoding Apply Text Encoding . renamedir [FORMAT] [ | create | rename | dryrun ] [TAG-NUMBERS] FORMAT ( %{artist} - %{album} Rename Folder ) Rename folder . rename create . dryrun . numbertracks [TRACK-NUMBER] [TAG-NUMBERS] TRACK-NUMBER ( 1). filter [ | FILTER-NAME | FILTER-FORMAT ] FILTER-FORMAT . ( "Filename Tag Mismatch") Filter . kid3-cli> filter '%{title} contains "tro"' Started /home/urs/One Hit Wonder - Let's Tag + 01 Intro.mp3 - 02 We Only Got This One.mp3 + 03 Outro.mp3 Finished kid3-cli> ls 1-- 01 Intro.mp3 1-- 03 Outro.mp3 kid3-cli> filter All Started /home/urs/One Hit Wonder - Let's Tag + 01 Intro.mp3 + 02 We Only Got This One.mp3 + 03 Outro.mp3 Finished kid3-cli> ls 1-- 01 Intro.mp3 12- 02 We Only Got This One.mp3 1-- 03 Outro.mp3 ID3v2.3 ID3v2.4 to24 ID3v2.4 ID3v2.3 to23 fromtag [FORMAT] [TAG-NUMBERS].PP fromtag '%{track} - %{title}' 1. GUI . totag [FORMAT] [TAG-NUMBERS] totag '%{albumartist} - %{album}/%{track} %{title}' 2. GUI . . syncto {TAG-NUMBER} ID3v2 ID3v1 syncto 2 . copy [TAG-NUMBER] . paste . <> set . : set '*.selected' 0 set discnumber.selected 1 set copyright.selected 1 copy paste [TAG-NUMBER] copy . remove [TAG-NUMBER] . copy . Kid3 config [OPTION] [VALUE] . OPTION . OPTION . . . . . . JSON . QML execute [@qml] {FILE} [ARGS] QML . @qml . @qml QML . export.csv . kid3-cli -c "execute @qml /usr/share/kid3/qml/script/ExportCsv.qml export.csv" /path/to/folder/ export.csv ExportCsv.qml /path/to/folder/ FILE kid3-cli . ( ) . -c kid3-cli . . UNIX(R) (Command Prompt) . (escape ) : kid3-cli -c "set title 'I\'ll be there for you'" /path/to/folder (batch import): kid3-cli -c "autoimport 'Cover Art'" /path/to/folder (comment) (tag format) MP3 : kid3-cli -c "set comment '' 1" -c "set comment '' 2" \ -c "tagformat 1" -c "tagformat 2" /path/to/folder/*.mp3 : kid3-cli -c autoimport -c "syncto 1" -c fromtag -c playlist \ /path/to/folder/*.mp3 ID3v2.4.0 ID3v2.3.0 arranger: kid3-cli -c "filter 'ID3v2.4.0 Tag'" -c "select all" -c to23 \ -c "set arranger ''" /path/to/folder kid3-cli iTunNORM iTunes Sound Check replay gain . #!/usr/bin/env python3 # Generate iTunes Sound Check from ReplayGain. import os, sys, subprocess def rg2sc(dirpath): for root, dirs, files in os.walk(dirpath): for name in files: if name.endswith(('.mp3', '.m4a', '.aiff', '.aif')): fn = os.path.join(root, name) rg = subprocess.check_output([ 'kid3-cli', '-c', 'get "replaygain_track_gain"', fn]).strip() if rg.endswith(b' dB'): rg = rg[:-3] try: rg = float(rg) except ValueError: print('Value %s of %s in not a float' % (rg, fn)) continue sc = (' ' + ('%08X' % int((10 ** (-rg / 10)) * 1000) )) * 10 subprocess.call([ 'kid3-cli', '-c', 'set iTunNORM "%s"' % sc, fn]) if __name__ == '__main__': rg2sc(sys.argv[1]) JSON (JSON FORMAT) kid3-cli JSON . JSON JSON . . <> JSON-RPC <> <> . CLI <> ( ) <> . <> kid3-cli null . <> <> <> JSON-RPC . kid3-cli> {"method":"set","params":["artist","An Artist"]} {"result":null} kid3-cli> {"method":"get","params":["artist",2]} {"result":"An Artist"} kid3-cli> {"method": "get", "params": ["artist"]} { "result": "An Artist" } kid3-cli> {"jsonrpc":"2.0","id":"123","method":"get","params":["artist"]} {"id":"123","jsonrpc":"2.0","result":"An Artist"} Kid3 Urs Fleisch FDL[23] GPL[24] (INSTALLATION) Kid3 Kid3 https://kid3.kde.org . Kid3 Qt(TM)[25] . KDE[26] Kid3 Qt(TM) . Kid3 GNU/Linux(R) Windows(R) macOS(R). Ogg/Vorbis libogg[16] libvorbis and libvorbisfile[17] FLAC libFLAC++ and libFLAC[18] . id3lib[15] MP3 . TagLib[19] Opus MPC APE MP2 Speex TrueAudio WavPack WMA WAV AIFF tracker . Chromaprint[21] libav[22] . Kid3 Linux(R) Windows(R) macOS(R) . https://kid3.kde.org . Kid3 KDE . KDE Kid3 Qt(TM) . KDE : % cmake . % make % make install Qt(TM) KDE cmake . Kid3 . . cmake . -DWITH_TAGLIB:BOOL=ON -DWITH_MP4V2:BOOL=OFF -DWITH_ID3LIB:BOOL=ON -DWITH_CHROMAPRINT:BOOL=ON -DWITH_VORBIS:BOOL=ON -DWITH_FLAC:BOOL=ON . OFF . Kid3 Qt(TM) KDE cmake -DWITH_APPS=Qt . KDE Qt(TM) -DWITH_APPS="Qt;KDE" . Qt(TM) -DQT_QMAKE_EXECUTABLE=/path/to/qmake . RPM kid3.spec Debian(R) build.sh deb . Qt(TM) Windows(R) macOS(R) . build.sh Kid3 . (Configuration) KDE .config/kid3rc .local/share/kid3/kid3staterc . Qt(TM) .config/Kid3/Kid3.conf . Windows(R) macOS(R) plist . KID3_CONFIG_FILE ..SH " D-BUS (D-BUS INTERFACE)" D-Bus (D-Bus Examples) Linux(R) D-Bus Kid3 . D-Bus ( Python) Kid3 User Actions . "One Hit Wonder" : Shell dbus-send --dest=org.kde.kid3 --print-reply=literal \ /Kid3 org.kde.Kid3.setFrame int32:2 string:'Artist' \ string:'One Hit Wonder' qdbus Qt(TM) ( qdbusviewer (GUI) ): qdbus org.kde.kid3 /Kid3 setFrame 2 Artist \ 'One Hit Wonder' Python import dbus kid3 = dbus.SessionBus().get_object( 'org.kde.kid3', '/Kid3') kid3.setFrame(2, 'Artist', 'One Hit Wonder') Perl use Net::DBus; $kid3 = Net::DBus->session->get_service( "org.kde.kid3")->get_object( "/Kid3", "org.kde.Kid3"); $kid3->setFrame(2, "Artist", "One Hit Wonder"); D-Bus org.kde.Kid3.xml . Kid3 : boolean openDirectory(string path); .PP path .RE true . unloadAllTags(void); boolean save(void); true . string getErrorMessage(void); . revert(void); boolean batchImport(int32 tagMask, string profileName); .PP tagMask ( ) .RE .PP profileName .RE boolean importFromFile(int32 tagMask, string path, int32 fmtIdx); .PP tagMask ( ) .RE .PP path .RE .PP fmtIdx .RE true . importFromTags(int32 tagMask, string source, string extraction); .PP tagMask ( ) .RE .PP source .RE .PP extraction (captures) .RE array importFromTagsToSelection(int32 tagMask, string source, string extraction); ( ) .RE .PP source .RE .PP extraction (captures) .RE .PP returnValues "%{__return}(.+)" .RE downloadAlbumArt(string url, boolean allFilesInDir); (URL) .RE .PP allFilesInDir .RE boolean exportToFile(int32 tagMask, string path, int32 fmtIdx); boolean createPlaylist(void); true . array getPlaylistItems(string path); boolean setPlaylistItems(string path, array items); true false . quit(void); selectAll(void); deselectAll(void); boolean firstFile(void); true . boolean previousFile(void); true . boolean nextFile(void); true . boolean selectFirstFile(void); true . boolean selectPreviousFile(void);.PP true . boolean selectNextFile(void); true . boolean selectCurrentFile(void); true . boolean expandDirectory(void);.PP getFileName() '/' . true . applyFilenameFormat(void); applyTagFormat(void); applyTextEncoding(void); boolean setDirNameFromTag(int32 tagMask, string format, boolean create); true getErrorMessage() . numberTracks(int32 tagMask, int32 firstTrackNr); filter(string expression); ID3v2.3 ID3v2.4 convertToId3v24(void); ID3v2.4 ID3v2.3 convertToId3v23(void);.PP true . string getDirectoryName(void); . string getFileName(void);.PP <> . setFileName(string name); . setFileNameFormat(string format); setFileNameFromTag(int32 tagMask); string getFrame(int32 tagMask, string name); name "Picture:/path/to/file". "SYLT:/path/to/file". . boolean setFrame(int32 tagMask, string name, string value); (tagMask ) name value . name "Picture:/path/to/file". "SYLT:/path/to/file" . true . array of string getTag(int32 tagMask); . array of string getInformation(void);.PP Format Bitrate Samplerate Channels Duration Channel Mode VBR Tag 1 Tag 2. . . setTagFromFileName(int32 tagMask); setTagFromOtherTag(int32 tagMask); copyTag(int32 tagMask); pasteTag(int32 tagMask); removeTag(int32 tagMask); reparseConfiguration(void); . playAudio(void); QML (context menu) User Actions . . QML JavaScript <> : import Kid3 1.0 Kid3Script { onRun: { console.log("Hello world, folder is", app.dirName) Qt.quit() } } /path/to/Example.qml @qml /path/to/Example.qml QML Test Output . QML Test . QML qml ( qml -apptype widget -I /usr/lib/kid3/plugins/imports /path/to/Example.qml) Qt . kid3-cli QML execute . kid3-cli -c "execute @qml /path/to/Example.qml" (tag 2) : import Kid3 1.0 Kid3Script { onRun: { app.firstFile() do { if (app.selectionInfo.tag(Frame.Tag_2).tagFormat) { console.log(app.getFrame(tagv2, "title")) } } while (app.nextFile()) } } . . . . (GUI) . import Kid3 1.0 Kid3Script { onRun: { function doWork() { if (app.selectionInfo.tag(Frame.Tag_2).tagFormat) { console.log(app.getFrame(tagv2, "title")) } if (!app.nextFile()) { Qt.quit() } else { setTimeout(doWork, 1) } } app.firstFile() doWork() } } app.firstFile() app.nextFile() . firstFile() nextFile() Kid3Script . (copyright) . import Kid3 1.1 Kid3Script { onRun: { function doWork() { if (app.selectionInfo.tag(Frame.Tag_2).tagFormat) { app.setFrame(tagv2, "*.selected", false) app.setFrame(tagv2, "discnumber.selected", true) app.setFrame(tagv2, "copyright.selected", true) app.copyTags(tagv2) } if (!nextFile()) { Qt.quit() } else { setTimeout(doWork, 1) } } firstFile() doWork() } } Kid3 . o ReplayGain to SoundCheck (ReplayGain2SoundCheck.qml): SoundCheck iTunNORM replay gain. o Resize Album Art (ResizeAlbumArt.qml): 500x500 . o Extract Album Art (ExtractAlbumArt.qml): . o (EmbedAlbumArt.qml): . o (EmbedLyrics.qml): . o ID3v1 (ShowTextEncodingV1.qml): ID3v1 . o ID3v1 ASCII (Tag1ToAscii.qml): ID3v1 ASCII. o (TitleCase.qml): (Title Case). o (RewriteTags.qml): . o CSV (ExportCsv.qml): CSV. o CSV (ImportCsv.qml): CSV. o JSON (ExportJson.qml): JSON. o JSON (ImportJson.qml): JSON. o (ExportPlaylist.qml): . o QML (QmlConsole.qml): QML Kid3. QML (QML API) API QML Console . Kid3Script Kid3Script QML . QML . Kid3Script onRun . : onRun: tagv1, tagv2, tagv2v1: script: configs: getArguments(): isStandalone(): true Kid3 setTimeout(callback, delay): callback delay firstFile(): nextFile(): (Scripting Functions) JavaScript QML script : script.properties(obj): Qt script.writeFile(filePath, data): true script.readFile(filePath): script.removeFile(filePath): true script.fileExists(filePath): true script.fileIsWritable(filePath): true script.getFilePermissions(filePath): script.setFilePermissions(filePath, modeBits): script.classifyFile(filePath): ( "/" "@" "*" " ") script.renameFile(oldName, newName): true script.copyFile(source, dest): true script.makeDir(path): true script.removeDir(path): true script.tempPath(): script.musicPath(): script.listDir(path, [nameFilters], [classify]): script.system(program, [args], [msecs]): [exit code, standard output, standard error] script.systemAsync(program, [args], [callback]): callback [exit code, standard output, standard error] script.getEnv(varName): script.setEnv(varName, value): script.getQtVersion(): Qt "5.4.1" script.getDataMd5(data): MD5 script.getDataSize(data): script.dataToImage(data, [format]): script.dataFromImage(img, [format]): script.loadImage(filePath): script.saveImage(img, filePath, [format]): true script.imageProperties(img): "width" "height" "depth" "colorCount" script.scaleImage(img, width, [height]): (Application Context) QML Kid3 . API D-Bus . . app.openDirectory(path): app.unloadAllTags(): app.saveDirectory(): app.revertFileModifications(): app.importTags(tag, path, fmtIdx): app.importFromTags(tag, source, extraction): app.importFromTagsToSelection(tag, source, extraction): app.downloadImage(url, allFilesInDir): app.exportTags(tag, path, fmtIdx): app.writePlaylist(): app.getPlaylistItems(path): app.setPlaylistItems(path, items): app.selectAllFiles(): app.deselectAllFiles(): app.firstFile([select], [onlyTaggedFiles]): app.nextFile([select], [onlyTaggedFiles]): app.previousFile([select], [onlyTaggedFiles]): app.selectCurrentFile([select]): app.selectFile(path, [select]): app.getSelectedFilePaths([onlyTaggedFiles]): app.requestExpandFileList(): app.applyFilenameFormat(): app.applyTagFormat(): app.applyTextEncoding(): app.numberTracks(nr, total, tag, [options]): app.applyFilter(expr): app.convertToId3v23(): ID3v2.4.0 ID3v2.3.0 app.convertToId3v24(): ID3v2.3.0 ID3v2.4.0 app.getFilenameFromTags(tag): app.getTagsFromFilename(tag): app.getAllFrames(tag): app.getFrame(tag, name): app.setFrame(tag, name, value): app.getPictureData(): app.setPictureData(data): app.copyToOtherTag(tag): app.copyTags(tag): app.pasteTags(tag): app.removeTags(tag): app.playAudio(): app.readConfig(): app.applyChangedConfiguration(): app.dirName: app.selectionInfo.fileName: app.selectionInfo.filePath: app.selectionInfo.detailInfo: app.selectionInfo.tag(Frame.Tag_1).tagFormat: app.selectionInfo.tag(Frame.Tag_2).tagFormat: app.selectionInfo.formatString(tag, format): app.selectFileName(caption, dir, filter, saveFile): app.selectDirName(caption, dir): callback . function automaticImport(profile) { function onAutomaticImportFinished() { app.batchImporter.finished.disconnect(onAutomaticImportFinished) } app.batchImporter.finished.connect(onAutomaticImportFinished) app.batchImport(profile, tagv2) } function renameDirectory(format) { function onRenameActionsScheduled() { app.renameActionsScheduled.disconnect(onRenameActionsScheduled) app.performRenameActions() } app.renameActionsScheduled.connect(onRenameActionsScheduled) app.renameDirectory(tagv2v1, format, false) } (Configuration Objects) configs . QML . script.properties(configs.networkConfig()) : configs.networkConfig().useProxy = false configs.batchImportConfig() configs.exportConfig() configs.fileConfig() configs.filenameFormatConfig() configs.filterConfig() configs.findReplaceConfig() configs.guiConfig() configs.importConfig() configs.mainWindowConfig() configs.networkConfig() configs.numberTracksConfig() configs.playlistConfig() configs.renDirConfig() configs.tagConfig() configs.tagFormatConfig() configs.userActionsConfig() Urs Fleisch (COPYRIGHT) (C) 2026 Urs Fleisch FDL (NOTES) 1. gnudb.org http://gnudb.org 2. MusicBrainz http://musicbrainz.org 3. Discogs http://discogs.com 4. Amazon http://www.amazon.com 5. ID3 http://id3.org/id3v2.4.0-frames 6. SYLT http://www.compuphase.com/software_sylteditor.htm 7. www.gnudb.org http://www.gnudb.org 8. gnudb.org https://gnudb.org/info.php 9. Discogs https://www.discogs.com 10. freedb.org http://freedb.org 11. ID3 2.3.0 http://id3.org/id3v2.3.0 12. ID3 2.4.0 - http://id3.org/id3v2.4.0-structure 13. LyricWiki http://www.lyricwiki.org 14. Google http://www.google.com 15. id3lib http://id3lib.sourceforge.net 16. libogg http://xiph.org/ogg 17. libvorbis libvorbisfile http://xiph.org/vorbis 18. libFLAC++ libFLAC http://flac.sourceforge.net 19. TagLib http://taglib.github.io 20. mp4v2 https://mp4v2.org 21. Chromaprint http://acoustid.org/chromaprint 22. libav http://libav.org 23. FDL http://www.gnu.org/licenses/licenses.html#FDL 24. GPL http://www.gnu.org/licenses/licenses.html#GPL 25. Qt(TM) https://www.qt.io 26. KDE http://www.kde.org 3.10.1 2026-07-24 KID3(1)