SDK

Votre pipeline. Nos modèles.

Exemples Python et JavaScript pour le prétraitement local, les tâches asynchrones et les vidéos hébergées.

Le code, les identifiants API et les valeurs des requêtes conservent leur langue technique d’origine.

Outils open source / Shot Detection

Commencez par découper les plans.

Shot Detection est un outil Python autonome qui découpe les vidéos en plans avec leurs horodatages de début et de fin. Associez-le au SDK Seeknetic pour traiter chaque plan.

  1. 01

    Détecter les limites des plans

    Analysez la vidéo pour obtenir le début et la fin de chaque plan.

  2. 02

    Encoder ou annoter

    Transmettez chaque plage temporelle au prétraitement local du SDK, puis lancez l’encodage ou l’annotation.

  3. 03

    Construire la recherche

    Stockez les vecteurs et métadonnées dans votre application en conservant les liens vers les fichiers et horodatages sources.

Shot Detection délimite les plans. L’encodage et l’annotation nécessitent le SDK Seeknetic et un accès API, facturé aux tarifs publiés.

Installation
pip install seeknetic

Installez d’abord ffmpeg et assurez-vous que ffmpeg et ffprobe sont dans le PATH.

Démarrage rapide

Installation et première requête d’embedding de texte.

Installer depuis PyPI

bash
pip install seeknetic

Embedding de texte

Utilisez le client Python synchrone pour la première requête. Passez à l’asynchrone si vous avez besoin de plus de concurrence.

python
import os
from seeknetic import Seeknetic

client = Seeknetic(
    api_key=os.environ["SEEKNETIC_API_KEY"],
)

response = client.video_embedding.encode_text(
    text="a person walking on the beach"
)

print(len(response.embedding))

Vidéos sources locales

Recommandé pour les fichiers locaux. Installez ffmpeg avant d’utiliser preprocess_and_upload(...).

Votre vidéo originale reste locale. Seuls les tenseurs prétraités sont envoyés. Utilisez service="embedding" avec video_embedding.encode_video.submit_async(...) et service="tagging" avec video_tagging.submit_async_job(...).

Embedding · Étape 1 · Prétraiter et envoyer

python
import os
from seeknetic import Seeknetic

client = Seeknetic(api_key=os.environ["SEEKNETIC_API_KEY"])

upload = client.preprocess_and_upload(
    video_path="sample.mp4",
    service="embedding",
    request_id="emb-task-0001",
    start_ms=0,
    end_ms=10_000,
)

print(upload.request_id)
print(upload.r2_keys)

Embedding · Étape 2 · Soumettre une tâche asynchrone

python
import os
from seeknetic import Seeknetic

client = Seeknetic(api_key=os.environ["SEEKNETIC_API_KEY"])

upload = client.preprocess_and_upload(
    video_path="sample.mp4",
    service="embedding",
    request_id="emb-task-0001",
)

job = client.video_embedding.encode_video.submit_async(
    tensor={
        "video_input_key": upload.r2_keys["video_input"],
        "audio_input_key": upload.r2_keys["audio_input"],
    },
    request_id=upload.request_id,
)

print(job.request_id, job.status)

Embedding · Étape 3 · Interroger le résultat

python
import os
from seeknetic import Seeknetic

client = Seeknetic(api_key=os.environ["SEEKNETIC_API_KEY"])

status = client.async_status.retrieve("emb-task-0001")

print(status.status)
print(status.embedding)

Annotation · Étape 1 · Prétraiter et envoyer

python
import os
from seeknetic import Seeknetic

client = Seeknetic(api_key=os.environ["SEEKNETIC_API_KEY"])

upload = client.preprocess_and_upload(
    video_path="sample.mp4",
    service="tagging",
    request_id="tag-task-0001",
    start_ms=0,
    end_ms=10_000,
)

print(upload.request_id)
print(upload.r2_keys)

Annotation · Étape 2 · Soumettre une tâche asynchrone

python
import os
from seeknetic import Seeknetic

client = Seeknetic(api_key=os.environ["SEEKNETIC_API_KEY"])

upload = client.preprocess_and_upload(
    video_path="sample.mp4",
    service="tagging",
    request_id="tag-task-0001",
)

job = client.video_tagging.submit_async_job(
    tensor={
        "video_input_key": upload.r2_keys["video_input"],
        "video_kwargs_key": upload.r2_keys["video_kwargs"],
    },
    request_id=upload.request_id,
)

print(job.request_id, job.status)

Annotation · Étape 3 · Interroger le résultat

python
import os
from seeknetic import Seeknetic

client = Seeknetic(api_key=os.environ["SEEKNETIC_API_KEY"])

status = client.async_status.retrieve("tag-task-0001")

print(status.status)
print(status.tags)

Vidéos envoyées ou hébergées

Soumettez directement video_url si le prétraitement local n’est pas nécessaire.

Embedding · Étape 1 · Soumettre video_url

python
import os
from seeknetic import Seeknetic

client = Seeknetic(api_key=os.environ["SEEKNETIC_API_KEY"])

job = client.video_embedding.encode_video.submit_async(
    video_url="https://example.com/video.mp4",
)

print(job.request_id, job.status)

Embedding · Étape 2 · Interroger le résultat

python
import os
from seeknetic import Seeknetic

client = Seeknetic(api_key=os.environ["SEEKNETIC_API_KEY"])

status = client.async_status.retrieve("emb-task-0001")

print(status.status)
print(status.embedding)

Annotation · Étape 1 · Soumettre video_url

python
import os
from seeknetic import Seeknetic

client = Seeknetic(api_key=os.environ["SEEKNETIC_API_KEY"])

job = client.video_tagging.submit_async_job(
    video_url="https://example.com/video.mp4",
)

print(job.request_id, job.status)

Annotation · Étape 2 · Interroger le résultat

python
import os
from seeknetic import Seeknetic

client = Seeknetic(api_key=os.environ["SEEKNETIC_API_KEY"])

status = client.async_status.retrieve("tag-task-0001")

print(status.status)
print(status.tags)

Client asynchrone

Le README documente aussi aiohttp pour une concurrence plus élevée.

Installer l’extension aiohttp

bash
pip install seeknetic[aiohttp]

Utiliser AsyncSeeknetic avec DefaultAioHttpClient

python
import os
import asyncio
from seeknetic import DefaultAioHttpClient
from seeknetic import AsyncSeeknetic


async def main() -> None:
    async with AsyncSeeknetic(
        api_key=os.environ.get("SEEKNETIC_API_KEY"),
        http_client=DefaultAioHttpClient(),
    ) as client:
        response = await client.video_embedding.encode_text(
            text="a person walking on the beach"
        )
        print(len(response.embedding))


asyncio.run(main())

JavaScript SDK

Paquet officiel
Installation
npm install seeknetic

Installez d’abord ffmpeg et assurez-vous que ffmpeg et ffprobe sont dans le PATH.

Démarrage rapide

Installation et exemple minimal d’embedding de texte du README.

Installer depuis npm

bash
npm install seeknetic

Embedding de texte

javascript
import Seeknetic from 'seeknetic';

const client = new Seeknetic({
  apiKey: process.env['SEEKNETIC_API_KEY'],
});

const response = await client.videoEmbedding.encodeText({
  text: 'a person walking on the beach',
});

console.log(response.embedding.length);

Vidéos sources locales

Recommandé pour les fichiers locaux. Installez ffmpeg avant d’utiliser preprocessAndUpload(...).

Votre vidéo originale reste locale. Seuls les tenseurs prétraités sont envoyés. service: "embedding" s’utilise avec videoEmbedding.encodeVideo.submitAsync(...), et service: "tagging" avec videoTagging.submitAsyncJob(...).

Embedding · Étape 1 · Prétraiter et envoyer

typescript
import Seeknetic from 'seeknetic';

const client = new Seeknetic({
  apiKey: process.env['SEEKNETIC_API_KEY'],
});

const upload = await client.preprocessAndUpload({
  videoPath: 'sample.mp4',
  service: 'embedding',
  requestId: 'emb-task-0001',
  startMs: 0,
  endMs: 10_000,
});

