A provider-neutral, browser-based now-playing display.
Turn live playback metadata into a responsive visual with artwork, attribution, long-text motion, accessible status updates, and honest connection states.
- Spotify tracks and podcast episodes with provider attribution and destinations.
- Native Local playback on supported x86-64 Linux and Windows hosts.
- Responsive layouts from
320through7680pixels. - Artwork transitions, long-text motion, and reduced-motion behavior.
- Explicit authorization, empty, unsupported, reconnecting, stale, and failure states.
- Browser-owned Spotify PKCE credentials; no client secret or playback history on the host.
| Provider | Route | Use |
|---|---|---|
| Spotify | /spotify/ |
Live Spotify playback through browser-based PKCE. |
| Local | /local/ |
Playback selected by the paired native service. |
| Fake Music | /fake/ |
Memory-only development and demonstration provider. |
You need a public HTTPS origin, a Spotify Developer application, and Docker or Nix. Register the exact callback:
https://display.example/spotify/
Create config.json:
{
"spotify": {
"clientId": "public-client-id",
"redirectUri": "https://display.example/spotify/"
}
}Run the published image:
docker pull alsilawr/phrasic:latest
docker run --rm --publish 127.0.0.1:8080:8080 \
--mount type=bind,src="$(pwd)/config.json",dst=/app/config.json,readonly \
alsilawr/phrasic:latestPut the container behind the HTTPS-owning reverse proxy for your public origin. Do not add a Spotify client secret or publish the container directly on a public interface. See the deployment guide for the complete configuration and host boundary.
On x86-64 Linux, the Nix flake installs the hosted server and the complete Local playback path:
nix profile add github:alsi-lawr/phrasic
phrasic serve ./phrasic.tomlThe same profile provides phrasic-host for hosted deployment. Set
PHRASIC_CONFIG_PATH to the public JSON configuration before starting it.
ARM64 Linux exposes the hosted-only package as
github:alsi-lawr/phrasic#host.
Open the setup URL, select Connect Spotify, and complete authorization in that browser profile:
https://display.example/spotify/?width=1920&setup=1
Then use the display without setup=1. Phrasic works in a browser window, web
view, signage surface, stream compositor, or browser-source implementation.
| Parameter | Value |
|---|---|
width |
An integer from 320 to 7680. |
setup |
1 to show setup controls. |
For native playback, see Local playback.
Phrasic displays metadata only. It does not play, record, or redistribute audio.
