Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
sentrysearch — Semantische Suche über Videos mit Gemini Embedding 2 oder Qwen3-VL. | Kitploit
Tools/GitHubGitHub/ssrajadh/sentrysearch
OSINT (Open-Source-Intelligence)AufklärungForensikInformationsbeschaffungDigitale ForensikMaschinelles Lernen
GitHubssrajadh/sentrysearch

sentrysearch

Semantische Suche über Videos mit Gemini Embedding 2 oder Qwen3-VL.

Repository anzeigen
4.4k421vor 29 TagenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
Webseite

SentrySearch

Semantische Suche über Videomaterial. Gib ein, wonach du suchst, und erhalte einen zugeschnittenen Clip zurück.

[!IMPORTANT] Offizielle Quelle: github.com/ssrajadh/sentrysearch ist die einzige offizielle Heimat von SentrySearch. Andere Websites, die dieses Projekt erneut veröffentlichen oder spiegeln, sind nicht mit dem Betreuer verbunden oder von ihm unterstützt; lade immer von diesem Repository herunter.

Sprachen: Englisch · 简体中文

Neu: SentrySearch Codebase-Walkthrough-Video

Die Pipeline:

  1. SentrySearch (ein Ereignis in deinem Filmmaterial finden)
  2. SentryMerge (das Multi-Kamera-Material automatisch in ein Video zuschneiden, das dem Motiv über die Kameras hinweg folgt)
  3. SentryBlur (sensible Informationen automatisch schwärzen)

Inhaltsverzeichnis

  • Funktionsweise
  • Erste Schritte
  • Verwendung
    • Init
    • Filmmaterial indizieren
    • Suche
    • Suche nach Bild
    • Highlights
    • Qwen Cloud (Alibaba DashScope)
    • Lokales Backend (kein API-Schlüssel erforderlich)
    • Warum das lokale Modell schnell ist
    • Tesla-Metadaten-Overlay
    • Mit SentryMerge zusammenfügen
    • Mit SentryBlur schwärzen
    • Verwaltung des Index
      • Fehlgeschlagene Chunks und Wiederholungsversuche
      • Cache- und Zustandsdateien
    • Ausführlicher Modus
  • Wie ist das möglich?
  • Kosten
  • Bekannte Warnungen (harmlos)
  • Einschränkungen und zukünftige Arbeiten
  • Kompatibilität
  • Anforderungen

Funktionsweise

SentrySearch teilt deine Videos in überlappende Chunks auf, bettet jeden Chunk als Video mithilfe von Googles Gemini Embedding API, Alibaba DashScope (qwen-cloud) oder einem lokalen Qwen3-VL-Modell ein und speichert die Vektoren in einer lokalen ChromaDB-Datenbank. Wenn du suchst, wird deine Textabfrage (oder dein Bild, siehe Suche nach Bild) in denselben Vektorraum eingebettet und mit den gespeicherten Video-Embeddings abgeglichen. Der beste Treffer wird automatisch aus der Originaldatei ausgeschnitten und als Clip gespeichert.

Erste Schritte

  1. Installiere uv (falls du es nicht hast):

macOS/Linux:```bash curl -LsSf https://astral.sh/uv/install.sh | sh

root@kitploit:~
**Windows:**```powershell
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
  1. Klonen und installieren:```bash git clone https://github.com/ssrajadh/sentrysearch.git cd sentrysearch uv tool install .
root@kitploit:~
> **Erfordert Python 3.11 oder 3.12** (PyTorch-Räder unterstützen noch nicht 3.13+). Falls Ihr Standard-Python neuer ist, installieren Sie ein verwaltetes 3.12 und fixieren Sie die Tool-Installation:
> ```bash
> uv python install 3.12
> uv tool install --python 3.12 .
> ```

3. Richten Sie Ihren API-Schlüssel ein (oder [verwenden Sie stattdessen ein lokales Modell](#local-backend-no-api-key-needed)) — **nur für das standardmäßige Gemini-Backend erforderlich**; überspringen Sie dies, wenn Sie `--backend local` oder `--backend qwen-cloud` mit `DASHSCOPE_API_KEY` in `.env` verwenden.```bash
sentrysearch init

Dies fordert zur Eingabe Ihres Gemini API key auf, schreibt ihn in .env und validiert ihn mit einem Test-Embedding.

  1. Indexiere dein Videomaterial:```bash sentrysearch index /path/to/footage
root@kitploit:~
5. Suche:```bash
sentrysearch search "red truck running a stop sign"

ffmpeg wird für das Aufteilen und Trimmen von Videos benötigt. Wenn Sie es nicht systemweit installiert haben, wird das gebündelte imageio-ffmpeg automatisch verwendet.

Manuelle Einrichtung: Wenn Sie sentrysearch init nicht verwenden möchten, können Sie .env.example in .env kopieren und Ihren Schlüssel manuell von aistudio.google.com/apikey hinzufügen.

Verwendung

Init```bash

$ sentrysearch init Enter your Gemini API key (get one at https://aistudio.google.com/apikey): **** Validating API key... Setup complete. You're ready to go — run sentrysearch index <directory> to get started.

root@kitploit:~
Wenn ein Schlüssel bereits konfiguriert ist, werden Sie gefragt, ob Sie ihn überschreiben möchten.

> **Tipp:** Legen Sie unter [aistudio.google.com/billing](https://aistudio.google.com/billing) ein Ausgabenlimit fest, um versehentliche Mehrausgaben zu vermeiden.

### Indexmaterial```bash
$ sentrysearch index /path/to/video/footage
Indexing file 1/3: front_2024-01-15_14-30.mp4 [chunk 1/4]
Indexing file 1/3: front_2024-01-15_14-30.mp4 [chunk 2/4]
...
Indexed 12 new chunks from 3 files. Total: 12 chunks from 3 files.

Options:

  • --chunk-duration 30 — Sekunden pro Chunk
  • --overlap 5 — Überlappung zwischen Chunks
  • --no-preprocess — Überspringen der Herunterskalierung/Bildratenreduzierung (rohe Chunks senden)
  • --target-resolution 480 — Zielhöhe in Pixeln für die Vorverarbeitung
  • --target-fps 5 — Zielbildrate für die Vorverarbeitung
  • --no-skip-still — alle Chunks einbetten, auch ohne visuelle Änderung
  • --backend local — ein lokales Modell anstelle von Gemini verwenden (Details unten)

Search```bash

$ sentrysearch search "red truck running a stop sign" #1 [0.87] front_2024-01-15_14-30.mp4 @ 02:15-02:45 #2 [0.74] left_2024-01-15_14-30.mp4 @ 02:10-02:40 #3 [0.61] front_2024-01-20_09-15.mp4 @ 00:30-01:00

Saved clip: ./match_front_2024-01-15_14-30_02m15s-02m45s.mp4

root@kitploit:~
Falls der Ähnlichkeitswert des besten Ergebnisses unter dem Konfidenzschwellwert (Standard 0.41) liegt, werden Sie vor dem Kürzen aufgefordert:```
No confident match found (best score: 0.28). Show results anyway? [y/N]:

Mit --no-trim werden Ergebnisse mit niedriger Konfidenz mit einem Hinweis statt einer Eingabeaufforderung angezeigt.

Optionen: --results N, --output-dir DIR, --no-trim zum Überspringen des automatischen Trimmens, --threshold 0.5 zum Anpassen der Konfidenzgrenze, --save-top N zum Speichern der oberen N Clips anstelle des besten Treffers, --dedupe zum Verwerfen von Ergebnissen, die einer höher bewerteten Auswahl zu ähnlich sind (verhindert, dass fast identische Blöcke desselben Ereignisses die Liste füllen), und --rerank, um ein VLM zu bitten, die zurückgegebenen Kandidaten vor dem Trimmen neu zu bewerten. Backend und Modell werden automatisch aus dem Index erkannt — geben Sie --backend oder --model nur zum Überschreiben an.```bash

Save top 5 clips, dropping near-duplicates

sentrysearch search "red truck" --save-top 5 --dedupe 0.9

Re-rank the top 10 embedding matches with a VLM before trimming

sentrysearch search "pedestrian crossing behind the car" --rerank --results 10

root@kitploit:~
Das `--dedupe`-Wert ist eine Cosinus-Ähnlichkeitsobergrenze (0–1). Alle Ergebnisse, deren Ähnlichkeit zu einem bereits beibehaltenen, höher bewerteten Ergebnis diesen Wert überschreitet, werden verworfen. Niedrigere Werte sind strenger: `0.8` erfordert, dass Ergebnisse sehr unterschiedlich sind, `0.95` entfernt nur fast identische Abschnitte. `0.9` ist ein guter Standardwert.

`--rerank` extrahiert jeden zurückgegebenen Kandidaten-Clip, sendet ihn zusammen mit der Abfrage an ein VLM und sortiert wahrscheinliche visuelle Übereinstimmungen vor reinen Einbettungsergebnissen. Gemini- und qwen-cloud-Suchen verwenden Gemini 2.5 Flash für das Reranking; lokale Suchen verwenden einen lokalen Qwen3-VL Instruct Reranker. Wenn das Reranking nicht ausgeführt werden kann oder ein Kandidat nicht bewertet werden kann, behält SentrySearch die nach Einbettung sortierten Ergebnisse bei, anstatt die Suche fehlschlagen zu lassen.

### Suche nach Bild

Verwenden Sie ein Referenzbild als Abfrage – nützlich, um „Clips zu finden, die so aussehen", wenn die Beschreibung der Szene in Worten umständlich ist (ein Screenshot eines bestimmten Autos, ein Referenzframe aus einem anderen Video usw.).```bash
$ sentrysearch img ~/Downloads/image.jpg
  #1 [0.72] 2026-03-12_10-44-17-left_repeater.mp4 @ 00:00-00:30
  #2 [0.69] 2026-03-12_10-44-17-left_repeater.mp4 @ 00:25-00:55
  #3 [0.67] 2026-02-12_20-02-15-front.mp4 @ 00:00-00:18

