0.1.0 • Published 6 months ago
napi-webp-animation v0.1.0
napi-webp-animation
A fully typed WebP animation package for NodeJS using Rust
⚠️ This project is a work-in-progress!
This package is a N-API wrapper for the webp-animation
Rust crate, but does not yet support all its features.
By virtue of being built with NAPI-RS, this package is fully typed, and compatible with ESM and CJS.
Install
# Node
[npm|pnpm|yarn] install napi-webp-animation
# Deno
deno add npm:napi-webp-animation
Usage
import { WebpEncoder } from 'napi-webp-animation'
// Create an encoder instance with width and height
const encoder = new WebpEncoder(100, 100)
// Change the frame rate from the default (30)
encoder.setFrameRate(24)
// Add your frames as buffers
for (const frameBuffer of frameBuffers) {
encoder.addFrame(frameBuffer)
}
// Encode the animated WebP and get the data as a buffer!
const data = await encoder.getBuffer()
// Or write it directly to file (also returns a buffer)
await encoder.writeToFile('output.webp')
// Output options can be set on `writeToFile`, `getBuffer`
await encoder.writeToFile('output.webp', {
lossless: false, // default true
quality: 75, // 0 (fast) - 100 (slower) - default 1
loopCount: 1 // 0 = infinite, n > 0 = play n times - default 0
})
// Synchronous methods are also available, and also support options
encoder.writeToFileSync('output.webp')
encoder.getBufferSync()
Support matrix
node18 | node20 | node22 | |
---|---|---|---|
Linux x64 gnu | ✓ | ✓ | ✓ |
macOS x64 | ✓ | ✓ | ✓ |
macOS aarch64 | ✓ | ✓ | ✓ |
Windows x64 | ✓ | ✓ | ✓ |
I have also tested with Deno and it works, though I have not written any automated tests for Deno.
Contributing
Issues and pull requests are welcome!
Particularly, I would love help setting up the CI to build for more platforms.
Developing
- If on Windows, recommend using WSL
- Install latest Rust
- Install latest LTS Node
- Install pnpm with
npm i -g pnpm
- Install dependencies with
pnpm i
Make your changes, and run the tests with pnpm test
.
You can then compile the rust code with pnpm build
.
After running pnpm build
, you will see a
napi-gif-encoder.<PLATFORM>.node
file in the project root.
This is the native addon built from lib.rs.