Output formats
Canvas & raw buffer
Get direct access to the underlying skia-canvas Canvas.
For custom rendering pipelines, drop down to the underlying canvas:
const canvas = await sone(doc).canvas(); // skia-canvas Canvas
const raw = await sone(doc).raw(); // raw pixel bufferWhen to use .canvas()
- Stamp the rendered output onto a larger composite Canvas you're building elsewhere.
- Pass the Canvas to a third-party library that expects a Canvas (e.g., a video encoder).
- Read pixel data via
getContext("2d").getImageData(...).
const canvas = await sone(doc).canvas();
const ctx = canvas.getContext("2d");
const data = ctx.getImageData(0, 0, canvas.width, canvas.height);When to use .raw()
When you need the raw pixel bytes without going through Canvas APIs — for example, feeding into a video pipeline or computing image hashes:
const raw = await sone(doc).raw(); // RGBA byte bufferMulti-page
For multi-page documents, use .pages() — it returns one Canvas per page:
const pages = await sone(doc, { pageHeight: 1056 }).pages();
// pages: Canvas[] — one per pageUseful for generating per-page thumbnails:
import fs from "node:fs/promises";
const pages = await sone(doc, { pageHeight: 1056 }).pages();
for (const [i, canvas] of pages.entries()) {
await fs.writeFile(`page-${i + 1}.png`, await canvas.toBuffer("png"));
}