ImageScript icon indicating copy to clipboard operation
ImageScript copied to clipboard

[BUG] An error occurs when using the codecs in NodeJs

Open bartbutenaers opened this issue 3 years ago • 8 comments

Describe the bug Hi everybody, I have installed only this:

npm install @imagescript/codecs

But when I use afterwards this in a NodeJs program:

const imageCodecs = require("@imagescript/codecs");

Then I get following error: "Error: todo! (line:18)" My NodeJs supports wasm, because I use e.g. OpenCv wasm without problems.

To Reproduce Just call require("@imagescript/codecs"); in a NodeJs application

Expected behavior I don't expect a "TODO" error.

Platform:

  • OS: Windows 10
  • Environment : NodeJs v12.19.0
  • Version 0.0.1

Thanks a lot! Bart

bartbutenaers avatar Jan 07 '22 12:01 bartbutenaers

I assume I am completely using this library in the wrong way. Because the wasm index.js file only contains 1 statement (throw new Error('todo!');):

image

And even if would have passed through that point, then further on I would have got the same exception a bit further in the code (whether I set the environment variable or not doesn't matter):

image

My creativity has reached its limit. Hopefully you can illuminate me ;-)

bartbutenaers avatar Jan 07 '22 16:01 bartbutenaers

Ok it seems to work when I don't use @imagescript/codecs directly, but instead the imagescript which also seems to contain the codecs.

  1. So I assume the @imagescript/codecs is not to be meant to use as a standalone library?
  2. And is it correct that I need simply to add process.env['CODECS_FORCE_WASM'] = 1; before I load imagescript?

Thanks!!

bartbutenaers avatar Jan 07 '22 16:01 bartbutenaers

The ImageScript codecs currently don't include a WASM implementation (it's still WIP), so i'm not sure if it will work with node-red (not sure if it would be running server side or in a node-red dashboard (client side)). It would have to run on a supported platform (image) with the native modules (./codecs/node/index.js), but accessing those directly isn't really supported (or documented) right now.

matmen avatar Jan 07 '22 17:01 matmen

Hi @matmen,

Thanks for your quick response!!

The ImageScript codecs currently don't include a WASM implementation (it's still WIP)

Ah I wasn't aware of that. Because from the benchmarks on the readme page, I had concluded that WASM was already implemented for encoding and decoding... I am certainly not going to ask an open-source developer for an ETA ;-). But is this something you are working on, or is in the category 'maybe later maybe never'? In the latter case, I need to look for another solution? Which would be a pity, because I don't think there is another wasm solution ...

not sure if it would be running server side or in a node-red dashboard (client side)

Are you familiar with Node-RED somehow?
I would like to use this on the server side. Currently almost all image processing nodes in Node-RED handle their own encoding/decoding (mostly with jpeg-js). Although that is a very nice library, I have two problems with it:

  • It is just too slow when you want to do video surveillance with a bunch of cameras.
  • If every node does decode -> image processing --> encode, then a lot of cpu is being wasted because you get a series of decodings and encodings after each other.

I had hoped to develop a new node that could decode/encode images based on your library and wasm. So I first would decode the jpegs to raw images, then add multiple nodes in a chain that do processing on that raw image, and at the end a node to encode the (processed) raw images back to a jpeg:

image

This way we would only have one decoding, and one encoding. And both based on wasm for better performance.

Do you think something like that is a bit realistic? Because I would like to avoid native libraries (like sharp....), because when you e.g. run Node-RED in an (Alpine Linux Docker) there aren't even build tools available. So wasm would be a great alternative ...

bartbutenaers avatar Jan 07 '22 22:01 bartbutenaers

codecs package wasm support is blocked by ongoing imagescript port to rust for now you can vendor in and modify our current wasm jpeg encoder/decoder to fit your needs

evanwashere avatar Jan 11 '22 21:01 evanwashere

@bartbutenaers Are you currently using ImageScript successfully with Node-RED? Can you offer any guidance in my issue https://github.com/matmen/ImageScript/issues/30?

AndreKR avatar Aug 15 '23 20:08 AndreKR

@AndreKR, Unfortunately - due to lack of free time - I did not continue with this. Bart

bartbutenaers avatar Aug 16 '23 07:08 bartbutenaers

@bartbutenaers You might be interested to hear that Node-RED has recently introduced Debian-based images and ImageScript works fine with them.

AndreKR avatar Aug 16 '23 10:08 AndreKR