Node.js library for USB Video Class (UVC) devices (node-uvc)

Node.js library for USB Video Class (UVC) devices. Used to write software for webcams, camcorders, etcetera.

UVC-compliant devices include webcams, digital camcorders, transcoders, analog video converters and still-image cameras.



  • Locate UVC devices on the system and retrieve out device details.
  • Change camera controls, such as image contrast, zoom, and toggling automatic settings.
  • Stream video and individual image frames.
  • Transform image data using standard Node.js streams.


  • Thin translation layer built for Javascript developer convenience.
  • Javascript class implementation.
    • Asynchronous async/await class methods.
    • Resource management using .initialize()/.uninitialize() methods.


Requires Node.js (node and npm commands). Published on npm as uvc.

npm install --save uvc


See ./examples/ for ready-to-run code.

const { Context, Device, DeviceHandle, LibUvc } = require("uvc");

const libuvc = new LibUvc();
await libuvc.initialize();

const context = new Context(libuvc);
await context.initialize();

const device = await context.findDevice();
await device.initialize();

const deviceHandle = await;
await deviceHandle.initialize();

// NOTE: use the UVC device here, for example using the Controls and FrameStreamer classes.

await deviceHandle.uninitialize();
await device.uninitialize();
await context.uninitialize();
await libuvc.uninitialize();


  • Requires a UVC device, such as a compatible webcam.
  • Get the source code from the node-uvc repository.
  • Follow git-flow and use git-flow-avh.
  • Make sure that all example code works by testing them manually.
# Make sure git-flow is initialized.
git flow init -d

npm run --silent test

See also

node-uvc Copyright © 2020, 2021 Joel Purra. Released under GNU Lesser General Public License version 3.0 (LGPL-3.0). Your donations are appreciated!