CYYX63ZWTQKTDWQ3VHXCD6OHLJDQBGGYGIQSCCTVPQPL7VJ4MTZAC AJD4ARTC6CE3GZDCRJD6Q6OFHJMBOXD6W4H445BD6R7QVZQBIBVQC DBOROCRFD6A5SJBMFYFEJI5S5M77X4EFEK6KDQWA5QDMQJKIHRWQC 2TDG53JBZHZA6ZPYONPINKVDV4UXLP4T4CI5C2MEZIIYO7DQE5RAC FRY33K6EGWLU3F5NJJ66AT5RBV6OEOWSDKY3JH2CPKKGPAHOMM6AC U6JEEU5O477ZOJ5UMRMOJSGPEJEU6Q7KMPKUSDF56CYVUJWL7QBQC EW7VBNMGWFBC73ZUDLB4LIK2HWFKA74ZUTUDG4J575ZQHEFHW4UQC 5KIKDA72HM6JFIPKOWGLM2EO7D5PTSK7WEVYV3YZWGMG3M34PJXQC XLL6JFARO2VSNEOJQPXPKZLYYYF7XQGBCR2QJSIFF2RKYZKI25LAC 22FIUBOFKBIV3WINZUSBKJO526K52HQV3V33B3DRS6CQWHU5HFPAC ULWBYMSXYZEE7BJQ2B4HTX2JAABBNJWZTUFIQ56NF5RWXODXRTHQC if m.protocol() != utils.ProtocolKitty {return inlineImageCmd(m.state, m.protocol(), *m.imageGen, m.imageGen)}return nil
return inlineImageCmd(m.state, m.protocol(), *m.imageGen, m.imageGen)
// For inline protocols (sixel/iTerm2): sequence clear screen then write image (runs after View renders).// For kitty: just clear screen (kitty images are managed in View).
// Clears screen then generates and writes the spectrogram image asynchronously.
if m.protocol() != utils.ProtocolKitty {(*m.imageGen)++gen := *m.imageGenreturn tea.Sequence(tea.ClearScreen, inlineImageCmd(m.state, m.protocol(), gen, m.imageGen))}return tea.ClearScreen
(*m.imageGen)++gen := *m.imageGenreturn tea.Sequence(tea.ClearScreen, inlineImageCmd(m.state, m.protocol(), gen, m.imageGen))
// Clear kitty images from previous render (sixel is handled via commands)if m.protocol() == utils.ProtocolKitty {utils.ClearKittyImages(&b)}
// Spectrogram image at bottom (kitty only — inline protocols are written via command)if m.protocol() == utils.ProtocolKitty {m.renderSpectrogram(&b, df.FilePath, seg)}
}// renderSpectrogram generates and outputs a spectrogram image via kitty protocolfunc (m Model) renderSpectrogram(b *strings.Builder, dataPath string, seg *utils.Segment) {img := generateSpectrogramImage(m.state, dataPath, seg)if img == nil {b.WriteString("[error generating spectrogram]")return}utils.WriteKittyImage(img, b)