Communitygithub.com

DeepAleph/jevreel

Recherchez et comprenez des vidéos sans recourir à des embeddings. Utilisez cette compétence lorsque l'utilisateur pose une question sur le contenu d'un fichier vidéo ou d'une URL vidéo – trouver des moments (« quand X se produit »), trouver une personne ou un objet à partir d'une photo, lire ce qui est affiché à l'écran à un instant donné, obtenir ce qui est dit, suivre les mêmes éléments sur l'ensemble d'une vidéo, ou obtenir une réponse sur la vidéo entière. Fonctionne via les outils MCP de jevreel ou la CLI `jevreel`.

Qu'est-ce que jevreel ?

jevreel est un outil intelligent permettant aux agents IA de poser des questions détaillées sur le contenu de vidéos locales ou en ligne, sans nécessiter d'embeddings coûteux. Il décompose la vidéo en une planche-contact d'une image par seconde, soumet chaque image à un modèle de décision rapide (Jev de TypeSafe) en parallèle, puis vérifie les fenêtres les plus prometteuses sur les images en pleine résolution. Il supporte les vidéos locales et les URLs (ex. YouTube), les transcriptions via reconnaissance vocale (ASR) pour les vidéos sans sous-titres, et fonctionne à la fois via des outils MCP (Model Context Protocol) pour une intégration directe dans des agents comme Claude, ou via la CLI `jevreel` pour un usage en ligne de commande. L'outil excelle pour trouver des moments précis, identifier des personnes ou objets à partir d'une photo, lire du texte à l'écran, ou répondre à des questions globales sur la vidéo. Il est particulièrement utile pour des tâches de vérification factuelle, de montage, d'analyse de contenu vidéo, ou de surveillance automatisée (par exemple, détection d'équipements de sécurité, identification de marques, analyse de présentations).

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/DeepAleph/jevreel/tree/HEAD/skills/jevreel

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

jevreel : posez des questions sur des vidéos

jevreel dispose une vidéo sur des planches-contact à une image par seconde et fait examiner chaque planche en parallèle par Jev, le modèle de décision rapide de TypeSafe, puis revérifie les meilleures fenêtres sur les images complètes. C'est vous (l'agent principal) qui examinez ce qui a été trouvé. Jev fournit des réponses typées et des probabilités, jamais de descriptions : lire, décrire et conclure est votre travail.

Vérification préalable

  • TYPESAFE_API_KEY doit être définie pour tout ce qui interroge Jev (indexation avec une timeline, ask, find, locate, whole, lenses). Zoom, transcriptions et requêtes de timeline fonctionnent sans elle.
  • ffmpeg et ffprobe doivent être dans le PATH.
  • Les URLs nécessitent jevreel[url] ; les vidéos sans sous-titres nécessitent jevreel[asr] pour une transcription.

Flux de travail

  1. Indexez une fois. MCP index_video(source) ou jevreel index <fichier-ou-url>. Les appels ultérieurs utilisent l'id retourné, le chemin ou le titre ("tears of steel"). Ré-indexer une vidéo déjà indexée renvoie le résultat immédiatement.
  2. Trouvez des moments. ask_video(video, query) / jevreel ask <id> "<requête>".
    • Rédigez la requête comme une description simple de ce qui serait visible ou dit : "un diagramme à barres sur une diapositive", "quelqu'un ouvre un ordinateur portable", "l'orateur mentionne le prix".
    • Une seule chose par requête. Séparez "une voiture rouge et un chien" en deux requêtes ; Jev est le plus précis sur les questions simples.
    • mode : visual (écran uniquement), speech (transcription uniquement, le moins cher), both ou auto.
    • Affinez avec start/end lorsque l'utilisateur nomme une partie de la vidéo.
  3. Trouvez à partir d'une photo. find_in_video(video, image_path, note="personne") / jevreel find <id> photo.jpg --note personne.
  4. Regardez avant de répondre. Les résultats sont des pistes, pas des faits. Les résultats vérifiés sont accompagnés d'un frame, une image en pleine résolution du moment : regardez-la. zoom_video(video, start, end) / jevreel zoom <id> 12:00 12:10 fournit plus d'images. locate_in_frame(video, at, target) encadre et recadre un élément dans une image pour une lecture détaillée.
  5. Ce qui est dit. video_transcript(video, start, end) / jevreel transcript <id> --start 12:00 --end 13:00.
  6. Questions sur toute la vidéo. ask_whole_video(video, question, kind, options) / jevreel whole <id> "Est-ce un tutoriel ?". Utilisez kind=choice avec des options, ou kind=score avec des niveaux du plus bas au plus élevé (10 maximum).

