Last active
July 26, 2025 13:51
-
-
Save IRON-M4N/13f5cd6c35f3d6de5127d3364bd50b01 to your computer and use it in GitHub Desktop.
Add metadata to mp3
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| const fs = require("fs"); | |
| const path = require("path"); | |
| const ID3Writer = require("browser-id3-writer"); //v4.4.0 | |
| // Implement getBuffer func | |
| /** | |
| * Add ID3 metadata to an mp3 | |
| * | |
| * @param {Buffer|string} Input - MP3 buffer, file, url | |
| * @param {Buffer|string} Cover - Image buffer, file, url | |
| * @param {Object} options - Metadata stuff | |
| * @param {string} options.title - e.g., "One voice" | |
| * @param {string[]} options.artist - e.g., ["Artist", "Artist2"...] | |
| * @param {string} options.album - e.g., "albumName" | |
| * @param {string} [options.year] - e.g., "6969" | |
| * @param {string|string[]} [options.genre] - e.g.["Synthwave", "EDM"] | |
| * @param {number} [options.trackNumber] - e.g., 1 | |
| * @param {string} - output path (default output.mp3) | |
| * @returns {Promise<Buffer>} - output mp3 buffer | |
| */ | |
| async function Mp3Metadata(Input, Cover, options = {}, output = "./output.mp3") { | |
| var { | |
| title = "Untitled song", | |
| artist = ["IRON-M4N"], | |
| album = "Thicc thighs", | |
| year, | |
| genre, | |
| trackNumber, | |
| } = options; | |
| var mp3_buff = await getBuffer(Input); | |
| var cover_buff = await getBuffer(Cover); | |
| var writer = new ID3Writer(mp3_buff); | |
| writer | |
| .setFrame("TIT2", title) | |
| .setFrame("TPE1", artist) | |
| .setFrame("TALB", album) | |
| .setFrame("APIC", { | |
| type: 3, | |
| data: cover_buff, | |
| description: "Song cover", | |
| }); | |
| if (year) writer.setFrame("TYER", year); | |
| if (genre) writer.setFrame("TCON", Array.isArray(genre) ? genre : [genre]); | |
| if (trackNumber) writer.setFrame("TRCK", `${trackNumber}`); | |
| writer.addTag(); | |
| var outputAud = Buffer.from(writer.arrayBuffer); | |
| var dir = path.dirname(output); | |
| await fs.promises.mkdir(dir, { recursive: true }); | |
| await fs.promises.writeFile(output, outputAud); | |
| return outputAud; | |
| } | |
| module.exports = { | |
| Mp3Metadata | |
| }; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| const { | |
| Mp3Metadata | |
| } = require("./Mp3Metadata.js"); | |
| (async () => { | |
| try { | |
| var buffer = await Mp3Metadata( | |
| "./audio.mp3", | |
| "https://files.catbox.moe/vvaqq7.jpg", | |
| { | |
| title: "One Voice", | |
| artist: ["Rokudenashi"], | |
| album: "One Voice", | |
| year: "2021", | |
| genre: ["J-Pop"], | |
| trackNumber: 1 | |
| }, | |
| "./audio.mp3" | |
| ); | |
| console.log("Succesful!"); | |
| } catch (err) { | |
| console.error("Error:", err); | |
| } | |
| })(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment