TTV generated-media integration adds reviewed generation
requests, verified imports, immutable take selections and reproducible EDL renders
through media-generated.
Media Tooling helps an agent harness turn raw media into planning and editing artifacts while keeping the user centered in the project workspace.
Install or update: follow docs/INSTALL.md. It is written so a coding agent can run it: give the agent that page's URL and ask it to follow the steps.
User-facing execution context lives in a project-local AGENTS.md generated by media-tooling-init. The repo-root AGENTS.md is intentionally minimal and only supports toolkit development. Developer-only maintenance notes and quality gates live in docs/DEVELOPMENT.md.
Media Tooling helps convert raw source material into planning and production context.
At a high level, it processes raw videos and audio to produce timestamped transcripts for spoken material and frame captures for visual material. Those processed artifacts are then used to analyze what the source media contains and turn that understanding into production artifacts such as inventories, shot lists, storyboards, rough-cut specs, and first-pass rough cuts.
Media Tooling gives an agent harness a repeatable media-processing pipeline:
- Extract audio from spoken video when needed.
- Generate timestamped transcripts from spoken audio or video.
- Produce
.srtsubtitles and structured transcript metadata. - Generate contact sheets for silent screen recordings and visual demos.
- Turn those processed assets into planning artifacts.
- Assemble first-pass rough cuts from reusable project-local specs.
- Generate narration audio from project scripts.
The main artifacts it produces are:
- transcripts for spoken audio and video
.srtsubtitles- contact sheets for silent screen recordings and demos
- inventories
- analysis notes
- shot lists
- storyboards
- rough-cut specs
- first-pass rough cuts
A "rough cut" is a fast first-pass assembly used to validate structure, pacing, sequencing, and missing material before manual editing.
A "contact sheet" is a single image made from several frames sampled across a video so you can inspect its visual progression quickly without scrubbing through the whole file.
flowchart TD
A["Raw media"] --> B["Classify corpus"]
B --> C["Spoken audio or video"]
B --> D["Silent video"]
B --> E["Screenshots and stills"]
C --> F["Audio extraction"]
F --> G["Timestamped transcripts"]
G --> H["SRT subtitles"]
G --> I["Transcript metadata"]
D --> J["Contact sheets"]
E --> K["Image inventory"]
H --> L["Planning artifacts"]
I --> L
J --> L
K --> L
L --> M["Inventories"]
L --> N["Analysis notes"]
L --> O["Shot lists"]
L --> P["Storyboards"]
L --> Q["Rough-cut specs"]
Q --> R["First-pass rough cuts"]
It fits podcasts, interviews, tutorials, courses, product videos, shorts, reels, and YouTube uploads.
Transcription uses a platform-appropriate backend:
- Apple Silicon macOS:
lightning-whisper-mlx - other workstations:
faster-whisper
For MLX runs, media-subtitle now performs a timestamp sanity check after transcription. It probes the media duration and compares it to the transcript's last segment end time. If the duration is near the observed 10x MLX compression pattern, the toolkit auto-corrects the timestamps and records the correction details in the JSON metadata.
Install the commands once, then bootstrap each project workspace:
brew install uv ffmpeg
uv tool install "media-tooling[elevenlabs] @ git+https://github.com/kumanday/media-tooling"
media-tooling-link-skills
export PROJECT_DIR="$HOME/projects/my-project-media"
media-tooling-init "$PROJECT_DIR"
cd "$PROJECT_DIR"media-tooling-link-skills makes the media-* skills discoverable by coding agents (~/.agents/skills, plus ~/.claude/skills for Claude Code). media-tooling-init creates the standard project directories and writes a minimal project-local AGENTS.md block that points at the centrally installed media-tooling skills. If AGENTS.md already exists, the command updates only its managed block instead of clobbering the file.
If you prefer ad hoc execution instead of a persistent tool install, run the same bootstrap with uvx:
uvx --from git+https://github.com/kumanday/media-tooling media-tooling-init "$PROJECT_DIR"For private access or SSH-based installs, use git+ssh://git@github.com/kumanday/media-tooling.
Hyperframes is optional. Install it when a project needs HTML-rendered motion graphics, animated overlays, website/UI captures, GIFs, or batch-rendered variants:
npm install -g hyperframes@latest
hyperframes doctor
hyperframes skills updateThe packaged media-motion-graphics skill uses current upstream HyperFrames
skills for reference-led planning, storyboard alternatives, branded scene stills,
and director-note revisions. Autonomous requests use multimodal storyboard
feedback and draft-render review; human review is the default. See docs/HYPERFRAMES.md
for setup, project artifacts, and rendering commands.
The usual workflow is prompt-driven. Install the toolkit once, create a project workspace, and keep the agent harness focused on $PROJECT_DIR. The generated project AGENTS.md points the harness at the centrally installed skills and commands while project artifacts stay local to the workspace.
Typical flow:
- Install the toolkit commands once with
uv tool install. - Run
media-tooling-initfor each project workspace. - Put raw media and project outputs in
$PROJECT_DIR. - Ask the harness to ingest the corpus, process the media, and produce planning artifacts.
The toolkit works through three layers:
- project-local
AGENTS.mdmedia-tooling-initwrites the persistent execution context into the project workspace instead of the toolkit repository. - central toolkit skills
The project
AGENTS.mdpoints at the installed skill files under.agents/skills/. The main skills aremedia-corpus-ingest,media-subtitle-pipeline, andmedia-rough-cut-assembly. - toolkit commands
Installed
media-*commands extract audio, generate transcripts and subtitles, build contact sheets, initialize projects, or assemble rough cuts.
These prompt patterns are the main entry point for the toolkit.
Prompt for outcomes, not for toolkit internals. The skills and commands are there to handle classification, batching, extraction, and assembly.
These short, outcome-oriented prompts are the main use case.
Create a 5-minute highlight reel with representative samples of the different speakers and the topics discussed.
Turn this session into a short recap that explains the main workflows, tools, and takeaways.
Review this processed media project and propose a first-pass rough cut with the strongest clips and any obvious weak spots.
Use these when you want to be more specific about the inputs or deliverables.
I have a new media project in $PROJECT_DIR.
Source folders:
- spoken videos: /path/to/spoken
- silent screen recordings: /path/to/silent
- screenshots: /path/to/images
Please process this source material and leave me with:
- transcripts and subtitles for the spoken material
- contact sheets for the silent recordings
- a clean inventory of what is in the project
- short analysis notes I can use for planning
The corpus has already been processed in $PROJECT_DIR.
Please review what is already there and give me:
- a shortlist of the strongest clips
- a shot list with timestamps, durations, and editorial purpose
- a note on what still needs to be recorded
Please use the processed artifacts in $PROJECT_DIR to propose a first-pass rough cut.
I want:
- a recommended sequence
- notes on where narration should carry the section
- notes on where silent clips or screenshots are enough
- a short list of weak sections that still need new material
The storyboard and clip selections in $PROJECT_DIR are approved.
Please turn them into a first-pass rough cut with readable placeholder cards for anything that still needs to be recorded.
More prompt patterns live in docs/WORKFLOWS.md.
Most users will work through prompts. The project-local AGENTS.md routes those prompts to the central skills, and the skills translate them into the command-line steps below.
The main skills are:
media-corpus-ingestUses the subtitle and contact-sheet commands to ingest a mixed media corpus into a project workspace.media-subtitle-pipelineUses the subtitle commands for spoken-media processing.media-rough-cut-assemblyUses a project-local JSON spec to assemble cards, image holds, extracted clips, manifests, and first-pass rough cuts.media-render-pipelineEnd-to-end orchestration skill for finished, broadcast-ready video production from raw source media.media-ttsGenerates narration audio from project scripts through the configured TTS backend.
The underlying commands are:
media-subtitleGenerate transcript.txt, subtitle.srt, and structured.jsonfrom a single audio or video file.media-ttsGenerate narration audio from a text, Markdown, or SRT script. ElevenLabs is the current backend (default modeleleven_v4).media-tts-framesGenerate per-frame narration clips with word timings and theaudio_meta.jsonthat HyperFrames workflows (such asfaceless-explainer) consume, from theirSCRIPT.md.media-video-musicOptional: score a finished video with ElevenLabs video-to-music (separate music and SFX stems), then mix the stems under the narration. The mix measures the narration, sets the music and SFX gains relative to it, ducks the music under the voice, normalizes loudness with one linear gain and a true-peak limiter, and prints the measured margins.media-batch-subtitleProcess a manifest of spoken-media files sequentially.media-translate-subtitlesGenerate translation template windows from a source.srt, then render translated subtitles back into target-language cue breaks without inheriting the source cue boundaries.media-contact-sheetGenerate a contact sheet from a single silent or visual-first video.media-batch-contact-sheetProcess a manifest of silent or visual-only videos sequentially.media-rough-cutBuild a first-pass rough cut from a project-local JSON spec of cards, image holds, and clip extracts.media-edl-renderRender an assembled video from an EDL JSON spec with per-segment grading, audio fades, subtitle burning, and two-pass loudness normalization.media-fcpxml-exportExport a layered media manifest as FCPXML for DaVinci Resolve import.media-gradeApply automatic or preset color grading to a video file.media-loudnormTwo-pass loudness normalization targeting −14 LUFS / −1 dBTP / LRA 11.media-burn-subtitlesBurn SRT subtitles into a single video file (subtitles applied last in the filter chain).media-batch-burn-subtitlesBatch-burn subtitles into a manifest of video files.media-pack-transcriptConvert a verbose JSON transcript into a compact, phrase-level markdown file for agent reasoning.media-timeline-viewGenerate a filmstrip + waveform composite PNG for visual inspection at editing decision points.media-verifySelf-evaluate a rendered video against its EDL spec, checking cut boundaries, duration, grade consistency, and audio pops.media-tooling-initCreate the standard project directories and write or refresh the managedAGENTS.mdblock for a media project workspace, plus a block for your private rules when a local profile applies (seedocs/LOCAL-CONFIG.md).media-tooling-link-skillsLink the installed skills, and your private skills from your local config folder, into~/.agents/skillsand~/.claude/skillsso coding agents discover them. Re-run after each upgrade.media-cloud-renderRender a HyperFrames project on Google Cloud Run in parallel chunks, billed to the GCP project its render profile names (client and personal work kept apart, for example). Seedocs/CLOUD-RENDER.md.hyperframes(optional) Render HTML/CSS/JS compositions for animated overlays, title cards, UI captures, GIFs, PNG sequences, batch variants, or standalone graphic segments.
Optional shell helpers for repo-checkout workflows:
extract— Extract audio track from a video as.m4a.subtitle— Convenience wrapper formedia-subtitlefrom a repo checkout.
Both subtitle commands accept --backend auto|mlx|faster-whisper.
If you need the raw backend timestamps for debugging, pass --disable-timestamp-correction.
For translated subtitles, do not translate cue-by-cue from an English .srt. Use media-translate-subtitles to group source cues into larger translation windows, then re-segment the translated text inside those windows.
If you want direct command examples, see docs/WORKFLOWS.md.
Keep reusable code and installs outside the project workspace. Keep project outputs in a separate workspace.
Typical setup:
- toolkit install: see
docs/INSTALL.md - project workspace:
$HOME/projects/my-project-media
This repository also creates a few local-only directories during normal use:
.venv/for the local Python environment- cache directories for downloaded packages and local runtime data
Those directories are generated on demand, safe to delete, and ignored by Git.
docs/INSTALL.mddocs/SETUP.mddocs/WORKFLOWS.mddocs/HYPERFRAMES.mddocs/CLOUD-RENDER.mddocs/LOCAL-CONFIG.mddocs/EXPORTING.md
Central toolkit skills live in: