Fetch · File · Play

One stack, two halves.

The back is flacli, a command line any agent can drive: it fetches named songs, albums or whole playlists from Soulseek and files them as Artist/Album/NN - Title, with the bio, the wiki and the pictures beside the music. The front is Flaclify: it reads those files before asking any online provider, shows what the shell is doing, and drives it through the same commands an agent uses. Nothing is ever written into the player's database.

I

Files beside the music.

A bio under each artist, a wiki under each album — and most libraries have neither. Flaclify looks next to the files first. A text file is optional front matter between --- rules (attribution and url are used) followed by plain prose.

The file is handed to the provider chain as the starting document, so a refresh keeps its text and only fills in tags and images. It is read again whenever it is newer than the cached copy — an edit on disk shows on the next visit. The switch and the music directory live under Preferences → Integrations → Library files.

FileShown as
<Artist>/artist.mdthe artist's bio (or .wiki/<Artist>.md when the artist has no folder)
<Artist>/<Album>/wiki.mdthe album's wiki
<Artist>/artist.jpg · .png · .webpthe artist's picture
As flacli files it
Music/
└── Alice in Chains/
    ├── artist.md      ← the bio
    ├── artist.jpg     ← the picture
    └── Dirt/
        ├── wiki.md    ← the wiki
        └── 01 - Them Bones.flac
flacli wiki · flacli avatar → written
Flaclify → read, before any provider
II · Three read-only surfaces, fed by flacli --compact status
i

Incoming

In the sidebar: each playlist flacli is working on, with the job state and the counts that matter — downloading, done, candidates awaiting review.

ii

Ghost rows

In a synced playlist, the tracks flacli has not fetched yet: greyed, in their original positions, with the reason — not found, needs a decision, queued, skipped.

iii

Not in the library

Under an artist's discography, the studio albums and EPs MusicBrainz credits to the artist that the library lacks. Each carries a Get this.

All gated the same way: flacli on the PATH, its music_dir the folder MPD serves, the Nicotine+ bridge answering. Preferences → Integrations → flacli shows the verdict. Polled only while a job runs or downloads are in flight.

III

The shell's rules hold.

The player drives flacli through the CLI — get, sync, queue, review, approve, skip, cancel — and the rules the shell keeps for agents hold for the player too.

xNaming the music is the yes. MusicBrainz supplies names only; nothing is fetched that has not been named.
xA playlist is never queued until the totals have been seen: tracks, folders, size and users, before the yes.
xDoubtful matches are reviewed with the why the shell computed — title, artist, album and duration agreement — approve or skip per track.
xThe agent behind Ask flacli fetches on a plain request and stops before anything destructive, saying what it would run.

The shell itself: flacli.vercel.app · every fetch first checks that the Nicotine+ bridge answers · no Soulseek code lives in this repository