ComfyUI Node
Song Analyzer (SongScribe)
Extract a structured music caption, lyrics and duration from an audio file. Measured values (BPM, key, dynamics, section map) come from DSP analysis and are never guessed.
Song Analyzer (SongScribe)
- audio
- caption
- lyrics
- duration
- duration_int
- duration_str
- analysis
◄audio_file▾►
◄describeclap►
◄genre_sourceclap►
◄clap_modelmusic_and_speech►
◄transcribe_lyricsoff►
◄whisper_modelbase►
◄stylebalanced►
◄use_cachetrue►
◄seed0►
CategorySongScribe
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| audio_file | COMBO | 1 options: (use AUDIO input) | |
| describe | COMBO | clap | Score genre, mood, instruments and vocal character with CLAP (CPU, no GPU needed). The first run downloads a ~600 MB model. 'off' emits measured facts only. |
| genre_source | COMBO | clap | Where genre comes from. 'maest' is a supervised tagger trained on 400 Discogs styles and is markedly more accurate than CLAP's zero-shot guessing, but it executes custom model code (trust_remote_code) from a pinned, audited revision - opt in knowingly. 'off' omits genre so a preset can supply it. |
| clap_model | COMBO | music_and_speech | Which CLAP checkpoint scores the descriptors. Downloaded on first use: 'music_and_speech' ~1.5 GB (music-specialised, better on genre), 'general' ~1.9 GB (broader audio, weaker on genre). Ignored when describe is off. |
| transcribe_lyrics | COMBO | off | Transcribe sung lyrics with Whisper when the file carries none. CPU, slow, and sung ASR is markedly worse than speech - expect to hand-fix the result. Embedded tags and .lrc files are always preferred over this. |
| whisper_model | COMBO | base | Larger is more accurate and much slower. Only used when transcribe_lyrics is enabled. |
| style | COMBO | balanced | How literally the caption reproduces the track. 'verbatim' keeps exact section timings (closest clone); 'balanced' keeps tempo and key; 'loose' gives genre, mood and texture only. |
| use_cache | BOOLEAN | true | Reuse a previous analysis of the same file instead of recomputing it on every queue. |
| seed | INT | 00–18446744073709550000 | Varies caption phrasing without re-analysing the audio. |
| audioopt | AUDIO | Analyse audio from an upstream node. Takes priority over the file dropdown when connected. |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| caption | STRING | Three-section caption (Global Metadata / Vocal Details / Arrangement). |
| lyrics | STRING | Lyrics from embedded tags or a sidecar .lrc/.txt, if present. |
| duration | FLOAT | Duration in seconds - wire straight into max_duration. |
| duration_int | INT | Duration rounded to whole seconds. |
| duration_str | STRING | Duration formatted as m:ss. |
| analysis | SONGSCRIBE_ANALYSIS | Full analysis payload for downstream SongScribe nodes. |