Vodmill docs
v1.0.0
Get help
● Set up · Every setting

Configuration
the .env file and the console, section by section.

Vodmill has two places for settings. The .env file holds the few values the server needs before the console can open. Everything else is a setting in the console at /admin, changed without a restart.

.envConsole sectionsDefaults

01The .env file

From .env.example and src/server/config.ts. Restart the server after a change.

VariablePurposeWhere the value comes from
PORTPort the server listens on. Default 8787.Your choice
PUBLIC_URL Set itThe https address people use. Invite and reset links, Stripe return addresses, signed file links and the YouTube connection are built from it. When set, the console shows the field locked.Your domain, for example https://clips.your-agency.com
ADMIN_SECRET_KEY Set it64 hex characters that seal saved keys and secrets. Not set: the server writes a generated key to DATA_DIR/.admin-secret-key.openssl rand -hex 32
DATA_DIRFolder of the databases and files. Default data in the product folder.A path on a disk with room
TRUST_PROXY_HOPSNumber of reverse proxies in front, so rate limits see the visitor's address. Default 0.1 behind Caddy or nginx
FFMPEG_PATH, FFPROBE_PATH OptionalFull paths when the two programs are not on the PATH.which ffmpeg, which ffprobe
BACKUP_DIR OptionalWhere npm run backup writes. Default DATA_DIR/backups.A folder, ideally on another disk
HOST OptionalListen address. Default 0.0.0.0.127.0.0.1 to accept only the local proxy
COOKIE_SECURE Optional1 forces the Secure flag on cookies. It is on by itself when PUBLIC_URL starts with https://.—
ANTHROPIC_API_KEY, STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, RESEND_API_KEY OptionalPin a key here instead of entering it in the console. A set variable locks the console field (ENV_LOCKS).The provider's dashboard
VODMILL_YUNET_MODEL OptionalFull path of the face detection model when it is not in the models folder (packages/reframe/src/detect.ts). Commented out in .env.example.The .onnx file in models/
DEMO_MODE, DEMO_PASSWORD, ADMIN_DEMO_PASSWORD, FRAME_ANCESTORSFor a public read-only demo host only. Never set these on a real install.—

02The console, section by section

The console has no single settings menu: every section below is its own entry in the sidebar, under one of the headings Setup, Money, Product and System (Setup: Brand, Legal, AI, Transcription, Server; Money: Campaigns, Credits, Customer billing; Product: Access, Imports, Clipping defaults, Publishing; System: Rendering, Public API, E-mail, Integrations, Notifications). The search field at the top finds any setting by name. The sections are declared in src/server/admin/manifest.ts. Changes apply at once and are written to the audit log.

SectionWhat you setExplained in
Brand, LegalName, tagline, accent colour, logo, support e-mail, browser tab title; terms and privacy links, disclaimerWhite label
AccessSign-up open or closed, welcome credits, announcement, maintenance mode, blocked countries and the country header of your proxyFirst steps
AIThe Claude model for each step, fallbacks, workspaces' own keysAI and transcription
TranscriptionProvider and its optionsAI and transcription
ImportsImport from a link: off by defaultImports
Clipping defaultsWhat a new source starts withbelow
RenderingParallel work, queue, 60 fps, watermark, clean-up, largest uploadbelow
CampaignsThe campaigns switch, commission, hold, tracking, fraud thresholdCampaigns
PublishingThe publishing switch and its three channel kindsPublishing
Credits, Customer billingCredit price per action; the selling switchPlans and credits
Public APIThe API switch and the rate limit per keyAPI v1
ServerThe public URLbelow
E-mailThe sender addressbelow
IntegrationsEvery API key and secretbelow
NotificationsWhere the console's own alerts goOperator console

03Clipping defaults

What a new source starts with. A workspace can change these for itself on its Clip settings page.

FieldDefaultRange or meaning
Clips suggested per source101 to 40
Shortest clip (seconds)205 to 120
Longest clip (seconds)5510 to 180
GenreDetect from the videoPodcast, Stream, Gaming, Vlog, Talk, Education, Business
Aspect ratio9:16 verticalAlso 1:1, 4:5, 16:9
Cut silences and filler wordsOnNever applied to streams
Punch-in zoomsOnNever applied to streams
Check every suggested clip for a complete thoughtOnOne extra AI call per clip while a source is analysed
Caption preset (id)EmptyEmpty uses the first preset. Ids are on the console's Caption presets page (list).

04Rendering

FieldDefaultRange or meaning
Renders at the same time11 to 4. One render already uses every CPU core.
Sources analysed at the same time11 to 4
Renders a workspace may have waiting301 to 500
Allow 60 fps renders (plans with 60 fps)OffA 60 fps render needs this switch and the plan's "60 fps renders" limit
Watermark text on plans without "No watermark"EmptyEmpty: no watermark on any plan
Delete render files after (days, 0 keeps them)00 to 3650. Expired renders can be rendered again; their share links stop working.
Largest upload (GB)81 to 200

Renders and analyses wait in queues. One render runs per workspace at a time; plans with a higher queue priority go first. Uploads nobody finished within two days are removed (src/server/jobs.ts).

05Server

One field: Public URL of this server. It must be the https address of the app. It is locked when PUBLIC_URL is set in .env. Until it starts with https:// the console shows a blocker.

06E-mail

One field: Sender, a sender on a domain you verified in Resend, for example Team <hello@your-agency.com>. With the Resend key under Integrations the server e-mails workspace invites, staff invites and password reset links. Without e-mail, invite links are shown on the page for you to send yourself, and password resets are made by the operator from the console's Users page.

07Integrations: every key

Only console owners can change keys. Each key is sealed with ADMIN_SECRET_KEY and never shown again after saving.

KeyUsed forWhere to get it
Anthropic API keyAI moment picking, complete-thought check, titles, post textsconsole.anthropic.com, API keys
ElevenLabs API keyTranscription with ElevenLabs Scribeelevenlabs.io, API keys
Whisper API key (Groq, OpenAI or compatible)Transcription with Whisper over HTTPYour provider's dashboard
Stripe secret keyCheckout for plans and credit packsStripe, Developers, API keys
Stripe webhook signing secretVerifying Stripe's callsStripe webhook
Resend API keyE-mailresend.com, API Keys
Twitch app client secretTwitch view counts and top clips. The client ID is under Imports.dev.twitch.tv, Applications
YouTube Data API keyCounting views on submitted YouTube clips; checking channel descriptionsCampaigns
Google OAuth client ID and secretCustomers connecting their YouTube channelPublishing