Pure JavaScript FLAC Tag writer and reader.
Improved from flac-tagger to have native stream support and better memory handling for large files.
npm install flac-stream-tagger
import { FlacStreamTagger } from "flac-stream-tagger"; import { createReadStream } from "fs"; import { readFile } from "fs/promises"; // Create read stream from file (can use any readable stream does not have to be a file) const readStream = createReadStream("input.flac"); // Pipe any Readable stream into tagger const tagger = readStream.pipe(new FlacStreamTagger()); // or from buffer const tagger = FlacStreamTagger.fromBuffer(await readFile("input.flac"));
// Read tags const tags = await tagger.tags(); console.log(tags); // Read raw metadata blocks const blocks = await tagger.metaBlocks(); console.log(blocks); // read tag by vorbis comment name (case-insensitive) const { title, artist, album } = tags.tagMap; // read cover image const coverBuffer = tags.picture?.buffer;
import { FlacStreamTagger } from "flac-stream-tagger"; import { readFile } from "fs/promises"; const flacTags: FlacTags = { // write vorbis comments (names are case-insensitive) tagMap: { // single value title: "song title", // multiple values artist: ["artist A", "artist B"], album: "album name", }, // (optional) cover image picture: { buffer: await readFile("coverImage.jpg"), }, }; // Some input stream see Read example const inputStream: Readable; // Pipe any Readable stream into tagger const tagger = inputStream.pipe(new FlacStreamTagger(tags)); // or from buffer const tagger = FlacStreamTagger.fromBuffer(inputBuffer, tags); // Pipe tagger into any Writable stream tagger.pipe(createWriteStream("output.flac")); // or get the buffer cosnt buffer = await tagger.toBuffer();