Skip to main content Link Search Menu Expand Document (external link)


Microsoft Kinect v2 (XBox One)

dp.kinect2 is a plugin for the Cycling '74 Max development environment to use the Microsoft Kinect v2 (XBox One) with a Windows computer.

:running_woman: Get started

Download, trial, license

Get a download, trial, or license from the store.

System requirements


  1. Install Cycling’74 Max version 6.1.9 or newer (64-bit or 32-bit)
  2. Download dp.kinect2 from
  3. Decompress this download and move the whole dp.kinect2 folder into your Packages folder. The default Max Packages folders are
    • Max 6: home-folder/Max/Packages
    • Max 7: home-folder/Max 7/Packages
    • Max 8: home-folder/Max 8/Packages
  4. Install Microsoft Kinect v2 Runtime.
  5. Install Microsoft Visual C++ Redistributable for VS 2015 for 64-bit and/or 32-bit architecture to match your installed Cycling’74 Max architecture(s).
  6. Plug your Kinect sensor into a USB 3.0 port. Do not plug any other USB devices into the same USB 3.0 controller because this Kinect model requires all the bandwidth of a USB 3.0 controller.
  7. Register dp.kinect2

Optional features


  1. Evaluate dp.kinect2 with a 14-day no-cost trial. When the plugin meets your needs, please visit to purchase a license from the store.
  2. Open the help file or patch included within the dp.kinect2 download.
  3. Click the top-left Register tab.
  4. Optional: Start a 14-day no-cost trial by clicking register trial then skip to the last step.
  5. Type your registration name in the field beside the register button. You received your registration name in an email from the online store. 🧐 Your registration name is usually not your email address.
  6. Click the register button and use the dialog box that appears to select your dp.kinect2 registration key (.dpreg file)
  7. You should see a successful registration. If not, please look at the Max console for any warnings or errors.


Standalone applications can be created with dp.kinect2. All standard features of dp.kinect2 will work. If you use the optional face features, you will need to copy the and the NuiDatabase folder into the support subfolder of your application.

Collectives can also be created and all standard features will work. Max 6 and Max 7 have a limitation; the optional files needed for face tracking can not be directly included within the collective file. I have created a workaround in the plugin codebase. It requires you copy the and the NuiDatabase folder into the same folder as the collective.

Please remember that your license for dp.kinect2 is only for one computer. You or your customers need additional licenses for each computer on which your standalone or collective runs.


dp.kinect2 is very compatible with dp.kinect. There are some known differences.

  • Kinect v2 matrices are fixed sizes. Changes to resolution attributes are ignored. Resize or crop with jit.matrix or other matrix operators if you need the same sizes as dp.kinect. Kinect v2 fixed sizes are:
    • 512x424: depthmap, infrared, playermap, pointcloud
    • 1920x1080: color
  • When the infrared (IR) output is set to the long type with @irtype 1, these values will range from [0..65535]. This is different than the [0..1023] range of dp.kinect. This wider range is due to the increased precision of the Kinect v2 sensor. If you must have the original [0..1023] range, use jit.op, jit.expr, or other matrix operators to scale the values in the matrix output. Please note, even though the Kinect v2 has more precision, the overall IR data is still degraded. See the IR degraded issue.
  • The face tracking pose scale value is always 1.0 until you enable @facesuau 1 or @face3dmodel. When either is enabled, the scale value will be updated.
  • The face tracking pose translation coordinate values is always the same as the head skeleton joint until you enable @facesuau or @face3dmodel. When either is enabled, the translation coordinate will be further refined to be a more exact head pivot point to use with 3D face modeling.
  • Face 2D points compatible with both dp.kinect and dp.kinect2 are @face2dpoints 2. This provides five basic 2D points: left eye, right eye, nose, left mouth corner, and right mouth corner.
  • Face animation units (AU) on dp.kinect2 are different than dp.kinect. Only @facesuau 2 is supported.
  • The @soundinfo attribute is only updated when dp.kinect2 is banged. This is different than dp.kinect which constantly updated the attribute.
  • The @sync attribute is not available in dp.kinect2 since all frames are synchronized by Microsoft. See the synchronization issue.
  • Microsoft does not support control of the IR emitter, color camera processing, or audio processing. Therefore, the following parameters are not present on dp.kinect2: iremitter, autoexposure, autowhitebalance, backlight, brightness, contrast, exposure, frameinterval, gain, gamma, hue, powerfreq, saturation, sharpness, whitebalance, autogain, echocancel.
  • Kinect v2 sensor works in all seated, near, and far situations while also having a 0.5-8.0 meter range. Therefore, these parameters are not available on dp.kinect2: @seated, @nearmode, @depthrange.
  • Kinect v2 does not have a tilt motor within itself. Therefore, the @elevation attribute only outputs the basic elevation relative to the horizon.
  • The following esoteric parameters are not available on dp.kinect2: @gravsmooth, @facerate, and @sensorrate.
  • The dumpout messages newkinect and lostkinect are not implemented. Microsoft’s API and drivers are not reliable for detecting plugged/unplugged sensors.

