{"_id":"@akabeko/music-metadata-editor","_rev":"7-ee052a0595ff13c777691dddb752cb01","name":"@akabeko/music-metadata-editor","dist-tags":{"latest":"1.2.0"},"versions":{"1.0.0":{"name":"@akabeko/music-metadata-editor","version":"1.0.0","keywords":["music","metadata","audio","tag","tags","editor","edit","writer","write","reader","read","parse","parser","duration","mp3","mp4","m4a","m4b","flac","ogg","ape","MonkeyAudio","wav","aiff","wma","asf","Vorbis","Opus","ID3","ID3v1","ID3v2","chapter","Chapters","lyrics","picture","artwork"],"author":{"url":"http://akabeko.me/","name":"akabeko"},"license":"MIT","_id":"@akabeko/music-metadata-editor@1.0.0","maintainers":[{"name":"akabeko","email":"akabekobeko@gmail.com"}],"homepage":"https://github.com/akabekobeko/npm-music-metadata-editor#readme","bugs":{"url":"https://github.com/akabekobeko/npm-music-metadata-editor/issues"},"dist":{"shasum":"faadf756b32aba134d40a9ad5f032367606cbb89","tarball":"https://registry.npmjs.org/@akabeko/music-metadata-editor/-/music-metadata-editor-1.0.0.tgz","fileCount":606,"integrity":"sha512-1q23HvbfV1aKF+SNEZdNv7rJl61Bf8mEXchWrBIZKqBXpJI+kAMl9JG5UfthG2Hp+9Luwjf8npYFmDOZvmkOSQ==","signatures":[{"sig":"MEYCIQCSlfZglQEpb8XPqojlBeU3Vc7hqPMu9MQ6ovfo6p+hggIhALkOvK0ugQ/cCilHZbgYM7Az4FbsOMiwhhQgkYmNwQgb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":722591},"main":"./dist/mme.js","type":"module","types":"./dist/mme.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/mme.d.ts","default":"./dist/mme.js"}},"gitHead":"9fecf27ab156f04c31bef801d9afc98d7e8e39d6","scripts":{"lint":"biome lint .","test":"vitest run","build":"tsc -p tsconfig.build.json","check":"biome check --write .","clean":"rm -rf dist coverage","format":"biome format --write .","typecheck":"tsc --noEmit","test:watch":"vitest","fixtures:ape":"tsx scripts/fixtures/ape.ts","fixtures:mp3":"tsx scripts/fixtures/mp3.ts","fixtures:mp4":"tsx scripts/fixtures/mp4.ts","fixtures:ogg":"tsx scripts/fixtures/ogg.ts","fixtures:wav":"tsx scripts/fixtures/wav.ts","fixtures:wma":"tsx scripts/fixtures/wma.ts","fixtures:aiff":"tsx scripts/fixtures/aiff.ts","fixtures:flac":"tsx scripts/fixtures/flac.ts","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm clean && pnpm build"},"_npmUser":{"name":"akabeko","email":"akabekobeko@gmail.com"},"repository":{"url":"git+https://github.com/akabekobeko/npm-music-metadata-editor.git","type":"git"},"_npmVersion":"11.12.1","description":"This is a library for reading and writing metadata of music files.","directories":{},"_nodeVersion":"24.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.2","devDependencies":{"tsx":"^4.21.0","vitest":"^4.1.5","typescript":"^6.0.3","@types/node":"^25.6.0","@biomejs/biome":"^2.4.13","@tsconfig/node24":"^24.0.4"},"_npmOperationalInternal":{"tmp":"tmp/music-metadata-editor_1.0.0_1777708644784_0.8635095032139515","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@akabeko/music-metadata-editor","version":"1.0.1","keywords":["music","metadata","audio","tag","tags","editor","edit","writer","write","reader","read","parse","parser","duration","mp3","mp4","m4a","m4b","flac","ogg","ape","MonkeyAudio","wav","aiff","wma","asf","Vorbis","Opus","ID3","ID3v1","ID3v2","chapter","Chapters","lyrics","picture","artwork"],"author":"akabeko (http://akabeko.me/)","license":"MIT","_id":"@akabeko/music-metadata-editor@1.0.1","maintainers":[{"name":"akabeko","email":"akabekobeko@gmail.com"}],"homepage":"https://github.com/akabekobeko/npm-music-metadata-editor/tree/main/packages/core#readme","bugs":{"url":"https://github.com/akabekobeko/npm-music-metadata-editor/issues"},"dist":{"shasum":"f81b1fe90501e289c2e1f6ff9bf7bc2d179b6b3b","tarball":"https://registry.npmjs.org/@akabeko/music-metadata-editor/-/music-metadata-editor-1.0.1.tgz","fileCount":606,"integrity":"sha512-wRJVfU29hslJbJjXn4H76QYrkiq3yivNWBIrTGBk6JaIRIhomy+nCQema6ckJRJ44y6lDIPyo8yKNKdjn3JlTw==","signatures":[{"sig":"MEYCIQDVc2tViB7wJjaBeHF989vg2WYSfgNgMf+JGSGNQlrJkgIhAM+CGYsiQNOflbMepw2Q+Ify2+LOGkD91F6NaIWifZIC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":722874},"main":"./dist/mme.js","type":"module","types":"./dist/mme.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/mme.d.ts","default":"./dist/mme.js"}},"scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist coverage","typecheck":"tsc --noEmit","test:watch":"vitest","fixtures:ape":"tsx scripts/fixtures/ape.ts","fixtures:mp3":"tsx scripts/fixtures/mp3.ts","fixtures:mp4":"tsx scripts/fixtures/mp4.ts","fixtures:ogg":"tsx scripts/fixtures/ogg.ts","fixtures:wav":"tsx scripts/fixtures/wav.ts","fixtures:wma":"tsx scripts/fixtures/wma.ts","fixtures:aiff":"tsx scripts/fixtures/aiff.ts","fixtures:flac":"tsx scripts/fixtures/flac.ts","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"akabeko","email":"akabekobeko@gmail.com"},"repository":{"url":"git+https://github.com/akabekobeko/npm-music-metadata-editor.git","type":"git","directory":"packages/core"},"description":"This is a library for reading and writing metadata of music files.","directories":{},"_nodeVersion":"24.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","vitest":"^4.1.8","typescript":"^6.0.3","@types/node":"^25.9.2","@tsconfig/node24":"^24.0.4"},"_npmOperationalInternal":{"tmp":"tmp/music-metadata-editor_1.0.1_1780819304486_0.5327199665260338","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@akabeko/music-metadata-editor","version":"1.0.2","keywords":["music","metadata","audio","tag","tags","editor","edit","writer","write","reader","read","parse","parser","duration","mp3","mp4","m4a","m4b","flac","ogg","ape","MonkeyAudio","wav","aiff","wma","asf","Vorbis","Opus","ID3","ID3v1","ID3v2","chapter","Chapters","lyrics","picture","artwork"],"author":"akabeko (http://akabeko.me/)","license":"MIT","_id":"@akabeko/music-metadata-editor@1.0.2","maintainers":[{"name":"akabeko","email":"akabekobeko@gmail.com"}],"homepage":"https://github.com/akabekobeko/npm-music-metadata-editor/tree/main/packages/core#readme","bugs":{"url":"https://github.com/akabekobeko/npm-music-metadata-editor/issues"},"dist":{"shasum":"1f2a0f1fbb240295e838945ea3b0ac70bff41b0a","tarball":"https://registry.npmjs.org/@akabeko/music-metadata-editor/-/music-metadata-editor-1.0.2.tgz","fileCount":608,"integrity":"sha512-wM338wj51aHwtowCBgMlfrLJ7aN+fd4pC+tykHwyhlWcX985OsWIUQavo0GAU0l5RoBUIQplKPoPYom3NSjw1w==","signatures":[{"sig":"MEUCIQDCBcrkP1okAbJdWlXxn0ytVLQQJKJdqotpolQKRs7jpAIgd22RBChHx7PzUIHyl39agW8Skq3quz0mNaUHTOkMU10=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":728408},"main":"./dist/mme.js","type":"module","types":"./dist/mme.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/mme.d.ts","default":"./dist/mme.js"}},"scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist coverage","typecheck":"tsc --noEmit","test:watch":"vitest","fixtures:ape":"tsx scripts/fixtures/ape.ts","fixtures:mp3":"tsx scripts/fixtures/mp3.ts","fixtures:mp4":"tsx scripts/fixtures/mp4.ts","fixtures:ogg":"tsx scripts/fixtures/ogg.ts","fixtures:wav":"tsx scripts/fixtures/wav.ts","fixtures:wma":"tsx scripts/fixtures/wma.ts","fixtures:aiff":"tsx scripts/fixtures/aiff.ts","fixtures:flac":"tsx scripts/fixtures/flac.ts","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"akabeko","email":"akabekobeko@gmail.com"},"repository":{"url":"git+https://github.com/akabekobeko/npm-music-metadata-editor.git","type":"git","directory":"packages/core"},"description":"This is a library for reading and writing metadata of music files.","directories":{},"_nodeVersion":"24.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.11","vitest":"^4.1.10","typescript":"^7.0.2","@types/node":"^26.2.0","@tsconfig/node24":"^24.0.4"},"_npmOperationalInternal":{"tmp":"tmp/music-metadata-editor_1.0.2_1786318226441_0.13072714138630825","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@akabeko/music-metadata-editor","version":"1.0.4","keywords":["music","metadata","audio","tag","tags","editor","edit","writer","write","reader","read","parse","parser","duration","mp3","mp4","m4a","m4b","flac","ogg","ape","MonkeyAudio","wav","aiff","wma","asf","Vorbis","Opus","ID3","ID3v1","ID3v2","chapter","Chapters","lyrics","picture","artwork"],"author":"akabeko (http://akabeko.me/)","license":"MIT","_id":"@akabeko/music-metadata-editor@1.0.4","maintainers":[{"name":"akabeko","email":"akabekobeko@gmail.com"}],"homepage":"https://github.com/akabekobeko/npm-music-metadata-editor/tree/main/packages/core#readme","bugs":{"url":"https://github.com/akabekobeko/npm-music-metadata-editor/issues"},"dist":{"shasum":"18e0dd1bfb25761a7d6a0e301ea28a0324813c1c","tarball":"https://registry.npmjs.org/@akabeko/music-metadata-editor/-/music-metadata-editor-1.0.4.tgz","fileCount":610,"integrity":"sha512-OXRBca8/M8KIsmSdipQ0WWuS+acvuatYPmvhoZ2PLouax3eMb9lU2gutPWtO0joyNtQLcO2lgZV+svHjCrG9Ng==","signatures":[{"sig":"MEYCIQDqEL4RqoN4+kaznPkPtE9va93sJ2k43Brk5Toagq3oCwIhALR2UZ1xXd2/hdah4yLH5HkCdDkKzWF0RBjd/+1ojpsG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":731789},"main":"./dist/mme.js","type":"module","types":"./dist/mme.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/mme.d.ts","default":"./dist/mme.js"}},"scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist coverage","typecheck":"tsc --noEmit","test:watch":"vitest","fixtures:ape":"tsx scripts/fixtures/ape.ts","fixtures:mp3":"tsx scripts/fixtures/mp3.ts","fixtures:mp4":"tsx scripts/fixtures/mp4.ts","fixtures:ogg":"tsx scripts/fixtures/ogg.ts","fixtures:wav":"tsx scripts/fixtures/wav.ts","fixtures:wma":"tsx scripts/fixtures/wma.ts","fixtures:aiff":"tsx scripts/fixtures/aiff.ts","fixtures:flac":"tsx scripts/fixtures/flac.ts","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"akabeko","email":"akabekobeko@gmail.com"},"repository":{"url":"git+https://github.com/akabekobeko/npm-music-metadata-editor.git","type":"git","directory":"packages/core"},"description":"This is a library for reading and writing metadata of music files.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","vitest":"^4.1.10","typescript":"^7.0.2","@types/node":"^26.2.0","@tsconfig/node24":"^24.0.4"},"_npmOperationalInternal":{"tmp":"tmp/music-metadata-editor_1.0.4_1786688890120_0.9714649736875756","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@akabeko/music-metadata-editor","version":"1.1.0","keywords":["music","metadata","audio","tag","tags","editor","edit","writer","write","reader","read","parse","parser","duration","mp3","mp4","m4a","m4b","flac","ogg","ape","MonkeyAudio","wav","aiff","wma","asf","Vorbis","Opus","ID3","ID3v1","ID3v2","chapter","Chapters","lyrics","picture","artwork"],"author":"akabeko (http://akabeko.me/)","license":"MIT","_id":"@akabeko/music-metadata-editor@1.1.0","maintainers":[{"name":"akabeko","email":"akabekobeko@gmail.com"}],"homepage":"https://github.com/akabekobeko/npm-music-metadata-editor/tree/main/packages/core#readme","bugs":{"url":"https://github.com/akabekobeko/npm-music-metadata-editor/issues"},"dist":{"shasum":"855e2a132aef70a1dd12a2ac9406a6d4a7fc46d6","tarball":"https://registry.npmjs.org/@akabeko/music-metadata-editor/-/music-metadata-editor-1.1.0.tgz","fileCount":620,"integrity":"sha512-VjJaTxUdIFrZOScQXVSLaXWvkK79I/lWhZN5AcUVuFR9j9sI3D47KdT0RyYknmWuUISX+By+vXEoSvC2m0BFkw==","signatures":[{"sig":"MEQCICrtG48Bo6tmzUIlaginsu7ksmsM8jZEFEjqpqOa6yMjAiA3+Ewb5wFM7SEkjGgOx6bcx8b/2R34DRPKRpHYHrpCRA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":744150},"main":"./dist/mme.js","type":"module","types":"./dist/mme.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/mme.d.ts","default":"./dist/mme.js"}},"scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist coverage","typecheck":"tsc --noEmit","test:watch":"vitest","fixtures:ape":"tsx scripts/fixtures/ape.ts","fixtures:mp3":"tsx scripts/fixtures/mp3.ts","fixtures:mp4":"tsx scripts/fixtures/mp4.ts","fixtures:ogg":"tsx scripts/fixtures/ogg.ts","fixtures:wav":"tsx scripts/fixtures/wav.ts","fixtures:wma":"tsx scripts/fixtures/wma.ts","fixtures:aiff":"tsx scripts/fixtures/aiff.ts","fixtures:flac":"tsx scripts/fixtures/flac.ts","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"akabeko","email":"akabekobeko@gmail.com"},"repository":{"url":"git+https://github.com/akabekobeko/npm-music-metadata-editor.git","type":"git","directory":"packages/core"},"description":"This is a library for reading and writing metadata of music files.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","vitest":"^4.1.10","typescript":"^7.0.2","@types/node":"^26.2.0","@tsconfig/node24":"^24.0.4"},"_npmOperationalInternal":{"tmp":"tmp/music-metadata-editor_1.1.0_1786777300609_0.10772080820823038","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@akabeko/music-metadata-editor","version":"1.1.1","keywords":["music","metadata","audio","tag","tags","editor","edit","writer","write","reader","read","parse","parser","duration","mp3","mp4","m4a","m4b","flac","ogg","ape","MonkeyAudio","wav","aiff","wma","asf","Vorbis","Opus","ID3","ID3v1","ID3v2","chapter","Chapters","lyrics","picture","artwork"],"author":"akabeko (http://akabeko.me/)","license":"MIT","_id":"@akabeko/music-metadata-editor@1.1.1","maintainers":[{"name":"akabeko","email":"akabekobeko@gmail.com"}],"homepage":"https://github.com/akabekobeko/npm-music-metadata-editor/tree/main/packages/core#readme","bugs":{"url":"https://github.com/akabekobeko/npm-music-metadata-editor/issues"},"dist":{"shasum":"36a99e1dbd1dad228d09fd40910107785b32add7","tarball":"https://registry.npmjs.org/@akabeko/music-metadata-editor/-/music-metadata-editor-1.1.1.tgz","fileCount":622,"integrity":"sha512-1Tp/pBrw+iYcpL0gPpkocHwcrTu4N/UoBGOB4PoCIdyY/3M1i1bU7ivEN+Z4GxP7rbQSSP7u+gNAV3ayPcM1dg==","signatures":[{"sig":"MEYCIQDxKkpJKrQ0oXFU/FsFiC5kgMK9OEbpo+JhXtigw+SxFQIhAORkSIWJePYLB8CicVdbMEABxshJT+YP4HTvVz4EqxBq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":748818},"main":"./dist/mme.js","type":"module","types":"./dist/mme.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/mme.d.ts","default":"./dist/mme.js"}},"scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist coverage","typecheck":"tsc --noEmit","test:watch":"vitest","fixtures:ape":"tsx scripts/fixtures/ape.ts","fixtures:mp3":"tsx scripts/fixtures/mp3.ts","fixtures:mp4":"tsx scripts/fixtures/mp4.ts","fixtures:ogg":"tsx scripts/fixtures/ogg.ts","fixtures:wav":"tsx scripts/fixtures/wav.ts","fixtures:wma":"tsx scripts/fixtures/wma.ts","fixtures:aiff":"tsx scripts/fixtures/aiff.ts","fixtures:flac":"tsx scripts/fixtures/flac.ts","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"akabeko","email":"akabekobeko@gmail.com"},"repository":{"url":"git+https://github.com/akabekobeko/npm-music-metadata-editor.git","type":"git","directory":"packages/core"},"description":"This is a library for reading and writing metadata of music files.","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","vitest":"^4.1.10","typescript":"^7.0.2","@types/node":"^26.2.0","@tsconfig/node24":"^24.0.4"},"_npmOperationalInternal":{"tmp":"tmp/music-metadata-editor_1.1.1_1786870891222_0.24016148273586357","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"_id":"@akabeko/music-metadata-editor@1.2.0","bugs":{"url":"https://github.com/akabekobeko/npm-music-metadata-editor/issues"},"dist":{"shasum":"b389eb16644200b2b9ba5e69eabe1e0beba528ae","tarball":"https://registry.npmjs.org/@akabeko/music-metadata-editor/-/music-metadata-editor-1.2.0.tgz","fileCount":654,"integrity":"sha512-o7uYTT/cL8IExKv2I8iuwsOEffpmiT36F3djBQ+SR6qQPGDbr9Wg0yrUgKkyXF2QKofLiDveumIJ4UL4SxqIPg==","signatures":[{"sig":"MEYCIQDWn7KDK5DfZ77FfDaWSh0XyTHW/p7Wae/JYUm7jcYqKQIhAKHlxAwREapJZhCHtKduOCGmqI3vT/yg/JNtmkMvhjgm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIE45BTj6zlQYKdDsaHVKurO1myK37KgHFKf4Xw1yo7CeAiEA45qIdOnEPPEpahSNgLMUd8KWk+66k1d3E0MKjO+929Q="}],"unpackedSize":783967},"main":"./dist/mme.js","name":"@akabeko/music-metadata-editor","type":"module","types":"./dist/mme.d.ts","author":"akabeko (http://akabeko.me/)","engines":{"node":">=24"},"exports":{".":{"types":"./dist/mme.d.ts","default":"./dist/mme.js"}},"license":"MIT","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","typecheck":"tsc --noEmit","test:watch":"vitest","fixtures:ape":"tsx scripts/fixtures/ape.ts","fixtures:mp3":"tsx scripts/fixtures/mp3.ts","fixtures:mp4":"tsx scripts/fixtures/mp4.ts","fixtures:ogg":"tsx scripts/fixtures/ogg.ts","fixtures:wav":"tsx scripts/fixtures/wav.ts","fixtures:wma":"tsx scripts/fixtures/wma.ts","fixtures:aiff":"tsx scripts/fixtures/aiff.ts","fixtures:flac":"tsx scripts/fixtures/flac.ts"},"version":"1.2.0","_npmUser":{"name":"akabeko","email":"akabekobeko@gmail.com"},"homepage":"https://github.com/akabekobeko/npm-music-metadata-editor/tree/main/packages/core#readme","keywords":["music","metadata","audio","tag","tags","editor","edit","writer","write","reader","read","parse","parser","duration","mp3","mp4","m4a","m4b","flac","ogg","ape","MonkeyAudio","wav","aiff","wma","asf","Vorbis","Opus","ID3","ID3v1","ID3v2","chapter","Chapters","lyrics","picture","artwork"],"repository":{"url":"git+https://github.com/akabekobeko/npm-music-metadata-editor.git","type":"git","directory":"packages/core"},"description":"This is a library for reading and writing metadata of music files.","directories":{},"maintainers":[{"name":"akabeko","email":"akabekobeko@gmail.com"}],"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.13","vitest":"^5.0.1","typescript":"^7.0.2","@types/node":"^26.6.1","@tsconfig/node24":"^24.0.5"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/music-metadata-editor_1.2.0_1790149565528_0.7488777365987216"}}},"time":{"created":"2026-05-02T07:57:24.726Z","modified":"2026-09-23T07:46:05.759Z","1.0.0":"2026-05-02T07:57:24.981Z","1.0.1":"2026-06-07T08:01:44.658Z","1.0.2":"2026-08-09T23:30:26.595Z","1.0.4":"2026-08-14T06:28:10.278Z","1.1.0":"2026-08-15T07:01:40.785Z","1.1.1":"2026-08-16T09:01:31.392Z","1.2.0":"2026-09-23T07:46:05.608Z"},"bugs":{"url":"https://github.com/akabekobeko/npm-music-metadata-editor/issues"},"author":"akabeko (http://akabeko.me/)","license":"MIT","homepage":"https://github.com/akabekobeko/npm-music-metadata-editor/tree/main/packages/core#readme","keywords":["music","metadata","audio","tag","tags","editor","edit","writer","write","reader","read","parse","parser","duration","mp3","mp4","m4a","m4b","flac","ogg","ape","MonkeyAudio","wav","aiff","wma","asf","Vorbis","Opus","ID3","ID3v1","ID3v2","chapter","Chapters","lyrics","picture","artwork"],"repository":{"url":"git+https://github.com/akabekobeko/npm-music-metadata-editor.git","type":"git","directory":"packages/core"},"description":"This is a library for reading and writing metadata of music files.","maintainers":[{"name":"akabeko","email":"akabekobeko@gmail.com"}],"readme":"# @akabeko/music-metadata-editor\n\n[![Test](https://github.com/akabekobeko/npm-music-metadata-editor/actions/workflows/test.yml/badge.svg)](https://github.com/akabekobeko/npm-music-metadata-editor/actions/workflows/test.yml) [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n\nEnglish / [Japanese](README.ja.md)\n\nA Node.js + TypeScript library for reading and writing audio file metadata. Designed as a function-only API (no classes) with first-class support for ESM and Node.js 24+.\n\n## Supported containers / tag formats:\n\n| Container | Read | Write | Notes |\n| --- | --- | --- | --- |\n| MP3 | ✓ | ✓ | ID3v2.3 / 2.4 + APE Tag + ID3v1 |\n| FLAC | ✓ | ✓ | Vorbis Comment + PICTURE block |\n| MP4 / M4A | ✓ | ✓ | iTunes-style atoms (`moov/udta/meta/ilst`) |\n| OGG | ✓ | ✓ | Vorbis / Opus comment headers |\n| APE | ✓ | ✓ | Monkey's Audio + APE Tag v1/v2 |\n| WAV (RIFF) | ✓ | ✓ | LIST INFO + BEXT + ID3 chunk |\n| AIFF | ✓ | ✓ | Native annotation chunks + ID3 chunk |\n| WMA / ASF | ✓ | ✓ | Content Description + Extended Content |\n\n## Install\n\n```sh\npnpm add @akabeko/music-metadata-editor\n# or: npm install @akabeko/music-metadata-editor\n```\n\nRequires Node.js 24 or newer.\n\n## Quick start\n\n### Load a track\n\n`loadTrack` accepts both a file path (`string`) and pre-loaded bytes (`Uint8Array`). The returned `Track` is a Plain Object.\n\n```ts\nimport { loadTrack } from \"@akabeko/music-metadata-editor\";\n\nconst track = await loadTrack(\"./song.mp3\");\nconsole.log(track.audioFormat);   // \"mp3\"\nconsole.log(track.tag.title);     // \"Hello\"\nconsole.log(track.tag.artist);    // \"akabeko\"\nconsole.log(track.durationMs);    // 215000 (or `undefined` when not derivable)\nconsole.log(track.pictures.length);\n```\n\n`durationMs` is a read-only audio-derived field. The reader computes it from sample-count / sample-rate / bitrate fields, and `saveTrack` never writes it back to the file (the writer recomputes it on the next read).\n\nIt is `undefined` when the source does not carry the values needed (e.g. a stripped-down fixture with no audio frames).\n\n> **MP3 caveat**:\n> Only CBR streams are supported.\n> VBR-encoded MP3 (Xing / Info / VBRI headers) is not parsed; on VBR files the returned duration is a CBR-based estimate, so it may diverge from the true playback time.\n\n### Save a modified track\n\n```ts\nimport { loadTrack, saveTrack } from \"@akabeko/music-metadata-editor\";\n\nconst track = await loadTrack(\"./song.mp3\");\nconst edited = {\n  ...track,\n  tag: { ...track.tag, title: \"New Title\", artist: \"New Artist\" },\n};\n\n// Overwrite the source file in place\nawait saveTrack(edited, { source: \"./song.mp3\" });\n\n// Or write to a different path\nawait saveTrack(edited, { source: \"./song.mp3\", outputPath: \"./out.mp3\" });\n\n// Or rebuild bytes without writing to a file\nconst bytes = await saveTrack(edited, { source: await readFile(\"./song.mp3\") });\n```\n\n### Delete a field\n\n`Track.tag` (and `WriteOptions.tag`) accepts three states per field:\n\n| Value | Effect |\n| --- | --- |\n| `undefined` (or absent) | Keep the value already stored in the file |\n| `null` | Remove the field from the file |\n| `\"\"` (string fields only) | Same as `null`, kept for backwards compatibility |\n\n`null` is the only way to remove numeric fields such as `year` / `bpm` / `rating` / `trackNumber`:\n\n```ts\nconst edited = {\n  ...track,\n  tag: { ...track.tag, bpm: null, comment: null },\n};\n\nawait saveTrack(edited, { source: \"./song.flac\" });\n// (await loadTrack(\"./song.flac\")).tag.bpm === undefined\n```\n\n`saveTrack` accepts a `SavableTrack` (a `Track` whose `tag` may carry `null`), so spreading a loaded track and setting a field to `null` type-checks as-is. Formats that store several fields in one physical entry (`year` / `recordingDate` in Vorbis `DATE` or MP4 `©day`, `trackNumber` / `trackTotal` in `trkn`) keep the sibling value when only one side is cleared.\n\n### Edit cover art\n\n```ts\nimport { loadTrack, saveTrack, PictureKind } from \"@akabeko/music-metadata-editor\";\nimport { readFile } from \"node:fs/promises\";\n\nconst track = await loadTrack(\"./song.mp3\");\nconst cover = await readFile(\"./cover.jpg\");\nconst edited = {\n  ...track,\n  pictures: [\n    { mimeType: \"image/jpeg\", kind: PictureKind.CoverFront, data: cover },\n  ],\n};\n\nawait saveTrack(edited, { source: \"./song.mp3\" });\n```\n\n### Edit lyrics\n\n```ts\nconst edited = {\n  ...track,\n  lyrics: {\n    language: \"eng\",\n    description: \"Lyrics\",\n    unsynchronized: \"Hello, world\\nLine two\\n\",\n  },\n};\n\nawait saveTrack(edited, { source: \"./song.mp3\" });\n```\n\nFor synchronized lyrics, populate `lyrics.synchronized` with `{ timeMs, text }[]` (sorted by `timeMs`).\n\n## Two-layer API\n\n| Layer | Functions | When to use |\n| --- | --- | --- |\n| High-level | `loadTrack`, `saveTrack` | Most workflows. Returns a stable `Track` Plain Object with `additionalFields` / `warnings` defaults. |\n| Low-level | `readMetadata`, `writeMetadata` | When you need the raw `MetadataReadResult` or want to pass `WriteOptions` directly. |\n\nBoth layers honour the same `ReadOptions` (e.g. `tagPriority` for MP3) and `format` override for files without recognizable extensions or signatures.\n\n```ts\nimport { readMetadata } from \"@akabeko/music-metadata-editor\";\n\nconst result = await readMetadata(\"./song.mp3\", { tagPriority: [\"ape\", \"id3v2\", \"id3v1\"] });\n```\n\n## Errors and warnings\n\nAll thrown errors are `MmeError`, a tagged `Error` with a defined `code`.\n\n```ts\nimport { loadTrack, isMmeError } from \"@akabeko/music-metadata-editor\";\n\ntry {\n  await loadTrack(\"./mystery.bin\");\n} catch (error) {\n  if (isMmeError(error) && error.code === \"unsupported-format\") {\n    // ...\n  }\n}\n```\n\n| Code | Meaning |\n| --- | --- |\n| `unsupported-format` | Format could not be detected, or no reader/writer is registered. |\n| `invalid-tag` | A tag block was found but its bytes were structurally invalid. |\n| `truncated-input` | The input ended before a required structure could be read in full. |\n| `unsupported-feature` | The input uses a feature not yet supported (e.g. compression / encryption). |\n\nRecoverable problems do not throw — they are collected as non-fatal diagnostics on `Track.warnings: readonly Warning[]`. For example, a single malformed frame inside an otherwise valid tag falls into this category.\n\n## Field mapping\n\nThe mapping between each tag format and the common `TagData` shape is documented in [field-mapping.md](https://github.com/akabekobeko/npm-music-metadata-editor/blob/main/docs/field-mapping.md).\n\n## Documentation\n\n- [docs/](https://github.com/akabekobeko/npm-music-metadata-editor/tree/main/docs) — documentation index\n- [docs/rules/](https://github.com/akabekobeko/npm-music-metadata-editor/tree/main/docs/rules) — coding / testing / git rules\n- [docs/plan.md](https://github.com/akabekobeko/npm-music-metadata-editor/blob/main/docs/plan.md) — index of per-package implementation plans\n\n## References\n\nReference implementation:\n\n- [Zeugma440/atldotnet](https://github.com/Zeugma440/atldotnet)\n  - C# audio-metadata library used as the behavioural reference for this project.\n  - Cross-format compatibility table: [Google Sheet](https://docs.google.com/spreadsheets/d/1Wo9ifsKbBloofdWCsoXziAtaS-QVjqci5aavAV8dt2U/)\n\nSpecifications and supporting documentation:\n\n- [ID3v2.3](https://id3.org/id3v2.3.0) / [ID3v2.4 structure](https://id3.org/id3v2.4.0-structure) / [ID3v2.4 frames](https://id3.org/id3v2.4.0-frames)\n- [APE Tag (HydrogenAudio wiki)](https://wiki.hydrogenaud.io/index.php?title=APE_key) and [Monkey's Audio](https://www.monkeysaudio.com/)\n- [FLAC format](https://xiph.org/flac/format.html) and [Vorbis Comment](https://xiph.org/vorbis/doc/v-comment.html)\n- [RFC 3533 — Ogg Encapsulation](https://datatracker.ietf.org/doc/html/rfc3533) and [RFC 7845 — Ogg Encapsulation for Opus](https://datatracker.ietf.org/doc/html/rfc7845)\n- [ISO/IEC 14496-12 — ISO Base Media File Format (MP4)](https://en.wikipedia.org/wiki/ISO/IEC_base_media_file_format) and [iTunes Metadata atoms (AtomicParsley)](https://atomicparsley.sourceforge.net/mpeg-4files.html)\n- [RIFF (Wikipedia)](https://en.wikipedia.org/wiki/Resource_Interchange_File_Format), [WAV `LIST/INFO`](https://www.recordingblogs.com/wiki/list-chunk-of-a-wave-file), and [AIFF (Wikipedia)](https://en.wikipedia.org/wiki/Audio_Interchange_File_Format)\n- [Advanced Systems Format (ASF / WMA)](https://en.wikipedia.org/wiki/Advanced_Systems_Format)\n","readmeFilename":""}