Saved clip: ./match_2026-03-12_10-44-17-left_repeater_00m00s-00m30s.mp4

Das Bild wird in denselben Vektorraum wie die indizierten Video-Chunks eingebettet und nach Kosinus-Ähnlichkeit eingestuft. Die Bildsuche unterstützt --results, --threshold, --save-top, --dedupe, --overlay, --no-trim, --backend und --model.

Unterstützte Formate: JPG, PNG, WEBP, GIF, HEIC/HEIF auf dem Gemini-Backend; das lokale Backend akzeptiert zusätzlich alles, was PIL dekodieren kann (BMP, TIFF, usw.).

Hinweis: Die Bildsuche liefert visuell ähnliche Treffer, nicht unbedingt dasselbe Objekt. Eine Abfrage nach einer roten Limousine kann andere rote Limousinen mit ähnlicher Form liefern — passen Sie Ihre Erwartungen entsprechend an.

Highlights

Sie wissen nicht, wonach Sie suchen sollen? sentrysearch highlights ordnet die auffälligsten Clips in Ihrem Index nach Rang – Chunks, deren Einbettungen weit von allem anderen entfernt sind – und schneidet sie automatisch zu. Gut zum Überfliegen eines frischen Datensatzes von Aufnahmen.```bash $ sentrysearch highlights -n 3 #1 [0.165] 2026-02-12_20-02-15-back.mp4 @ 00:00-00:18 #2 [0.163] 2026-02-12_20-02-15-right_repeater.mp4 @ 00:00-00:18 #3 [0.149] 2026-02-12_20-02-15-front.mp4 @ 00:00-00:18 ...

root@kitploit:~
Scoring methods (`--method`):

- **`knn`** (Standard) — mittlere Kosinusdistanz zu den *k* nächsten Nachbarn eines Clips. Robust; zeigt Aufnahmen ohne nahe Zwillinge an.
- **`centroid`** — Distanz zum Mittelwert des Index. Am günstigsten, tendenziell auf das unterrepräsentierte ausgerichtet.
- **`lof`** — Local Outlier Factor. Am besten, wenn der Index mehrere verschiedene "normale" Modi hat (Tag vs. Nacht vs. Garage).

Verfeinerungsoptionen:

- `--against "<query>"` — bewertet Anomalien *relativ zu* einer Abfrage. Mit `--against-mode within` (Standard) werden Anomalien unter den besten Treffern der Abfrage eingestuft ("die seltsamen Fußgänger in Fußgängeraufnahmen"). Mit `--against-mode global` werden Aufnahmen gefunden, die der Abfrage entsprechen, *aber* sich vom Rest des Index unterscheiden ("seltene Ereignisse dieser Art").
- `--dedupe 0.9` — verwirft Ergebnisse, die einem höher eingestuften Treffer zu ähnlich sind (Standard 0,9 Kosinus-Ähnlichkeit). Verhindert, dass nahezu doppelte Frames die Liste füllen.
- `--exclude-baseline` — verwirft die Hälfte des Index, die dem Zentroid am nächsten ist, bevor die Bewertung erfolgt. Nützlich, wenn der Index von sich wiederholendem "langweiligem" Filmmaterial dominiert wird.
- `-k, --neighbors 10` — *k* für `knn`/`lof`.
- `--no-trim` — gibt die Rangliste aus, ohne Aufnahmen zu schreiben.

> **Achtung:** Statistisch anomal ≠ interessant. Sensorstörungen, Objektivreflexe, Nachtaufnahmen in einem überwiegend tageslichtbasierten Index und der einsame Garagenclip werden alle hoch eingestuft. Verwenden Sie `--exclude-baseline` und `--dedupe`, um das Rauschen zu filtern, oder `--against`, um das Thema einzuschränken.

### Qwen Cloud (Alibaba DashScope)

Verwenden Sie das optionale **qwen-cloud** Backend für [DashScope](https://www.alibabacloud.com/help/en/model-studio/qwen-api-via-dashscope) / Model Studio multimodale Embeddings (Standardmodell `qwen3-vl-embedding`, überschreibbar mit `--dashscope-model` oder `DASHSCOPE_EMBEDDING_MODEL`):```bash
uv tool install ".[qwen-cloud]"
export DASHSCOPE_API_KEY=...
sentrysearch index /path/to/footage --backend qwen-cloud
sentrysearch search "your query" --backend qwen-cloud

Video-Uploads: Lokale Chunk-Dateien werden an das von DashScope verwaltete temporäre OSS durch das offizielle Python SDK gesendet, bevor die API sie verarbeitet (die HTTP-API erwartet eine URL; das SDK übernimmt den Upload für Sie).

Lokales Backend (kein API-Schlüssel erforderlich)

Indizieren und durchsuchen Sie mit einem lokalen Qwen3-VL-Embedding-Modell anstelle der Gemini-API. Kostenlos, privat und läuft vollständig auf Ihrem Rechner. Für die beste Suchqualität verwenden Sie das Gemini-Backend – das lokale 8B-Modell ist eine solide Alternative, wenn Sie eine Offline-/private Suche benötigen, und das 2B-Modell ist ein Fallback, wenn die Hardware 8B nicht unterstützt.

Das Modell wird automatisch anhand Ihrer Hardware erkannt — qwen8b für NVIDIA-GPUs und Macs mit 24 GB+ RAM, qwen2b für kleinere Macs und reine CPU-Systeme. Sie können dies mit --model qwen2b oder --model qwen8b überschreiben. Wählen Sie eine Installation basierend auf Ihrer Hardware:

Funktioniert nicht gut: Intel Macs und Rechner ohne dedizierte GPU. Diese fallen auf CPU mit float32 zurück — zu langsam und speicherhungrig für den praktischen Einsatz. Verwenden Sie stattdessen das Gemini-API-Backend (Standard).

Nicht sicher? Auf dem Mac verwenden Sie ".[local]". Auf NVIDIA verwenden Sie ".[local-quantized]" — 4-Bit-Quantisierung funktioniert auf der breitesten Palette von NVIDIA-Hardware mit minimalem Qualitätsverlust. (bitsandbytes erfordert CUDA und funktioniert nicht auf Mac/MPS.)

Python-Version: PyTorch-Wheels hinken neuen Python-Versionen hinterher, daher erfordert das lokale Backend Python 3.11 oder 3.12. Wenn Ihr Standard-Python 3.13+ ist, installieren Sie ein verwaltetes 3.12 und binden Sie die Tool-Installation daran fest:```bash uv python install 3.12 uv tool install --python 3.12 ".[local]"

root@kitploit:~
**Mac-Voraussetzung:** Installieren Sie das systemweite FFmpeg (der Videoprozessor des lokalen Modells benötigt es — das Gemini-Backend verwendet stattdessen ein gebündeltes ffmpeg):```bash
brew install ffmpeg

Indizieren mit --backend local und suchen — keine zusätzlichen Flags erforderlich:```bash sentrysearch index /path/to/footage --backend local sentrysearch search "car running a red light"

root@kitploit:~
Der Suchbefehl erkennt automatisch das Backend und das Modell aus dem, womit Sie indexiert haben. Sie können auch `--model` als Kurzform verwenden — es impliziert `--backend local`:```bash
sentrysearch index /path/to/footage --model qwen2b   # same as --backend local --model qwen2b
sentrysearch search "car running a red light"          # auto-detects local/qwen2b from index

Optionen:

  • --model qwen2b — kleineres Modell, geringere Qualität, benötigt aber nur ~6 GB Arbeitsspeicher (akzeptiert auch vollständige HuggingFace-IDs)
  • --quantize / --no-quantize — 4-Bit-Quantisierung erzwingen oder deaktivieren (Standard: automatische Erkennung, ob bitsandbytes installiert ist)

Hinweise:

  • Der erste Lauf lädt das Modell herunter (~16 GB für 8B, ~4 GB für 2B).
  • Lokales --rerank lädt zusätzlich zum Embedding-Modell ein separates Qwen3-VL Instruct-Modell herunter (Qwen/Qwen3-VL-8B-Instruct oder Qwen/Qwen3-VL-2B-Instruct).
  • Embeddings von verschiedenen Backends und Modellen sind nicht kompatibel. Jede Backend/Modell-Kombination erhält einen eigenen isolierten Index, sodass sie nicht versehentlich vermischt werden können. Wenn Sie mit einem Modell suchen, für das keine indizierten Daten vorliegen, wird Ihnen mitgeteilt, welches Modell tatsächlich verwendet wurde.
  • Die Geschwindigkeit variiert je nach Anzahl der GPU-Kerne — Basis-M-Serie-Chips sind langsamer als Pro/Max, liefern aber identische Ergebnisse.

