Open source · Fully local, no API keys · Or any AI provider

Long videos in.
Vertical clips out.
On your own hardware.

Reelsaw transcribes a video, asks a language model for the most clippable moments, then renders 9:16 clips with word-highlight captions and a hook overlay. Every model runs on your machine by default, with no API key. Or point each one at any vendor you like.

macOS / Linux / WSL2 · needs Docker
curl -fsSL https://raw.githubusercontent.com/osbytes/reelsaw/main/deploy/install.sh | bash

Installs the fully local stack: Ollama for the language model and Speaches for speech-to-text. Windows, hosted providers and from source.

Reelsaw project workspace: source player and clickable transcript on the left, rendered vertical clips with scores and layout badges on the right
The project workspace: clips stream in on the right as they render, with score, layout and a copy-ready caption.

How it works

Four stages, each one a resumable job

Every stage checkpoints its output in Postgres. Restart the box mid-render and it picks up where it stopped.

  1. 01

    Ingest

    Paste a YouTube link or upload a file. yt-dlp fetches it, ffprobe reads it, and the source is stored once so every later step can resume from it.

  2. 02

    Transcribe and clean

    Audio is transcribed in parallel chunks with word timestamps. Names are fixed from your vocabulary, fillers and false starts are cut with jump cuts, and every cut is checked by listening to the seam.

  3. 03

    Pick the moments

    Map, pool, rank: the transcript is chunked at long pauses, every standalone moment is collected, scored on hook, value, flow and shareability, and the top picks are compared head-to-head with positions swapped to cancel judge bias.

  4. 04

    Reframe and render

    A 1.2 MB face detector on the CPU picks a layout per segment: follow the speaker, stack two people, slides over a webcam, or fit the whole frame. ffmpeg burns in captions, hook, intro and outro in one encode.

  1. project.ingestIngestyt-dlp or upload, ffprobesource stored once
  2. project.transcribeTranscribeaudio → chunks, in parallelcheckpoint per chunk
  3. refine.*Refine, in parallelrefine.entities: names from your vocabularyrefine.disfluency: fillers → verified jump cutsrefine.scenes: scene cuts and face presence
  4. project.analyzePick momentsmap → pool → rankpairwise, judge model
  5. clip.render ×NRenderlayout, captions, hookintro, outro, one encode
Every box is a pg-boss queue in Postgres. A stage checkpoints its output, so a restart resumes instead of starting over.

See it

Reframing, captions and fixes you can inspect

Nothing is a black box. Every automatic decision is shown where you are looking, with a one-click override.

Auto reframing in one clip: split → face → stack → fit
Clip editor with a live 9:16 preview, captions panel and multi-lane timeline
The clip editor: 9:16 preview, captions panel and a multi-lane timeline with layout sections.
Transcript with filler-word cuts highlighted inline and a list of fixes to accept or reject
Transcript fixes: filler cuts and name corrections shown inline, each with accept and reject.

Features

Everything between the link and the upload

