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_KEYdoit ê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.ffmpegetffprobedoivent être dans le PATH.- Les URLs nécessitent
jevreel[url]; les vidéos sans sous-titres nécessitentjevreel[asr]pour une transcription.
Flux de travail
- Indexez une fois. MCP
index_video(source)oujevreel index <fichier-ou-url>. Les appels ultérieurs utilisent l'idretourné, le chemin ou le titre ("tears of steel"). Ré-indexer une vidéo déjà indexée renvoie le résultat immédiatement. - 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),bothouauto.- Affinez avec
start/endlorsque l'utilisateur nomme une partie de la vidéo.
- Trouvez à partir d'une photo.
find_in_video(video, image_path, note="personne")/jevreel find <id> photo.jpg --note personne. - 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:10fournit plus d'images.locate_in_frame(video, at, target)encadre et recadre un élément dans une image pour une lecture détaillée. - Ce qui est dit.
video_transcript(video, start, end)/jevreel transcript <id> --start 12:00 --end 13:00. - Questions sur toute la vidéo.
ask_whole_video(video, question, kind, options)/jevreel whole <id> "Est-ce un tutoriel ?". Utilisezkind=choiceavec des options, oukind=scoreavec 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(oujevreel 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 sontcolonne op valeurreliées parand; mettez entre guillemets une valeur qui contient "and" (place == 'books and a desk'). Omettezwherepour 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
probabilityest la probabilité de oui de Jev ;strongsignifie au moins 0,7. Pour les résultatsverified, elle provient des images complètes,at/timeest l'image qui l'a le mieux montré, etscreenedest la probabilité de la planche-contact avant vérification. Les résultats non vérifiés proviennent uniquement de la planche.shownetsaidsont les questions visuelles et de transcription, posées séparément.alsoliste 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.