{"name":"@deckyard/mp3","description":"Read and edit MP3 metadata - ID3v2.2/2.3/2.4 and ID3v1.1 tags, embedded artwork, MPEG audio frame and Xing/VBRI stream analysis - and build M3U/M3U8 playlists","versions":{"0.1.0":{"version":"0.1.0","kind":"git","url":"https://github.com/deckyard/deck-mp3.git","ref":"0.1.0","commit":"39f4b6993fa25fcce16bacf33a6dfd3cb39d4db9","checksum":"","yanked":false,"license":"LGPL-3.0-only","requires":{},"engines":{"jennifer":"\u003e=0.25.0","jennifer-tiny":"\u003e=0.25.0"},"capabilities":[],"keywords":["mp3","id3","id3v2","id3v1","mpeg"],"description":"Read and edit MP3 metadata - ID3v2.2/2.3/2.4 and ID3v1.1 tags, embedded artwork, MPEG audio frame and Xing/VBRI stream analysis - and build M3U/M3U8 playlists","publishedAt":"1793219529","repoId":1400569234,"repoOwnerId":346943577,"repoOwner":"deckyard"}},"readme":"# @deckyard/mp3\n\n[![test](https://github.com/deckyard/deck-mp3/actions/workflows/test.yml/badge.svg)](https://github.com/deckyard/deck-mp3/actions/workflows/test.yml)\n[![Documentation](https://img.shields.io/badge/docs-github%20pages-blue)](https://deckyard.github.io/deck-mp3/)\n[![release](https://img.shields.io/github/v/release/deckyard/deck-mp3)](https://github.com/deckyard/deck-mp3/releases/latest)\n\nA [Jennifer](https://jennifer-lang.dev/) deck that reads and writes MP3\nmetadata and M3U playlists, in pure Jennifer: ID3v2.2, 2.3 and 2.4 tags\n(unsynchronisation, compressed frames, all four text encodings, artwork),\nID3v1 and ID3v1.1 with the 192-entry genre table, MPEG frame headers with\nXing, Info and VBRI stream headers, and M3U / M3U8 playlists. One `Tag`\nstruct covers every tag version, for reading and for writing.\n\n## Install\n\n```sh\njvc add @deckyard/mp3\n```\n\njvc vendors the `src/` subtree to `vendor/deckyard/mp3/`. Without jvc, copy\n`src/` (the entry module `mp3.j` and `topics/`) from a checkout or a\n`deckyard-mp3-\u003cversion\u003e.tar.gz` release archive into that directory.\n\nRequires Jennifer 0.25.0 or newer, and runs on `jennifer-tiny`. No network,\nsubprocess or database; only `open`, `save`, `writeFile`, `openPlaylist` and\n`savePlaylist` touch the disk, through `fs`.\n\n## Example\n\n```jennifer\nuse io;\nimport \"@deckyard/mp3/\" as mp3;\n\ndef track as mp3.Track init mp3.open(\"song.mp3\");\nio.printf(\"%s\\n\", mp3.describe($track));\n# Maike Vandervaart - Ich war müde leer nicht mehr da  4:18  160 kbit/s VBR  44100 Hz  stereo\n\ndef tag as mp3.Tag init $track.tag;\n$tag.genre = \"Ambient\";\nmp3.save(mp3.withTag($track, $tag), \"song.mp3\");\n```\n\n## Documentation\n\n[The book](https://deckyard.github.io/deck-mp3/): guides, the on-disk\nformats, and a cheatsheet of every export. Runnable programs are in\n[`examples/`](examples/).\nContributors: the gate is `tools/check-all.sh`.\n\n## Licence\n\nLGPL-3.0-only, see [LICENSE](LICENSE). Copyright (C) 2026 mplx \u0026lt;mplx@jennifer-lang.dev\u0026gt;.\n"}