Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
bartbutenaers opened this issue Jan 7, 2022 · 8 comments
Open

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

bartbutenaers opened this issue Jan 7, 2022 · 8 comments
Assignees
Labels
bug Something isn't working

Comments

@bartbutenaers
Copy link

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 bartbutenaers added the bug Something isn't working label Jan 7, 2022
@bartbutenaers
Copy link
Author

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
Copy link
Author

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!!

@matmen
Copy link
Owner

matmen commented Jan 7, 2022

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.

@bartbutenaers
Copy link
Author

bartbutenaers commented Jan 7, 2022

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 ...

@evanwashere
Copy link
Collaborator

evanwashere commented Jan 11, 2022

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

@matmen matmen removed their assignment Mar 9, 2022
@AndreKR
Copy link

AndreKR commented Aug 15, 2023

@bartbutenaers Are you currently using ImageScript successfully with Node-RED? Can you offer any guidance in my issue #30?

@bartbutenaers
Copy link
Author

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

@AndreKR
Copy link

AndreKR commented Aug 16, 2023

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

4 participants