Skip to content

Instantly share code, notes, and snippets.

@IRON-M4N
Last active July 26, 2025 13:51
Show Gist options
  • Select an option

  • Save IRON-M4N/13f5cd6c35f3d6de5127d3364bd50b01 to your computer and use it in GitHub Desktop.

Select an option

Save IRON-M4N/13f5cd6c35f3d6de5127d3364bd50b01 to your computer and use it in GitHub Desktop.
Add metadata to mp3
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
};
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