Known issues

  • Microsoft has isolated a performance problem that might occur with the Kinect v2 on Intel CPUs. Microsoft believes it is isolated to Kinect software that uses eventing to get Kinect data. dp.kinect2 does not use eventing to process core Kinect data. Therefore, I do not think dp.kinect2 is affected. I asked Microsoft for more information but have not received any to date. Microsoft does provide a workaround in this forum post.
  • With stress testing using a repeating Kinect Studio clip, a bug in the Microsoft Kinect v2 runtime was found when HD face tracking features are used. A private thread in their runtime accesses memory which is unavailable causing a crash in the runtime. The issue was escalated to Microsoft and they reproduced it. They have no fix. It is possible that the crash will not be seen in real-world usage. I recommend solid testing of any solutions that use HD face tracking to ensure stability.
  • All frames are synced by the Microsoft drivers. Out of sync or delayed frames are likely due to Microsoft limitations. Microsoft made a design decision to keep frames in sync even if it must drop the framerate to 15fps for the color camera to have enough light and therefore penalize the depth/body/ir/other frames. There is no workaround and therefore the @sync parameter is not available on dp.kinect2.
  • Microsoft has intentionally degraded the IR data. Intense IR regions do not linearly increase in v2 Runtime builds 1407 and higher including the final release. The newer builds oversaturate, use half the intensity bit range, and the data is poor. A bug has been logged with Microsoft in private forum and public forum. Microsoft acknowledges this is their issue and they will not fix it. The problem does not exist in 1406 or earlier releases of the Kinect v2 Runtime. There is no workaround.
  • Microsoft’s driver for the Kinect v2 does not dependably report the existence or absence of a Kinect. This is a known Microsoft issue reported in the private forum and public forum. Therefore, you can open a Kinect even when one isn’t plugged in. Or the driver might report there is no Kinect even though there is one plugged in. The result is sometimes the “open” will fail. Or you will get a successful open yet get repeatedly the last known data (which could be zeros). Set @unique 1 to prevent this errant data.

:open_book: Learn

Use search :mag: at the top or all below to find tutorials, features, attributes, methods, and more.


Skeleton Joint Changes Color
Learn how to get the real-world XYZ position of your left hand relative ...
View Sensor Depthmap
Learn how to view depth data (depthmap) as a monochrome image. A depthma...


