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

# Indexes

> Use indexes to group related videos.

Indexes store and organize your video data, allowing you to group related videos. For example, you can create one index for all videos from a car race, then search for specific moments across all those videos in a single request.

# Model configuration

When you create an index, specify the Marengo video understanding model to search your videos and select the modalities it analyzes:

* **Visual**: Includes actions, objects, events, text through OCR, and brand logos.
* **Audio**: Includes ambient sounds, music, and human speech.

> **Notes**
>
> * The model configuration you specify applies to all videos you upload to the index.
> * You cannot change the model configuration after you create the index.
> * You can no longer add videos to an index that has only Pegasus 1.2 enabled. When you add videos to an index that has both Marengo and Pegasus 1.2 enabled, the platform indexes them with Marengo only.

# Create an index

Create a new index by calling the `client.indexes.create` function with the following parameters:

* `name`: A descriptive name for your index
* `models`: Your model configuration

This example creates an index with the Marengo model for video search, processing both visual and audio content:

**`Python`**

```python Python
index = client.indexes.create(
    index_name="<YOUR_INDEX_NAME>",
    models=[
        IndexesCreateRequestModelsItem(
            model_name="marengo3.0", model_options=["visual", "audio"]
        )
    ]
)
print(f"Created index: id={index.id}")
```

**`Node.js`**

```javascript Node.js
const index = await client.indexes.create({
indexName: "<YOUR_INDEX_NAME>",
models: [
    {
    modelName: "marengo3.0",
    modelOptions: ["visual", "audio"],
    },
],
});
console.log(`Created index: id=${index.id}`);
```

The response should look similar to the following one:

```
Created index: id=684018f7b4af41b9364d2b4d
```

Note that the response contains, among other information, a field named `id`, representing the unique identifier of your new index. Store this value to reference your index in future operations.

# Video hours and video count limits

Video hours measure the total duration of video you index. The limits depend on your plan.

| Plan       | Video hours per index | Videos per index |
| ---------- | --------------------- | ---------------- |
| Free       | 10                    | 100              |
| Developer  | 10,000                | 100,000          |
| Enterprise | Custom                | Custom           |

Note the following about the Free plan:

* You have a total of 600 minutes (10 hours) shared across indexing, analysis, and segmentation. You can split them however you choose. This limit is cumulative and does not reset if you delete indexes or videos.
* The example videos in the Playground (approximately 1 hour total) count toward this limit.

For details about each plan, see the [Pricing](https://www.twelvelabs.io/pricing) page. To increase your limits, [upgrade to the Developer plan](/v1.3/docs/get-started/manage-your-plan#upgrade-to-the-developer-plan).

# Related topics

* [Python SDK Reference > Create an index](/v1.3/sdk-reference/python/manage-indexes#create-an-index)
* [Node.js SDK Reference > Create an index](/v1.3/sdk-reference/node-js/manage-indexes#create-an-index)
* [API Reference > Create an index](/v1.3/api-reference/indexes/create)