Built for people who publish every week and want their own pipeline, not a subscription.

  • Fully local by default. Any vendor by choice.

    The installer sets up Ollama and a local Whisper, so nothing leaves the machine and no key is needed. Language, transcription and alignment models are each a provider:model string you can point at OpenAI, Anthropic, Google, Groq, Deepgram, AssemblyAI, Vercel AI Gateway, or any OpenAI-compatible server. No vendor is baked in; admins switch at runtime.

  • Research-backed clip selection

    No fixed clip count. Weak picks are dropped relative to the run, the best clip is always kept, and a different judge model can score and compare so a model never grades its own hooks. Click a score for the rubric breakdown.

  • Clean transcripts, kept honest

    Disfluencies are located by forced alignment so karaoke highlights land on the syllable. Each fix shows inline with accept and reject, long pauses can be shortened, and your decisions survive re-runs.

  • Smart 9:16 reframing

    Face, split, stack and fit layouts chosen per segment, split at scene cuts and face changes. The crop follows whoever is talking with tripod-style smoothing. Override per project, per clip or per section.

  • Captions that read

    AI-picked key words coloured and enlarged, readability limits on line length and time on screen, karaoke word highlight, boxed or outlined. Drag caption and hook positions on a live preview with platform safe zones.

  • A real editor

    Live preview with the clip's framing and captions, a multi-lane timeline with zoom and snapping, frame-accurate trims, layout sections, transitions, undo and redo. Keyboard first, shortcuts listed under ?.

  • Intros, outros and export

    A library of intro and outro videos or images with project and clip overrides. Export all as a zip with paste-ready text, YouTube Data API and TikTok post bodies, a manifest and a CSV per clip.

  • Accounts, approval and quotas

    The first account is the admin. Open, approval or closed sign-up, per-user quotas, retention, captcha, email notices and usage per account. Admins switch models and providers at runtime without a restart.

  • Reliable, resumable, scalable

    Every stage is a pg-boss job in Postgres that checkpoints its output. A crashed worker resumes where it left off, orphaned work is re-queued, and extra worker containers scale rendering. Local disk or any S3-compatible storage.

Agents and automation

MCP is the UI for agents

Everything a person can do in the app exists as a tool on the built-in MCP server (Model Context Protocol, Streamable HTTP). Claude Code, Claude Desktop, Cursor or a script can create projects, wait for them, read timed transcripts, edit and re-render clips, manage intros and outros and download the results. The operator CLI mirrors the same service code for people running the box.

  • create_project
  • wait_for_project
  • get_transcript
  • search_clips
  • get_clip
  • update_clip
  • rerender_clip
  • delete_clip
  • restore_clip
  • list_bumpers
  • download
Claude Code
claude mcp add --transport http reelsaw https://your-host/api/mcp --header "Authorization: Bearer rs_…"
{
  "mcpServers": {
    "reelsaw": {
      "type": "http",
      "url": "https://your-host/api/mcp",
      "headers": { "Authorization": "Bearer rs_…" }
    }
  }
}

Create an API key under Settings → API keys and MCP, or set MCP_OAUTH=true so claude.ai and Claude Desktop sign in through the browser.

How it compares

Hosted clippers charge by the minute. Reelsaw charges nothing.

Opus Clip, Klap, Vizard, Submagic, 2short.ai and quso.ai meter clips, minutes or credits and watermark or expire their free tiers. The other open-source clipper still needs a Gemini key. Reelsaw is AGPL-3.0 software on your own machine, fully local or with any provider you choose: no plan, no cap, no watermark. Each comparison says what the other tool does better. Pricing checked 2026-10-18.

Install

One command, no source needed

Needs Docker with Compose and about 10 GB of disk. The script writes ~/reelsaw with a compose file and generated secrets, pulls the published image and a language model sized to your RAM, then waits until the app answers.

macOS, Linux, WSL2

bash
curl -fsSL https://raw.githubusercontent.com/osbytes/reelsaw/main/deploy/install.sh | bash

On macOS install Ollama first. On Linux the script uses a host Ollama if present, otherwise runs it in a container.

Windows (PowerShell)

powershell
irm https://raw.githubusercontent.com/osbytes/reelsaw/main/deploy/install.ps1 | iex

With Docker Desktop running. If script execution is blocked, download install.ps1 and run it with -ExecutionPolicy Bypass.

From source, or with hosted providers

Clone the repository, copy the example environment, set an auth secret and at least one AI provider key, and bring the stack up. Open http://localhost:3000; the first account becomes the admin.

Deployment guide: providers, S3, workers, reverse proxies
git clone https://github.com/osbytes/reelsaw.git && cd reelsaw
cp .env.example .env
# set BETTER_AUTH_SECRET, APP_URL and at least one AI provider key
docker compose up -d --build