Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Configuration

Nightingale stores app settings in ~/.nightingale/config.json.

Data Storage

During setup, you can choose a custom data folder. Most runtime data lives in that selected folder. In v0.8.0, cache, videos, models, and vendor tools can also move into separate folders from the settings page. config.json and nightingale.log remain in the default ~/.nightingale path.

Typical selected data folder layout:

<selected-data-folder>/
├── cache/               # Stems, transcripts, lyrics, shifted variants, covers, playable videos
├── songs.db             # Song library and analysis metadata (SQLite)
├── profiles.json        # Player profiles and scores
├── videos/              # Cached Pixabay video backgrounds
├── sounds/              # Sound effects
├── vendor/
│   ├── ffmpeg           # Downloaded ffmpeg binary
│   ├── uv               # Downloaded uv binary
│   ├── python/          # Python 3.10 installed via uv
│   ├── venv/            # Virtual environment with ML packages
│   ├── analyzer/        # Extracted analyzer Python scripts
│   └── .ready           # Marker indicating setup is complete
└── models/
    ├── torch/           # Demucs model cache
    ├── huggingface/     # WhisperX model cache
    └── audio_separator/ # UVR Karaoke model cache

Video Backgrounds

Pixabay video backgrounds use the Pixabay API. In development, create a .env file at the project root with:

PIXABAY_API_KEY=your_key_here

Theme

Toggle between dark and light themes from the sidebar. The theme preference is saved in the config.

White theme

Notable Settings

config.json is written by the app — you’ll usually change these from Settings rather than by editing the file directly. In v0.8.0, settings moved from a modal into a dedicated page with General and Analysis tabs. A few keys worth knowing:

KeyPurpose
asr_engineSelects the transcription engine. whisper (default) or parakeet. See Lyrics & Transcription.
align_backendForced-alignment backend. whisperx (default, Python Viterbi), ctc (torchaudio forced_align C++/CUDA kernel; faster), or qwen (Qwen3-ForcedAligner-0.6B; 11 languages incl. CJK, runs on CUDA/MPS/CPU). All non-default backends fall back to WhisperX on error or unsupported input. See Lyrics & Transcription.
separatorStem separation model: karaoke (UVR, default) or demucs.
vocal_detection_threshold_pctRMS threshold (fraction of the loudest window, 0.01.0, default 0.15) that marks where vocals start and end. Lower values keep more quiet intros/outros and soft singing; higher values trim more silence. Shown in Settings as Vocal detection sensitivity (0–60%).
whisper_modelWhisper model size: large-v3 (default), large-v3-turbo, medium, small, base, tiny. Ignored when asr_engine is parakeet.
beam_size / batch_sizeDecoder beam width and batch size for Whisper. Higher values are more accurate but slower and use more VRAM.
mic_monitor_gainLive monitor gain when mic monitoring is on. Range 0.02.0 (slider shown as 0–200%). Configs from older builds that used mic_mirror_gain are read transparently and migrated on next save.
mic_latency_compensation_secSpeaker-to-mic latency compensation for pitch scoring. Tune manually or use the Settings latency test.
mic_active / mic_monitoring / preferred_micMicrophone state and the device chosen for scoring + monitoring. Older mic_mirroring configs are accepted and migrated on next save.
lyrics_vertical_position / lyrics_horizontal_positionPlayback lyrics placement. Vertical: top, center, bottom; horizontal: left, center, right.
auto_analyzeWhen true, scans automatically queue every unanalyzed song after they finish.
cache_pathsOptional per-folder overrides for songs, videos, models, and vendor. Use Settings to move them so existing contents migrate safely.
last_video_flavorIndex of the last-used Pixabay video flavor (Nature, Underwater, Space, City, Countryside).
last_themeIndex of the last-used playback background (shaders → video → source).
language_overridesPer-song forced ASR language, keyed by song hash. Set this from the song-list controls.
data_pathSelected data folder root. Set during first-run setup.