Documentation

Video Transcription

Give BlackOps an X post, YouTube link, file, or media URL and get the full transcript plus a summary, over the API or MCP. 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. Just 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 source material in a brain.

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 }. A video too long to finish in one request comes back as a background job instead (job_id and segments_total, with transcript_text null): check it with get_transcription_job, or, in a client that supports MCP tasks, poll the task it returns. 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 brain note (post_brain_ingest, which lands it in the brain's Triage lane) in the same conversation.

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

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. A video too long to transcribe inside one request, past roughly 40 minutes of audio, becomes a background job that works through it a segment at a time. Its length is measured before any transcription starts, where it can be: from X and YouTube metadata, and by reading the start of the file for uploads and direct links (an MP3 with no length information is estimated from its bitrate). VIDEO_TOO_LONG is rare: it only comes back when the length could not be measured up front and the audio turned out too long for one request.
  • Audio required — silent videos (screen recordings without narration) return NO_AUDIO; there's no speech to transcribe.
  • Source errors — NO_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