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.
| Source | What you pass |
|---|---|
| X post with native video | the x.com or twitter.com status URL |
| YouTube video | a watch, youtu.be, embed, or shorts URL |
| Something you uploaded | media_id from your media library |
| Anywhere else | a 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
- 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.
- 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.
- 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.
- Summarize. A 2-3 paragraph summary plus 3-7 key insights, generated once and cached with the transcript. Pass
include_summary: falseif 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_LONGwith 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 errors —
NO_VIDEOfor an X post without one,NO_CAPTIONSwhere a YouTube video has neither captions nor reachable audio,MEDIA_NOT_FOUNDfor amedia_idthat isn't in your library,MEDIA_NOT_TRANSCRIBABLEfor an image, andUNSUPPORTED_SOURCEfor a link that isn't a video at all. Deleted posts returnTWEET_UNAVAILABLE, protected accountsTWEET_RESTRICTED.
Related
- Content Reservoirs — where extracted transcripts become source material
- Content Generation — turning reservoir items into drafts