agentleFS
iansteitz1-engiansteitz1-eng/aria-skills/video-ingest/SKILL.md

video-ingest

Skill0 starsChanged 2 months agoApache-2.0View on GitHub

Pull metadata + transcript from any YouTube, Instagram, X/Twitter, TikTok, Vimeo, or other yt-dlp-supported video URL so Claude can actually "watch" it. Use when the user pastes a video link and asks "watch this", "what's this video about", "summarize this", "let's talk about this video", or any time a URL points at video content. First tries subtitles (fast, no GPU). Optional `--whisper` fallback transcribes audio locally via faster-whisper.

  • Deletes or force-pushes

11 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use state-memory-mcp, vision-memory-mcp and 4 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • putervisionSkill

    state-memory-mcp

    Teaches the agent to use the state-memory-mcp MCP server to track workflow state, tasks, decisions, blockers, artifacts, plans, milestones, and their semantic relationships in a persistent graph database.

    Also in 7 projects that use this

  • putervisionSkill

    vision-memory-mcp

    Teaches the agent to use the Visual Memory MCP server to cache webpage and application screenshots, matching layout states and avoiding redundant LLM vision calls.

    Also in 7 projects that use this

  • +4 more from putervision

The file

Files
SKILL.md

Video Ingest

I cannot watch video. This skill turns a video URL into text I can reason over — title, uploader, duration, description, and the full transcript — so the conversation can actually be about the content of the video.

Steps

  1. Run the collector. Pass the URL as-is — yt-dlp handles shortened forms, redirects, query strings, and ~1000 sites:
    python3 ~/.claude/skills/video-ingest/ingest.py "<url>"
  2. Flags worth knowing:
    • --brief — metadata + first 800 chars of transcript. Use this first when the user just wants a quick take; re-run without --brief if they want to go deep.
    • --whisper — if the video has no subtitles (common on Instagram reels, some X posts, raw uploads), download the audio and transcribe with local faster-whisper. Slower (CPU, ~1× realtime on base.en) but works offline. Skip unless needed — most YouTube content has auto-captions.
    • --timestamps — keep [hh:mm:ss] markers in the transcript (subtitles only, ignored on whisper).
    • --lang xx — subtitle language root (default en). Use when the source is non-English.
    • --json — machine-readable. Use when piping into another skill or saving structured.
    • --no-cache — bypass the /tmp/video-ingest-cache/ cache. Default behavior caches per video-id so re-asking is instant.
  3. Read the report. Sections in order: TITLE, UPLOADER, DURATION, UPLOADED, VIEWS, URL, DESCRIPTION, TRANSCRIPT. The transcript line shows the source (subtitles vs whisper) and total char count so you know how much you're reasoning over.
  4. Then talk about the video. Don't just dump the transcript back at the user — that's what they pasted the link to avoid. Summarize the thesis, pull the 3-5 most load-bearing points, and connect it to whatever context they brought to the conversation (a project, a doctrine memory, a current build). If the user wants verbatim quotes, fetch them from the transcript text in your context.

Supported sources

yt-dlp handles: youtube, youtu.be, youtube shorts, instagram (reels + posts), x.com / twitter, tiktok, vimeo, facebook, reddit (v.redd.it), twitch clips, soundcloud, and ~1000 more. If a site fails, the error message will say so explicitly — don't retry blindly.

Notes

  • Subtitle-first by design. Auto-captions on YouTube are good enough for content reasoning even with the occasional homophone. Don't reach for whisper unless subtitles genuinely aren't there.
  • Cache lives at /tmp/video-ingest-cache/<id>.json. Survives until the box reboots. Manually clear with rm -rf /tmp/video-ingest-cache if a video was re-uploaded and you need a fresh pull.
  • Whisper model defaults to base.en (fast, low quality). Override with VIDEO_INGEST_WHISPER_MODEL=small.en or medium.en env var for better accuracy on hard audio.
  • For private/auth-walled videos (Instagram private accounts, paid YouTube), yt-dlp can take a --cookies-from-browser flag, but this skill doesn't expose it. If you need that, extend the script — don't try to work around it in the shell.
  • Output goes to stdout. Capture into a file with > /tmp/foo.txt if a transcript is gigantic and you want to grep it instead of loading into context.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.