Claude Shot Catalogue banner
VehpuS VehpuS

Claude Shot Catalogue

Development community

Description

Claude Agent Skill: turn a folder of rushes into a catalogue an editor can cut from — pairs sound to picture with sync offsets, aligns ad-libbed takes to the script, flags what was never shot. Runs locally.

Installation

This entry records only its repository, not the path inside it, so there is no exact command to give. Open the source below and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

README

shot-catalogue

A [Claude Agent Skill](https://docs.claude.com/en/docs/agents-and-tools/agent-skills/overview) that turns a folder of rushes into a document an editor can cut from.

The value isn't the file list — the operating system already has that. It's the four questions a file list can't answer:

  • Which sound goes with this picture, and at what offset?
  • Which script beats does this take actually cover?
  • What was changed or dropped on the day?
  • What did we never get at all?

Everything runs locally. Transcription uses Whisper in a throwaway virtualenv; sync uses ffmpeg and numpy. No API keys, no per-file cost, no upload of your footage anywhere.

Install

Clone into your skills directory:

git clone https://github.com/VehpuS/claude-shot-catalogue.git ~/.claude/skills/shot-catalogue

Then ask Claude to catalogue a footage folder. The skill triggers on phrasings like *"log these rushes"*, *"which take covers this line"*, *"which WAV goes with which clip"*, *"what coverage are we missing"* — it doesn't need the word "catalogue".

**Requirements:** `ffmpeg`/`ffprobe`, Python 3 with `numpy`. Whisper installs itself on first run (`mlx-whisper` on Apple Silicon, `faster-whisper` elsewhere). `pdftotext` only if your script is a PDF.

How the sync works

Pairing dual-system sound to picture is where naive approaches produce confident, wrong answers. Two signals are needed, because each fails exactly where the other holds:

Tells you Fails when
Transcript overlap Identity — which recording holds this performance Takes repeat the same lines, which is what takes do
Loudness-envelope correlation Timing — the exact offset Searched unconstrained: latches onto spurious peaks

So the matcher shortlists candidates by text, derives a coarse offset from the median time difference across matched utterances, then refines with a normalized cross-correlation **constrained to a few seconds around that anc