Back to pipelines

Captions

Burn styled captions into any video from a transcript or SRT. Pick a preset and ship a ready-to-post MP4.

0.2

Still needed: Video File, Transcript (SRT)

Recipes using this pipeline

Articles about this pipeline

Captions API

Call this pipeline from your own code. One request dispatches a run; the model is an input field, not a separate endpoint.

4 inputs
2 required
from 0.2 credits
bun add @pipe2-ai/sdk
import { createClient } from "@pipe2-ai/sdk";

const client = createClient(process.env.PIPE2_TOKEN!);

const { run_pipeline } = await client.RunPipeline({
  pipeline_slug: "captions",
  input: {
    source_asset_id: "a1b2c3d4-0000-4000-8000-000000000001",
    transcript_asset_id: "a1b2c3d4-0000-4000-8000-000000000002",
  },
});
pip install pipe2
import asyncio
import os

from pipe2 import Pipe2Client

client = Pipe2Client(token=os.environ["PIPE2_TOKEN"])

run = asyncio.run(client.run_pipeline(
    pipeline_slug="captions",
    input={
        "source_asset_id": "a1b2c3d4-0000-4000-8000-000000000001",
        "transcript_asset_id": "a1b2c3d4-0000-4000-8000-000000000002",
    },
))
go get github.com/pipe2-ai/sdk-go
client := pipe2.NewClient(os.Getenv("PIPE2_TOKEN"))

input := json.RawMessage(`{
  "source_asset_id": "a1b2c3d4-0000-4000-8000-000000000001",
  "transcript_asset_id": "a1b2c3d4-0000-4000-8000-000000000002"
}`)

run, err := pipe2.RunPipeline(context.Background(), client, "captions", input)
if err != nil {
    log.Fatal(err)
}
brew install pipe2-ai/tap/pipe2
pipe2 pipelines run \
  --pipeline captions \
  --input-json '{"source_asset_id": "a1b2c3d4-0000-4000-8000-000000000001", "transcript_asset_id": "a1b2c3d4-0000-4000-8000-000000000002"}' \
  --wait

Get an API token →

Parameters

source_asset_id required

Video to burn captions into. Asset id returned by an upload. See /docs/api/ for the upload flow.

string
transcript_asset_id required

Transcript to caption from, produced by the transcription pipeline. Asset id returned by an upload. See /docs/api/ for the upload flow.

string
position

Vertical anchor for the burned text. "Auto" lets the pipeline pick the opposite half from the subject when an upstream reframe provides a hint (otherwise falls through to "bottom"). "Bottom" is the canonical TikTok placement; pick "top" when the subject fills the lower half of the frame.

autobottomtopmiddle default auto
Show all 4 inputs
preset_name

Caption style preset — controls font, size, colour and placement of the burned-in captions.

tiktok-bold-yellowminimal-whitesubtle-dropkaraoke-gradientbig-serifserif-editorial default serif-editorial

Use it from an AI agent

Point any MCP client at pipe2 and your agent gets these tools. It finds this pipeline, reads the same schema above, then runs it.

  • list_pipelines
  • get_pipeline_schema
  • run_pipeline
  • get_pipeline_run_status
  • request_upload
https://mcp.pipe2.ai/mcp
{
  "mcpServers": {
    "pipe2ai": {
      "url": "https://mcp.pipe2.ai/mcp",
      "headers": { "Authorization": "Bearer YOUR_TOKEN" }
    }
  }
}

Full API reference MCP setup CLI reference

Captions: Burn Styled Captions Into Any Video

Attach a video and an SRT transcript, pick a style, and get back an MP4 with captions burned directly into the pixels. No CapCut, no Premiere, no caption extension to install, just a ready-to-post file sized for TikTok, Reels, and Shorts.

Need the transcript first? Run the Transcription pipeline on any video or audio, the resulting SRT lands in your library and plugs straight into this step. Edit it there if anything needs correcting before you burn it in.

How It Works

  1. Attach your video: upload from your device or pick one from your library.
  2. Attach the SRT transcript: generate one with the Transcription pipeline, or upload an existing .srt from any source.
  3. Pick a caption style: five production-ready presets tuned for different audiences.
  4. Download the result: a new MP4 with captions burned in, plus a poster frame for thumbnails.

Caption Style Presets

  • TikTok Bold Yellow: heavy weight, black stroke, TikTok-safe positioning. The default everyone copies.
  • Minimal White: clean sans-serif with a soft shadow. Works for talking-head podcasts and interviews.
  • Subtle Drop Shadow: low-contrast caption for cinematic edits where the visuals carry the scene.
  • Karaoke Gradient: active word highlighted in a purple→pink gradient as it's spoken. High retention on short-form.
  • Big Serif: editorial-feel serif for brand docs, case studies, and long-form educational clips.

Why the Two-Step Flow

  • Edit the transcript before burning: fix names, jargon, or speaker labels in the SRT instead of living with whatever STT gave you.
  • Reuse one transcript across many styles: burn the same SRT with five different presets for A/B testing without re-transcribing.
  • Bring your own SRT: if you already have a transcript from another tool, attach it and skip the transcription cost entirely.
  • TikTok-safe positioning: captions clear the bottom-third UI overlays on every major platform.

Who It's For

  • Short-form creators shipping daily Reels / Shorts / TikToks
  • Podcasters repurposing long-form episodes into shareable clips
  • Course creators and educators adding accessibility to tutorials
  • Agencies producing branded social content at scale
  • Anyone who has an SRT already and just wants it rendered cleanly into the video

Chain it after the Transcription pipeline for the full ship-ready flow, or feed the output straight into the Video Reel pipeline for multi-clip compilations.

Frequently Asked Questions

What file formats are supported?
Video: MP4, MOV, WebM, AVI, MKV, and more. Transcript: .srt (standard subtitle format with timestamps). Output is always MP4 for universal platform compatibility.
Where do I get an SRT transcript?
Run our Transcription pipeline on any video or audio, it produces an SRT asset in your library that you can attach here. Or upload an existing .srt from any other transcription tool.
Are the captions burned into the pixels or overlaid on top?
Burned into the pixels. The captions travel with the video regardless of where you upload it, no separate .srt to manage afterwards, no risk of the platform stripping or restyling them.
Can I edit the transcript before burning it in?
Yes, this is the main reason for the two-step flow. Run Transcription, open the SRT from your library, correct anything you need, then attach it here. You can also upload an edited .srt directly.
Can I reuse one transcript across multiple caption styles?
Yes. Attach the same SRT each time and pick a different preset, much cheaper than re-running transcription, and useful for A/B testing captions on short-form.
How long does the caption burn take?
Typically 30-60% of the source duration. A 1-minute clip takes 20-40 seconds; a 10-minute clip takes 3-6 minutes. Transcription time is separate.

Explore more pipelines

See all →
Video Generator
from 9.5
Video Generator
Image Generator
0.2-6.4
Image Generator
Audio Generator
0.7-1.3
Audio Generator
Music Generator
2.5-45.1
Music Generator