Video editing in the browser: cutting, subtitles, translation and templates, aimed at social clips rather than at long-form production.
Build me video editing that replaces VEED — and know why this is ALMOST. The editing is ordinary. The feature people pay for is **subtitles and translation in one step**: transcribe, burn in, translate, done. Transcription you can now run locally and well. Translation of subtitles is where a local model is noticeably weaker than a paid one, and honest subtitles matter more than fast ones. STACK - Node 20+ with Fastify, server-rendered HTML - SQLite through better-sqlite3, WAL mode - ffmpeg for everything video - whisper.cpp or an equivalent local model for transcription - Object storage with a CDN if you serve the results - Caddy in front THE DATA MODEL - projects: id, name, owner_id, source_video_id, timeline_json, created_at, updated_at - videos: id, path, sha256, duration_ms, width, height, fps, codec, bytes, has_audio - subtitles: id, project_id, language, is_original, vtt_path, is_edited, generated_at - cues: id, subtitle_id, index, start_ms, end_ms, text, confidence, speaker — as rows, not a blob, so editing and search work - renders: id, project_id, preset, path, bytes, duration_ms, status, ms - assets: id, kind, path — images, audio, fonts - The source video is never modified. Every render is derived from the source plus the timeline SUBTITLES, WHICH IS THE PRODUCT - Transcribe locally, producing cues with timings and confidence - **Segment cues for reading, not for pauses.** Around forty characters a line, at most two lines, at least a second on screen, and never breaking a phrase across a cue. That segmentation is what separates usable subtitles from a wall of text, and it is the part automatic tools get wrong - Low-confidence words shown differently in the editor so they get checked. Names and jargon are always wrong somewhere - A custom vocabulary applied as a post-pass — the single cheapest quality improvement available - Editing cues with the video scrubbing alongside, and a shortcut to split or merge a cue - Export as SRT and WebVTT, and burn in with a style: font, size, position, background, outline. Burned-in subtitles must be legible on a phone against a bright background, which means an outline or a plate, not just a colour TRANSLATION, HONESTLY - A local translation model is workable for gist and noticeably weaker than a paid one for anything published - Whatever you use, translate cue by cue with the surrounding cues as context, not line by line in isolation, or pronouns and tense fall apart - Re-segment after translating: a translated line is a different length and the original timings will no longer read - Mark every translated track as machine-translated, in the file and in the interface. Publishing a machine translation as if a person wrote it is how a video says something you did not mean EDITING - A timeline with the video, audio, subtitle and overlay tracks - Trim, split, reorder, speed up a range, and remove silence — the last one offered rather than applied - Text, images and shapes as overlays with an in and out point - Crop and resize to the aspect ratios that matter — landscape, square, vertical — with a focal point so the subject stays in frame. Automatic reframing that crops somebody's head off is worse than letterboxing - Audio: volume, fade, background music with ducking under speech - Non-destructive: the timeline is a list of operations and can be re-rendered with different settings RENDERING - Presets per platform with the right size, bitrate and duration cap - A queue with a concurrency cap; this is CPU-heavy and unbounded parallelism takes the machine down - Progress reported honestly, and a preview that plays the timeline without a full render so nobody waits to see a change OPERATIONS - .env: DATABASE_PATH, STORAGE_PATH, BASE_URL, SESSION_SECRET, MODEL_PATH, RENDER_CONCURRENCY, RETENTION_DAYS - Migrations on boot, each once; storage is the real cost — measure bytes per minute and set a retention - Nightly backup of the database and the sources - Health endpoint reporting queue depth and free disk WHAT MATTERS MOST Cue segmentation and honest labelling of machine translation. Good subtitles are the reason to use this, and badly segmented ones are worse than none.
What you lose
- Automatic subtitling and translation with an editor for fixing the mistakes
- A browser editor that handles long files without exhausting memory
- Templates and brand kits for social formats
If you would rather not build
- Descript, for transcript-driven editing
What it costs
as published on their pricing page
| Plan | Billed monthly | Billed yearly | Last read |
|---|---|---|---|
| — | $24/mo | — | — |
Their pricing page is where these came from. Seeing a different price? Tell us.
The escape hatch
open source · no votes, no paid placement
whisper.cpp
$0Runs speech recognition locally with word-level timings.
ggml-org/whisper.cppfree · open source
Why this verdict
our own opinion · changed only by a person
50/100
Verdict kinda at 50. Subtitles are a genuinely good local build with whisper.cpp; a full browser editor is not a weekend.
History
tracked since 10 Aug 2026 · nothing is ever overwritten
Questions about VEED
answered from the record above
Is VEED free?
No — the plan we track is $24 a month. Lite at around $24/month billed monthly, cheaper annually.
Can you replace VEED by building your own?
ALMOST. A weekend of work, and real gaps remain. Replacement score 50 out of 100, build time a weekend. Read what you lose before you decide.
How much does VEED cost?
$24 a month on Lite — $288 a year. Recorded 10 Aug 2026.
What do you lose by replacing VEED?
Automatic subtitling and translation with an editor for fixing the mistakes; A browser editor that handles long files without exhausting memory; Templates and brand kits for social formats. If any of those carry weight for you, keep paying.
Is there an open-source alternative to VEED?
Yes: whisper.cpp, Shotcut. The prompt on this page is for when you want it your way instead.
Related entries
same category first, most replaced first
Every week, something stops being worth paying for.
New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.
free forever · no tracking pixel · stored here, never passed to anyone

