Skip to content

gomander/napi-gif-encoder

 
 

Repository files navigation

napi-gif-encoder

https://github.com/gomander/napi-gif-encoder/actions

GIF Encoder for Node JS that tries to have reasonable performance.

This library is a fork of @tyrone-sudeium/napi-gif-encoder.
I made this fork because the original is not currently being maintained.

Install

npm install @gomander/napi-gif-encoder

Support matrix

Operating Systems

Linux x64/aarch64 macOS x64/aarch64 Windows x64

NodeJS

Theoretically, any version of Node.js that supports N-API should work. The CI is validated against LTS versions of Node:

Node 18 Node 20

Building

If you are using this as a dependency, since we use N-API, you don't need to build anything! However, if you want to tinker with this code or submit a PR, read below.

Developing

  • Install latest Rust. Suggest using rustup. If on Windows, use WSL for an easier time.
  • Install NodeJS@20+. LTS versions suggested.
  • Install [email protected].

You can then compile the rust code with:

yarn build

After yarn build/npm run build command, you can see napi-gif-encoder.[darwin|win32|linux].node file in project root. This is the native addon built from lib.rs.

Try out using sample project

  • yarn
  • yarn build
  • cd sample
  • yarn
  • node .

You'll then see output.gif, which was encoded using the rust encoder.

You can compare this to a Node-based GIF encoder by running node . --js.

Performance

This data is a ten-run average of the time it took to encode the sample project on a Ryzen 7 7800X3D.
Historical data from the original author also suggests that this library scales better with more cores than Node-based GIF encoders.

Encoder Time
gif-encoder-2 692ms
napi-gif-encoder 250ms

Todo

  • Add tests

Languages

  • Rust 89.0%
  • JavaScript 10.1%
  • TypeScript 0.9%