Vodmill
your own AI clipping platform, on your own server.
Everything you need to install, brand and run Vodmill: a self-hosted, white-label platform that turns long videos and stream recordings into captioned vertical clips, and lets brands run clipping campaigns with a review queue and a payout ledger. Read it top to bottom the first time. After that, press / and search.
01What you bought
AI tools were used to assist with parts of the code, documentation and graphics of this item. The author reviewed and tested every part before release.
Vodmill is one Node.js server that you install on your own VPS. It gives you two web apps under your own domain:
| Address | Who uses it | What it is for |
|---|---|---|
/app | Your customers and your staff | The studio: bring in a long video, get suggested clips with a score and its reasons, edit a clip through its transcript, render it, download or share it. With campaigns switched on: post campaigns, join them, submit links, follow earnings. |
/admin | You, the operator | The console: brand, keys, plans, credit prices, customers, sources, render queue, caption presets, music, campaigns, payouts, system health. |
Behind the studio the server works in steps (src/server/jobs.ts): it makes a 720p preview copy of the source, transcribes the speech with word timings, picks the moments (with Claude, or with a built-in picker when no AI key is set), reframes each clip for 9:16, 1:1, 4:5 or 16:9 with face tracking, draws word-by-word captions, and renders the result with ffmpeg.
There is also a REST API with signed webhooks and an MCP server, so customers can run the same flow from their own software or from an AI assistant (API v1, Webhooks, MCP server).
02The two halves of the product
| Part | What it does | Read |
|---|---|---|
| Studio | Source library with resumable uploads, analysis, clip board with approve and reject, clip editor, 18 caption presets, layouts, render, exports and share links. | Using the studio, Caption presets, Layouts and reframing |
| Campaigns | A brand posts a campaign with a budget and a rate per 1,000 views. Clippers join, post on their own accounts and submit the links. Views are tracked, submissions reviewed, and what each clipper is owed is recorded in a ledger. | Campaigns |
| Publishing | Post or schedule a rendered clip to the customer's own YouTube channel, to their own Postiz, or to a signed webhook. | Publishing |
Campaigns, publishing, imports from a link, customer billing and the public API are all off on a new install. You switch on what you want to offer.
03How the business works
Vodmill is revenue-ready. You decide what customers pay; the code has these mechanisms (src/server/admin/manifest.ts, src/server/billing.ts, src/server/campaigns/settings.ts):
- Credits per action: you set what a transcribed minute, an analysed minute, a render and the smaller AI actions cost.
- Monthly plans sold through your own Stripe account, each with its own limits and monthly credits.
- Credit packs: one-off top-ups.
- Plan limits as upgrades: source length, minutes analysed per month, storage, 60 fps, no watermark, import from a link, creating campaigns, posts per month.
- A commission on campaign payouts, 0 by default and capped at 50 %. It is recorded in the ledger; the software does not collect it for you.
Vodmill uses your own accounts at Anthropic, ElevenLabs or a Whisper provider, Stripe, Resend, Google and Twitch. Their usage is billed to you by those providers and is not included in the purchase (LICENSE.md). Set your credit prices so they cover those costs. Nothing in this documentation is a forecast of income, views or reach.
04What works before you add any key
Uploads, the library, the editor, captions, layouts, rendering, exports and share links need no API key at all. To analyse a source the server needs a way to transcribe it:
- No key at all: install whisper.cpp on the server and transcription runs locally (local whisper.cpp). Moments are then picked by the built-in picker from energy, speech rate, punctuation and chat.
- ElevenLabs or a Whisper provider key: transcription through their API.
- Anthropic key: Claude picks the moments, checks each clip is a complete thought, and writes titles, hooks, hashtags and post texts.
- Stripe: selling plans and credit packs. Resend: invite and password reset e-mails.
05What is not included
- Hosting, a server and a domain. The author runs no hosted service.
- API keys and the usage fees of third-party services.
- ffmpeg, whisper.cpp and yt-dlp. You install them; they keep their own licences.
- Direct posting to TikTok or Instagram. Those networks are reached only through the customer's own Postiz or a webhook.
- Automatic view counts for TikTok, Instagram, X, Kick and Facebook. Only YouTube and Twitch are counted automatically; the others are reported by screenshot and confirmed by a person.
- Any movement of money to clippers. Campaign payouts are a ledger; you pay outside the software.
- Music, stock footage and sample videos. The music library starts empty.
- Rights to the content people upload or import.
06Where to go next
07What is in the package
| Folder or file | What it is |
|---|---|
src/server/ | The server: accounts, workspaces, sources, clips, renders, billing, campaigns, publishing, console pages |
src/mcp/server.ts | The MCP server for AI assistants |
web/ | The studio app (React + Vite), served at /app |
packages/media, transcribe, ingest, moments, reframe, captions, render, ai, shared | The clipping engine, one package per step |
packages/admin-kit/ | The operator console (MIKODES Admin Kit), served at /admin |
models/ | The face detection model used for reframing, with its licence (models/LICENSES.md) |
scripts/ | backup, restore, upgrade-check, mcp |
docs/guide/ | A pointer to this documentation |
Dockerfile, .env.example | The container build and the settings template |