AI eyes that roll through video footage — watch, understand, turn into code actions.
Project description
eyeroll
AI eyes that roll through video footage — watch, understand, act.
eyeroll is a Claude Code plugin that analyzes screen recordings, Loom videos, YouTube links, and screenshots, then helps coding agents fix bugs, build features, and create skills.
Install
# Add the plugin to Claude Code
/plugin marketplace add mnvsk97/eyeroll
/plugin install eyeroll@mnvsk97-eyeroll
# Install the CLI
pip install eyeroll[gemini] # Gemini Flash API (recommended)
pip install eyeroll[openai] # OpenAI GPT-4o + OpenRouter/Groq/Grok/Cerebras
pip install eyeroll # Ollama only (local, no API key)
pip install eyeroll[all] # everything
Setup
/eyeroll:init
Picks your backend, configures API key, and generates codebase context — all in one step.
Commands
| Command | What it does |
|---|---|
/eyeroll:init |
Set up eyeroll — pick backend, configure API key, generate .eyeroll/context.md |
/eyeroll:watch <url> |
Analyze a video and present a structured summary |
/eyeroll:fix <url> |
Watch a bug video → diagnose → fix the code → raise a PR |
/eyeroll:history |
List past video analyses |
Usage
In Claude Code
You: /eyeroll:watch https://loom.com/share/abc123
→ Analyzes video, presents: what's shown, the bug, key evidence, suggested fix
You: /eyeroll:fix https://loom.com/share/abc123
→ Watches video, greps codebase, finds the bug, fixes it, raises a PR
You: watch this tutorial and create a skill from it: ./demo.mp4
→ video-to-skill activates, watches video, generates SKILL.md
You: /eyeroll:history
→ Lists past analyses with timestamps and sources
Standalone CLI
eyeroll watch https://loom.com/share/abc123
eyeroll watch ./bug.mp4 --context "checkout broken after PR #432"
eyeroll watch ./bug.mp4 -cc .eyeroll/context.md --parallel 4
eyeroll watch ./bug.mp4 --backend ollama -m qwen3-vl:2b
eyeroll watch ./bug.mp4 --backend groq
eyeroll watch ./bug.mp4 --backend openrouter -m anthropic/claude-3.5-sonnet
eyeroll watch ./bug.mp4 --backend openai-compat --base-url https://my-server/v1
eyeroll history
How it works
/eyeroll:watch https://loom.com/share/abc123
↓
1. Download video (yt-dlp)
↓
2. Extract frames (1 per 2s, deduplicate, enhance contrast)
↓
3. Analyze frames (Gemini / GPT-4o / Qwen3-VL)
+ transcribe audio if present
↓
4. Cache intermediates (reuse on next run)
↓
5. Synthesize report with codebase context:
- Bug Description
- Fix Directions (Visible / Codebase-informed / Hypothesis)
- Search patterns for the coding agent
↓
6. Present summary to user
↓
/eyeroll:fix goes further:
→ grep codebase → read files → implement fix → run tests → PR
Backends
| Backend | Video | Audio | API Key | Cost | Best for |
|---|---|---|---|---|---|
| gemini | Direct upload | Yes | GEMINI_API_KEY | ~$0.15 | Best quality |
| openai | Frame-by-frame | Whisper | OPENAI_API_KEY | ~$0.20 | Existing OpenAI users |
| ollama | Frame-by-frame | No | None | Free | Privacy, offline |
| openrouter | Frame-by-frame | Yes | OPENROUTER_API_KEY | varies | Model variety |
| groq | Frame-by-frame | Yes | GROQ_API_KEY | cheap | Low latency |
| grok | Frame-by-frame | Yes | GROK_API_KEY | varies | xAI models |
| cerebras | Frame-by-frame | Yes | CEREBRAS_API_KEY | cheap | Fast inference |
| openai-compat | Frame-by-frame | No | any env var | varies | Custom/self-hosted endpoints |
Ollama auto-installs if not found (macOS/Linux).
Codebase context
/eyeroll:init generates .eyeroll/context.md — a summary of your project that eyeroll uses to ground its analysis in real file paths instead of hallucinating them.
Without context, all file paths in the report are labeled as hypotheses.
Caching
eyeroll caches frame analyses and transcripts in .eyeroll/cache/. Same video = no re-analysis. Different --context re-runs only the cheap synthesis step.
eyeroll watch video.mp4 # full analysis (~15s)
eyeroll watch video.mp4 -c "new context" # instant — cached frames
eyeroll watch video.mp4 --no-cache # force fresh
Plugin structure
eyeroll/
commands/ ← slash commands
init.md ← /eyeroll:init
watch.md ← /eyeroll:watch
fix.md ← /eyeroll:fix
history.md ← /eyeroll:history
skills/ ← background skills
video-to-skill/ ← activated by "create a skill from this video"
eyeroll/ ← Python CLI package
cli.py, watch.py, analyze.py, extract.py, backend.py, history.py
tests/ ← 144 unit + 8 integration tests
Supported inputs
| Input | Formats |
|---|---|
| Video | .mp4, .webm, .mov, .avi, .mkv, .flv, .ts, .m4v, .wmv, .3gp, .mpg, .mpeg |
| Image | .png, .jpg, .jpeg, .gif, .webp, .bmp, .tiff, .heic, .avif |
| URL | YouTube, Loom, Vimeo, Twitter/X, Reddit, 1000+ sites via yt-dlp |
Development
git clone https://github.com/mnvsk97/eyeroll.git
cd eyeroll
pip install -e '.[dev,all]'
pytest # unit tests
pytest tests/test_integration.py -v -m integration # real API tests
License
MIT
Project details
Release history Release notifications | RSS feed
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 eyeroll-0.4.1.tar.gz.
File metadata
- Download URL: eyeroll-0.4.1.tar.gz
- Upload date:
- Size: 5.0 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
06e915e12a0c965afd7e4ec2b4d5981add59edd8330df49aa72237ac7db40a85
|
|
| MD5 |
e1b7ba675dff1d29a729b4c5940e9cce
|
|
| BLAKE2b-256 |
8de2dc2431b00bf4f8e6f597c6553b8d8724310823b7d2836ef050f2c125e05d
|
Provenance
The following attestation bundles were made for eyeroll-0.4.1.tar.gz:
Publisher:
ci.yml on mnvsk97/eyeroll
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
eyeroll-0.4.1.tar.gz -
Subject digest:
06e915e12a0c965afd7e4ec2b4d5981add59edd8330df49aa72237ac7db40a85 - Sigstore transparency entry: 1282962151
- Sigstore integration time:
-
Permalink:
mnvsk97/eyeroll@f1874ccde47054f0e07859fd68e42474e17b0a83 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/mnvsk97
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@f1874ccde47054f0e07859fd68e42474e17b0a83 -
Trigger Event:
push
-
Statement type:
File details
Details for the file eyeroll-0.4.1-py3-none-any.whl.
File metadata
- Download URL: eyeroll-0.4.1-py3-none-any.whl
- Upload date:
- Size: 29.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f97ceeba8d64de1cca50f632d8acbe97301b328d70c5bf808da213b58aba3cff
|
|
| MD5 |
28436cd2d1e363c62433d9564c46ec82
|
|
| BLAKE2b-256 |
db2947503d658165107eda4b7848e760e424b19f6e926029ad27aff70662d945
|
Provenance
The following attestation bundles were made for eyeroll-0.4.1-py3-none-any.whl:
Publisher:
ci.yml on mnvsk97/eyeroll
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
eyeroll-0.4.1-py3-none-any.whl -
Subject digest:
f97ceeba8d64de1cca50f632d8acbe97301b328d70c5bf808da213b58aba3cff - Sigstore transparency entry: 1282962171
- Sigstore integration time:
-
Permalink:
mnvsk97/eyeroll@f1874ccde47054f0e07859fd68e42474e17b0a83 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/mnvsk97
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@f1874ccde47054f0e07859fd68e42474e17b0a83 -
Trigger Event:
push
-
Statement type: