jevreel

io.github.DeepAleph由 GitHub 帳號 DeepAleph 發布v0.2.0更新於 Oct 28, 2026

Search and understand videos without embeddings: contact sheets plus Jev typed decisions.

概覽

AI 產生的概覽

把影片切成分格縮圖,用 TypeSafe 的 Jev 決策模型定位、驗證並描述片段,向助理回傳時間點與機率。

可以做什麼
  • 將本機影片或網址建立索引成分格縮圖、字幕與帶類型的逐分鐘時間軸,並可加入自訂鏡頭問題
  • 依描述搜尋畫面、語音或兩者兼具的片段,並在全解析度影格上驗證,給出時間與機率
  • 依參考照片找出某個人或物件出現的所有時刻
  • 細看畫面:擷取兩個時間點之間的全解析度影格、在單一影格中框選並裁切目標、讀取字幕內容
  • 對整段影片提出一個帶類型的問題,並在不發出新請求的情況下篩選已存時間軸
  • 列出本機已建立索引的影片
適用情境
適合讓助理在長影片中找出特定時刻、在真實畫面上驗證並引用準確時間,或用帶類型的問題梳理整部影片或錄影。較適合一次性或探索性的影片提問;若要對大型影片庫反覆檢索,向量索引更省成本。
執行需求
以 stdio 在本機執行,透過 uvx 啟動,需要 uv、Python 3.11+ 以及 PATH 中的 FFmpeg。使用 Jev 的篩選、鏡頭與整片提問需要 TYPESAFE_API_KEY 中的 TypeSafe API 金鑰;不含時間軸的索引、縮放、字幕與查詢不需金鑰。網址支援與本機語音轉寫來自 [all] 附加元件,未安裝時需在影片旁放置字幕檔。需要連線至 TypeSafe 的網路。
安裝前請注意
每次 Jev 提問都會計入你的 TypeSafe 帳戶費用,約每小時影片每個問題 0.02–0.03 美元,影片越長、重複提問越多花費越高;答案有快取以免重複付費。TYPESAFE_API_KEY 金鑰會傳給伺服器,部分用戶端會將其存入憑證儲存區或環境變數允許清單。已索引的影片、影格與答案快取保存在本機快取資料夾。Jev 的影像支援被描述為實驗性,門檻值需依自己的素材調整。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 jevreel,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

jevreel

A zero-embedding approach to video intelligence, using Jev.

[CI] [License: MIT] [Python 3.11+]

jevreel lays a video out on labelled contact sheets, one frame per second and sixty frames to an image, and has Jev, TypeSafe's fast decision model, judge every sheet in parallel. The best windows are re-checked on full frames. Your agent (Claude Code, Codex, Cursor, Claude Desktop, anything that speaks MCP) gets back moments, times and probabilities, then looks closer itself. No vectors are computed or stored anywhere.

[How jevreel works: a 12-minute film becomes 13 contact sheets, Jev judges them in parallel, the best windows are verified on full frames, and the agent gets timed hits]

See it work

Five unedited Claude Code sessions using the jevreel MCP server and skill on Blender's open movie Tears of Steel (12:14, (CC) Blender Foundation, CC BY 3.0). Each clip is drawn from its recording: the agent's tool calls, what Jev answered for every sheet and frame, the hits, the cost, and the agent's own answer, quoted. Click a clip for the full-resolution video.

AskedWhat happenedJev
1Is there a moment where someone drinks from a juice box?13 sheets screened, 6 windows verified on full frames, 2 kept: 2:28.5 (p 0.95) and 12:06.5 (0.86)19 requests, $0.0054
2When does Thom apologise to Celia, and what does he say?Speech mode over the captions: 6:47 "I'm sorry." (0.85), and a blurted "Sorry!" at 5:02 the agent set aside10 requests, $0.0003
3Somebody reads a newspaper early on. What does the headline say?First 5 minutes only: verified at 1:20.5 (0.94); the agent read ROBOTICIST CREATES KILLER ROBOTS off the frame8 requests, $0.0024
4captain.jpg is a character. List every scene he's in.Search by photo: 8 moments, 6 verified at 0.86–0.97, 2 more confirmed by the agent with zoom19 requests, $0.0064
5Map the film: robots, guns, holograms, settings, and what kind of film.The agent wrote its own 4-question lens, read the per-minute rows back for free, and asked one whole-film question14 requests, $0.0051

