{
  "markdown": "# heimdall\n\nVideo analysis plugin for Claude Code. Feed it a bug report recording, get back steps-to-reproduce, error messages, and timestamps.\n\n**Homepage:** [totla.tech/work/heimdall](https://totla.tech/work/heimdall)\n\n## Install\n\n```bash\ngit clone --depth 1 https://github.com/pranavtotla/heimdall.git ~/.claude/skills/heimdall && ~/.claude/skills/heimdall/setup\n```\n\nRestart Claude Code. Commands: `/heimdall-watch`, `/heimdall-setup`.\n\n### Via Plugin Marketplace\n\n```bash\nclaude plugin marketplace add pranavtotla/heimdall\nclaude plugin install heimdall@heimdall\n```\n\nThen run `/heimdall:setup` to install dependencies (ffmpeg, whisper-cpp).\n\n## Usage\n\n```\n/heimdall-watch path/to/bug-recording.mp4\n```\n\nOr via marketplace install: `/heimdall:watch path/to/bug-recording.mp4`\n\nHeimdall will:\n1. Extract frames adaptively by duration — interval sampling for short clips\n   (< 1 min), scene detection for 1–30 min videos, keyframes for longer ones\n   (override with `--strategy interval|scene|keyframe`)\n2. Transcribe audio via whisper-cpp (if available)\n3. Correlate frames with transcript timestamps\n4. Produce a structured bug report\n\nThe agent may auto-drill into interesting time ranges (error dialogs, state transitions) for higher-density frame extraction.\n\n### Extraction strategies\n\nFrame density adapts to video length: short clips are sampled at a fixed\ninterval; 1–30 minute videos use two-pass scene detection (frames are chosen\nwhere the picture actually changes, with periodic anchors so static stretches\nstay covered); videos over 30 minutes fall back to keyframes. Tune scene\nsensitivity with `--scene-threshold` (default `0.08`). Every extraction writes\na `frames.json` manifest recording each frame's timestamp, scene score, and\norigin.\n\n### Example Output\n\n```markdown\n## Video Analysis: Save button returns 403\n\n**Source:** bug.mp4 | **Duration:** 45 sec | **Resolution:** 1920x1080 | **Transcript:** base.en\n\n### Summary\nUser clicks the save button on the settings page. The save request fails with\na 403 Forbidden error. The user's session token appears to have expired.\n\n### Steps to Reproduce\n1. [0:00] Settings page loaded, all fields populated\n2. [0:12] User modifies the \"display name\" field\n3. [0:18] User clicks \"Save Changes\" button\n4. [0:19] Error dialog appears: \"Failed to save: 403 Forbidden\"\n\n### Error Messages\n- [0:19] \"Failed to save: 403 Forbidden\" (error dialog)\n```\n\n## Architecture\n\n```\nscripts/extract.py          ← Core engine (harness-agnostic CLI)\nagents/heimdall.md          ← Subagent (frame analysis + report synthesis)\ncommands/                   ← /heimdall:watch, /heimdall:setup (marketplace)\nskills/                     ← /heimdall-watch, /heimdall-setup (git clone)\nhooks/hooks.json            ← SessionStart dependency check\nsetup                       ← One-command installer + skill linker\n```\n\nAll heavy work (frames, transcripts, analysis) runs inside the `heimdall` subagent — the main agent's context window only sees the final structured report.\n\n## Requirements\n\n- **ffmpeg** (required) — frame extraction and audio processing\n- **whisper-cpp** (optional) — audio transcription. Setup downloads the `base.en` model (148MB, checksum-verified) to `~/.cache/heimdall/models/`; higher-accuracy opt-in: `./setup --model small.en`, or per-run `--model`/`$HEIMDALL_WHISPER_MODEL`.\n- **Python 3.8+** — no external Python dependencies\n\n## License\n\nMIT\n",
  "bytes": 3411,
  "sha": "0df8a3c65267e4a4880871762807849d4712a6d3c50ce7c66a3d5b95b9b37860",
  "repo_slug": "pranavtotla/heimdall",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_pranavtotla_heimdall_heimdall_4873bf68/readme"
}