Почему пишет ошибку Error: Module did not self-register при работе с worker threads (canvas)?
ой, сколько я с этой фигней намучился в электроне...
Особо ничего и не сделаешь, т.к. модули ноды не работают в многопотоке. Даже если у вас и получится заимпортить модуль, при асинхронном callback'е будет падать нода. У меня получалось импортить, но модуль можно импортить только в одном потоке (главный поток тоже считается). т.е. если вы заимпортили модуль в главном потоке приложения, или в другом worker'е, снова заимпортить вы его не сможете. Можно конечно создать для каждого worker'а отдельный скомпилированный файл, но это костыль.
Единственное решение - форкать и править под многопоточность биндинг.
Разработчики более 3 лет подобные issue закрывают, как невозможные.

Это косяк разработчиков нативного модуля.
Данные модуля должны быть привязаны к контексту, в котором они создаются (NodeJS Context-aware addon)
И должны очищаться, когда контекст уничтожается, через спец. хук ноды

Разработчики сего аддона либо не знают этого, либо забивают в пользу поддержки старых версий ноды.

worker_thread, child_process используют собственные экземпляры Ноды для каждого потока.
Если нативный модуль не может это использовать, то это проблема разработчика нативного модуля.
Я вот ни в зуб ногой в синтаксисе C/C++, но смог нативную либу для кодирования изображений в h264 заставить работать как надо и в нодовских потоках (8-50 микросекунд на один 1080p фрейм).

Моего терпения переписывать за другими биндинг ещё и для этого модуля не хватит, склонирую модуль или буду кидаться данными из отдельного процесса (если совсем убого по роизводительности придётся лезть в C/C++ и кривыми руками говнокодить модуль, чтобы был производительнее, т.к. гуру C/C++ в опенсорс редко лезут без спонсоров).