Need help with ngx-webcam?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

165 Stars 79 Forks MIT License 164 Commits 31 Opened issues


A simple Angular webcam component / pure & minimal, no flash-fallback

Services available


Need anything else?

Contributors list

ngx-webcam npm version Build Status

A simple Angular webcam component. Pure & minimal, no Flash-fallback. See the Demo!

Plug-and-play. This library contains a single module which can be imported into every standard Angular 9+ project.

Simple to use. The one component gives you full control and lets you take snapshots via actions and event bindings.

Minimal. No unnecessary Flash-fallbacks, no bundle-size bloating.


Try out the Live-Demo or see the Demo-Project.


  • Webcam live view
  • Photo capturing
  • Smartphone compatibility for modern OS's (OS must support WebRTC/UserMedia API)
  • Access to front- and back-camera, if multiple cameras exist
  • Portrait & Landscape mode on smartphones
  • Mirrored live-view for user-facing cameras - "selfie view" on phones
  • Capturing of lossless pixel image data for better post-processing.


Runtime Dependencies

Note: Starting from version

this project requires TypeScript
>= 3.7.0
(Angular 9). For older versions of Angular/TypeScript, please use version
of this library. * Angular:
* Typescript:
* RxJs:
* Important: Your app must be served on a secure context using
or on localhost, for modern browsers to permit WebRTC/UserMedia access.


  • Current browser w/ HTML5 and WebRTC/UserMedia support (Chrome >53, Safari >11, Firefox >38, Edge)
  • Webcam / camera
  • User permissions to access the camera


1) Install the library via standard npm command:

npm install --save ngx-webcam

2) Import the

into your Angular module:
import {WebcamModule} from 'ngx-webcam';

@NgModule({ imports: [ WebcamModule, ... ], ... }) export class AppModule { }

3) Use the

on your pages:

As simple as that.

For more examples, see the code in the Demo-Project.

Options and Events

This section describes the basic inputs/outputs of the component. All inputs are optional.


  • trigger: Observable
    : An
    to trigger image capturing. When it fires, an image will be captured and emitted (see Outputs).
  • width: number
    : The maximal video width of the webcam live view.
  • height: number
    : The maximal video height of the webcam live view. The actual view will be placed within these boundaries, respecting the aspect ratio of the video stream.
  • videoOptions: MediaTrackConstraints
    : Defines constraints (MediaTrackConstraints) to apply when requesting the video track.
  • mirrorImage: string | WebcamMirrorProperties
    : Flag to control image mirroring. If the attribute is missing or
    and the camera claims to be user-facing, the image will be mirrored (x-axis) to provide a better user experience ("selfie view"). A string value of
    will prevent mirroring, whereas a value of
    will mirror every camera stream, even if the camera cannot be detected as user-facing. For future extensions, the
    object can also be used to set these values.
  • allowCameraSwitch: boolean
    : Flag to enable/disable camera switch. If enabled, a switch icon will be displayed if multiple cameras are found.
  • switchCamera: Observable
    : Can be used to cycle through available cameras (true=forward, false=backwards), or to switch to a specific device by deviceId (string).
  • captureImageData: boolean = false
    : Flag to enable/disable capturing of a lossless pixel ImageData object when a snapshot is taken. ImageData will be included in the emitted
  • imageType: string = 'image/jpeg'
    : Image type to use when capturing snapshots. Default is 'image/jpeg'.
  • imageQuality: number = 0.92
    : Image quality to use when capturing snapshots. Must be a number between 0..1. Default is 0.92.


  • imageCapture: EventEmitter
    : Whenever an image is captured (i.e. triggered by
    ), the image is emitted via this
    . The image data is contained in the
    data structure as both, plain Base64 string and data-url.
  • imageClick: EventEmitter
    : An
    to signal clicks on the webcam area.
  • initError: EventEmitter
    : An
    to signal errors during the webcam initialization.
  • cameraSwitched: EventEmitter
    : Emits the active deviceId after the active video device has been switched.

Good To Know

How to determine if a user has denied camera access

When camera initialization fails for some reason, the component emits a

via the
EventEmitter. If provided by the browser, this object contains a field
mediaStreamError: MediaStreamError
which contains information about why UserMedia initialization failed. According to Mozilla API docs, this object contains a
attribute which gives insight about the reason.

If the user denies permission, or matching media is not available, then the promise is rejected with NotAllowedError or NotFoundError respectively.

Determine if a user has denied permissions:

  public handleInitError(error: WebcamInitError): void {
    if (error.mediaStreamError && === "NotAllowedError") {
      console.warn("Camera access was not allowed by user!");


Here you can find instructions on how to start developing this library.



npm run packagr
to build the library. The build artifacts will be stored in the



npm start
to build and run the surrounding demo app with the
. Essential for live-developing.

Generate docs/


npm run docs
to generate the live-demo documentation pages in the

Running Unit Tests


npm run test
to run unit-tests.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.