Skip to content

CrabsoupStreaming engine for audio, video, live DJ, and automation

Scriptable using Lua, gapless playlists, crossfades, live DJ ducking, with support for Icecast, HLS, RTMP, MP4, and more.

What it looks like ​

A station is a Lua script. This is the whole thing:

lua
-- crabsoup.lua
set("sample_rate", 44100)
set("channels", 2)
set("crossfade_seconds", 3.0)    -- track-to-track overlap
set("duck_seconds", 1.5)         -- live DJ / jingle fade time

pl = playlist({directory = "./internal/media", shuffle = false, loop = true})
j  = jingles({directory = "./internal/jingles"})        -- telnet-triggered clips
live = input.harbor({port = 8005, mount = "/live", password = "dj"})
server.telnet({host = "127.0.0.1", port = 1234})

output.icecast({host = "localhost", port = 8000,
                mount = "/crabsoup.opus", format = "opus", bitrate = 128000,
                source_password = "hackme", name = "Crabsoup"},
               fallback({j, live, pl}))

fallback picks the first child that has audio — jingles while triggered, live DJ while connected, playlist otherwise. The getting started guide walks through the pieces.

MIT licensed