> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kinetixml.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Node Catalog

> An overview of every node supported by the Kinetix ML platform and supporting libraries.

## Key Point

### Pose Detection 2D `PoseDetection2D`

Detects 17 key points on a person's body including their major joints, eyes, ears, and nose. Helpful for analyzing body motion including body poses and athletic movements.

* **Parameters:**
  * Confidence Threshold (*Double*): 0.3
* **Inputs:**
  * *Image*
* **Outputs:**

  * KP Frame (*KPFrame*)

  **Platforms:**`JS`

### Face Mesh Detection `FaceMeshDetection`

Detects 17 key points on a person's body including their major joints, eyes, ears, and nose. Helpful for analyzing body motion including body poses and athletic movements.

* **Inputs:**
  * *Image*
* **Outputs:**

  * KP Frame (*KPFrame*)

  **Platforms:**`JS`

### Calculate Joint Angles `CalcJointAngles`

Calculates the 2D angle of each joint.

* **Inputs:**
  * *KPFrame*
* **Outputs:**

  * Angles (*Vec*)
  * Labels (*Label\[]*)

  **Platforms:**`JS`

### Three Key Point Angle `ThreeKPAngle`

Calculates the 2D angle between three key points.

* **Inputs:**
  * *KeyPoint*
  * *KeyPoint*
  * *KeyPoint*
* **Outputs:**

  * Angle (*Double*)

  **Platforms:**`JS`

### Key Point Distance `KPDist`

Calculates the distance between two key points.

* **Inputs:**
  * *KeyPoint*
  * *KeyPoint*
* **Outputs:**

  * Dist (*Double*)

  **Platforms:**`JS`

### Smooth Key Points `SmoothKeyPoints`

Performs a moving weighted average smoothing algorithm that prioritizes model confidence and weeds out outliers.

* **Parameters:**
  * Frame Count (*Int*): 10
* **Inputs:**
  * *KPFrame*
* **Outputs:**

  * KP Frame (*KPFrame*)

  **Platforms:**`JS`

### Crop Key Points `CropKeyPoints`

Performs a square crop around the region of the KPFrame for use with normalization.

* **Inputs:**
  * *KPFrame*
* **Outputs:**

  * KP Frame (*KPFrame*)

  **Platforms:**`JS`

### Normalize Key Points `NormKeyPoints`

Performs a L2 normalization on a cropped KPFrame.

* **Inputs:**
  * *KPFrame*
* **Outputs:**

  * KP Frame (*KPFrame*)

  **Platforms:**`JS`

### Normalize Key Points Size `NormKeyPointsSize`

Performs a normalization on a cropped KPFrame based on the width and height of the keypoints.

* **Inputs:**
  * *KPFrame*
* **Outputs:**

  * KP Frame (*KPFrame*)

  **Platforms:**`JS`

### Compare KPFrames `CompareKPFrames`

Performs a keypoint-wise cosine similarity on all the keypoints in two KPFrames.

* **Inputs:**
  * *KPFrame*
  * *KPFrame*
* **Outputs:**

  * Similarities (*Vec*)

  **Platforms:**`JS`

### Calculate Key Point Velocities `CalcKeyPointVelocities`

Calculates the velocity of each key point using the last frame as reference point.

* **Inputs:**
  * *KPFrame*
* **Outputs:**

  * Velocities (*Vec*)

  **Platforms:**`JS`

### Create Key Point `CreateKeyPoint`

Creates a key point object.

* **Inputs:**
  * *Double*
  * *Double*
  * *Double*
  * *String*
* **Outputs:**

  * Key Point (*KeyPoint*)

  **Platforms:**`JS`

### Get Key Point `GetKeyPoint`

Gets a key point object from a KPFrame.

* **Parameters:**
  * Index (*Int*): 0
* **Inputs:**
  * *KPFrame*
* **Outputs:**

  * Key Point (*KeyPoint*)

  **Platforms:**`JS`

### Deconstruct Key Point `DeconstructKeyPoint`

Deconstructs a key point object.

* **Inputs:**
  * *KeyPoint*
* **Outputs:**

  * x (*Double*)
  * y (*Double*)
  * score (*Double*)
  * name (*String*)

  **Platforms:**`JS`

### Set Key Point `SetKeyPoint`

Sets a key point object.

* **Parameters:**
  * Index (*Int*): 0
* **Inputs:**
  * *KPFrame*
  * *KeyPoint*
* **Outputs:**

  * KP Frame (*KPFrame*)

  **Platforms:**`JS`

### CreateCrop `CreateCrop`

Creates a crop rectangle from a KPFrame.

* **Inputs:**
  * *KPFrame*
  * *Image*
* **Outputs:**

  * crop (*Vec*)

  **Platforms:**`JS`

## Object Detection

