> This page is for Expression Measurement.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://dev.hume.ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://dev.hume.ai/_mcp/server.

# Video

**The video endpoints measure emotional expression on faces in JPEG images you upload or in video you stream as JPEG frames.** For each face they detect, the endpoints return its bounding box. For the largest faces in each image, 2 by default, they also return two lists of scores: `expressions`, such as `amusement`, and `descriptions` of visible facial actions, such as `smile`.

## Upload or realtime

Both endpoints return the same measurements for the same image. Upload takes a set of images in one request, and realtime takes video one frame at a time.

<table>
  <thead>
    <tr>
      <th width="20%" />

      <th>
        [Upload](/expression-measurement/docs/video/upload)
      </th>

      <th>
        [Realtime](/expression-measurement/docs/video/realtime)
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <th>
        Endpoint
      </th>

      <td>
        `POST /v1/expression/video/file`
      </td>

      <td>
        `WSS /v1/expression/video/realtime`
      </td>
    </tr>

    <tr>
      <th>
        Input
      </th>

      <td>
        One or more JPEG images in one request, up to 25 MB
      </td>

      <td>
        Video frames, each a JPEG image in one binary frame
      </td>
    </tr>

    <tr>
      <th>
        Results
      </th>

      <td>
        One result per image, in the order the images were sent
      </td>

      <td>
        One 

        `measurement.result`

         for each measured frame
      </td>
    </tr>

    <tr>
      <th>
        Configuration
      </th>

      <td>
        A 

        `config`

         part
      </td>

      <td>
        `session.update`

        , before the first frame
      </td>
    </tr>

    <tr>
      <th>
        Face tracking
      </th>

      <td>
        `face_id`

         continues across requests when you pass back 

        `face_state`
      </td>

      <td>
        `face_id`

         follows the same face from frame to frame within a session
      </td>
    </tr>

    <tr>
      <th>
        Recorded as
      </th>

      <td>
        A run under the 

        `run_id`
      </td>

      <td>
        A run under the 

        `session_id`
      </td>
    </tr>
  </tbody>
</table>

## Next steps

#### [Image upload](/expression-measurement/docs/video/upload)

Upload JPEG images and receive scores for the faces in each image.

#### [Video realtime](/expression-measurement/docs/video/realtime)

Stream video as JPEG frames and receive scores for the faces in each frame.