Changelog

Updates to the MCP server, REST API, self-host binary, and website.


2026-05-08 — 2.1: bridge + backend in one repo, faster defaults, macOS-friendly

Quality-of-life pass on top of the 2.0 redesign. Most of these are self-host wins; hosted users get the faster default Whisper model and smaller subtitle chunks for free.

  • One repo, one clone. The bridge binary and the upload server now live at github.com/kirillzubovsky/subtitlesking-mcp. Closes the gap where the old self-host docs pointed at a separate backend repo that was never made public. git clone + go build gives you everything.
  • quality arg on start_upload. Agents can pick low / medium / high per upload — maps to Whisper base / medium / large. Tool description teaches the trade-off (fast & rough vs. slow & accurate) so agents can offer the user the choice intelligently. Backend default is medium, set via SUBTITLESKING_WHISPER_MODEL env var.
  • Faster default transcription. Default model dropped from large to medium. ~3× faster on CPU; minor accuracy hit for most English content. Agents that need maximum accuracy can pass quality: "high".
  • Broadcast-style subtitle chunking. Default Whisper output now wraps at 42 chars × max 2 lines, yielding ~3–5 second segments instead of the previous paragraph-shaped walls of text. Tunable via SUBTITLESKING_SRT_MAX_LINE_WIDTH / _MAX_LINE_COUNT. Set SUBTITLESKING_SRT_MAX_WORDS_PER_LINE=4 for TikTok-style short bursts.
  • macOS self-host actually works. Several layers of fixes:
    • requirements.txt now installs cleanly on macOS / Windows / Linux-arm64 (was previously Linux-x86_64-only because of pinned NVIDIA wheels).
    • The default brew install ffmpeg formula no longer ships libass (which the burn-in step needs). Self-host docs now point at homebrew-ffmpeg/ffmpeg.
    • start.sh preflights for the subtitles filter and refuses to boot with an actionable error if libass is missing — no more silent burn-step failures mid-pipeline.
    • Burn-step ffmpeg invocation fixed for ffmpeg ≥7 (escaped commas in force_style, dropped shell-style quoting that the new parser rejected).
  • get_transcript survives burn failures. If the burn step errors but the SRT was already generated, get_transcript now serves the transcript anyway. Matches the README's promise that transcript and burned video are independent products.
  • Schema migrations now actually deploy. InitDB runs on every server startup, so ALTER TABLE migrations land on long-lived production databases instead of silently being skipped.

2026-05-07 — 2.0: MCP without bytes-through-the-LLM

Big architectural fix to the MCP. Video bytes no longer travel through the LLM context window — agents call start_upload to get a presigned URL and then upload the file out-of-band with curl. Same on the way out via get_download_url. Practical effect: anything up to the free-tier 100 MB cap just works, no matter how small the model's context.

  • New tools. start_upload (replaces add_subtitles_to_video), get_download_url (replaces download_subtitled_video). The base64-bearing variants of both are gone. get_video_status and get_transcript are unchanged.
  • Hosted and stdio behave identically. The downloadable binary is now a thin JSON-RPC stdio↔HTTP bridge — every call goes to the upload server's /mcp. The binary collapsed from 545 lines to ~75. No more SUBTITLESKING_API_KEY needed when using the bridge.
  • New status: pending_upload. A slot reserved by start_upload but not yet filled. Pruned automatically after 1 hour to bound table size.
  • Deprecated tools still listed. add_subtitles_to_video and download_subtitled_video remain in tools/list for one release; calling them returns a structured error pointing at the new tools.

Read the redesign spec.


2026-05-06 — 1.0: MCP launch + new website

A big one.

  • MCP server, hosted. New endpoint at https://brains.subtitlesking.com/mcp — register one URL in Claude Code, Claude Desktop, Cursor, or Windsurf and you're done.
  • MCP binary, open-source. Stdio transport. Build from source and point it at the hosted backend, or at your own self-hosted upload server with SUBTITLESKING_URL. (Superseded by the v2 stdio↔HTTP bridge — see above.)
  • Transcript as a first-class output. New get_transcript tool. Available a couple of minutes before the burned video — take one, the other, or both.
  • REST API: /transcript endpoint. Same presigned-token auth as /download.
  • Website rebuild. Developer-first homepage, full docs at /docs, API marketing at /api, MCP at /mcp, self-host guide at /self-host, pricing with a Pro waitlist, comparison pages, blog, and this changelog.
  • SEO sweep. Per-page metadata, structured data (Organization, SoftwareApplication, FAQPage, BlogPosting, BreadcrumbList), dynamic Open Graph images, sitemap, robots.txt, and an llm.txt for AI agent discovery.

What's next

  • Pro tier billing — join the waitlist on /pricing.
  • MCP registry submissions (Anthropic, awesome-mcp-servers, smithery, mcp.so).
  • Watermark in generated SRT files (subtle, opt-out).
  • Email lead-gate in the self-host binary for free hosted-tier quota bumps.

Got a feature request? Tell me on X.