Make music in your browser, turn loops into a song, and share the complete composition in one playable link. No account needed.
See the editor
Watch a recorded demonstration of opening a loop, renaming it, playing it, and copying its complete link. The video is silent. See the product overview.
Make, listen, and share
Compose. Open a musical starter or import MIDI, JSON, or a loop link. Place notes and drum hits, shape the mix, and turn variations into a song with Arrange sections.
Hear. Press Play to hear your instruments and mix. The first use of an instrument may need a download; nothing plays automatically.
Share. Choose Copy link to share the complete composition in one playable URL. In More, download Soundfish JSON to keep an exact copy, or Standard MIDI to work in other music software. Song downloads contain the whole arrangement.
Collaborate. Choose Edit with agent and describe the change. Chat agents return loop text; coding agents use the CLI for exact loop or song edits. Review the reply before opening a new playable link.
Browser and agent workflows
Human interface: Make music in the browser. Edit, play, mix, and keep loops in the browser. Library keeps loops and saved songs on this device. Optional sign-in syncs loops across devices; complete links and Soundfish JSON keep either composition portable.
Agent interface: A musical request and a reviewed reply. Choose Chat app for a loop draft without an install, or Coding agent for exact edits with the Soundfish skill and CLI. Copy the prompt, send it to your agent, and review the reply in Soundfish.
CLI interface: Commands for loops and songs. Run bunx @hraness/soundfish once, or install the soundfish command. Inspect and verify loops or songs, export either as JSON or MIDI, and orchestrate authorized local song imports through StemDeck and Basic Pitch.
Links and files
Soundfish is a browser editor and content-addressed URL protocol for editable 1–16-bar MIDI loops and self-contained song arrangements assembled from those loops. An editable loop stays in a self-contained soundfish.document/v1 fragment. Notes tracks and drums tracks are structurally distinct. MusicCID includes notes, track production, shared reverb and delay, and every automation point. Titles, IDs, lineage, display order, and the fixed MuseScore General plus SpessaSynth sound release stay outside MusicCID.
A read-only soundfish.arrangement/v1 song uses a #a1.… fragment and embeds every canonical loop child. Soundfish re-derives every child MusicCID and admits a deeply frozen verified document before local playback. The editor exposes an ordered section strip with full-song or selected section audition. Edit a copy detaches one child into a normal editable loop; the embedded source sections do not mutate. Arrange sections creates a new song copy with edited labels, repeats, order, and chosen parts. Choose Save song to keep the whole arrangement in Library on this device, or keep the new link or JSON. Optional sign-in sync is for loops.
The web More menu exports the complete current loop or song as lossless Soundfish JSON or interoperable Standard MIDI. Song MIDI retains tempo, tracks, instruments, notes, velocities, duration, and section markers; JSON or the complete URL remains authoritative for effects, automation, identities, lineage, and routing.
MusicCID. Addresses authored musical meaning: tempo, bars, typed tracks, events, production, effects, and automation. Titles, IDs, lineage, and display order stay outside it.
ArrangementCID. Addresses a song's expanded ordered child MusicCIDs and stable-track trajectories. Titles, section labels, repeat grouping, display order, and one consistent global track-ID rename stay outside it.
Transport digest. Covers the complete canonical loop or song payload. Renaming a loop preserves MusicCID, and renaming song sections preserves ArrangementCID, while either change updates the transported payload and this digest.
Sound release. Pins the current bank, renderer, graph, effects, limits, and defaults at runtime. It is inspectable, but it enters neither MusicCID nor ArrangementCID.
Saving and sharing
URL fragment. Browsers do not send the # fragment in an ordinary HTTP request. The fragment is not a secret: anyone who receives the complete URL can read the composition.
On-device library. The browser library uses IndexedDB and needs no account. Clearing Soundfish site data removes that local copy, so the complete URL remains the portable share and recovery artifact.
Agent providers. Provider-opening links carry neither the prompt nor the fragment. Pasting the prompt into a hosted agent sends the loop and CLI output to that provider; only a fully local, offline model and runner keep them on the device.
Optional services. Optional sign-in sync stores account-bound loop checkpoints. Production analytics sends one cookieless pageview without the query, fragment, composition, referrer, or account identity.
Questions
Do I need an account? No. Open, edit, play, save locally, and share without signing in. Sign-in is optional and syncs loops across devices. Saved songs stay on this device.
What does Soundfish cost? The hosted editor currently costs $0 and has no published paid plan or purchase flow. That current price is not a promise about future features or service levels.
Is a Soundfish link private? It is client-side during ordinary navigation, not confidential. Anyone with the complete URL can decode the composition, and a hosted agent receives it when you paste the handoff.
Does agent editing need a mutation API? No. The published CLI runs on a complete editable-loop Soundfish URL or local .soundfish text and returns another verified loop URL. It also inspects, verifies, and exports read-only songs. Soundfish exposes no unauthenticated hosted mutation endpoint for canonical documents.
Can I export a loop or song? Use Download Soundfish JSON for the complete loop or song model and Download MIDI for other music software. Song MIDI carries tempo, tracks, programs, notes, velocities, duration, and section markers; JSON or the complete URL retains effects, automation, identities, lineage, and arrangement routing.
Can the CLI turn a recording into a song? Yes, from authorized media. The local soundfish song import command orchestrates separately installed StemDeck and Basic Pitch tools and writes reviewable loop and song artifacts. Separation, analysis, and transcription are estimates, so audition and correct the result.
Does renaming change the music address? A loop or track rename changes its payload and transport digest but not MusicCID. A song or section rename likewise changes its payload and transport digest but not ArrangementCID, because titles are transport metadata rather than authored musical meaning.
Start with your agent
Open a starter or import a composition, then choose Edit with agent. Choose Chat app for a loop draft without an install, or Coding agent for exact edits with the Soundfish skill and CLI. The editor includes your current composition in the prompt. Copy it, paste it into your agent, then review the reply in Soundfish. Chat prompts cannot preserve IDs, lineage, or automation points; use the coding-agent workflow for automated loops and whole songs. Provider-opening links contain no composition. The agent guideexplains setup and what you share.
When to use Soundfish
Start a musical loop, import MIDI, build a song, collaborate with an agent, and share the complete composition in a link.
Use Soundfish to create, edit, play, or share a 1–16-bar MIDI loop, build a song from loop sections, or export Soundfish JSON and Standard MIDI. Notes, drums, mix, effects, and automation travel in a complete Soundfish link. The CLI can also help turn authorized media into local loop and song files for review.
## How to call Soundfish
- **Chat app:** open a loop, choose **Edit with agent**, select **Chat app**, and copy the prompt. Paste the returned loop text into **Paste from agent** to compile and review it. No install is needed; this compose workflow does not preserve IDs, lineage, or automation points.
- **Coding agent:** choose **Coding agent** to copy the exact loop or whole-song URL. Install the [Soundfish skill](https://sound.fish/skills/soundfish.zip) and the Bun CLI, inspect and verify the input, apply the edit, verify the output, and return one complete link. Start with `bunx @hraness/soundfish --help` or install with `bun add --global @hraness/soundfish`.
Provider links never carry the composition. A hosted agent receives it when you paste the prompt. There is no unauthenticated HTTP write for canonical documents; the public composition workflow uses local CLI commands and browser review, not a hosted mutation API, GraphQL endpoint, or MCP server.