Video Transcription

Give BlackOps an X post, a YouTube link, an uploaded file, or any media URL and get the full transcript plus an AI summary — synchronously over the API or MCP, or queued from a content reservoir. Whisper-powered and cached.

Some of the best source material you have is locked inside video — conference talks, demos, workshops, hot takes recorded on a phone. Video Transcription unlocks it: hand BlackOps a video and get back the full transcript with an AI summary and key insights, ready to become a note, a draft, or reservoir source material.

One tool covers every source. You do not pick a transcriber based on where the video lives.

SourceWhat you pass
X post with native videothe x.com or twitter.com status URL
YouTube videoa watch, youtu.be, embed, or shorts URL
Something you uploadedmedia_id from your media library
Anywhere elsea direct link to an audio or video file

Repeat lookups hit a shared cache, so re-checking a video you have already transcribed costs nothing.

How it works

  1. Resolve the source. BlackOps works out what you handed it. X posts are looked up through the X API to find the attached native video; posts without one fail fast with a clear message, since quote-tweeted videos, link previews, and animated GIFs don't count. Uploaded assets are looked up in your own library only.
  2. Get the audio. YouTube captions are used when they exist, because they are instant. Everything else — X posts, uploads, direct URLs, and YouTube videos with no captions — goes to Whisper as a real speech-to-text run.
  3. Chunk when needed. Long audio is split into overlapping segments, transcribed in parallel, and stitched back together on the overlap, so a 40-minute workshop transcribes the same way a two-minute clip does. There is no duration cap.
  4. Summarize. A 2-3 paragraph summary plus 3-7 key insights, generated once and cached with the transcript. Pass include_summary: false if you only want the words.

From chat

The transcribe_video MCP tool takes a url or a media_id and returns { source, source_id, title, author, post_text, transcript_text, language, summary, key_insights, duration_seconds, extraction_method, cached } synchronously. Fields a given source cannot supply — a post's text on a YouTube video, say — come back as null rather than missing, so you can read the same keys every time.

Ask your assistant to "transcribe this video" with a link, then turn the result into a note, a post draft, or a reservoir item (post_reservoir_ingest) in the same conversation.

The REST equivalent is POST /api/v2/transcribe with { "url": "..." } or { "media_id": "..." }. Pass refresh: true to bypass the cache.

From content reservoirs

Reservoir items whose URL is an X post or a YouTube video get an Extract Transcript button. Extraction runs as a background job with live progress; when it completes, the item's content is replaced with the transcript, the video's thumbnail and metadata are attached, and the summary and key insights land on the item — ready for content generation. Adding an item with extract_transcript: true queues the job automatically.

If a vault auto-write target is configured (under the site's transcription settings), completed transcripts are also written to your Obsidian vault as a structured note.

What it costs

Every source costs the same. An X post, a YouTube video, and a file you uploaded are priced identically for the same length, and it makes no difference whether the text came from captions or from Whisper. You can work out the price from the duration alone, without knowing how BlackOps got the words.

Transcription is priced by length rather than capped by it: each 10-minute segment debits at the standard transcription rate, so a 37-minute video costs four segments. Your balance is checked against the whole video before any audio is fetched, and a balance that will not cover the run returns INSUFFICIENT_CREDITS with the estimated cost, having spent nothing. A chunked run that fails halfway debits only the segments that actually completed.

Cache hits are always free, so re-reading a video you have already transcribed costs nothing.

Limits and errors

  • Included in the plan. There are no tiers, so no surface is gated behind one.
  • No duration cap. What remains is the request's processing window. A video whose transcription cannot finish inside it returns VIDEO_TOO_LONG with the estimate and the window, before any work starts. In practice that lands past 45 minutes of audio.
  • 10 extractions per hour per site on the reservoir path.
  • Audio required — silent videos (screen recordings without narration) return NO_AUDIO; there's no speech to transcribe.
  • Source errorsNO_VIDEO for an X post without one, NO_CAPTIONS where a YouTube video has neither captions nor reachable audio, MEDIA_NOT_FOUND for a media_id that isn't in your library, MEDIA_NOT_TRANSCRIBABLE for an image, and UNSUPPORTED_SOURCE for a link that isn't a video at all. Deleted posts return TWEET_UNAVAILABLE, protected accounts TWEET_RESTRICTED.

Related

Want this page as machine-readable markdown? GET /docs/features/x-video-transcription.md