# FaceGesturesModule

`hasEyebrowsFrowned`

`hasEyebrowsFrowned(face: Face): BoolSignal hasEyebrowsFrowned(face: Face, config: { observationPeriod: ?number, threshold: ?number, backlash: ?number }): BoolSignal` Returns a `BoolSignal` that indicates whether the specified `Face` object has frowned eyebrows. When specified:

* `config.threshold` overrides the default threshold; the default value is 1.0.
* `config.backlash` overrides the default backlash. Backlash is used to suppress unstable behavior when the eyebrow position is close to threshold.
* `config.observationPeriod` sets the period over which median eyebrow positions are tracked, in milliseconds.

There is no explicit underlying driver signal for this face gesture.

`hasEyebrowsRaised`

`hasEyebrowsRaised(face: Face): BoolSignal hasEyebrowsRaised(face: Face, config: { observationPeriod: ?number, threshold: ?number, backlash: ?number }): BoolSignal` Returns a `BoolSignal` that indicates whether the specified `Face` object has raised eyebrows. When specified:

* `config.threshold` overrides the default threshold; the default value is 1.0.
* `config.backlash` overrides the default backlash. Backlash is used to suppress unstable behavior when the eyebrow position is close to threshold.
* `config.observationPeriod` sets the period over which median eyebrow positions are tracked, in milliseconds.

There is no explicit underlying driver signal for this face gesture.

`hasLeftEyeClosed`

`hasLeftEyeClosed(face: Face): BoolSignal hasLeftEyeClosed(face: Face, config: { threshold: ?number, backlash: ?number }): BoolSignal` Returns a `BoolSignal` that indicates whether the specified `Face` object has its left eye open. When specified:

* `config.threshold` overrides the default threshold for eye openness.
* `config.backlash` sets the default backlash. Backlash is used to minimize state jitter while the openness is near the threshold value.

A signal goes ON when `Face.leftEye.openness` reaches `config.threshold` and goes OFF at `config.threshold + config.backlash`.

`hasMouthOpen`

`hasMouthOpen(face: Face): BoolSignal hasMouthOpen(face: Face, config: { threshold: ?number, backlash: ?number }): BoolSignal` Returns a `BoolSignal` that indicates whether the specified `Face` object has an open mouth. When specified:

* `config.threshold` overrides the default threshold for mouth openness.
* `config.backlash` overrides the default backlash. Backlash is used to suppress unstable behavior when the mouth openness is close to threshold.

A signal goes ON when `Face.mouth.openness` reaches `config.threshold` and goes OFF at `config.threshold - config.backlash`.

`hasRightEyeClosed`

`hasRightEyeClosed(face: Face): BoolSignal hasRightEyeClosed(face: Face, config: { threshold: ?number, backlash: ?number }): BoolSignal` Returns a `BoolSignal` that indicates whether the specified `Face` object has its right eye open. When specified:

* `config.threshold` overrides the default threshold for eye openness.
* `config.backlash` sets the default backlash. Backlash is used to minimize state jitter while the openness is near the threshold value.

A signal goes ON when `Face.rightEye.openness` reaches `config.threshold` and goes OFF at `config.threshold + config.backlash`.

`isHappy`

`isHappy(face: Face): BoolSignal` Returns a `BoolSignal` that indicates whether the specified `Face` object is a happy face.

`isKissing`

`isKissing(face: Face): BoolSignal` Returns a `BoolSignal` that indicates whether the specified `Face` object is a kissing face.

`isLeanedBack`

`isLeanedBack(face: Face): BoolSignal isLeanedBack(face: Face, config: { angle: ?number, backlash: ?number }): BoolSignal` Returns a `BoolSignal` that indicates whether the specified `Face` object is leaning back. When specified:

* `config.angle` overrides the default angular threshold, in radians.
* `config.backlash` overrides the default angular backlash, in radians. Backlash is used to suppress unstable behavior when the face rotation is close to threshold.

A signal goes ON when angle reaches `config.angle` and goes OFF at `config.angle - config.backlash`.

`isLeanedForward`

`isLeanedForward(face: Face): BoolSignal isLeanedForward(face: Face, config: { angle: ?number, backlash: ?number }): BoolSignal` Returns a `BoolSignal` that indicates whether the specified `Face` object is leaning forward. When specified:

* `config.angle` overrides the default angular threshold, in radians.
* `config.backlash` overrides the default angular backlash, in radians. Backlash is used to suppress unstable behavior when the face rotation is close to threshold.

A signal goes ON when angle reaches `config.angle` and goes OFF at `config.angle - config.backlash`.

`isLeanedLeft`

`isLeanedLeft(face: Face): BoolSignal isLeanedLeft(face: Face, config: { angle: ?number, backlash: ?number }): BoolSignal` Returns a `BoolSignal` that indicates whether the specified `Face` object is leaning to the left. When specified:

