necessariamente você não vai manipular o Buffer diretamente pois isso ia ser trabalhoso demais, e acho que ninguém ensina isso, você tem que usar algum package de manipulação de imagens, por exemplo o canvas
nesse exemplo eu pego uma imagem apartir de um buffer, usando o package
canvas
eu giro ela, gero um buffer da imagem gerada e salvo em outro arquivo.
const { createCanvas, loadImage } = require("canvas");
const { readFileSync } = require("fs");
const canvas = createCanvas(800, 600);
const ctx = canvas.getContext("2d");
const imagemEmBuffer= fs.readFileSync("bla/bla/image.jpg");
loadImage(imagemEmBuffer).then((image) => {
ctx.save();
ctx.translate(400, 300);
ctx.rotate(Math.PI / 2);
ctx.drawImage(image, -300, -400, 600, 800);
ctx.restore();
const newBuffer = canvas.toBuffer();
fs.writeFileSync("bla/bla/imagem_rodada.jpg", newBuffer);
});