TwelveLabs

Features 🔥
- Fully generated C# SDK based on official TwelveLabs OpenAPI specification using AutoSDK
- Same day update to support new features
- Updated and supported automatically if there are no breaking changes
- All modern .NET features - nullability, trimming, NativeAOT, etc.
- Support .Net Framework/.Net Standard 2.0
Usage
| using TwelveLabs;
using var client = new TwelveLabsClient(apiKey);
|
List Indexes
Shows how to list video indexes.
| using var client = new TwelveLabsClient(apiKey);
// List all video indexes in your account.
var response = await client.SubpackageIndexes.ListAsync(
xApiKey: apiKey);
// The response contains a paginated list of indexes.
foreach (var index in response.Data!)
{
Console.WriteLine($"Index: {index.IndexName} (ID: {index.Id}, Videos: {index.VideoCount})");
}
|
Search Videos
Shows how to search across indexed videos using a text query.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 | using var client = new TwelveLabsClient(apiKey);
// Retrieve the first index to use for searching.
var indexes = await client.SubpackageIndexes.ListAsync(
xApiKey: apiKey);
var indexId = indexes.Data?.FirstOrDefault()?.Id
?? throw new AssertInconclusiveException("No indexes found. Create an index and upload videos first.");
// Search for video segments matching a text query using visual search.
var results = await client.SubpackageSearch.CreateAsync(
xApiKey: apiKey,
indexId: indexId,
queryText: "a person walking",
searchOptions: [SearchPostRequestBodyContentMultipartFormDataSchemaSearchOptionsItems.Visual]);
// The response contains matching video clips with timestamps and relevance ranking.
foreach (var item in results.Data!)
{
Console.WriteLine($"Video: {item.VideoId}, Start: {item.Start}s, End: {item.End}s, Rank: {item.Rank}");
}
|
Analyze Video
Shows how to generate text from video content using open-ended analysis.
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 | using var client = new TwelveLabsClient(apiKey);
// Retrieve an indexed video to analyze.
var indexes = await client.SubpackageIndexes.ListAsync(
xApiKey: apiKey);
var indexId = indexes.Data?.FirstOrDefault()?.Id
?? throw new AssertInconclusiveException("No indexes found. Create an index and upload videos first.");
var assets = await client.SubpackageIndexesSubpackageIndexesIndexedAssets.ListAsync(
indexId: indexId,
xApiKey: apiKey);
var videoId = assets.Data?.FirstOrDefault()?.Id
?? throw new AssertInconclusiveException("No indexed assets found in the index.");
// Generate a summary of the video using open-ended analysis with streaming disabled.
var response = await client.AnalyzeAsync(
xApiKey: apiKey,
videoId: videoId,
prompt: "Provide a brief summary of this video, including the main topic and key points.",
stream: false);
// The non-streaming response contains the generated text and token usage.
var result = response.NonStreamAnalyzeResponse;
Console.WriteLine($"Generated text: {result!.Data}");
Console.WriteLine($"Finish reason: {result.FinishReason}");
|
Text Embedding
Shows how to generate text embeddings using the MEAI IEmbeddingGenerator interface.
| using var client = new TwelveLabsClient(apiKey);
client.WithApiKey(apiKey);
// Use the MEAI IEmbeddingGenerator interface for text embeddings.
IEmbeddingGenerator<string, Embedding<float>> generator = client;
var metadata = generator.GetService<EmbeddingGeneratorMetadata>();
|
Support
Priority place for bugs: https://github.com/tryAGI/TwelveLabs/issues
Priority place for ideas and general questions: https://github.com/tryAGI/TwelveLabs/discussions
Discord: https://discord.gg/Ca2xhfBf3v
Acknowledgments

This project is supported by JetBrains through the Open Source Support Program.