Skip to content

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

VariableDescriptionDefault
HostThe host and port the server listens on.:3000
AppNameThe name of your application instance.-
BaseUrlThe base URL of the API (e.g., https://api.example.com).-
ProjectExampleVideoUUID of an example video.-

Security & Authentication

VariableDescriptionDefault
JwtSecretKeySecret key for JWT authentication. Change this!-
JwtMediaSecretKeySecret key for player media cookies. Rotating it invalidates active playback cookies.-
TrustedProxiesComma-separated list of trusted proxy IPs.-
TrustLocalTrafficWhether to trust local traffic (true/false).-
CorsAllowOriginsAllowed CORS origins.-
CorsAllowHeadersAllowed CORS headers.-
CorsAllowCredentialsAllow CORS credentials (true/false).-

Feature Flags

VariableDescriptionDefault
EncodingEnabledEnable video encoding (true/false).-
UploadEnabledEnable video uploads (true/false).-
DownloadEnabledEnable prepared video downloads. Disabling cancels queued/active preparations and removes ready artifacts.true
RemoteDownloadEnabledEnable server-side remote downloads (true/false). Disabling cancels pending/running remote jobs.true
PlayerV2EnabledEnable the V2 player (true/false).-
ContinueWatchingPopupEnabledEnable "Continue Watching" popup (true/false).-
ReloadHtmlEnable HTML reloading (dev mode) (true/false).-

Limits & Performance

VariableDescriptionDefault
RatelimitEnabledEnable rate limiting (true/false).-
RatelimitRateGlobalGlobal rate limit rate.-
RatelimitBurstGlobalGlobal rate limit burst.-
RatelimitRateAuthAuth rate limit rate.-
RatelimitBurstAuthAuth rate limit burst.-
RatelimitRateApiAPI rate limit rate.-
RatelimitBurstApiAPI rate limit burst.-
RatelimitRateUploadUpload rate limit rate.-
RatelimitBurstUploadUpload rate limit burst.-
RatelimitRateWebWeb rate limit rate.-
RatelimitBurstWebWeb rate limit burst.-
MaxItemsMultiDeleteMax items for bulk deletion.-
MaxRunningEncodesMax concurrent encoding jobs.-
MaxParallelFFmpegTasksShared capacity for encoding, thumbnails, and prepared downloads (1-16). Existing installations initially inherit the larger of their encode and download-preparation limits.derived
MaxParallelDownloadsMax concurrent remote download jobs.1
RemoteDownloadTimeoutMax seconds for one remote download.3600
MaxParallelDownloadPreparationsMax concurrent FFmpeg packaging jobs for public downloads (1-8).1
MaxQueuedDownloadPreparationsMax public download preparation jobs waiting for a worker (1-500).20
DownloadPreparationRetentionHoursHours newly prepared files remain available (1-168).6
MaxFramerateMax framerate for encoded videos.-
MaxUploadFilesizeMax upload file size (bytes).-
MaxUploadChunkSizeMax tus PATCH request body size (bytes). Keep this below reverse-proxy upload body limits.-
MaxUploadSessionsMax active upload sessions.-
MaxPostSizeMax HTTP POST body size.-

Storage Paths

VariableDescriptionDefault
FolderVideoQualitysPrivPrivate path for encoded videos../videos/qualitys
FolderVideoQualitysPubPublic URL path for encoded videos./videos/qualitys
FolderVideoUploadsPrivPrivate path for uploaded raw files../videos/uploads
StorageScratchDirLocal staging directory used while remote objects are encoded or otherwise processed../videos/scratch
StatsDriveNameDrive 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.

VariableDescriptionDefault
StorageEncryptionKeyBase64-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

VariableDescriptionDefault
CloudflareEnabledEnable Cloudflare integration (true/false).-
BunnyCDNEnabledEnable BunnyCDN integration (true/false).-
FastlyEnabledEnable Fastly integration (true/false).-
KeyCDNEnabledEnable KeyCDN integration (true/false).-

Captcha

VariableDescriptionDefault
CaptchaEnabledEnable Captcha globally (true/false).-
CaptchaLoginEnabledEnable Captcha on login (true/false).-
CaptchaPlayerEnabledEnable Captcha on player (true/false).-
CaptchaTypeType of Captcha (recaptcha, hcaptcha, turnstile).-
Captcha_Recaptcha_PrivateKeyReCaptcha Private Key.-
Captcha_Recaptcha_PublicKeyReCaptcha Public Key.-
Captcha_Hcaptcha_PrivateKeyhCaptcha Private Key.-
Captcha_Hcaptcha_PublicKeyhCaptcha Public Key.-
Captcha_Turnstile_PrivateKeyCloudflare Turnstile Private Key.-
Captcha_Turnstile_PublicKeyCloudflare Turnstile Public Key.-

Encoding Settings

You can enable/disable specific resolutions and set their bitrate and CRF (Constant Rate Factor).

VariableDescription
EncodeHls240pEnable 240p encoding (true/false).
Hls240pVideoBitrateBitrate for 240p.
Hls240pCrfCRF for 240p.
EncodeHls360pEnable 360p encoding (true/false).
Hls360pVideoBitrateBitrate for 360p.
Hls360pCrfCRF for 360p.
EncodeHls480pEnable 480p encoding (true/false).
Hls480pVideoBitrateBitrate for 480p.
Hls480pCrfCRF for 480p.
EncodeHls720pEnable 720p encoding (true/false).
Hls720pVideoBitrateBitrate for 720p.
Hls720pCrfCRF for 720p.
EncodeHls1080pEnable 1080p encoding (true/false).
Hls1080pVideoBitrateBitrate for 1080p.
Hls1080pCrfCRF for 1080p.
EncodeHls1440pEnable 1440p encoding (true/false).
Hls1440pVideoBitrateBitrate for 1440p.
Hls1440pCrfCRF for 1440p.
EncodeHls2160pEnable 2160p (4K) encoding (true/false).
Hls2160pVideoBitrateBitrate for 2160p.
Hls2160pCrfCRF for 2160p.

Plugins

VariableDescription
EnablePluginPgsServerEnable PGS Subtitle Server plugin (true/false).
PluginPgsServerURL for PGS Subtitle Server.

Released under the AGPL-3.0 License.