Warum das lokale Modell schnell ist

Das lokale Backend bleibt schnell und speichereffizient durch einige sich verstärkende Techniken:

  • Vorverarbeitung verkleinert Chunks, bevor sie das Modell erreichen. Jeder 30-Sekunden-Chunk wird vor dem Embedding via ffmpeg auf 480p bei 5fps herunterskaliert. Ein ~19 MB Dashcam-Chunk wird zu ~1 MB — eine 95%ige Reduzierung der Pixel, die das Modell verarbeiten muss. Die Modell-Inferenzzeit skaliert mit der Pixelanzahl, nicht mit der Videodauer, daher ist dies der größte einzelne Geschwindigkeitsvorteil.
  • Niedrige Bildrate. Der Videoprozessor sendet maximal 32 Frames pro Chunk an das Modell (fps=1.0, max_frames=32). Ein 30-Sekunden-Chunk erzeugt ~30 Frames — nicht hunderte.
  • MRL-Dimensionstrunkation. Qwen3-VL-Embedding unterstützt Matryoshka Representation Learning. Nur die ersten 768 Dimensionen jedes Embeddings werden behalten und L2-normalisiert, was Speicher und Distanzberechnung in ChromaDB reduziert.
  • Auto-Quantisierung. Auf NVIDIA-GPUs mit begrenztem VRAM wird das 8B-Modell automatisch in 4 Bit geladen (bitsandbytes) — Reduzierung von ~18 GB auf ~6-8 GB bei minimalem Qualitätsverlust. Eine 4090 (24 GB) läuft mit dem vollständigen bf16-Modell und hat noch Reserven.
  • Standbild-Überspringen. Chunks ohne aussagekräftige visuelle Änderung (z.B. ein geparktes Auto) werden durch Vergleich der JPEG-Dateigrößen über abgetastete Frames hinweg erkannt und vollständig übersprungen — ein vollständiger Forward-Pass pro Chunk wird eingespart.

Mit alledem können Sie mit ~2-5s pro Chunk auf einer A100 und ~3-8s auf einer T4 rechnen. Auf einer 4090 sollte das 8B-Modell in bf16 im niedrigen einstelligen Bereich pro Chunk liegen.

Tesla-Metadaten-Overlay

Geschwindigkeit, Standort und Uhrzeit auf zugeschnittene Clips einbrennen:```bash sentrysearch search "car cutting me off" --overlay

root@kitploit:~
Dies extrahiert Telemetriedaten aus Tesla-Dashcam-Dateien (Geschwindigkeit, GPS) und rendert ein HUD-Overlay. Das Overlay zeigt:

- **Oben Mitte:** Geschwindigkeit und MPH-Beschriftung auf einer hellgrauen Karte
- **Unter der Karte:** Datum und Uhrzeit (12-Stunden-Format mit AM/PM)
- **Oben links:** Stadt und Straßenname (per Reverse-Geocoding)

![tesla overlay](https://assets.kitploit.com/production/public/readmes/12784/6bacffb39f1503cd7f92f2326d60919b14d1bfcd6ee9b8244a9d1bfb4b26e58e.png)

Anforderungen:

- Tesla-Firmware 2025.44.25 oder neuer, HW3+
- SEI-Metadaten sind nur in Fahrvideos vorhanden (nicht im Park-/Sentry-Modus)
- Reverse-Geocoding verwendet die [OpenStreetMap Nominatim API](https://nominatim.openstreetmap.org/) über geopy (optional)

Installation mit Tesla-Overlay-Unterstützung:```bash
uv tool install ".[tesla]"

Without geopy, the overlay still works but omits the city/road name.

Source: teslamotors/dashcam

Zusammenfügen mit SentryMerge

