Change instance settings
set_instance_settingsUpdate admin-only instance settings without restarting; changes apply across processes within seconds and are audited. Pass only keys to change, with validation and current state returned.
Instructions
Admins only: change instance settings without a restart; every process applies them within seconds and the change is audited. Pass only the keys to change; null returns a key to the environment's value; an empty string clears an optional one (URLs, captcha). Validated as a whole (a captcha provider needs both keys; email verification needs an email driver). Returns the same state as get_instance_settings.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| TERMS_URL | No | Terms of service link shown on the sign-up form; empty = none. | |
| CATALOG_URL | No | Where the Reelsaw catalog manifest (sounds, icons, stickers) is fetched from, hourly; the starter pack bundled with Reelsaw is used until a newer one arrives. | |
| PRIVACY_URL | No | Privacy policy link shown on the sign-up form; empty = none. | |
| SIGNUP_MODE | No | Who may sign up: open (anyone, right for a public instance with email confirmation), approval (new accounts wait for an admin; a private box) or closed (nobody). The first account is always the admin. | |
| UPDATE_CHECK | No | Ask GitHub for the latest release and tell admins when a newer Reelsaw exists. Only the request leaves the machine. | |
| GIPHY_API_KEY | No | Giphy API key: enables GIFs and stickers in Browse. Stored encrypted; empty = provider hidden. | |
| KLIPY_API_KEY | No | Klipy API key: enables GIF search in Browse (experimental). Stored encrypted; empty = provider hidden. | |
| MAX_UPLOAD_MB | No | Largest accepted file upload, in MB. | |
| REFINE_SCENES | No | Scan the video for on-screen text (burned-in captions, watermarks, slides) during refine. On by default; off closes the ceiling (projects opt out via refineScenes). Shot cuts are always detected. | |
| STALL_MINUTES | No | A running job with no progress for this long is reported as stalled (log and UI). | |
| DISFLUENCY_LLM | No | Model pass on top of rule-based disfluency detection. Off by default. Ignored when disfluency removal is off. Turn on so projects may opt in via disfluencyLlm. | |
| HEALTH_DETAILS | No | Include machine numbers in GET /api/health for anonymous callers (private networks only). Admins always get them. | |
| MAX_STORAGE_MB | No | MB of sources, uploads, renders and intros/outros an account may keep (deleted items count until they are deleted forever). 0 = unlimited. | |
| PEXELS_API_KEY | No | Pexels API key (free): enables stock photos and portrait videos in Browse. Stored encrypted; empty = provider hidden. | |
| WATERMARK_TEXT | No | The watermark text, e.g. your site name. | |
| ICONIFY_API_URL | No | Iconify API used for icon search; the public one by default, or your own self-hosted instance (https). | |
| PIXABAY_API_KEY | No | Pixabay API key (free): enables photos, illustrations, vectors and videos in Browse. Stored encrypted; empty = provider hidden. | |
| CAPTCHA_PROVIDER | No | Bot protection on sign-up, sign-in and password reset: cloudflare-turnstile, google-recaptcha or hcaptcha; empty = off. Needs both keys. | |
| CAPTCHA_SITE_KEY | No | Public captcha key the browser widget uses; empty = unset. | |
| FREESOUND_API_KEY | No | Freesound API key (free): enables sound effects in Browse. Stored encrypted; empty = provider hidden. | |
| OPENVERSE_ENABLED | No | Show Openverse (Creative Commons images and audio, no key) in Browse. Off by default until you have checked its limits for your use. | |
| CAPTCHA_SECRET_KEY | No | Secret captcha key the server verifies with; stored encrypted, never shown again; empty = unset. | |
| DISFLUENCY_REMOVAL | No | Detect fillers, repetitions and false starts after transcription. Off by default; turn on so projects may opt in via refineDisfluency. | |
| MAX_SOURCE_FILE_MB | No | Largest file a link source may download (yt-dlp --max-filesize), in MB. | |
| CLIP_RETENTION_DAYS | No | Delete rendered clip files this many days after rendering; the clip stays and can be re-rendered. 0 = keep forever. | |
| MEDIA_LINK_TTL_DAYS | No | Share links last this many days unless the owner picks less. | |
| SCRATCH_CACHE_HOURS | No | With an S3 store, drop a worker's local copies of the sources and rendered clips of finished projects after this many idle hours; a job pulls them back from the bucket when it needs them, and a worker short of disk drops the least recently used ones first. 0 = keep them on the worker. The local store needs nothing: scratch and store are the same file. | |
| STEP_RETENTION_DAYS | No | Drop the saved checkpoints (finding-moments windows) of a finished project this many days after it last changed; a Retry sooner than that reuses them. 0 = keep forever. | |
| EVENT_RETENTION_DAYS | No | Prune project events older than this; each project keeps its run skeleton. 0 = keep forever. | |
| WATERMARK_NON_ADMINS | No | Burn a small watermark into the clips of accounts that are not admins. A paid plan removes it, and an admin can switch it per user on the Users page. | |
| MAX_PROJECTS_PER_USER | No | Projects an account may keep. 0 = unlimited. Admins can override per user on the Users page. | |
| MAX_REQUESTS_PER_HOUR | No | Changes an account may make per hour. 0 = unlimited. | |
| MAX_WEBHOOKS_PER_USER | No | Webhook endpoints an account may add. 0 = unlimited. Admins can override per user on the Users page. | |
| SOURCE_RETENTION_DAYS | No | Delete stored source videos this many days after upload; the project stays and Retry re-fetches. 0 = keep forever. | |
| TRANSCRIPT_CORRECTION | No | After transcription, fix misheard names with the language model. On by default; off closes the ceiling so no project runs it (projects opt out via refineEntities). | |
| DELETED_RETENTION_DAYS | No | Deleted projects and replaced clips stay restorable this long, then rows and files go. 0 = keep forever. | |
| MAX_LIVE_JOBS_PER_USER | No | Queued plus running jobs an account's own requests may add to. 0 = unlimited. | |
| MAX_RERENDERS_PER_HOUR | No | Re-renders, hand-made clips and re-runs (re-analyze, refine) an account may ask for per hour. 0 = unlimited. | |
| MEDIA_LINK_ALLOW_NEVER | No | Owners may make a share link that never expires (they can still revoke it). | |
| BLOCK_DISPOSABLE_EMAILS | No | Refuse sign-ups from known temporary-address domains (a vendored list of about 120k domains). | |
| DECISION_RETENTION_DAYS | No | Prune users' recorded decisions (accepts, rejects, edits Reelsaw learns from) older than this. They outlive deleted projects until then. 0 = keep forever. | |
| MAX_REQUESTS_PER_MINUTE | No | Changes (API mutations, MCP tool calls) an account may make per minute. 0 = unlimited. Admins can override per user on the Users page. | |
| LLM_CALL_TIMEOUT_SECONDS | No | Longest one model call may take (all its HTTP attempts together) before its step is stopped and retried. 0 = auto: 120 s for a hosted model, 600 s for a self-hosted one, and for a self-hosted transcription at least twice the chunk's audio length. Time spent waiting for a provider slot does not count. A slow CPU-only model may need more. | |
| LLM_USAGE_RETENTION_DAYS | No | Prune model and transcription usage rows older than this. 0 = keep forever. | |
| ALLOW_PRIVATE_SOURCE_URLS | No | Let link sources point at LAN or loopback hosts (a NAS). Off, they are blocked (SSRF guard). | |
| MAX_NEW_PROJECTS_PER_HOUR | No | Projects an account may create per hour. 0 = unlimited. | |
| MEDIA_LINK_RETENTION_DAYS | No | Delete revoked and expired share links this many days after they stopped working. 0 = keep forever. | |
| ADMIN_EVENT_RETENTION_DAYS | No | Prune the admin event log after this many days. 0 = keep forever. | |
| ALLOW_PRIVATE_WEBHOOK_URLS | No | Let webhook URLs point at LAN or loopback hosts (a self-hosted n8n next to Reelsaw), over http too. Off, they must be public https (SSRF guard). | |
| MAX_SIGNUPS_PER_IP_PER_DAY | No | Accounts one network address may create per day. 0 = unlimited. Needs TRUST_PROXY behind a reverse proxy. | |
| MAX_SOURCE_MINUTES_PER_DAY | No | Minutes of source video an account may add per day (UTC). 0 = unlimited. | |
| REQUIRE_EMAIL_VERIFICATION | No | New users must click the verification link before they can sign in. The link works for 24 hours and is single-use; an expired one offers a new send. Needs an email driver in .env. | |
| STAGE_IDLE_TIMEOUT_MINUTES | No | A stage made of checkpointed steps (finding moments) is stopped when no step has finished for this long; Retry continues where it stopped. 0 = auto: 1.5 times the model call timeout. | |
| MAX_SOURCE_MINUTES_PER_MONTH | No | Minutes of source video an account may add per period: its billing period when it has a plan, else the calendar month (UTC). 0 = unlimited. | |
| WEBHOOK_DELIVERY_RETENTION_DAYS | No | Delete webhook delivery log rows older than this. 0 = keep forever. | |
| EVENT_PROJECT_DONE_READY_EMAIL_DELAY_MINUTES | No | Minutes to wait after the first project in a batch finishes before emailing that the clips are ready, so several projects land in one note. Sent only when an email driver is set and the account has not come back since those projects finished. A project that finishes while a note is already waiting joins that note. |