Configuration
VideoCMS combines startup environment variables with settings stored in its database. Host, the local storage paths, StorageScratchDir, StorageEncryptionKey, and StatsDriveName are read from the process environment at startup. Application, security, feature, limit, CDN, CAPTCHA, and encoding settings are managed from the administrator configuration page and persist in SQLite.
The field names below match the configuration returned by the API and shown in the administrator interface. Restart VideoCMS after changing a startup environment variable or a setting whose interface indicates that a restart is required.
General Settings
| Variable | Description | Default |
|---|---|---|
Host | The host and port the server listens on. | :3000 |
AppName | The name of your application instance. | - |
BaseUrl | The base URL of the API (e.g., https://api.example.com). | - |
ProjectExampleVideo | UUID of an example video. | - |
Security & Authentication
| Variable | Description | Default |
|---|---|---|
JwtSecretKey | Secret key for JWT authentication. Change this! | - |
JwtMediaSecretKey | Secret key for player media cookies. Rotating it invalidates active playback cookies. | - |
TrustedProxies | Comma-separated list of trusted proxy IPs. | - |
TrustLocalTraffic | Whether to trust local traffic (true/false). | - |
CorsAllowOrigins | Allowed CORS origins. | - |
CorsAllowHeaders | Allowed CORS headers. | - |
CorsAllowCredentials | Allow CORS credentials (true/false). | - |
Feature Flags
| Variable | Description | Default |
|---|---|---|
EncodingEnabled | Enable video encoding (true/false). | - |
UploadEnabled | Enable video uploads (true/false). | - |
DownloadEnabled | Enable prepared video downloads. Disabling cancels queued/active preparations and removes ready artifacts. | true |
RemoteDownloadEnabled | Enable server-side remote downloads (true/false). Disabling cancels pending/running remote jobs. | true |
PlayerV2Enabled | Enable the V2 player (true/false). | - |
ContinueWatchingPopupEnabled | Enable "Continue Watching" popup (true/false). | - |
ReloadHtml | Enable HTML reloading (dev mode) (true/false). | - |
Limits & Performance
| Variable | Description | Default |
|---|---|---|
RatelimitEnabled | Enable rate limiting (true/false). | - |
RatelimitRateGlobal | Global rate limit rate. | - |
RatelimitBurstGlobal | Global rate limit burst. | - |
RatelimitRateAuth | Auth rate limit rate. | - |
RatelimitBurstAuth | Auth rate limit burst. | - |
RatelimitRateApi | API rate limit rate. | - |
RatelimitBurstApi | API rate limit burst. | - |
RatelimitRateUpload | Upload rate limit rate. | - |
RatelimitBurstUpload | Upload rate limit burst. | - |
RatelimitRateWeb | Web rate limit rate. | - |
RatelimitBurstWeb | Web rate limit burst. | - |
MaxItemsMultiDelete | Max items for bulk deletion. | - |
MaxRunningEncodes | Max concurrent encoding jobs. | - |
MaxParallelFFmpegTasks | Shared capacity for encoding, thumbnails, and prepared downloads (1-16). Existing installations initially inherit the larger of their encode and download-preparation limits. | derived |
MaxParallelDownloads | Max concurrent remote download jobs. | 1 |
RemoteDownloadTimeout | Max seconds for one remote download. | 3600 |
MaxParallelDownloadPreparations | Max concurrent FFmpeg packaging jobs for public downloads (1-8). | 1 |
MaxQueuedDownloadPreparations | Max public download preparation jobs waiting for a worker (1-500). | 20 |
DownloadPreparationRetentionHours | Hours newly prepared files remain available (1-168). | 6 |
MaxFramerate | Max framerate for encoded videos. | - |
MaxUploadFilesize | Max upload file size (bytes). | - |
MaxUploadChunkSize | Max tus PATCH request body size (bytes). Keep this below reverse-proxy upload body limits. | - |
MaxUploadSessions | Max active upload sessions. | - |
MaxPostSize | Max HTTP POST body size. | - |
Storage Paths
| Variable | Description | Default |
|---|---|---|
FolderVideoQualitysPriv | Private path for encoded videos. | ./videos/qualitys |
FolderVideoQualitysPub | Public URL path for encoded videos. | /videos/qualitys |
FolderVideoUploadsPriv | Private path for uploaded raw files. | ./videos/uploads |
StorageScratchDir | Local staging directory used while remote objects are encoded or otherwise processed. | ./videos/scratch |
StatsDriveName | Drive name for disk stats (e.g., nvme0n1). | nvme0n1 |
Additional Storage
Additional storage mounts and upload pools are configured in Administration → Storage. Local storage remains available by default, so no storage environment variables are required for a local-only installation.
| Variable | Description | Default |
|---|---|---|
StorageEncryptionKey | Base64-encoded 32-byte key used to encrypt remote-mount credentials. Generate it with openssl rand -base64 32. Required before an administrator can save a remote mount. Back it up with the database. | - |
See the Storage Pools guide for mount, routing, migration, and recovery instructions.
CDN Integration
| Variable | Description | Default |
|---|---|---|
CloudflareEnabled | Enable Cloudflare integration (true/false). | - |
BunnyCDNEnabled | Enable BunnyCDN integration (true/false). | - |
FastlyEnabled | Enable Fastly integration (true/false). | - |
KeyCDNEnabled | Enable KeyCDN integration (true/false). | - |
Captcha
| Variable | Description | Default |
|---|---|---|
CaptchaEnabled | Enable Captcha globally (true/false). | - |
CaptchaLoginEnabled | Enable Captcha on login (true/false). | - |
CaptchaPlayerEnabled | Enable Captcha on player (true/false). | - |
CaptchaType | Type of Captcha (recaptcha, hcaptcha, turnstile). | - |
Captcha_Recaptcha_PrivateKey | ReCaptcha Private Key. | - |
Captcha_Recaptcha_PublicKey | ReCaptcha Public Key. | - |
Captcha_Hcaptcha_PrivateKey | hCaptcha Private Key. | - |
Captcha_Hcaptcha_PublicKey | hCaptcha Public Key. | - |
Captcha_Turnstile_PrivateKey | Cloudflare Turnstile Private Key. | - |
Captcha_Turnstile_PublicKey | Cloudflare Turnstile Public Key. | - |
Encoding Settings
You can enable/disable specific resolutions and set their bitrate and CRF (Constant Rate Factor).
| Variable | Description |
|---|---|
EncodeHls240p | Enable 240p encoding (true/false). |
Hls240pVideoBitrate | Bitrate for 240p. |
Hls240pCrf | CRF for 240p. |
EncodeHls360p | Enable 360p encoding (true/false). |
Hls360pVideoBitrate | Bitrate for 360p. |
Hls360pCrf | CRF for 360p. |
EncodeHls480p | Enable 480p encoding (true/false). |
Hls480pVideoBitrate | Bitrate for 480p. |
Hls480pCrf | CRF for 480p. |
EncodeHls720p | Enable 720p encoding (true/false). |
Hls720pVideoBitrate | Bitrate for 720p. |
Hls720pCrf | CRF for 720p. |
EncodeHls1080p | Enable 1080p encoding (true/false). |
Hls1080pVideoBitrate | Bitrate for 1080p. |
Hls1080pCrf | CRF for 1080p. |
EncodeHls1440p | Enable 1440p encoding (true/false). |
Hls1440pVideoBitrate | Bitrate for 1440p. |
Hls1440pCrf | CRF for 1440p. |
EncodeHls2160p | Enable 2160p (4K) encoding (true/false). |
Hls2160pVideoBitrate | Bitrate for 2160p. |
Hls2160pCrf | CRF for 2160p. |
Plugins
| Variable | Description |
|---|---|
EnablePluginPgsServer | Enable PGS Subtitle Server plugin (true/false). |
PluginPgsServer | URL for PGS Subtitle Server. |
