How we reviewed this: we installed it in Docker on Python 3.11, ran the documented CI smoke checks, and drove the whole pipeline — ffmpeg, Whisper, alignment, scoring, rendering — against a local stand-in for the API, producing a finished 1080p video. We made no Jev calls, so nothing here judges the scores themselves.
What it does
jevmeter, by Chetas Lua, takes a video of people talking and produces a 16:9 edit with live meters: each speaker’s score, karaoke captions, and five probability bars along the bottom. Code does the mechanical work — ffmpeg extracts audio, Whisper produces word timings, difflib aligns a supplied transcript to them, Pillow renders every frame. Jev answers five Noul questions per sentence, defined by a preset you can edit. The debate preset asks things like:
Is sentence talking around the issue raised in moderator_question instead of addressing it?
One request per sentence, five questions in it, six threads by default.
The install worked exactly as documented, and the repository’s CI smoke checks — compile, help, preset parsing, transcript parsing, a secret scanner — all passed offline. There are no unit tests beyond that. jevmeter doctor behaved correctly with no network, reporting what it couldn’t reach rather than guessing.
End to end on a synthetic 190-second clip, it produced a correct 1080p H.264 edit with the layout the README shows.
The cache reuses scores after you edit the transcript
Scores are cached against a fingerprint:
fp = hashlib.sha256(json.dumps([model, preset.get("context_label"),
make_questions(preset)], sort_keys=True).encode()).hexdigest()[:12]
Model, context label, questions — not the transcript. Sentences are identified by position. So if you fix a misheard line, or change wording, and re-run in the same working directory, the edited sentence keeps the previous sentence’s scores and no new request is made. The README’s feature list says a crash or a tweak never re-pays for transcription or scoring, and a tweak is exactly the case where you want it to.
The same shape applies to the Whisper cache, which ignores --whisper-model, --start and --end; changing the model in an existing working directory does not re-transcribe, and adding a time range to a cached run can fail with an unhelpful “speaker not in transcript”.
Neither is hard to work around — a fresh working directory per version of the transcript — but the failure is silent, and the output is a video you might publish. We’ve reported it.
What it sends, and how much
- The transcript goes out in full, several times over. The state per sentence is the speaker, the moderator question (truncated), that speaker’s previous 25 sentences, the answer so far, and the sentence itself. A few kilobytes of transcript become tens of kilobytes of requests.
- One call per scored sentence, with no cap. There is no budget, no confirmation step, and nothing stops a two-hour debate. The README reports its own totals for a full debate; the shape is simply linear in sentences.
- A URL input downloads the video with yt-dlp, so whether you may process it is your problem — the README says as much.
- Key handling is the best of the three apps we looked at this round: stored in
~/.config/jevmeter/config.json with owner-only permissions, gitignored, with a pre-commit secret scanner and a CI check.
- Everything else stays local: word timings, sentences, scores and the finished video all live in a working directory beside the input.
One cosmetic consequence of the design worth knowing: the price per million tokens is a display default that gets burned into the rendered video as a dollar figure. If pricing changes, published videos carry the old number.
Maintenance
Three commits, created September 17, MIT licensed, no open issues, one maintainer. The README’s numbers don’t all line up with the repository’s own example data — the mock summary in examples/ reports different scores than the README text for the same run — which is the kind of drift you’d expect in a three-commit project, and a reason to run your own clip before trusting any of it.
Verdict
As a piece of video tooling this is surprisingly complete: alignment, rendering, presets and a doctor command, in three commits. As an analysis tool, the design is honest — five plain yes/no questions per sentence, defined in a file you can edit and read.
Use a fresh working directory whenever the transcript changes, decide up front that the transcript is going to a third party, and remember the cost figure gets baked into the frames.
For other media work, see the apps category. Our Best Jev Tools roundup compares what each tool sends.
See how it compares with other tools in Best Jev tools, tested hands-on.
Review updated Sep 20, 2026. Numbers quoted from the project are its author's own; we don't publish our own measurements of Jev.