Find any moment, when you need it

Unlock the wealth of data stored in any video. Twelve Labs can index petabytes of video content and make it semantically searchable with everyday language.

Find any moment, when you need it

Unlock the wealth of data stored in any video. Twelve Labs can index petabytes of video content and make it semantically searchable with everyday language

OUR STRENGTH

Search supercharged by video understanding AI

Get precise results

Use everyday language for lightning-fast, context-aware searches that pinpoint the exact moment you need in any video.

Search by text or image

Search in natural language or with image to quickly uncover semantically related moments within your videos. Explore a whole new dimension of multimodal search.

Search across modalities

Understand your video data like never before and search across speech, text, audio and visuals — making video data searchable across modalities.

AI that understands your business

Fine tune our foundation models to learn the nuances of your business enabling search in language natural to your team.

PROBLEM SPACE

Move on from the old ways of tagging video

Manually logging videos is time-consuming and unscalable
Transcripts miss critical elements of your video, such as visuals and sounds
Object-level tags miss the context needed to add real value to your video
Marengo
Millions of searches powered

Marengo has been trusted by developers around the world to run millions of queries.

15 min to index an hour of video

Our cutting edge infrastructure allows you to index videos in a quarter of their length. Large library? Parallelize indexing to save time.

Multilingual support for 100+ languages

Break through language barriers with the ability to search in over 100 languages, allowing users to freely search in their preferred language

Our state of the art embedding model — Marengo-2.6

USE CASES

Find any scene in natural language

Pinpoint exact moments in vast video libraries. Allow your customers to magically find any video moment within your platform.
flexibility

Deploy with flexibility

Whether you prefer native cloud, private cloud,
or on-premise, our APIs can run in any environment.
SDK

We're developers that build for developers

Hit the ground running for any project using our dev friendly SDK. Available now in Python, and JS with Golang and Java coming soon.
Try now

Python

from

import os

client = TwelveLabs(<"YOUR_API_KEY">)

# Create new Index

index = client.index.create(

        name="My First Index",

        engines=[

            {

                "name": "marengo2.6",

                "options": ["visual", "conversation", "text_in_video"],

            },

        ],

    )

# Create new Task on Index (Upload video)

video_path = os.path.join(os.path.dirname(__file__), "<YOUR_FILE_PATH>")

task = client.task.create(index_id=index.id, file=video_path, language="en")

# Wait for indexing to finish

task.wait_for_done()

# Search from your index

query = "An artist climbing up the ladder that he painted."

result = client.search.query(index.id, query, ["visual", "conversation"])

print(result)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

from twelvelabs import TwelveLabs
import os

client = TwelveLabs(<"YOUR_API_KEY">)

# Create new Index
index = client.index.create(        
     name="My First Index",
     engines=[
       {                
         "name": "marengo2.6",
         "options": ["visual", "conversation", "text_in_video"],
       },
     ],
  )
# Create new Task on Index (Upload the video)
video_path = os.path.join(os.path.dirname(__file__), "<YOUR_FILE_PATH>")
task = client.task.create(index_id=index.id, file=video_path, language="en")

# Wait for indexing to finish
task.wait_for_done()

# Search from your index
query = "An artist climbing up the ladder that he painted."
result = client.search.query(index.id, query, ["visual", "conversation"])
print(result)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

SearchResult(
  pool=SearchPool(
    total_count=16, total_duration=1754.0, index_id="<INDEX_ID>"
  ),
  data=[
     SearchData(
       score=83.07,
       start=30.09375,
       end=45.671875,
       video_id=<VIDEO_ID>",
       metadata=[{"type":"visual"}], 
       confidence="high",
       thumbnail_url=None,
       module_confidence=None,
     ),
...
  ],
  page_info=SearchPageInfo(
  limit_per_page=10,
  total_results=73,
  page_expired_at="2024-03-04T01:23:08Z",
  next_page_token="<NEXT_PAGE_TOKEN>",
  prev_page_token=None,
  ),
)

Python

from

import os

client = TwelveLabs(<"YOUR_API_KEY">)

# Create new Index

index = client.index.create(

        name="My First Index",

        engines=[

            {

                "name": "marengo2.6",

                "options": ["visual", "conversation", "text_in_video"],

            },

        ],

    )

# Create new Task on Index (Upload video)

video_path = os.path.join(os.path.dirname(__file__), "<YOUR_FILE_PATH>")

task = client.task.create(index_id=index.id, file=video_path, language="en")

# Wait for indexing to finish

task.wait_for_done()

# Search from your index

query = "An artist climbing up the ladder that he painted."

result = client.search.query(index.id, query, ["visual", "conversation"])

print(result)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

import { TwelveLabs } from 'twelvelabs';
import fs from 'fs';
import path from 'path';

const client = new TwelveLabs({ apiKey: '<YOUR_API_KEY>' });

// Create new Index
const index = await client.index.create({
    name: 'My First Index',
    engines: [
      {
        name: 'marengo2.6',
        options: ['visual', 'conversation', 'text_in_video'],
      },
    ]
  });

// Create new Task on Index (Upload the video)
const videoPath = path.join(__dirname, '<YOUR_FILE_PATH>');
const task = await client.task.create({
  indexId: index.id,
  file: fs.createReadStream(videoPath),
language: 'en',
});

