iArt.ai
AI motion graphics software — the After Effects alternative anyone can use. Create animations and explainer videos from a text prompt in minutes.
CapForge is a free AI caption editor for macOS and Windows. Transcribe video on-device with Whisper, style captions, and export locally — no upload, no account.
MediaTypeScript · PythonGitHub @FRSnameOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Automatic subtitle generator with word-by-word alignment, inline editing, and styled video rendering.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
▶ Watch the tutorial — how to use CapForge
Captions, a library and an upload package for every video you make — with Claude doing the writing.Read the full README ↗▶ Watch the tutorial — how to use CapForge
Captions, a library and an upload package for every video you make — with Claude doing the writing.
CapForge transcribes a video with word-level timing, lets you correct and style the captions, renders them into the video or as a transparent overlay, and then turns the finished video into a copy-ready YouTube upload package (title, description with chapters, tags, thumbnail) plus a post per social channel. Everything you make lives in a library on your machine. A desktop app built with Electron + React + TypeScript on a Python FastAPI backend powered by WhisperX. Transcription, rendering and the library all run on your machine.
| Platform | Installer |
|---|---|
| Windows | CapForge-Setup-3.0.1.exe |
| macOS (Apple Silicon) | CapForge-3.0.1.dmg |
See the changelog for what's new, or all releases for older builds. The app checks GitHub for a newer version at startup and tells you when there is one.
On first launch a setup wizard downloads the embedded Python runtime and the Whisper model you pick (Tiny at 75 MB up to Large Turbo at 1.6 GB; Large Turbo is recommended) into the app's data folder. Your library lives in ~/.capforge/ on every platform.
Captions. Drop a video, get word-level timestamps in 99 languages, optionally with speakers. Fix words in the Text view, rearrange caption groups in the Groups view, drag timings on the timeline. Style everything from a sidebar of presets and dials, preview it live, and render an MP4 with the captions burned in or a transparent MOV/WebM overlay for your editor. Add a tab per language and translate the captions onto the original timing.
Library. CapForge opens on your videos, in folders, with a poster and a status on every card (imported → transcribed → captioned → drafted → published). Every session saves itself into its record. Drop a folder of recordings to import them all; point a watch folder at your capture drive.
Publish. A second workspace beside the caption editor turns the video into an upload: title options, a description with chapters, tags and hashtags, a speaker map, Shorts clip suggestions, thumbnail frames, and translated metadata per language — checked against YouTube's limits as you type. Set up your channels (YouTube, TikTok, Instagram, LinkedIn, X) once and each gets its own tab, metered to that platform. Copy the whole package or one field at a time. CapForge never uploads; you paste.
Claude. Connect Claude Desktop or Claude Code with one click in Settings. Seven bundled skills and 61 tools let Claude clean up the transcript, style the captions, translate them, write the description and chapters, find Shorts moments and run a pre-upload check — on the open video or across a whole folder, with no window open for the library parts.
.capforge project file; per language track.cfpreset files with the font embedded.capforge projects in one go (⌘O / Ctrl+O); relink media that moved; an import-only watch folder~/.capforge/library/<id>/ — a plain record.json and transcript.json per video, readable by any toolCapForge ships an MCP server that Claude Desktop and Claude Code connect to. Settings → Claude & Skills has a one-click Connect for each; restart Claude afterwards.
| 61 tools | transcribe, edit words, style captions, render and export; create and translate caption tracks; list, search and read the library; write titles, descriptions, chapters and tags into a record; grab thumbnail frames; manage channels, folders and per-channel posts |
| 7 skills | capforge-init (set up channels by interview) · capforge-publish (the upload package) · capforge-cleanup (fillers and misheard names, timing untouched) · capforge-translate · capforge-style · capforge-clips (Shorts candidates) · capforge-preflight (a read-only pre-upload check) |
| 4 slash commands | /breakdown, /describe, /chapters, /batch_publish |
| Guide | capforge://publish resources — the publish workflow as topics Claude pulls on demand |
Every write Claude makes is validated by the same rules as the UI and stamped into the record's history. See mcp_server/README.md for the tool reference, batch runs over a folder, and effect packs.
┌──────────────────────────────────────────────────────────┐
│ Electron shell │
│ main.js · preload.js · python-manager.js · skills-store │
├──────────────────────────────────────────────────────────┤
│ Renderer (Chromium) │
│ React 19 + TypeScript + Tailwind v4 │
│ Library · Editor · Timeline · Studio · Publish │
├───────────────┬──────────────────────────────────────────┤
│ REST / WS │ http://127.0.0.1:53421 │
├───────────────┴──────────────────────────────────────────┤
│ Python backend (FastAPI) │
│ WhisperX · pyannote · Pillow · FFmpeg · HyperFrames │
│ backend/library — records, index, validators, package │
├──────────────────────────────────────────────────────────┤
│ ~/.capforge/library/<id>/ record.json · transcript │
└──────────────────────────────────────────────────────────┘
▲
│ /api/agent/*
mcp_server/ ← Claude Desktop · Claude Code
Electron spawns the backend on startup. The renderer owns the editing session and talks to the backend over REST and a WebSocket for progress. The backend owns the durable per-video record, which the MCP server reads and writes on Claude's behalf — with or without a window open.
| Layer | Technology |
|---|---|
| Desktop shell | Electron 33 |
| Renderer | React 19, TypeScript, Tailwind CSS v4, electron-vite + Vite |
| Audio / waveform | WaveSurfer.js 7 |
| Backend | Python 3.11 (embedded), FastAPI, uvicorn |
| ASR | WhisperX, faster-whisper, CTranslate2 |
| Diarization | pyannote-audio |
| ML | PyTorch 2.6 (CUDA 12.4 on Windows, MPS/CPU on macOS) |
| Rendering | Pillow, FFmpeg, HyperFrames (Node) |
| Library | JSON records + SQLite FTS5 index |
| Agent | MCP server (Python) |
| Packaging | electron-builder (NSIS / DMG) |
git clone https://github.com/FRSname/CapForge.git
cd CapForge
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# Order matters — see DOCS.md "torch install order trap"
pip install whisperx fastapi[standard] uvicorn[standard] websockets pillow
pip uninstall -y torch torchaudio torchvision
pip install torch==2.6.0 torchaudio==2.6.0 torchvision==0.21.0 --index-url https://download.pytorch.org/whl/cu124
npm install
npm run dev:react # Electron + React with HMR + the backend
npm run backend # backend alone on 127.0.0.1:53421
npm run typecheck
npm test # vitest
npm run lint
pytest # backend; add mcp_server/tests for the MCP suite
npm run dist:win # NSIS installer
npm run dist:mac # DMG (npm run release:mac signs and notarizes)
.capforge file if you want a copy| Shortcut | Action |
|---|---|
| Space / K | Play / pause |
| J / L | Seek ±2 s |
| ← / → | Step one frame |
| , / . | Previous / next caption group |
| [ / ] | Previous / next segment |
| ⌘1 / ⌘2 | Text / Groups view |
| Enter / ⇧Enter | Commit, edit next / previous |
| ⌘Enter | Split segment at cursor |
| M (Groups) | Merge with the group below |
| Enter (Groups) | Split in half |
| ⌘Z / ⌘⇧Z | Undo / redo |
| ⌘S | Export project (.capforge) |
| ⌘O (library) | Add to library… |
| ⌘, | Settings |
| ? | All shortcuts |
| + / − / 0 | Zoom in / out / reset |
| Ctrl+Wheel | Zoom timeline or video |
On Windows, ⌘ is Ctrl. In the library: click selects, double-click or Enter opens, ⌘A selects all, ⌘⌫ removes.
| Export | Extension | Notes |
|---|---|---|
| Standard SRT / VTT / ASS | .srt .vtt .ass | Sentence cues, ≤ 2 lines × 42 chars, ≤ 7 s; ASS keeps karaoke |
| Word SRT | .srt | One word per cue |
| JSON | .json | Full word-level data |
| Project | .capforge | Transcript, groups, tracks, style |
| Upload package | clipboard | Title, description with chapters, tags, hashtags — per channel and language |
| Render | Format | Use |
|---|---|---|
| Baked | MP4 (H.264) | Captions burned into the video |
| Overlay | MOV (ProRes 4444, premultiplied) or WebM (VP9 alpha) | Transparent layer for an NLE |
| HyperFrames | MP4 | GSAP-animated captions and effect packs |
Quick Render uses the source resolution and fps at 40 Mbps. Custom Render adds resolution presets (1080p / 4K / portrait / square), 24–60 fps and a bitrate selector. All encodes except WebM are tagged BT.709.
| VRAM | Model | Compute |
|---|---|---|
| ≥ 10 GB | large-v3 | float16 |
| ≥ 6 GB | large | float16 |
| ≥ 4 GB | medium | int8 |
| ≥ 2 GB | small | int8 |
| CPU / Apple Silicon | large-v3-turbo (CPU path; CTranslate2 has no MPS yet) | int8 |
CapForge/
├── backend/ # FastAPI backend
│ ├── main.py # REST + WebSocket routes
│ ├── engine/ # WhisperX pipeline, GPU detection
│ ├── exporters/ # SRT/VTT/ASS/JSON, Pillow render, HyperFrames, RSVP
│ ├── library/ # records, index, validators, package, channels, folders
│ └── models/schemas.py
├── mcp_server/ # MCP server: tools, publish guide, bundled skills
│ ├── server.py · library.py · publish.py · tracks.py · channel_tools.py
│ ├── publish_guide/ # capforge://publish topics
│ └── skills/ # the seven bundled skills
├── electron/ # main.js, preload.js, python-manager.js, skills-store.js …
├── src/renderer/src/ # React renderer
│ ├── components/
│ │ ├── library/ # the home screen
│ │ ├── editor/ player/ # Text, Groups, Transcript views; player + timeline
│ │ ├── studio/ # style sidebar, export, render
│ │ ├── publish/ # the Publish workspace
│ │ ├── tracks/ # language tabs
│ │ ├── settings/ # the Settings dialog
│ │ └── onboarding/ tour/ # startup guide, tours, What's new
│ ├── hooks/ · lib/ # state and pure logic (unit-tested)
│ └── styles/globals.css # theme tokens
├── docs/ # caption-parity.md, caption-tracks.md, hyperframes-integration.md, plans/
├── DOCS.md # packaging and runtime notes
└── CHANGELOG.md
More: DOCS.md · docs/caption-parity.md · docs/caption-tracks.md · docs/hyperframes-integration.md · mcp_server/README.md
MIT