console.log(upload.request_id);
console.log(upload.r2_keys);

Embedding · Étape 2 · Soumettre une tâche asynchrone

typescript
import Seeknetic from 'seeknetic';

const client = new Seeknetic({
  apiKey: process.env['SEEKNETIC_API_KEY'],
});

const upload = await client.preprocessAndUpload({
  videoPath: 'sample.mp4',
  service: 'embedding',
  requestId: 'emb-task-0001',
});

const job = await client.videoEmbedding.encodeVideo.submitAsync({
  tensor: {
    video_input_key: upload.r2_keys['video_input'],
    audio_input_key: upload.r2_keys['audio_input'],
  },
  request_id: upload.request_id,
});

console.log(job.request_id, job.status);

Embedding · Étape 3 · Interroger le résultat

typescript
import Seeknetic from 'seeknetic';

const client = new Seeknetic({
  apiKey: process.env['SEEKNETIC_API_KEY'],
});

const status = await client.asyncStatus.retrieve('emb-task-0001');

console.log(status.status);
console.log(status.embedding);

Annotation · Étape 1 · Prétraiter et envoyer

typescript
import Seeknetic from 'seeknetic';

const client = new Seeknetic({
  apiKey: process.env['SEEKNETIC_API_KEY'],
});

const upload = await client.preprocessAndUpload({
  videoPath: 'sample.mp4',
  service: 'tagging',
  requestId: 'tag-task-0001',
  startMs: 0,
  endMs: 10_000,
});

console.log(upload.request_id);
console.log(upload.r2_keys);

Annotation · Étape 2 · Soumettre une tâche asynchrone

typescript
import Seeknetic from 'seeknetic';

const client = new Seeknetic({
  apiKey: process.env['SEEKNETIC_API_KEY'],
});

const upload = await client.preprocessAndUpload({
  videoPath: 'sample.mp4',
  service: 'tagging',
  requestId: 'tag-task-0001',
});

const job = await client.videoTagging.submitAsyncJob({
  tensor: {
    video_input_key: upload.r2_keys['video_input'],
    video_kwargs_key: upload.r2_keys['video_kwargs'],
  },
  request_id: upload.request_id,
});

console.log(job.request_id, job.status);

Annotation · Étape 3 · Interroger le résultat

typescript
import Seeknetic from 'seeknetic';

const client = new Seeknetic({
  apiKey: process.env['SEEKNETIC_API_KEY'],
});

const status = await client.asyncStatus.retrieve('tag-task-0001');

console.log(status.status);
console.log(status.tags);

Vidéos envoyées ou hébergées

Soumettez directement video_url si le prétraitement local n’est pas nécessaire.

Embedding · Étape 1 · Soumettre video_url

typescript
import Seeknetic from 'seeknetic';

const client = new Seeknetic({
  apiKey: process.env['SEEKNETIC_API_KEY'],
});

const job = await client.videoEmbedding.encodeVideo.submitAsync({
  video_url: 'https://example.com/video.mp4',
});

console.log(job.request_id, job.status);

Embedding · Étape 2 · Interroger le résultat

typescript
import Seeknetic from 'seeknetic';

const client = new Seeknetic({
  apiKey: process.env['SEEKNETIC_API_KEY'],
});

const status = await client.asyncStatus.retrieve('emb-task-0001');

console.log(status.status);
console.log(status.embedding);

Annotation · Étape 1 · Soumettre video_url

typescript
import Seeknetic from 'seeknetic';

const client = new Seeknetic({
  apiKey: process.env['SEEKNETIC_API_KEY'],
});

const job = await client.videoTagging.submitAsyncJob({
  video_url: 'https://example.com/video.mp4',
});

console.log(job.request_id, job.status);

Annotation · Étape 2 · Interroger le résultat

typescript
import Seeknetic from 'seeknetic';

const client = new Seeknetic({
  apiKey: process.env['SEEKNETIC_API_KEY'],
});

const status = await client.asyncStatus.retrieve('tag-task-0001');

console.log(status.status);
console.log(status.tags);