`node-screenshots` is a native node.js screenshot library based on [XCap](https://github.com/nashaofu/xcap), It supports Mac, Windows, and Linux systems without any dependencies. `node-screenshots` supports screenshot and video recording (to be implemente
node-screenshots is a native node.js screenshot library based on XCap, It supports Mac, Windows, and Linux systems without any dependencies. node-screenshots supports screenshot and video recording (to be implemented).
English | įŽäŊ䏿
| Operating System | node16 | node18 | node20 |
| ---------------- | ------ | ------ | ------ |
| Windows x64 | â | â | â |
| Windows x32 | â | â | â |
| Windows arm64 | â | â | â |
| macOS x64 | â | â | â |
| macOS arm64 | â | â | â |
| Linux x64 gnu | â | â | â |
| Linux x64 musl | â | â | â |
``ts
const fs = require("fs");
const { Monitor } = require("node-screenshots");
let monitor = Monitor.fromPoint(100, 100);
console.log(monitor, monitor.id());
let image = monitor.captureImageSync();
fs.writeFileSync(${monitor.id()}-sync.png, image.toPngSync());
monitor.captureImage().then((data) => {
console.log(data);
fs.writeFileSync(${monitor.id()}.jpeg, data.toJpegSync());
});
const monitors = Monitor.all();
monitors.forEach((item) => {
console.log(
"Monitor:",
item.id(),
item.name(),
[item.x(), item.y(), item.width(), item.height()],
item.rotation(),
item.scaleFactor(),
item.frequency(),
item.isPrimary()
);
});
`
`ts
const fs = require("fs");
const { Window } = require("node-screenshots");
let windows = Window.all();
windows.forEach((item) => {
console.log({
id: item.id(),
x: item.x(),
y: item.y(),
y: item.z(),
width: item.width(),
height: item.height(),
rotation: item.rotation(),
scaleFactor: item.scaleFactor(),
isPrimary: item.isPrimary(),
});
let image = item.captureImageSync();
fs.writeFileSync(${item.id()}-sync.bmp, image.toBmpSync());
item.captureImage().then(async (data) => {
console.log(data);
let newImage = await data.crop(10, 10, 10, 10);
fs.writeFileSync(${item.id()}.png, await newImage.toPng());`
});
});
Full typeScript type definition: index.d.ts
- static all(): Array: Get all monitorstatic fromPoint(x: number, y: number): Monitor | null
- : Get a monitor from the specified coordinatescaptureImageSync(): Image
- : Synchronously capture imagecaptureImage(): Promise
- : Asynchronously capture image
- static all(): Array: Get all windowcaptureImageSync(): Image
- : Synchronously capture imagecaptureImage(): Promise
- : Asynchronously capture image
- cropSync(x: number, y: number, width: number, height: number): Image: Synchronously crop imagecrop(x: number, y: number, width: number, height: number): Promise
- : Asynchronously crop imagetoPngSync(copyOutputData?: boolean | undefined | null): Buffer
- :Synchronously Convert to pngtoPng(copyOutputData?: boolean | undefined | null): Promise
- : Asynchronously Convert to pngtoJpegSync(copyOutputData?: boolean | undefined | null): Buffer
- : Synchronously Convert to jpegtoJpeg(copyOutputData?: boolean | undefined | null): Promise
- : Asynchronously Convert to jpegtoBmpSync(copyOutputData?: boolean | undefined | null): Buffer
- : Synchronously Convert to bmptoBmp(copyOutputData?: boolean | undefined | null): Promise
- : Asynchronously Convert to bmptoRawSync(copyOutputData?: boolean | undefined | null): Buffer
- : Synchronously Convert to raw(RGBA data)toRaw(copyOutputData?: boolean | undefined | null): Promise
- : Asynchronously Convert to raw(RGBA data)
copyOutputData: pass related parameters in electron, otherwise electron will crash, nodejs does not pass or passes false, performance will be better, for more information refer to https://github.com/napi-rs/napi-rs/issues/1346
On Linux, you need to install libxcb, libxrandr, and dbus.
Debian / Ubuntu:
`sh`
apt-get install libxcb1 libxrandr2 libdbus-1-3
Alpine:
`sh``
apk add libxcb libxrandr dbus
- xcap - XCap is a cross-platform screen capture library written in Rust