// Wait for indexing to finish
await task.waitForDone();

// Search from your index
const query = 'An artist climbing up the ladder that he painted';
const result = await client.search.query({
    indexId: index.id,
    query,
    options: ['visual', 'conversation'],
  });
console.log(result);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

SearchResult(
  pool: {
    totalCount: 16,
    totalDuration: 1754,
    indexId: '<INDEX_ID>'
  ),
  data: [
    {
      score: 83.07,
      start: 30.09375,
      end: 45.671875,
      metadata: [Array],
      vvideoId: '<VIDEO_ID>'
      confidence: 'high', 
      modules: [Array]
    },
...
  ],
  pageInfo: {
    limitPerPage: 10,,
    totalResults: 73
    pageExpiredAt: '2024-03-04T01:29:55Z',
    nextPageToken: '45e12410-5e5b-4a45-9a55-12b8a838fd99-1'
  }
}

Coming soon
Coming soon

Python

from

import os

client = TwelveLabs(<"YOUR_API_KEY">)

# Create new Index

index = client.index.create(

        name="My First Index",

        engines=[

            {

                "name": "marengo2.6",

                "options": ["visual", "conversation", "text_in_video"],

            },

        ],

    )

# Create new Task on Index (Upload video)

video_path = os.path.join(os.path.dirname(__file__), "<YOUR_FILE_PATH>")

task = client.task.create(index_id=index.id, file=video_path, language="en")

# Wait for indexing to finish

task.wait_for_done()

# Search from your index

query = "An artist climbing up the ladder that he painted."

result = client.search.query(index.id, query, ["visual", "conversation"])

print(result)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

from twelvelabs import TwelveLabs
import os

client = TwelveLabs(<"YOUR_API_KEY">)

# Create new Index
index = client.index.create(        
     name="My First Index",
     engines=[
       {                
         "name": "marengo2.6",
         "options": ["visual", "conversation", "text_in_video"],
       },
     ],
  )
# Create new Task on Index (Upload the video)
video_path = os.path.join(os.path.dirname(__file__), "<YOUR_FILE_PATH>")
task = client.task.create(index_id=index.id, file=video_path, language="en")

# Wait for indexing to finish
task.wait_for_done()

# Search from your index
query = "An artist climbing up the ladder that he painted."
result = client.search.query(index.id, query, ["visual", "conversation"])
print(result)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

SearchResult(
  pool=SearchPool(
    total_count=16, total_duration=1754.0, index_id="<INDEX_ID>"
  ),
  data=[
     SearchData(
       score=83.07,
       start=30.09375,
       end=45.671875,
       video_id=<VIDEO_ID>",
       metadata=[{"type":"visual"}], 
       confidence="high",
       thumbnail_url=None,
       module_confidence=None,
     ),
...
  ],
  page_info=SearchPageInfo(
  limit_per_page=10,
  total_results=73,
  page_expired_at="2024-03-04T01:23:08Z",
  next_page_token="<NEXT_PAGE_TOKEN>",
  prev_page_token=None,
  ),
)

Python

from

import os

client = TwelveLabs(<"YOUR_API_KEY">)

# Create new Index

index = client.index.create(

        name="My First Index",

        engines=[

            {

                "name": "marengo2.6",

                "options": ["visual", "conversation", "text_in_video"],

            },

        ],

    )

# Create new Task on Index (Upload video)

video_path = os.path.join(os.path.dirname(__file__), "<YOUR_FILE_PATH>")

task = client.task.create(index_id=index.id, file=video_path, language="en")

# Wait for indexing to finish

task.wait_for_done()

# Search from your index

query = "An artist climbing up the ladder that he painted."

result = client.search.query(index.id, query, ["visual", "conversation"])

print(result)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

import { TwelveLabs } from 'twelvelabs';
import fs from 'fs';
import path from 'path';

const client = new TwelveLabs({ apiKey: '<YOUR_API_KEY>' });

// Create new Index
const index = await client.index.create({
    name: 'My First Index',
    engines: [
      {
        name: 'marengo2.6',
        options: ['visual', 'conversation', 'text_in_video'],
      },
    ]
  });

// Create new Task on Index (Upload the video)
const videoPath = path.join(__dirname, '<YOUR_FILE_PATH>');
const task = await client.task.create({
  indexId: index.id,
  file: fs.createReadStream(videoPath),
language: 'en',
});

// Wait for indexing to finish
await task.waitForDone();

// Search from your index
const query = 'An artist climbing up the ladder that he painted';
const result = await client.search.query({
    indexId: index.id,
    query,
    options: ['visual', 'conversation'],
  });
console.log(result);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

SearchResult(
  pool: {
    totalCount: 16,
    totalDuration: 1754,
    indexId: '<INDEX_ID>'
  ),
  data: [
    {
      score: 83.07,
      start: 30.09375,
      end: 45.671875,
      metadata: [Array],
      vvideoId: '<VIDEO_ID>'
      confidence: 'high', 
      modules: [Array]
    },
...
  ],
  pageInfo: {
    limitPerPage: 10,,
    totalResults: 73
    pageExpiredAt: '2024-03-04T01:29:55Z',
    nextPageToken: '45e12410-5e5b-4a45-9a55-12b8a838fd99-1'
  }
}