### Roboflow Detect `RoboflowDetect`

Runs object detection on an input image using Roboflow Object Detection models.

* **Parameters:**
  * Model (*String*):
  * Version (*Int*): 1
  * API Key (*String*):
  * Confidence Threshold (*Double*): 0.5
  * Overlap Threshold (*Double*): 0.5
* **Inputs:**
  * *Image*
* **Outputs:**

  * BBox Frame (*BBoxFrame*)

  **Platforms:**`JS`

## Vector

### Smooth Vectors `SmoothVecs`

Performs a moving average smoothing algorithm on vectors.

* **Parameters:**
  * Frame Count (*Int*): 10
* **Inputs:**
  * *Vec*
* **Outputs:**

  * KP Frame (*Vec*)

  **Platforms:**`JS`

### Get Vector Value `GetVecValue`

Gets a value from a Vec.

* **Parameters:**
  * Index (*Int*): 0
* **Inputs:**
  * *Vec*
* **Outputs:**

  * Double (*Double*)

  **Platforms:**`JS`

### Set Vector Value `SetVecValue`

Sets a value to a Vec.

* **Parameters:**
  * Index (*Int*): 0
* **Inputs:**
  * *Vec*
  * *Double*
* **Outputs:**

  * Vec (*Vec*)

  **Platforms:**`JS`

## Display

### Draw Key Points `DrawKeyPoints`

Draws a KPFrame on an input canvas.

* **Parameters:**
  * Radius (percent) (*Double*): 0.1
* **Inputs:**

  * *KPFrame*
  * *Image*
  * *Canvas*

  **Platforms:**`JS`

### Draw Bounding Boxes `DrawBBoxFrame`

Draws a BBoxFrame on an input canvas.

* **Inputs:**

  * *BBoxFrame*
  * *Canvas*

  **Platforms:**`JS`

### Draw Labels `DrawLabels`

Draws Labels on an input canvas.

* **Inputs:**

  * *Label\[]*
  * *Image*
  * *Canvas*

  **Platforms:**`JS`

### Draw One Label `DrawLabel`

Draws one Label on an input canvas.

* **Inputs:**

  * *Label*
  * *Image*
  * *Canvas*

  **Platforms:**`JS`

### Create Label `CreateLabel`

Creates a label object.

* **Inputs:**
  * *Double*
  * *Double*
  * *String*
* **Outputs:**

  * Label (*Label*)

  **Platforms:**`JS`

## Math

### Add Inputs `AddInputs`

Adds two inputs.

* **Inputs:**
  * *Double*
  * *Double*
* **Outputs:**

  * Result (*Double*)

  **Platforms:**`JS`

### Divide Inputs `DivideInputs`

Divides two inputs.

* **Inputs:**
  * *Double*
  * *Double*
* **Outputs:**

  * Result (*Double*)

  **Platforms:**`JS`

### Multiply Inputs `MultiplyInputs`

Multiply two inputs.

* **Inputs:**
  * *Double*
  * *Double*
* **Outputs:**

  * Result (*Double*)

  **Platforms:**`JS`

### Subtract Inputs `SubtractInputs`

Subtracts two inputs.

* **Inputs:**
  * *Double*
  * *Double*
* **Outputs:**

  * Result (*Double*)

  **Platforms:**`JS`

### Constant `Constant`

Exports its parameter as an output for use with other nodes.

* **Parameters:**
  * Value (*String*): 0
  * Data Type (*String*): 0
* **Outputs:**

  * Data (*Any*)

  **Platforms:**`JS`

### Round `Round`

Rounds a Double to the closest whole number.

* **Inputs:**
  * *Double*
* **Outputs:**

  * rounded (*Int*)

  **Platforms:**`JS`

### Clamp `Clamp`

Clamps a value between a minimum and maximum.

* **Parameters:**
  * Minimum (*Double*): 0
  * Maximum (*Double*): 100
* **Inputs:**
  * *Double*
* **Outputs:**

  * clamped (*Int*)

  **Platforms:**`JS`

## Logic

### Conditional `Conditional`

Outputs a boolean based on the comparison of two inputs

* **Parameters:**
  * Operator (*String*): ==
* **Inputs:**
  * *Any*
  * *Any*
* **Outputs:**

  * Boolean (*Boolean*)

  **Platforms:**`JS`

### Switch `Switch`

Prevents execution based on a boolean value. The second input passes directly to the Passthrough output for use in the node after.

* **Inputs:**
  * *Boolean*
  * *Any*
* **Outputs:**

  * Passthrough (*Any*)

  **Platforms:**`JS`

## I/O

### Crop `Crop`

Rounds a Double to the closest whole number.

* **Inputs:**
  * *Vec*
  * *Image*
* **Outputs:**

  * cropped (*Image*)

  **Platforms:**`JS`
