Skip to main content

Configuration reference

Every Scryon configuration knob is an environment variable. They all have safe defaults so a vanilla ./mvnw spring-boot:run works on a developer laptop. Production deployments override what they need.

The source of truth is src/main/resources/application.yml in scryon-backend.

Core

VariableDefaultNotes
SERVER_PORT8080HTTP listener port.
DB_URLjdbc:postgresql://localhost:5432/scryonJDBC URL.
DB_USERNAMEscryonDB user.
DB_PASSWORDscryonDB password.
FLYWAY_ENABLEDtrueSet to false only for the H2 test profile.
MAX_FILE_SIZE50MBHard cap per uploaded recording.
MAX_REQUEST_SIZE55MBMAX_FILE_SIZE + room for the metadata envelope.

Security

VariableDefaultNotes
SCRYON_API_KEY(empty)Optional shared-secret header. If unset the guard is off — local dev only.
FIREBASE_PROJECT_ID(empty)When set, every /api/** request needs a valid Firebase ID token.
FIREBASE_CLIENT_EMAIL(empty)Service-account client email — enables Admin SDK verification. Also the credential push notifications reuse — no separate FCM config.
FIREBASE_PRIVATE_KEY(empty)PEM-encoded service-account private key.
SCRYON_CORS_ALLOWED_ORIGINS(empty)Comma-separated allowlist. Empty = no CORS headers.

Admin

VariableDefaultNotes
SCRYON_ADMIN_ALLOWED_EMAILS(empty)Comma-separated, case-insensitive email allowlist. Empty = nobody is admin. See Admin console.

Observability

VariableDefaultNotes
SCRYON_OBSERVABILITY_ENABLEDtrueMaster switch.
SCRYON_REQUEST_LOGGING_ENABLEDtrueStructured HTTP access log.
SCRYON_PIPELINE_LOGGING_ENABLEDtruePer-stage event=PIPELINE log lines.
SCRYON_DEBUG_ENDPOINTS_ENABLEDfalseOwner-scoped /api/debug/calls/{id}/events.
SCRYON_TRACING_ENABLEDfalseMicrometer Observation spans.
MANAGEMENT_TRACING_ENABLEDfalseSpring Boot tracing facade.
OTEL_EXPORTER_OTLP_ENDPOINT(empty)OTLP collector URL.
OTEL_TRACES_SAMPLER_ARG0.1Trace sampling probability.
SENTRY_DSN(empty)Sentry project DSN. Empty = no events sent.
SENTRY_ENVIRONMENTlocalTags Sentry events.
SENTRY_TRACES_SAMPLE_RATE0.1Sentry performance sampling.
MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDEhealth,info,metrics,prometheusActuator exposure list.

Privacy

VariableDefaultNotes
REDACT_TRANSCRIPTStrueRedact transcript text from INFO logs.

The hard rule "Scryon never persists raw audio" is enforced in code, not config. There is no env var to disable it.

Transcription (Lemonfox)

VariableDefaultNotes
LEMONFOX_API_KEY(empty)Required.
LEMONFOX_BASE_URLhttps://api.lemonfox.ai/v1Override for self-hosted.
LEMONFOX_MODELwhisper-1Whisper variant.
LEMONFOX_LANGUAGE(auto)ISO-639-1 hint. Empty = autodetect.
LEMONFOX_TIMEOUT_SECONDS180Per-request timeout.
SCRYON_TRANSCRIPTION_CALLBACK_ENABLEDfalseAsync webhook mode.
SCRYON_PUBLIC_BASE_URL(empty)Required when callback mode is on.
SCRYON_WEBHOOK_SECRET(empty)≥ 32-byte HMAC secret for webhook URL signing.
SCRYON_TRANSCRIPTION_CALLBACK_TIMEOUT_MINUTES30Sweep stuck callbacks after this.

Diarization (pyannoteAI)

VariableDefaultNotes
PYANNOTE_ENABLEDfalseMaster switch. Fallback to Lemonfox built-in diarization when off.
PYANNOTE_API_KEY(empty)Required when enabled.
PYANNOTE_BASE_URLhttps://api.pyannote.ai
PYANNOTE_MODELprecision-2
SCRYON_DIARIZATION_TIMEOUT_SECONDS300Polling deadline.
SCRYON_DIARIZATION_POLL_INTERVAL_SECONDS5Job poll cadence.
SCRYON_DIARIZATION_MAX_RETRIES2Network + 5xx retries.
SCRYON_DIARIZATION_MAX_AUDIO_MINUTES30Skip pyannote above this (cost/latency guard).
SCRYON_DIARIZATION_HINT_TWO_SPEAKERStrueSend numSpeakers: 2 for phone calls.

Voice embedding (opt-in)

VariableDefaultNotes
SCRYON_VOICE_EMBEDDING_ENABLEDfalseMaster switch. APIs 404 when off.
SCRYON_VOICE_EMBEDDING_PROVIDERpyannoteReuses pyannote credentials.
SCRYON_VOICE_EMBEDDING_HIGH_THRESHOLD0.85Score ≥ ⇒ HIGH match.
SCRYON_VOICE_EMBEDDING_MEDIUM_THRESHOLD0.75Score ≥ ⇒ MEDIUM match.
SCRYON_VOICE_SAMPLE_MIN_SECONDS15Reject samples below.
SCRYON_VOICE_SAMPLE_MAX_SECONDS45Reject samples above.
SCRYON_VOICE_SAMPLE_MAX_SIZE_MB10Hard file-size cap.
SCRYON_VOICE_CONSENT_VERSIONv1Bump to require re-consent.

Audio preprocessing

VariableDefaultNotes
SCRYON_AUDIO_PREPROCESSING_ENABLEDtrueMono + 16 kHz + loudnorm pipeline.
SCRYON_FFMPEG_PATHffmpegOverride for non-PATH installs.
SCRYON_AUDIO_PREPROCESSING_OUTPUT_FORMATwavOutput container.
SCRYON_AUDIO_PREPROCESSING_TIMEOUT_SECONDS60Per-file ffmpeg timeout.
SCRYON_AUDIO_DENOISE_ENABLEDtrueHigh-pass + FFT denoise before loudnorm.
SCRYON_AUDIO_HIGHPASS_HZ80HVAC rumble cutoff.
SCRYON_AUDIO_DENOISE_NR_DB12Noise reduction strength (dB).
SCRYON_AUDIO_DENOISE_NOISE_FLOOR_DB-25Estimated noise floor.

LLM (analysis)

VariableDefaultNotes
LLM_PROVIDERopenai
LLM_API_KEY(empty)Required.
LLM_BASE_URLhttps://api.openai.com/v1
LLM_MODELgpt-4o-mini
LLM_TIMEOUT_SECONDS120
LLM_TEMPERATURE0.2

Object storage

VariableDefaultNotes
OBJECT_STORAGE_PROVIDERlocallocal or s3.
OBJECT_STORAGE_BUCKET(empty)S3 bucket name.
OBJECT_STORAGE_ENDPOINT(empty)S3-compatible endpoint URL.
OBJECT_STORAGE_REGIONauto
OBJECT_STORAGE_ACCESS_KEY(empty)
OBJECT_STORAGE_SECRET_KEY(empty)
OBJECT_STORAGE_PATH_STYLE_ACCESStrueDisable for path-aware AWS S3.
OBJECT_STORAGE_LOCAL_PATH./var/storageUsed only when provider = local.
OBJECT_STORAGE_TEMP_AUDIO_TTL_HOURS24How long temp audio survives before sweep.

Plans & billing

Unlike every other section on this page, these are Java-code defaults (ScryonProperties.Plans), not env vars — there's no application.yml entry wiring an SCRYON_PLANS_* variable to any of them today. Spring's relaxed binding would pick one up if it were added, but don't assume one exists just because the pattern elsewhere on this page suggests it. To change these values today, edit ScryonProperties.Plans and redeploy.

SettingDefaultNotes
Free — minutes/month150
Free — transcripts/day3
Pro — price999 (cents)
Pro — minutes/month1000
Pro — overage rate0.025 ($/min)Tracked, never blocks.
Top-up SKUstopup_60min / topup_150min / topup_400minSee Plans & billing for the full grant/price table.

Whether any of this is actually enforced is a separate, run-time switch — see billing_enabled under Admin console.

Async / background jobs

VariableDefaultNotes
SCRYON_STALE_JOB_TIMEOUT_MINUTES15Mark jobs FAILED after this.
SCRYON_SWEEP_INTERVAL_MS300000Sweeper period.
SCRYON_SWEEP_INITIAL_DELAY_MS60000Startup delay.