{"id":48871746,"url":"https://github.com/mnvsk97/eyeroll","last_synced_at":"2026-04-15T22:06:32.342Z","repository":{"id":348396518,"uuid":"1197845871","full_name":"mnvsk97/eyeroll","owner":"mnvsk97","description":"AI eyes that roll through video footage — watch, understand, act","archived":false,"fork":false,"pushed_at":"2026-04-11T22:25:02.000Z","size":5120,"stargazers_count":8,"open_issues_count":2,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-12T00:28:15.327Z","etag":null,"topics":["agent-skills","ai","bug-report","claude-code","claude-code-plugin","developer-tools","gemini","loom","ollama","openai","screen-recording","video","video-analysis"],"latest_commit_sha":null,"homepage":"https://mnvsk97.github.io/eyeroll","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mnvsk97.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-01T00:00:24.000Z","updated_at":"2026-04-11T04:30:45.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/mnvsk97/eyeroll","commit_stats":null,"previous_names":["mnvsk97/eyeroll"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mnvsk97/eyeroll","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mnvsk97%2Feyeroll","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mnvsk97%2Feyeroll/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mnvsk97%2Feyeroll/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mnvsk97%2Feyeroll/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mnvsk97","download_url":"https://codeload.github.com/mnvsk97/eyeroll/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mnvsk97%2Feyeroll/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31861773,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T15:24:51.572Z","status":"ssl_error","status_checked_at":"2026-04-15T15:24:39.138Z","response_time":63,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agent-skills","ai","bug-report","claude-code","claude-code-plugin","developer-tools","gemini","loom","ollama","openai","screen-recording","video","video-analysis"],"created_at":"2026-04-15T22:06:31.794Z","updated_at":"2026-04-15T22:06:32.334Z","avatar_url":"https://github.com/mnvsk97.png","language":"Python","readme":"# eyeroll\n\n[![CI](https://github.com/mnvsk97/eyeroll/actions/workflows/ci.yml/badge.svg)](https://github.com/mnvsk97/eyeroll/actions/workflows/ci.yml)\n[![PyPI](https://img.shields.io/pypi/v/eyeroll)](https://pypi.org/project/eyeroll/)\n[![Python](https://img.shields.io/pypi/pyversions/eyeroll)](https://pypi.org/project/eyeroll/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nAI eyes that roll through video footage — watch, understand, act.\n\neyeroll 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.\n\n## Install\n\n```bash\n# Add the plugin to Claude Code\n/plugin marketplace add mnvsk97/eyeroll\n/plugin install eyeroll@mnvsk97-eyeroll\n\n# Install the CLI\npip install eyeroll[gemini]      # Gemini Flash API (recommended)\npip install eyeroll[openai]      # OpenAI GPT-4o + OpenRouter/Groq/Grok/Cerebras\npip install eyeroll              # Ollama only (local, no API key)\npip install eyeroll[all]         # everything\n```\n\n## Setup\n\n```\n/eyeroll:init\n```\n\nPicks your backend, configures API key, and generates codebase context — all in one step.\n\n## Commands\n\n| Command | What it does |\n|---------|-------------|\n| `/eyeroll:init` | Set up eyeroll — pick backend, configure API key, generate `.eyeroll/context.md` |\n| `/eyeroll:watch \u003curl\u003e` | Analyze a video and present a structured summary |\n| `/eyeroll:fix \u003curl\u003e` | Watch a bug video → diagnose → fix the code → raise a PR |\n| `/eyeroll:history` | List past video analyses |\n\n## Usage\n\n### In Claude Code\n\n```\nYou: /eyeroll:watch https://loom.com/share/abc123\n     → Analyzes video, presents: what's shown, the bug, key evidence, suggested fix\n\nYou: /eyeroll:fix https://loom.com/share/abc123\n     → Watches video, greps codebase, finds the bug, fixes it, raises a PR\n\nYou: watch this tutorial and create a skill from it: ./demo.mp4\n     → video-to-skill activates, watches video, generates SKILL.md\n\nYou: /eyeroll:history\n     → Lists past analyses with timestamps and sources\n```\n\n### Standalone CLI\n\n```bash\neyeroll watch https://loom.com/share/abc123\neyeroll watch ./bug.mp4 --context \"checkout broken after PR #432\"\neyeroll watch ./bug.mp4 -cc .eyeroll/context.md --parallel 4\neyeroll watch ./bug.mp4 --backend ollama -m qwen3-vl:2b\neyeroll watch ./bug.mp4 --backend groq\neyeroll watch ./bug.mp4 --backend openrouter -m anthropic/claude-3.5-sonnet\neyeroll watch ./bug.mp4 --backend openai-compat --base-url https://my-server/v1\neyeroll history\n```\n\n## How it works\n\n```\n/eyeroll:watch https://loom.com/share/abc123\n    ↓\n1. Preflight check (verify backend is reachable, detect capabilities)\n    ↓\n2. Download video (yt-dlp)\n    ↓\n3. Choose strategy:\n   - Gemini API key: direct upload via File API (up to 2GB)\n   - Gemini service account: direct upload (up to 20MB)\n   - OpenAI / OpenRouter / Groq: multi-frame batch (all frames in one call)\n   - Ollama: frame-by-frame (one frame per call)\n    ↓\n4. Transcribe audio if present\n    ↓\n5. Cache intermediates (reuse on next run)\n    ↓\n6. Synthesize report with codebase context:\n   - Metadata: category, confidence, scope, severity, actionable\n   - Bug Description + Reproduction Steps\n   - Fix Directions (Visible / Codebase-informed / Hypothesis)\n   - Search patterns for the coding agent\n    ↓\n7. Present summary to user\n    ↓\n/eyeroll:fix goes further:\n   → grep codebase → read files → implement fix → run tests → PR\n```\n\n## Backends\n\n| Backend | Strategy | Audio | API Key | Cost | Best for |\n|---------|----------|-------|---------|------|----------|\n| **gemini** | Direct upload (up to 2GB) | Yes | GEMINI_API_KEY | ~$0.15 | Best quality |\n| **openai** | Multi-frame batch | Whisper | OPENAI_API_KEY | ~$0.20 | Existing OpenAI users |\n| **ollama** | Frame-by-frame | No | None | Free | Privacy, offline |\n| **openrouter** | Multi-frame batch | No | OPENROUTER_API_KEY | varies | Model variety |\n| **groq** | Multi-frame batch | No | GROQ_API_KEY | cheap | Low latency |\n| **grok** | Multi-frame batch | No | GROK_API_KEY | varies | xAI models |\n| **cerebras** | Multi-frame batch | No | CEREBRAS_API_KEY | cheap | Fast inference |\n| **openai-compat** | Multi-frame batch | No | any env var | varies | Custom/self-hosted endpoints |\n\nOllama auto-installs if not found (macOS/Linux).\n\n## Codebase context\n\n`/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.\n\nWithout context, all file paths in the report are labeled as hypotheses.\n\n## Caching\n\neyeroll caches frame analyses and transcripts in `.eyeroll/cache/`. Same video = no re-analysis. Different `--context` re-runs only the cheap synthesis step.\n\n```bash\neyeroll watch video.mp4                    # full analysis (~15s)\neyeroll watch video.mp4 -c \"new context\"   # instant — cached frames\neyeroll watch video.mp4 --no-cache         # force fresh\n```\n\n## Plugin structure\n\n```\neyeroll/\n  commands/              ← slash commands\n    init.md              ← /eyeroll:init\n    watch.md             ← /eyeroll:watch\n    fix.md               ← /eyeroll:fix\n    history.md           ← /eyeroll:history\n  skills/                ← background skills\n    video-to-skill/      ← activated by \"create a skill from this video\"\n  eyeroll/               ← Python CLI package\n    cli.py, watch.py, analyze.py, extract.py, backend.py, history.py\n  tests/                 ← 269 unit + 8 integration tests\n```\n\n## Supported inputs\n\n| Input | Formats |\n|-------|---------|\n| **Video** | .mp4, .webm, .mov, .avi, .mkv, .flv, .ts, .m4v, .wmv, .3gp, .mpg, .mpeg |\n| **Image** | .png, .jpg, .jpeg, .gif, .webp, .bmp, .tiff, .heic, .avif |\n| **URL** | YouTube, Loom, Vimeo, Twitter/X, Reddit, 1000+ sites via yt-dlp |\n\n## Development\n\n```bash\ngit clone https://github.com/mnvsk97/eyeroll.git\ncd eyeroll\npip install -e '.[dev,all]'\npytest                                                    # unit tests\npytest tests/test_integration.py -v -m integration        # real API tests\n```\n\n## License\n\nMIT\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmnvsk97%2Feyeroll","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmnvsk97%2Feyeroll","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmnvsk97%2Feyeroll/lists"}