Lentilles : lorsque les mêmes questions importent sur toute la vidéo

Lorsque l'utilisateur s'intéresse à plusieurs choses tout au long d'une vidéo (qui est à l'écran, règles de sécurité, marques, météo, si une diapositive est affichée), ne posez pas chaque question séparément. Exécutez une lentille : chaque minute, elle répond à toutes ses questions en une seule requête. Filtrez ensuite les réponses aussi souvent que nécessaire, gratuitement.

  • MCP run_lens(video, lens) avec {"name": "site", "questions": [{"name": "helmet_off", "type": "noul", "ask": "Un travailleur sans casque est-il visible ?"}, {"name": "vehicle", "type": "choice", "ask": "Quel véhicule est le plus visible ?", "options": ["voiture", "camion", "aucun"]}, {"name": "crowd", "type": "score", "ask": "Quel est le niveau d'affluence ?", "levels": ["Vide", "Peu", "Animé"]}]}. CLI : jevreel lens <id> lens.toml. Pour inclure une lentille lors de l'indexation, passez-la à index_video (ou jevreel index --lens) ; cela ne coûte alors presque rien de plus.
  • query_timeline(video, "helmet_off > 0.7") / jevreel query <id> "helmet_off > 0.7 and vehicle == truck". Les conditions sont colonne op valeur reliées par and ; mettez entre guillemets une valeur qui contient "and" (place == 'books and a desk'). Omettez where pour voir chaque minute et ses colonnes. Les questions oui/non donnent aussi <name>_at, la seconde où l'élément est le plus visible.
  • Les colonnes par défaut de la timeline sont également présentes : people, talking_to_camera, screen_or_slides, text_on_screen, cut, setting, activity (0-3), keyframe.

Lecture des résultats

  • probability est la probabilité de oui de Jev ; strong signifie au moins 0,7. Pour les résultats verified, elle provient des images complètes, at / time est l'image qui l'a le mieux montré, et screened est la probabilité de la planche-contact avant vérification. Les résultats non vérifiés proviennent uniquement de la planche.
  • shown et said sont les questions visuelles et de transcription, posées séparément.
  • also liste d'autres moments probables dans la même fenêtre.
  • Les probabilités sont bien classées mais ne sont pas garanties calibrées. Regardez avant d'affirmer quoi que ce soit que vous n'avez pas vu, et dites-le lorsque vous n'avez qu'une piste faible.
  • Aucun résultat au-dessus du seuil est une réponse valable, mais vérifiez d'abord weak : les fenêtres que Jev n'a pas exclues, y compris celles que la vérification a infirmées. Zoomez dessus avant de dire "non trouvé".
  • Citez les moments par leurs horodatages (par exemple "à 12:04"), afin que l'utilisateur puisse s'y rendre.

Coûts

Jev facture uniquement les jetons d'entrée, et les requêtes identiques répétées sont servies depuis le cache de jevreel gratuitement (cached dans les résultats). Chaque requête envoie chaque planche de la plage une fois (une planche par minute de vidéo), plus une requête par fenêtre vérifiée, donc réduire la plage avec start/end rend les requêtes moins chères et plus rapides. Les résultats signalent requests, cached, input_tokens et estimated_usd.

Skills associés