SentryMerge ist ein verwandtes Tool, das automatisch ein einzelnes kameraübergreifendes Video eines Ereignisses aus einem SentrySearch-Ergebnis ausschneidet. Jedes Mal, wenn sentrysearch search ausgeführt wird, speichert es die Ergebnisliste in ~/.sentrysearch/last_search.json zwischen; SentryMerge greift diese über --last auf, wählt das beste Multi-Kamera-Clip-Set aus, fragt ein VLM nach subsekundenbasierten Sichtbarkeitsbereichen pro Kamera und fügt ein framegenaueres Video zusammen, das dem Subjekt über die Kameras hinweg folgt:```bash sentrysearch search "" sentrymerge --last # → merge.mp4

root@kitploit:~
`--last` funktioniert ohne erneute Durchführung der Suche; `sentrymerge --query "..."` führt die Suche im Hintergrund erneut durch. Siehe die [SentryMerge README](https://github.com/ssrajadh/sentrymerge#readme) für Installationsanweisungen, VLM-Backend-Optionen (Gemini / OpenAI / lokales Qwen) und das modulare Kamera-Konfigurationssystem für Nicht-Tesla-Dashcams.

### Schwärzung mit SentryBlur

[SentryBlur](https://github.com/ssrajadh/sentryblur) ist ein Schwesterwerkzeug zur lokalen Gesichts-, Kennzeichen- und natürlichsprachlichen Schwärzung von Videos. Jedes Mal, wenn `sentrysearch search` einen Clip speichert, wird der Pfad in `~/.sentrysearch/last_clip.json` zwischengespeichert; SentryBlur greift darüber via `--last` darauf zu, sodass Suchen-dann-Schwärzen zwei Befehle sind und keine Pfadübergabe erforderlich ist:```bash
sentrysearch search "car cuts me off"
sentryblur prompt --last "road signs"   # → match_<...>_blurred.mp4

sentryblur faces --last and sentryblur plates --last funktionieren auf dieselbe Weise. Wählen Sie faces oder plates für schnelle CPU-Detektoren; verwenden Sie prompt "<text>" für beliebige Objekte (Telefonbildschirme, Monitore, Namensschilder) — prompt erfordert eine NVIDIA GPU oder Apple Silicon. Siehe SentryBlur README für Installationsanweisungen und Hardwarehinweise.

Verwalten des Indexes```bash

Show index info (files marked [missing] no longer exist on disk)

sentrysearch stats

Remove specific files by path substring

sentrysearch remove path/to/footage

Wipe the entire index

sentrysearch reset

root@kitploit:~
#### Fehlgeschlagene Chunks und erneute Versuche

Wenn ein Chunk nach mehreren Versuchen nicht eingebettet werden kann, zeichnet SentrySearch ihn in einer Dead-Letter-Queue (DLQ) unter `~/.sentrysearch/dlq.json` auf und fährt mit der Indizierung des restlichen Filmmaterials fort. Chunks landen dort normalerweise aufgrund wiederholter vorübergehender API/Backend-Fehler, Decoder-Fehlern für eine bestimmte Datei, fehlender Dateien oder Speicherüberläufen. Permanent wirkende Fehler wie fehlende Dateien, Decodierungsfehler und OOM werden sofort aufgezeichnet, da ein erneuter Versuch desselben Chunks mit denselben Einstellungen wahrscheinlich nicht helfen wird.

Fehlgeschlagene Chunks inspizieren:```bash
sentrysearch dlq list

Wiederholen Sie sie beim nächsten Indexdurchlauf:```bash sentrysearch index /path/to/footage --retry-failed

root@kitploit:~
Leere die DLQ ohne erneuten Versuch:```bash
sentrysearch dlq clear

Standardmäßig überspringen zukünftige sentrysearch index-Durchläufe Chunks, die sich bereits in der DLQ befinden, damit Sie nicht wiederholt für Fehler bezahlen oder darauf warten müssen. Verwenden Sie --retry-failed, nachdem Sie das Quellproblem behoben, Modell-/Backend-Einstellungen geändert oder Speicher freigegeben haben.

Cache- und Zustandsdateien

SentrySearch hält lokale Zustände unter ~/.sentrysearch/:

Ausführlicher Modus

Fügen Sie --verbose zu einem der Befehle hinzu, um Debug-Informationen zu erhalten (Embedding-Dimensionen, API-Antwortzeiten, Ähnlichkeitswerte).

Wie ist das möglich?

Sowohl Gemini Embedding 2 als auch Qwen3-VL-Embedding können nativ Video einbetten – rohe Videopixel werden in denselben Vektorraum wie Textabfragen projiziert. Es gibt keine Transkription, keine Bildunterschriften, keinen Text als Vermittler. Eine Textabfrage wie "red truck at a stop sign" ist auf Vektorebene direkt mit einem 30-Sekunden-Videoclip vergleichbar. Das macht die semantische Suche in Sekundenbruchteilen über Stunden von Filmmaterial praktikabel.

Kosten

Gemini