* `config.angle` overrides the default angular threshold, in radians.
* `config.backlash` overrides the default angular backlash, in radians. Backlash is used to suppress unstable behavior when the face rotation is close to threshold.

A signal goes ON when angle reaches `config.angle` and goes OFF at `config.angle - config.backlash`.

`isLeanedRight`

`isLeanedRight(face: Face): BoolSignal isLeanedRight(face: Face, config: { angle: ?number, backlash: ?number }): BoolSignal` Returns a `BoolSignal` that indicates whether the specified `Face` object is leaning to the right. When specified:

* `config.angle` overrides the default angular threshold, in radians.
* `config.backlash` overrides the default angular backlash, in radians. Backlash is used to suppress unstable behavior when the face rotation is close to threshold.

A signal goes ON when angle reaches `config.angle` and goes OFF at `config.angle - config.backlash`.

`isSmiling`

`isSmiling(face: Face): BoolSignal isSmiling(face: Face, config: { lipMix: ?number, threshold: ?number, backlash: ?number }): BoolSignal` Returns a `BoolSignal` that indicates whether the specified face is smiling. A smile is detected when a weighted sum of lip curvatures (`mouth.upperLipCurvature` and `mouth.lowerLipCurvature`) reaches a threshold. When specified:

* `config.lipMix` sets the proportion of the upper and lower lip curvatures in the sum. 0.0 is lower lip only, 1.0 is upper lip only.
* `config.threshold` overrides the default threshold value for the curvature mix.
* `config.backlash` overrides the default backlash. Backlash is used to suppress unstable behavior when the mixed curvature value is close to threshold.

A signal goes ON when `mouth.upperLipCurvature * config.lipMix + mouth.lowerLipCurvature * (1 - config.lipMix)` reaches `config.threshold` and goes OFF at `config.threshold - config.backlash`.

`isSurprised`

`isSurprised(face: Face): BoolSignal` Returns a `BoolSignal` that indicates whether the specified `Face` object is a surprised face.

`isTurnedLeft`

`isTurnedLeft(face: Face): BoolSignal isTurnedLeft(face: Face, config: { angle: ?number, backlash: ?number }): BoolSignal`

Returns a `BoolSignal` that indicates whether the specified `Face` object is turned to the left. When specified:

* `config.angle` overrides the default angular threshold, in radians.
* `config.backlash` overrides the default angular backlash, in radians. Backlash is used to suppress unstable behavior when the face rotation is close to threshold.

A signal goes ON when angle reaches `config.angle` and goes OFF at `config.angle - config.backlash`.

`isTurnedRight`

`isTurnedRight(face: Face): BoolSignal isTurnedRight(face: Face, config: { angle: ?number, backlash: ?number }): BoolSignal`

Returns a `BoolSignal` that indicates whether the specified `Face` object is turned to the right. When specified:

* `config.angle` overrides the default angular threshold, in radians.
* `config.backlash` overrides the default angular backlash, in radians. Backlash is used to suppress unstable behavior when the face rotation is close to threshold.

A signal goes ON when angle reaches `config.angle` and goes OFF at `config.angle - config.backlash`.

`onBlink`

`onBlink(face: Face): EventSource onBlink(face: Face, config: { threshold: ?number, backlash: ?number }): EventSource`

Returns an `EventSource` that fires when both eyes are closed. An eye is considered closed when its `openness` falls below a certain configurable threshold. When specified:

* `config.threshold` overrides the default threshold for determining eye openness.
* `config.backlash` sets the default backlash. Backlash is used to minimize state jitter while the openness is near the threshold value.

`onNod`

`onNod(face: Face): EventSource onNod(face: Face, config: { angle: ?number, period: ?number, swings: ?number }): EventSource`

Returns an `EventSource` that fires immediately after a face nod is detected. A face nod is a series of consecutive head swing down and up, the first movement is downwards. A swing is detected if the head rotates around the X axis by the specified threshold angle within the specified period of time. The threshold, the period and the number of swings can be configured. When specified:

* `config.angle` sets the minimum rotation for one swing, in radians.
* `config.period` sets the maximum time limit for one swing, in milliseconds.
* `config.swings` sets the count of consecutive alternating swings after which the gesture is detected.

`onShake`

`onShake(face: Face): EventSource onShake(face: Face, config: { angle: ?number, period: ?number, swings: ?number }): EventSource`

Returns an `EventSource` that fires immediately after a face shake is detected. A face shake is a series of consecutive head swings right and left. A swing is detected if the head rotates around the Y axis by the specified threshold angle within the specified period of time. The threshold, the period and the number of swings can be configured. When specified:

* `config.angle` sets the minimum rotation for one swing, in radians.
* `config.period` sets the maximum time limit for one swing, in milliseconds.
* `config.swings` sets the count of consecutive alternating swings after which the gesture is detected.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://sparkar-community.gitbook.io/docs/facegesturesmodule.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