Acceleration XYZ vector usually pointing towards gravity (where 1 unit =...
Align data to the perspective of the depth or color camera. This affects...
Parent jit.anim.node name adds plugin to jit.anim.node hierarchy.
Skeleton body properties output: restricted, handstate, lean, and the co...
Color camera single nominal focal length in pixels. Read-only.
Color camera field-of-view (degrees) in horizontal, vertical, diagonal d...
Color image output in choice of pixel format on the second outlet.
Resolution of color image that was enabled with @colormap
Color component in 8-bit unsigned integer or 32-bit normalized float. Th...
Depth camera single nominal focal length in pixels. Read-only.
Depth camera field-of-view (degrees) in horizontal, vertical, diagonal d...
Depth camera intrinsics for dp.kinect2 as a list of seven floats. Read-o...
Depth output on the first outlet. This combined with resolution @depthma...
Resolution of depth image that was enabled with @depthmap.
Filter source by tracked players. Deprecated. Use @onlyplayers.
Depth visibility filter removes double images and edge artifacts in imag...
Distance output in meters 1 or millimeters 0. This affects all distance ...
Elevation angle (degrees) of sensor relative to the horizon; a simple X-...
Face 2D key points in color camera uv coordinates output on the fifth ou...
Face 3D model output as a mesh in local face coordinate-space. The mesh ...
Face and hair color for each tracked face. Output on the fifth outlet. @...
Version numbers for face tracking DLL. Read only. Deprecated.
Face properties for the appearance or state of a tracked face. Output on...
Face tracking calculation and messages with 2D bounding box, rotation, t...
Face shape unit (SU) and animation unit (AU) output on the fifth outlet....
Smoothing for face animation units (AU) with the same five parameter Hol...
Flip or negate X-axis values of output (matrix images, joint positions, ...
Floor plane as x, y, z coordinates for a point on the plane and i, j, k ...
Floor plane message output on each bang. More efficient than querying th...
Path to the speech recognition grammar file. It is a GRXML file as defin...
Rotation relative to gravity message; angle (degrees) around a vector ou...
Identify/select sensor hardware model. It is read-only on some plugins. ...
Bind specific sensor to the plugin. Deprecated. Use @idsensor.
Rotation (degrees) to align depth, color, etc. images to gravity. Top pi...
Apply gamma correction to infrared image enabled with @irmap. Use to bri...
Infrared (IR) image output on the third outlet. This, resolution @irmapr...
Resolution of infrared image enabled with @irmap. Read-only. Controlled ...
Infrared (IR) values in 8-bit unsigned integer, long signed integer, or ...
Version numbers for main Kinect DLL. Read only. Deprecated.
Filter source by tracked players. Filtered data is zero-like. Possible v...
Skeleton joint orientation as quaternion, 4x4 matrix, hierarchical, or a...
Player indices for each pixel output on the fourth outlet. Pixels are a ...
Format of pointcloud output as three or four floating point values.
Filter skeleton body, joints, and face by their confidence. This confide...
Offset the origin of sensor data to this XYZ value. That is, translate s...
Rotate data by a quaternion in the form: i j k w. This is always synchro...
Register a license or get the status of registration.
Rotate data by an angle (degrees) around an XYZ vector in the form: angl...
Rotate data to compensate for gravity. This compensation is combined wit...
Rotate data by Euler angles (degrees) around the positive x, y, and z ax...
Scale the sensor data by this XYZ value. That is, multiply sensor data a...
Milliseconds of silence needed before completing a recognition that is n...
Milliseconds of silence needed before completing a recognition that is v...
Skeleton joint output from the fifth outlet in colormap coordinates. Thi...
Skeleton joint output from the fifth outlet in depthmap coordinates. Thi...
Skeleton, joint, and user tracking output on the fifth outlet. Output fo...
Message format for skeleton joints, users, faces, etc. Native Max messag...
Smoothing for skeleton joint values with either a simplified one paramet...
Real-time sound loudness, position angle, and confidence float values ar...
Real-time sound loudness, position, and confidence message output on the...
Speech recognition and speech interference output on the fifth outlet. I...
Constantly adapt speech recognition model to adjust for various speaker(...
Filter speech based on recognition confidence. Speech with the chosen co...
Version numbers for Speech DLL. Read only. Deprecated.
Speech recognition language and territory. US English en-us language sup...
Depthmap value in signed integer, 32-bit float, or 64-bit float. This ty...
Unique-only matrices and messages; bang may not output when no changes. ...
Verbose warnings and errors output to the Max Window for troubleshooting...
Version numbers for this plugin. Read only. Deprecated.


Query the plugin for updated data. Then, output matrices and messages fr...
Close and teardown the currently open connection to a sensor.
Transform depth pixel UVZ to color UV coordinates where U is column, V i...
Transform depth pixel UVZ to real-world XYZ coordinates where U is colum...
Output supported sensor identifiers on the dumpout outlet. These identif...
Open and initialize the connection to a sensor. When @idsensor has not b...
Transform real-world XYZ coordinates to color UV coordinates where U is ...
Transform real-world XYZ coordinates to depth UVZ coordinates where U is...
Unregister and remove a license.