1. Find a three-second moment

[Use case 1: screening 13 contact sheets for a juice box, verifying the top windows, and the agent's answer]

2. Search the dialogue

[Use case 2: speech-mode search over caption lines, the picked line, and the agent's answer]

3. Read what's on screen

[Use case 3: finding the newspaper in the first five minutes and the headline the agent read]

4. Find a person from a photo

[Use case 4: searching by a reference photo, verified windows, and every moment on a timeline]

The reference photo is a crop of the frame at 9:18, so the 9:17 hit is its own source; the other seven are what the search found.

5. Map a whole film

[Use case 5: an agent-written lens, the per-minute heatmap, the whole-film question, and the agent's map]

The session starts with two failed calls, left in: a shell command the recording didn't allow, then a wrong folder. The error names the folder relative paths resolve from, and the next call works.

Why a decision model instead of embeddings

Multimodal embedding models already search video well: EmbeddingGemma 2 (October 2026) puts text, images, video frames and audio in one vector space and runs on a phone. jevreel takes a different route to the same goal, with different trade-offs.

  • Your question, not a fixed notion of "similar". An embedding index decides at index time what counts as close. A decision model judges the question you ask now, and returns a probability your code can threshold, sort and gate on.
  • Every second, cheaply. Jev charges for input tokens only, and output is free. A contact sheet is sent once and every question about it rides along in the same request, so jevreel screens the whole video at one frame per second instead of a handful of keyframes.
  • Questions are nearly free, so ask many. Lenses add your own typed questions to every minute at almost no extra cost, then filter them as often as you like for nothing.
  • The expensive model only sees what passed. Your agent gets the few moments that matter, as full-resolution frames, rather than a pile of thumbnails.
  • Typed answers, not just rankings. Yes/no with the second it happens, one of your options, or a level on your scale, per minute or for the whole video.

Embeddings are the better fit for querying a large library over and over: once the vectors exist, each search is a lookup that costs nothing, while every jevreel question pays Jev for the minutes it screens (about $0.02–0.03 per hour of video). The two combine well: embeddings to shortlist videos, jevreel to find, verify and describe the moment.

How it works

mermaid
flowchart LR    V[video file or URL] --> F["ffmpeg: 1 frame/s"]    F --> S["contact sheets<br/>60 labelled tiles, 1 minute each"]    V --> T["captions, or local<br/>speech-to-text"]    S --> J{{"screen: one Jev request<br/>per sheet, in parallel"}}    T --> J    J --> R["verify: top-ranked windows<br/>re-checked on full frames,<br/>every 0.5 s around the pick"]    R --> H["hits: time, probability,<br/>frame, nearby speech"]    H --> A["your agent: zoom, locate,<br/>read, cite 12:04"]
  1. Index. Sample the video at 1 fps and tile the frames onto 1568 px contact sheets, each tile labelled T01, T02, and so on. Fetch captions, or transcribe locally. Ask every sheet a fixed set of questions once (people, on-screen text, cuts, setting, activity, a representative frame) plus any lenses you add, which gives a typed timeline.
  2. Screen. One request per sheet: a yes/no (Noul) for "is it in this minute" plus a Choice over tile IDs for "which second". Screen and speech are separate questions combined in code.
  3. Verify. The top-ranked windows (by rank, not threshold) are re-checked with one yes/no per full frame, every half second around the pick. Screening ranks a one-second event correctly even when it can't confirm it; verification confirms it, or throws out a false lead.
  4. Look closer. zoom re-renders full-resolution frames; locate puts a Box around a target in one frame and crops it; whole answers one question about the entire video from a storyboard, the timeline and the transcript.

Answers are cached: the same images and questions to the same model never cost twice.

This follows TypeSafe's own patterns. Their line-search cookbook pairs a Choice over labelled units with a Noul for "is it there at all". Their images guide searches a large image by Choice over tiles and looks closer only where needed. Their Box guide gates every box behind a Noul and checks its edges.

Quickstart

You need Python 3.11+, FFmpeg on your PATH, and a TypeSafe API key.

bash
uv tool install "jevreel[all]"export TYPESAFE_API_KEY=...
jevreel index talk.mp4                       # prints the video idjevreel ask talk "a slide with a bar chart"  # id, id prefix, path or title all workjevreel zoom talk 12:00 12:10                # full-resolution frames to look at

[all] adds URL support (yt-dlp) and local speech-to-text (faster-whisper). Without them, jevreel indexes local files and uses .srt or .vtt captions saved next to the video.

Lenses: your own questions on every minute

A lens is a set of typed questions asked of every sheet and kept as timeline columns. Questions can be noul (yes/no, plus the second it happens), choice (one of your options) or score (levels, lowest first).

toml
# examples/lenses/driving.tomlname = "driving"
[[questions]]name = "on_bridge"type = "noul"ask = "Is the car driving on a bridge?"
[[questions]]name = "weather"type = "choice"ask = "What is the weather mostly like?"options = ["clear", "cloudy", "rain", "snow", "fog"]
[[questions]]name = "traffic"type = "score"ask = "How much other traffic is on the road?"levels = ["None", "Light", "Moderate", "Heavy"]
bash
jevreel index drive.mp4 --lens driving.toml     # rides in the indexing requests: almost freejevreel lens drive driving.toml                 # or run it later: one request per minute of videojevreel query drive "on_bridge > 0.7"           # filter as often as you like: no requestsjevreel query drive "weather == snow and traffic >= 2"

Use it from your agent

The MCP server exposes ten tools. The skill teaches agents the workflow: ask, look before claiming anything, cite times.

As a plugin

The plugin bundles the MCP server and the skill. It starts the server with uvx --from "jevreel[url]==0.2.0", so you need uv and FFmpeg on your PATH. Local speech-to-text is left out to keep the first start quick; for it, add the server by hand with jevreel[all] as shown further down.

Claude Code asks for your TypeSafe API key when you enable the plugin and keeps it in your system's credential store:

bash
claude plugin marketplace add DeepAleph/jevreelclaude plugin install jevreel@jevreel

Codex passes plugin servers only an allowlist of environment variables, so save the key once. The same command installs the environment the plugin starts, so its first start is fast:

bash
uvx --from "jevreel[url]==0.2.0" jevreel logincodex plugin marketplace add DeepAleph/jevreelcodex plugin add jevreel@jevreel

By hand

Claude Code

bash
claude mcp add jevreel -e TYPESAFE_API_KEY=your-key -- uvx --from "jevreel[all]" jevreel mcp

Codex

bash
codex mcp add jevreel --env TYPESAFE_API_KEY=your-key -- uvx --from "jevreel[all]" jevreel mcp

Claude Desktop, Cursor and other mcpServers clients

json
{  "mcpServers": {    "jevreel": {      "command": "uvx",      "args": ["--from", "jevreel[all]", "jevreel", "mcp"],      "env": { "TYPESAFE_API_KEY": "your-key" }    }  }}

VS Code uses the same entry under "servers" with "type": "stdio".

The skill (Claude Code, Codex and other agents that read Agent Skills):

bash
npx skills add DeepAleph/jevreel

Agents without MCP can use the skill with the CLI alone; every command prints JSON.

Tools

MCP toolCLIWhat it does
index_videojevreel indexSheets, transcript, typed timeline and any lenses. Runs as an MCP background task; repeat calls return the index and only run new lenses.
ask_videojevreel askMoments matching a description: screened, verified on full frames, with times, probabilities, nearby speech and the frames themselves. mode: visual, speech, both.
find_in_videojevreel findEvery moment the subject of a reference photo appears.
locate_in_framejevreel locateBox and crop a target in one full-resolution frame.
zoom_videojevreel zoomEvenly spaced full-resolution frames between two times.
video_transcriptjevreel transcriptWhat is said between two times.
ask_whole_videojevreel wholeOne typed answer (yes/no, choice, or score) about the entire video.
run_lensjevreel lensAsk your own typed questions of every minute of an indexed video.
query_timelinejevreel queryFilter the timeline (default answers and lenses). No requests.
list_videosjevreel listVideos indexed on this machine.

jevreel measure <video> reports what one contact sheet costs at several grid sizes on your account.

Python

python
import asyncio
from jevreel import Reel

async def main() -> None:    async with Reel() as reel:        video = await reel.index("talk.mp4")        result = await reel.ask(video.id, "a slide with a bar chart")        for hit in result.hits:            print(hit.time, hit.probability, hit.frame)        print(reel.query(video.id, "text_on_screen > 0.8").rows)

asyncio.run(main())

Configuration

VariableDefaultMeaning
TYPESAFE_API_KEY(required for Jev)Your TypeSafe key. Indexing without a timeline, zoom, transcripts and queries work without it.
JEVREEL_HOMEyour user cache folderWhere indexed videos, sheets, frames and the answer cache are kept. jevreel home prints it.
JEVREEL_MODELjev-1.14.0Pinned on purpose: Box and image tiles need 1.14, and aliases move.
JEVREEL_FPS1Frames per second sampled onto sheets (up to 5).
JEVREEL_TILES_PER_SHEET60Frames per sheet. Fewer means larger tiles and more requests.
JEVREEL_VERIFY_TOP6How many top-ranked windows each ask verifies on full frames; 0 turns verification off.
JEVREEL_CACHE1Set to 0 to always ask Jev again.
JEVREEL_CONCURRENCY16Parallel Jev requests. Rate limits are per TypeSafe account.
JEVREEL_ASR_MODELsmallfaster-whisper model for videos without captions.
JEVREEL_CAPTION_LANGUAGESen,en-orig,en.*Caption languages to fetch for URLs, in order.

What it costs

Measured on 2026-10-15 with jev-1.14.0 at $0.042 per million input tokens, on a 10-minute 1080p video:

RequestsInput tokensCost
One full contact sheet (any grid from 4×7 to 8×14)1about 6,000$0.00025
Indexing (11 sheets, 8 default questions each, 14 s wall clock)1178,000$0.0033
A lens of 5 questions, run afterwards1184,000$0.0035
One ask, screened and verified13–1597,000–115,000$0.004–0.005
The same ask again00$0 (cache)
locate (Box plus edge check)25,000$0.0002
whole (one storyboard request)17,600$0.0003

One question across an hour of video comes to about $0.02–0.03. Asked at index time, lens questions ride along with the default ones, which is where the "nearly free" comes from: an 8-question request cost about the same as a 2-question one. TypeSafe doesn't document image token counts yet. These figures are what the API reported. Check yours with jevreel measure.

Measured on a real video

A 10-minute 1080p gameplay capture, no speech, every result checked against the frames by hand:

QueryResult
"the game's pause menu is open"All three appearances, each under a second: 0:08.5, 2:19.5, 10:12.5 (p 0.99–1.00). Screening alone scored them 0.36, 0.50, 0.95. Before verification, two of the three were missed.
"the full-screen city map is shown"0:10 and 2:21, both map screens. No false hits.
"the car drives across a big steel truss bridge"2:07 and 5:05.5, both real bridge crossings.
Lens driving: query "on_bridge > 0.7"Exactly the two bridge minutes, at 2:14 and 5:02.
Lens driving: query "menu_open > 0.7"Exactly the three menu minutes.
locate "the location name caption" at 5:02Boxed and cropped; the crop reads "Fathers Bridge".
whole "What is this video mostly?""a driving sequence in a video game", 0.98.

Limits

  • Brief events need screening to rank their window. Verification looks every half second, but only in the top-ranked windows (6 by default). An event that screening ranks below that is not checked. Raise JEVREEL_VERIFY_TOP, or lower JEVREEL_TILES_PER_SHEET for larger tiles.
  • No sound beyond speech. Audio reaches Jev only as transcript text.
  • Jev's image support is experimental. TypeSafe calls images and Box "dreamer-ready", not production-ready, and says limits and accuracy can change between releases.
  • Jev's real image minimum is 280 px per side. The docs say 256, but the API rejects anything smaller than 280 (measured 2026-10-15). jevreel pads every image itself.
  • Thresholds need tuning on your footage. 0.5 to report and 0.7 for "strong" follow TypeSafe's examples. They held up on the test video, which is one video.

Contributing

Issues and pull requests are welcome. See CONTRIBUTING.md. Coding agents should read AGENTS.md.

License

MIT. jevreel is an independent project, not affiliated with TypeSafe AI. Jev is TypeSafe's model and is used through its public API under TypeSafe's terms.

來源:README.md,提交 6c89b26

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.2.0最新Oct 17, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分