Local-first desktop app

Turn a sentence into a researched playlist.

Describe what you want to hear. Playlist Forge uses OpenAI's Responses API with web search to assemble a coherent, intentionally ordered tracklist of real recordings — then you review and revise it track by track before handing it to your streaming service.

No account No telemetry No network listener Key stays in your OS keychain
A finished playlist in Playlist Forge: the title 'Prismatic Transients', a description of its sequenced arc, a cost estimate, and a tracklist where each track carries a rationale and a recording note, beside a refinement panel.

A finished playlist: the arc, a per-track rationale and recording note, and the run's cost — every track reviewable before you hand it off.

How it works

From a prompt to your library in four moves.

Every operation is deliberate, and every change is kept — nothing is silently overwritten.

1

Describe

Write a brief, pick 20–100 tracks and a reasoning effort, and optionally point to earlier playlists for inspiration.

2

Generate

It researches and orders the tracklist, then shows the title, description, per-track rationale, and a cost estimate.

3

Revise

Remove a track, request a single replacement, or refine the whole playlist. Each operation writes an immutable local revision.

4

Hand off

Generate a temporary Soundiiz import link and complete the transfer to TIDAL, Qobuz, Spotify, or Apple Music.

What you get

Built to be trusted with your listening.

A single Go binary running on the native webview — no server, no bundled runtime, no database service.

Prompt to playlist

A natural-language brief becomes a titled, ordered playlist of 20–100 tracks, each with a rationale and recording/version notes.

Every edit is a revision

Remove, replace, or refine — nothing is overwritten. History stays browsable so you can always see how a playlist evolved.

Grounded, not guessed

The model is instructed to verify tracks and requested versions with web search, and to avoid invented recordings.

Transparent cost

Each request shows an estimated USD cost from reported token and web-search usage against a versioned rate card.

Private by default

Your OpenAI key lives in the OS credential store — never in the playlist database, never returned to the frontend.

Local-first

No account, no telemetry, no network listener. Data lives in your OS-standard application directory in a local SQLite file.

Bring your own

Mirror the playlists you already have.

Connect TIDAL or Qobuz to browse your existing playlists, reuse them as inspiration, or hand them to Soundiiz. Read-only — Playlist Forge never writes back to your streaming account — and it uses no OpenAI credit.

Connect once

TIDAL approves in your real browser; Qobuz signs in inside a small window. Session tokens sit in your OS credential store, never in the database.

Browse & reuse

Imports are read-only snapshots grouped by origin, with a badge for every place a playlist lives. Preview any of them, or pick them to seed a new brief.

Reload on demand

Refresh the mirror as a cancellable background job. Connections are re-checked automatically, with a clear prompt to reconnect if one expires.

Install

Download a build and launch it.

It opens its own window and does not listen on a network port. Every platform is built for both x86-64 and ARM64.

Windows

  • NSIS installer, -setup.exe — Winget-ready
  • Portable .exe — download and run, no install
  • x64 and ARM64

macOS

Linux

  • .deb, .rpm, .AppImage per architecture
  • Needs GTK 3 and WebKitGTK 4.1
  • The .deb/.rpm declare the dependency

macOS and Windows release builds are unsigned. On macOS, Gatekeeper blocks the first launch — opening the unsigned macOS build covers the one-time bypass.

Prefer to build it yourself? Playlist Forge is a Wails v3 app. With Go 1.27+, Node 24, and pnpm: pnpm --dir web run build then go build. Full instructions and the release workflow are in the README.
Security invariants

Your credentials never leave your machine.

Playlist Forge sends only what a handoff needs — titles and artist names — and nothing else.

  • The OpenAI base URL is fixed to api.openai.com; no environment variable can redirect it.
  • The Soundiiz endpoint is fixed, redirects are not followed, and a returned handoff URL must match the exact HTTPS host and path or it is rejected.
  • Soundiiz receives only the accepted playlist title, description, track titles, and artist names — never streaming credentials.
  • User text is rendered without raw HTML; every external URL is validated before it is opened.
  • Console logs redact key-shaped values. Prompts and tracklists are logged only at debug level.
  • The API key is never written to playlists.db and never returned to the frontend.