Skip to content

Configuration

System Requirements

Scrolly is a lightweight monolith — a single Node.js process serving the frontend, API, and running video downloads. It's designed to run comfortably on small VPS instances.

Minimum

ResourceRequirementNotes
CPU1 vCPUSufficient for small groups (5–10 users)
RAM512 MBNode.js (~100 MB) + FFmpeg spikes during downloads
Disk1 GB + video storage~500 MB for the app/dependencies, rest for media
OSLinux (x86_64 or arm64)Ubuntu 22.04+, Debian 12+, or any Docker-capable host
RuntimeNode.js 24+Included in Docker image
NetworkPublic IP + HTTPSRequired for push notifications
ResourceRequirementNotes
CPU2 vCPUsHandles concurrent video downloads without lag
RAM1 GBComfortable headroom for FFmpeg transcoding
Disk20–50 GB SSDVideos average 10–50 MB each; depends on group activity and retention policy

Software Dependencies

Included in the Docker image. For manual deployments, install these:

DependencyVersionPurpose
Node.js24+Application runtime
FFmpeg4.4+Media processing and thumbnail generation
Python 33.10+Required by some download providers

Download providers are installed at runtime by the host from the Settings UI — they are not bundled with or automatically installed by Scrolly. Installing a provider is an explicit opt-in action; by doing so, the host accepts responsibility for compliance with applicable laws and the provider's own license terms. See the Disclaimer for full details.

Storage Considerations

  • Video files are the primary storage consumer. A typical TikTok clip is 10–50 MB, longer YouTube videos can be 100+ MB.
  • Use the retention policy (Settings > Storage) to automatically delete old clips and reclaim disk space.
  • The storage cap setting prevents the group from exceeding a disk budget.
  • SQLite database is negligible in size (typically under 10 MB even with thousands of clips).
  • Monitor disk usage with docker system df or check the group stats in Settings.

Environment Variables

Scrolly is configured via environment variables. Copy .env.example to .env and fill in the values.

Required Variables

VariableDescription
SESSION_SECRETSecret key for signing session cookies. Use a long random string.
TWILIO_ACCOUNT_SIDYour Twilio account SID
TWILIO_AUTH_TOKENYour Twilio auth token
TWILIO_VERIFY_SERVICE_SIDYour Twilio Verify service SID (used for phone verification)
PUBLIC_APP_URLPublic URL of your instance (e.g. https://scrolly.example.com). Required for CSRF, webhooks, and invite links.

Push Notifications

Generate VAPID keys with npx web-push generate-vapid-keys, then set:

VariableDescription
VAPID_PUBLIC_KEYPublic VAPID key
VAPID_PRIVATE_KEYPrivate VAPID key
VAPID_SUBJECTContact URL or mailto (e.g. mailto:you@example.com)

Push notifications won't work without these. The app will still function, but users won't receive real-time alerts.

Optional Variables

VariableDefaultDescription
PORT3000Port the server listens on
HOST0.0.0.0Host to bind to
VERIFY_CHANNELSsmsComma-separated verification channels (e.g. sms, email)
SMS_DEV_MODEfalseSet to true to bypass Twilio and auto-approve any verification code (dev/testing only)
GIPHY_API_KEYGiphy API key for GIF search in comments. Get one at developers.giphy.com
DATA_DIR./dataDirectory for database and media files
LOG_LEVELinfoLogging level (trace, debug, info, warn, error, fatal)
BACKUP_RETENTION_COUNT7Number of daily database backups to keep
RATE_LIMITINGfalseSet to true to enable API rate limiting. Recommended for public-facing deployments.
VERBOSE_REQUESTSfalseEnables detailed per-request logging (IP, user-agent, headers, query params). Sensitive values are redacted. Useful for debugging proxy/network issues.
ADDRESS_HEADERHeader name for reading real client IP from reverse proxy (e.g., X-Forwarded-For). Required behind a proxy for correct rate limiting.
XFF_DEPTH1Number of trusted proxies to skip when reading client IP from proxy headers. Set to 1 for a single proxy.
PUBLIC_TERMS_URLURL to your Terms of Service (shown in SMS consent text)
PUBLIC_PRIVACY_URLURL to your Privacy Policy (shown in SMS consent text)
DOMAINDomain for Caddy HTTPS (used with docker-compose.caddy.yml)

Twilio Setup

  1. Create a Twilio account
  2. Create a Verify service in the Twilio console
  3. Add the account SID, auth token, and Verify service SID to your .env

Twilio is used for phone verification only — SMS codes during onboarding and login. Clip sharing is handled in-app, via Android share target, or iOS Shortcut.

Data Storage

Scrolly stores all data locally:

  • Database: SQLite file at data/scrolly.db
  • Media: Videos, audio, and thumbnails in data/videos/

In Docker, this is persisted via a named volume. For manual deployments, ensure the data/ directory exists and is writable.

Released under the MIT License.