Clean messy .srt subtitle exports for Reels, Shorts, TikToks, podcast clips, client edits, and social video workflows. SRT Fixer runs in the browser, keeps raw subtitle files local, and gives editors a faster cleanup step between transcription and publishing.
Live app: https://srt-fixer-eight.vercel.app/
SRT Fixer is for existing subtitle files. It does not transcribe audio, rewrite captions with AI, or upload your .srt to a backend just to clean punctuation and line breaks.
Use it when you need to:
- remove punctuation from subtitle text
- fix awkward line breaks before burn-in
- normalize casing and spacing
- preview original vs cleaned subtitles
- export a cleaned
.srtor plain.txt - batch process up to 50 files in Pro
- Upload a
.srtfile or paste raw subtitle text - Timestamp-safe cleanup in
Clean Text Onlymode - Regroup captions by words, characters, grammar-aware splits, and minimum cue duration
- SRT health checks for invalid blocks, overlaps, and long lines
- Side-by-side preview before download
.srt,.txt, ZIP, and cleanup report exports- Batch processing in Pro with ZIP output
- Pro timing tools for frame snapping and offsets
- Privacy-first local processing for subtitle content
- video editors working in Premiere Pro, DaVinci Resolve, Final Cut Pro, and CapCut
- creators repurposing long-form videos into Shorts, Reels, and TikToks
- podcast editors cleaning captions for clips
- freelancers handling repeated subtitle cleanup across client work
Free:
- single-file cleanup
- local browser processing
- timestamp-safe text cleanup
- TXT export and cleanup report export
Pro:
- batch cleanup for up to 50 files
- ZIP export
- timing tools
- license-based unlock in the browser
The current codebase supports checkout and license flows for Stripe, Gumroad, and Lemon Squeezy, with server-side verification and KV-backed license storage.
- React 18
- Vite 8
- JavaScript / JSX
- Web Workers
- Vitest
- JSZip
- Vercel serverless functions
- Upstash Redis REST API
- Stripe, Gumroad, and Lemon Squeezy integrations
- Resend for transactional email
- Vercel Analytics
- Remotion for promo creative
git clone https://github.com/fuzmaster/srt-fixer.git
cd srt-fixer
npm install
npm run devThe app runs at http://localhost:5173 by default.
Free local cleanup works without any env vars. Paid flows, email, and license persistence need server config.
VITE_GUMROAD_CHECKOUT_URL=
VITE_STRIPE_CHECKOUT_URL=
VITE_LS_CHECKOUT_URL=
GUMROAD_PRODUCT_ID=
GUMROAD_PRODUCT_PERMALINK=
LEMON_SQUEEZY_PRODUCT_ID=
LEMON_SQUEEZY_VARIANT_ID=
STRIPE_SECRET_KEY=
STRIPE_WEBHOOK_SECRET=
STRIPE_PRO_PRODUCT_ID=
STRIPE_PRO_PRICE_ID=
KV_REST_API_URL=
KV_REST_API_TOKEN=
REDIS_URL=
LICENSE_HASH_SECRET=
ADMIN_LICENSE_SECRET=
RESEND_API_KEY=
LICENSE_EMAIL_FROM=
LICENSE_EMAIL_REPLY_TO=
CONTACT_EMAIL_FROM=
CONTACT_EMAIL_TO=
CONTACT_EMAIL_REPLY_TO=- Subtitle file contents stay in the browser unless the user explicitly submits a contact or license request.
- License, contact, and admin routes validate input server-side.
- Public API routes are same-origin checked and rate limited.
- License records are stored in KV using hashed license keys.
- Stripe webhook signatures are verified server-side.
npm test
npm run build
npm auditCurrent status:
npm testpassesnpm run buildpassesnpm auditpasses
Built for Vercel. Set production environment variables in the Vercel dashboard, make sure live Stripe and email settings are correct, and deploy from main.
All rights reserved unless a separate license file states otherwise.