Skip to main content

eyeroll

CI PyPI Python License: MIT

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) — requires Pillow
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 watch ./bug.mp4 --no-context               # skip auto-discovery of codebase context
eyeroll watch ./bug.mp4 --no-cost                   # suppress cost estimate
eyeroll watch ./bug.mp4 --scene-threshold 50        # tune scene-change sensitivity
eyeroll watch ./bug.mp4 --min-audio-confidence 0.6  # stricter audio filtering
eyeroll history

How it works

/eyeroll:watch https://loom.com/share/abc123
    ↓
1. Preflight check (verify backend is reachable, detect capabilities)
    ↓
2. Download video (yt-dlp)
    ↓
3. Choose strategy:
   - Gemini API key: direct upload via File API (up to 2GB)
   - Gemini service account: direct upload (up to 20MB)
   - OpenAI / OpenRouter / Groq: multi-frame batch (all frames in one call)
   - Ollama: frame-by-frame (one frame per call)
    ↓
4. Transcribe audio if present
    ↓
5. Cache intermediates (reuse on next run)
    ↓
6. Synthesize report with codebase context:
   - Metadata: intent, category, confidence, scope, repo guess, handoff recommendation
   - Bug, feature, question, docs, tutorial, review, or notes sections as appropriate
   - Agent handoff only when a code/docs/test/config change is actually useful
   - Search patterns and verification steps for coding agents when relevant
    ↓
7. Present summary to user
    ↓
/eyeroll:fix goes further:
   → grep codebase → read files → implement fix → run tests → PR

Backends

Backend Strategy Audio API Key Cost Best for
gemini Direct upload (up to 2GB) Yes GEMINI_API_KEY ~$0.15 Best quality (gemini-2.5-flash)
openai Multi-frame batch Whisper OPENAI_API_KEY ~$0.20 Existing OpenAI users
ollama Frame-by-frame No None Free Privacy, offline
openrouter Multi-frame batch No OPENROUTER_API_KEY varies Model variety
groq Multi-frame batch No GROQ_API_KEY cheap Low latency
grok Multi-frame batch No GROK_API_KEY varies xAI models
cerebras Multi-frame batch No CEREBRAS_API_KEY cheap Fast inference
openai-compat Multi-frame batch No any env var varies Custom/self-hosted endpoints

Ollama runs locally. Install and start Ollama separately, then eyeroll can pull the selected model on first use.

Codebase context

eyeroll automatically discovers codebase context from files like CLAUDE.md, AGENTS.md, CURSOR.md, and .eyeroll/context.md (disable with --no-context). You can also run /eyeroll:init to generate .eyeroll/context.md manually.

Without context, all file paths in the report are labeled as hypotheses.

Caching

eyeroll caches frame analyses and transcripts in ~/.eyeroll/cache/ (global). Same video = no re-analysis. Different --context re-runs only the cheap synthesis step. Legacy local .eyeroll/cache/ is still checked for backward compatibility.

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

Cost estimates

eyeroll prints a cost estimate to stderr after each analysis. Disable with --no-cost. Ollama runs are always free.

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, context.py, cost.py, history.py
  tests/                 ← unit, pipeline, server, MCP, and 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,server]'
pytest                                                    # unit tests
pytest tests/test_integration.py -v -m integration        # real API tests

License

MIT

Metadata

Release files for eyeroll 0.6.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for eyeroll 0.6.0
File Size Uploaded Provenance
eyeroll-0.6.0.tar.gz 5.0 MB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for eyeroll 0.6.0
File Interpreter ABI Platform
eyeroll-0.6.0-py3-none-any.whl Python 3 none any Details

Total release size: 5.1 MB

Release files / eyeroll-0.6.0.tar.gz

Download URL eyeroll-0.6.0.tar.gz
Size 5.0 MB
Tags Source
SHA-256 checksum
How to use checksums
6fff1c28d7b4ad202d711e9ae030eaf3284c6d6d4be6364fd9b75da389793b6e
BLAKE2b-256 checksum
How to use checksums
50b3f80fd26671ca436ca3b48479204592cc9140a571331592ab62baabd62f58
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 5, 2026.

Transparency log

Release files / eyeroll-0.6.0-py3-none-any.whl

Download URL eyeroll-0.6.0-py3-none-any.whl
Size 45.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a2259cf0cd703b5338f04bb212d2f0743ab1635e5c9ca858aa0e1bda21b0a2dd
BLAKE2b-256 checksum
How to use checksums
5a2d989885d3c5b8cdc08a91a9cee12884306d2db3a5baaf1139e7a6cbc67c69
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 5, 2026.

Transparency log

Security for eyeroll 0.6.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for eyeroll-0.6.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 5, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page