Die Indizierung einer Stunde Filmmaterial kostet mit der Gemini-Embedding-API etwa $2.84 (Standardeinstellungen: 30s-Chunks, 5s-Überlappung):

1 Stunde = 3.600 Sekunden Video = 3.600 vom Modell verarbeitete Frames. 3.600 Frames × $0,00079 = ~$2,84/Std

Die Gemini-API extrahiert und tokenisiert nativ genau 1 Frame pro Sekunde aus hochgeladenen Videos, unabhängig von der tatsächlichen Bildrate der Datei. Der Vorverarbeitungsschritt (der Chunks über ffmpeg auf 480p bei 5fps herunterskaliert) ist eine lokale/Bandbreiten-Optimierung – er hält die Payload-Größen klein, damit API-Anfragen schnell sind und kein Timeout auftritt – ändert aber nicht die Anzahl der Frames, die die API verarbeitet.

Zwei integrierte Optimierungen helfen, die Kosten auf unterschiedliche Weise zu senken:

  • Vorverarbeitung (standardmäßig aktiviert) – Chunks werden vor dem Hochladen auf 480p bei 5fps herunterskaliert. Da die API ohnehin mit 1fps arbeitet, reduziert dies nur die Upload-Größe und die Übertragungszeit, nicht die Anzahl der berechneten Frames. Es verbessert hauptsächlich die Geschwindigkeit und verhindert Anfrage-Timeouts.
  • Stillbild-Überspringen (standardmäßig aktiviert) – Chunks ohne sinnvolle visuelle Änderung (z. B. ein geparktes Auto) werden vollständig übersprungen. Dies spart echte API-Aufrufe und senkt direkt die Kosten. Die Ersparnis hängt von Ihrem Filmmaterial ab – Sentry-Mode-Aufnahmen mit stundenlanger Leerlaufzeit profitieren am meisten, während actionreiches Fahrmaterial möglicherweise nichts zu überspringen hat.

Suchanfragen sind vernachlässigbar (nur Text-Embedding).

Qwen Cloud (DashScope, Qwen3-VL-Embedding)

DashScope berechnet multimodales Embedding in CNY pro 1.000 Eingabe-Tokens, nach Modalität. Für das Standardmodell qwen3-vl-embedding liegen die veröffentlichten Preise von Alibaba (überprüfen Sie das unten verlinkte Dokument für Ihre Region und etwaige Aktualisierungen) in etwa bei:

  • Texteingabe: etwa ¥0.0007 pro 1k Eingabe-Tokens
  • Bild-/Videoeingabe: etwa ¥0.0018 pro 1k Eingabe-Tokens

Die Indizierung sendet Video-Chunks (Video-Modalität); jede search-/img-Abfrage besteht meist aus Text- oder Bild-Tokens, die pro Token günstiger sind als Video. Ihre tatsächlichen Kosten sind die von DashScope zurückgegebenen Token-Anzahlen für jeden API-Aufruf (abhängig von Auflösung, Dauer, Sampling wie DASHSCOPE_VIDEO_FPS usw.) – es gibt keinen festen „$ pro Stunde Filmmaterial“ wie den veröffentlichten USD-Preis pro Frame von Gemini, ohne Ihren Arbeitsaufwand zu messen.

Alibaba dokumentiert auch eine kostenlose Token-Zulage (z. B. 1M Tokens innerhalb eines begrenzten Zeitraums nach der Aktivierung); bestätigen Sie dies auf der Seite DashScope Multimodales Embedding – Abrechnung und Messung und in der Model Studio / Abrechnungskonsole, da Preise, Regionen und Aktionen sich ändern.

Indizierungsoptimierung (beide Backends)

Diese Flags betreffen das Chunking und die Vorverarbeitung für beide (Gemini und qwen-cloud):

  • --chunk-duration / --overlap – längere Chunks mit weniger Überlappung = weniger API-Aufrufe = geringere Kosten
  • --no-skip-still – jeden Chunk einbetten, auch wenn nichts passiert
  • --target-resolution / --target-fps – Vorverarbeitungsqualität anpassen
  • --no-preprocess – rohe Chunks an die API senden

Bekannte Warnungen (harmlos)

Das lokale Backend kann während der Indizierung und Suche Warnungen ausgeben. Diese sind kosmetischer Natur und beeinflussen die Ergebnisse nicht:

  • MPS: nonzero op is not natively supported – Eine bekannte PyTorch-Einschränkung auf Apple Silicon. Die Operation fällt für einen Schritt auf die CPU zurück; alles andere bleibt auf der GPU. Keine Auswirkung auf die Ausgabequalität.
  • video_reader_backend torchcodec error, use torchvision as default – torchcodec findet kein kompatibles FFmpeg unter macOS. Der Videoprozessor fällt automatisch auf torchvision zurück. Dies ist erwartet und liefert identische Ergebnisse.
  • You are sending unauthenticated requests to the HF Hub – Das Modell wird ohne Token von Hugging Face heruntergeladen. Die Downloadgeschwindigkeiten können etwas niedriger sein, aber das Modell lädt einwandfrei. Setzen Sie die Umgebungsvariable HF_TOKEN, um dies zu unterdrücken, falls es Sie stört.

Einschränkungen & Zukünftige Arbeiten

  • Stillbild-Erkennung ist heuristisch – sie vergleicht die JPEG-Dateigröße über abgetastete Frames. Es kann gelegentlich Chunks mit subtiler Bewegung überspringen oder Chunks einbetten, die tatsächlich statisch sind. Deaktivieren Sie mit --no-skip-still, wenn Sie jeden Chunk indiziert haben möchten.
  • Suchqualität hängt von den Chunk-Grenzen ab – wenn ein Ereignis zwei Chunks überspannt, hilft das überlappende Fenster, ist aber nicht perfekt. Intelligenteres Chunking (z. B. Szenenerkennung) könnte dies verbessern.
  • Gemini Embedding 2 ist in der Vorschau – API-Verhalten und Preise können sich ändern.

Kompatibilität

Dies funktioniert mit .mp4- und .mov-Filmmaterial, nicht nur mit dem Tesla Sentry Mode. Der Verzeichnisscanner findet rekursiv beide Dateitypen unabhängig von der Ordnerstruktur.

Voraussetzungen

  • Python 3.11+
  • ffmpeg im PATH oder verwenden Sie gebündeltes ffmpeg über imageio-ffmpeg (standardmäßig installiert)
  • Gemini-Backend: Gemini-API-Schlüssel (kostenlos erhalten)
  • Lokales Backend:
    • GPU mit CUDA oder Apple Metal (siehe Hardware-Tabelle für VRAM/RAM-Anforderungen)
    • macOS: brew install ffmpeg (vom Videodecoder benötigt)
    • Linux/Windows: keine zusätzlichen Systemabhängigkeiten
Tool herunterladen
HardwareInstallationsbefehlAutomatisch erkanntes ModellHinweise
Apple Silicon, 24 GB+ RAMuv tool install ".[local]"qwen8bVolles float16 über MPS
Apple Silicon, 16 GB RAMuv tool install ".[local]"qwen2b8B passt nicht; 2B verwendet ~6 GB
Apple Silicon, 8 GB RAMuv tool install ".[local]"qwen2bKnapp — möglicherweise Swap unter Last; Gemini-API stattdessen empfohlen
NVIDIA, 18 GB+ VRAMuv tool install ".[local]"qwen8bVolle bf16-Präzision (CUDA-Wheels werden automatisch auf Linux/Windows bezogen)
NVIDIA, 8–16 GB VRAMuv tool install ".[local-quantized]"qwen8b4-Bit-Quantisierung (~6–8 GB)
PfadGeschrieben vonVerwendet fürKann gelöscht werden?
db/sentrysearch indexChromaDB-Vektorindex für Ihr eingebettetes Filmmaterial.Ja, aber dies löscht den Index. Führen Sie sentrysearch index <verzeichnis> erneut aus, bevor Sie erneut suchen.
.envsentrysearch initSpeichert Ihren Gemini-API-Schlüssel für das Standard-Backend.Ja, aber Gemini-gestützte Befehle werden Sie bitten, den Schlüssel erneut zu konfigurieren.
dlq.jsonFehlgeschlagene sentrysearch index-ChunksDead-Letter-Queue, die von sentrysearch dlq list überprüft und mit --retry-failed wiederholt wird.Ja. Das Löschen vergisst fehlgeschlagene Chunks, sodass zukünftige Index-Durchläufe sie als neue Arbeit erneut versuchen können.
last_clip.jsonBefehle, die einen Clip speichern (search, img, highlights, overlay)Ermöglicht SentryBlur, den zuletzt gespeicherten Clip mit sentryblur ... --last zu verwenden.Ja. Nur die --last-Übergabe geht verloren; gespeicherte MP4-Dateien werden nicht gelöscht.
last_search.jsonsentrysearch search, img und highlightsErmöglicht SentryMerge, die aktuellste Ergebnisliste mit sentrymerge --last zu verwenden.Ja. Nur die --last-Übergabe geht verloren; der Suchindex bleibt unverändert.
historysentrysearch shellReadline-Befehlshistorie für die interaktive Shell.Ja. Die Shell startet beim nächsten Mal mit leerer Historie.