Screen-recording understanding: turn a screencast into a queryable index of UI states for transcripts, Q&A, and how-to / bug-report generation.
Project description
Screex
Screen-recording understanding for agents. Screex turns a screencast into a queryable index of UI states — each with the on-screen text (OCR), what text changed since the previous state, a thumbnail, and a full-resolution keyframe — so an LLM/agent can produce an action transcript, answer questions, or generate a how-to guide / bug report from a recording.
- Training-free & model-agnostic — no fine-tuned UI model; any LLM can read the index.
pip install-only — OCR viarapidocr-onnxruntime, no system binaries.- Cheap by design — the on-screen text is plain text (nearly free to read); full-res keyframes are escalated to only when the text is insufficient.
Install
From PyPI
pip install screex
From source
git clone https://github.com/blueprintparadise/Screex.git
cd Screex
pip install -e . # add ".[test]" to also install pytest
Both give you a screex command (entry point screex.cli:main). Requires Python ≥ 3.9.
First run downloads the small RapidOCR ONNX models automatically.
Quickstart (CLI)
# Build the index for a screen recording
screex index path/to/recording.mp4 --fps 2
# (or, without installing the package:)
python -m screex.cli index path/to/recording.mp4 --fps 2
This writes:
path/to/recording.screex/
index.json # the ScreenIndex (ordered UI states)
frames/00000.png # full-res keyframe per state
frames/00000_thumb.png# thumbnail per state
...
index options
| Flag | Default | Meaning |
|---|---|---|
--fps |
2 |
frames sampled per second (raise for fast-moving recordings) |
--change-threshold |
0.04 |
visual-change fraction (0–1) that starts a new UI state — lower = more states, higher = fewer |
--thumb-width |
320 |
thumbnail width in px |
--out |
<recording>.screex |
output directory |
What index.json contains
An ordered list of states, each with:
t_start / t_end, ocr_text (on-screen text lines), text_added / text_removed
(text that appeared/disappeared vs the previous state — the strongest signal of what the user
did), and thumbnail / keyframe paths.
Use as a Claude skill
Screex ships a SKILL.md that teaches Claude to build the index and turn it into one of three
views: an action transcript, Q&A over the recording, or a how-to / bug report.
-
Install the package so
python -m screex.cliis available in the environment Claude uses (pip install -e .). -
Install the skill — the package bundles
SKILL.md, so one command installs it where Claude Code discovers skills:screex skill --install # ~/.claude/skills/screex/ screex skill --install --dir <project>/.claude/skills/screex # per-project screex skill --path # just print the target path
-
Use it — in Claude Code, just ask in natural language, e.g.:
- "Use screex to turn
~/Downloads/bug-repro.mp4into a bug report." - "What steps does this screen recording show?"
- "From this demo, write a how-to doc."
Claude runs
screex index, readsindex.json, skims the on-screen text across states, and escalates to a full-res keyframe only when the text isn't enough — then produces the transcript / answer / document. - "Use screex to turn
The skill is model-agnostic: the same
index.jsoncan be read by any LLM/agent, not only Claude.
How it works
recording → sample frames → segment into UI states → per state: OCR text + text-diff
→ write thumbnail + full-res keyframe → index.json
↓
views (agent-driven): transcript · Q&A · how-to / bug report
screex/core/:
source— decode & sample frames (OpenCV)segment— group frames into settled UI states by visual changeocr— RapidOCR text extraction + text-diff between statesindex— theScreenState/ScreenIndexschema (JSON)
screex/cli.py wires them into the screex index command.
Development
pip install -e ".[test]"
python -m pytest -q
License
MIT © 2026 Rushikesh Hiray
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file screex-0.1.0.tar.gz.
File metadata
- Download URL: screex-0.1.0.tar.gz
- Upload date:
- Size: 17.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c34522e2cfce12163242e89f89bf9c86c67beaea8a8095ff4e5e8c3894541572
|
|
| MD5 |
ba1856a63800845cf9db5a8c7211258d
|
|
| BLAKE2b-256 |
f8b24659ba4c1074200f5fe31c87f598b681c2b9b713802e093ebaa041b32b9f
|
File details
Details for the file screex-0.1.0-py3-none-any.whl.
File metadata
- Download URL: screex-0.1.0-py3-none-any.whl
- Upload date:
- Size: 14.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b4e4d7f140e7ad4ad881c133bf5b56e676f1a97752c2c1cd3ea907115521e812
|
|
| MD5 |
d04cf2f1451791d2de9d0db4fdad16b8
|
|
| BLAKE2b-256 |
0be35755be4c097633cb1567a233240564544fa393368d8ab22858c85043578e
|