* feat(docs): improve search UX
- Hide the 'Search by Pagefind' branding in the search dialog footer
- Replace the 'No results found.' message shown before any query with a
friendly hint (detected via empty-input :placeholder-shown state)
- Tune placeholder, empty-state, and results-heading copy; show a few
sub-section matches per result (pageResultCount)
* docs: replace double-dash em-dash substitute with single dash
Swept prose ' -- ' to ' - ' and numeric ranges (e.g. 2--20 to 2-20)
across the documentation. CLI flags and code blocks left untouched.
* fix(landing): show colored category icons on modality tool pages
The /tools/<modality>/ pages rendered bare name+description cards with no
icon or color. Port the colored, category-tinted icon card from /tools/
so modality pages match the main catalog (icon, tint, 'Learn more').
All SnapOtter environment variables with defaults. Configure auth, storage, AI models, analytics, and more.
Configuration
All configuration is done through environment variables. Every variable has a sensible default, so SnapOtter works out of the box without setting any of them.
Environment variables
Server
Variable
Default
Description
PORT
1349
Port the server listens on.
RATE_LIMIT_PER_MIN
0 (disabled)
Maximum requests per minute per IP. Set to 0 to disable rate limiting.
CORS_ORIGIN
(empty)
Comma-separated allowed origins for CORS, or empty for same-origin only.
LOG_LEVEL
info
Log verbosity. One of: fatal, error, warn, info, debug, trace.
TRUST_PROXY
true
Trust X-Forwarded-For headers from a reverse proxy. Set to false if not behind a proxy.
Authentication
Variable
Default
Description
AUTH_ENABLED
false
Set to true to require login. The Docker image defaults to true.
DEFAULT_USERNAME
admin
Username for the initial admin account. Only used on first run.
DEFAULT_PASSWORD
admin
Password for the initial admin account. Change this after first login.
MAX_USERS
0 (unlimited)
Maximum number of registered user accounts. Set to 0 for unlimited.
SESSION_DURATION_HOURS
168
Login session lifetime in hours (default is 7 days).
SKIP_MUST_CHANGE_PASSWORD
-
Set to any non-empty value to bypass the forced password-change prompt on first login
Storage
Variable
Default
Description
STORAGE_MODE
local
local or s3. Only local storage is currently implemented.
/data (app) - AI models, Python venv, and user files. Mount this to keep uploaded files and installed AI bundles across restarts.
/tmp/workspace (app) - Temporary storage for files being processed. This can be ephemeral, but mounting it avoids filling up the container's writable layer.
SnapOtter-pgdata (postgres) - PostgreSQL data directory. This holds all relational data (users, settings, pipelines, jobs, audit log). Back up via pg_dump or volume snapshot.
SnapOtter-redisdata (redis) - Redis append-only file for durable job queues.