← Back to NoiseDrop

Compile a sentence into a soundscape.

NoiseDrop's engine turns natural language into a Scene Spec — a few hundred bytes of JSON naming which sound primitives to play and how loud. Your app renders it locally. We never stream you audio, so your cost per listening hour does not move when your user count does.

No audio egress A response is JSON, typically under 500 bytes. A million sessions is a million small JSON reads, not a million audio streams.
Deterministic and cacheable The same prompt always compiles to the same spec. Cache it forever, hash it, diff it, store it next to your own records.
No PRO licensing on our side These are ambient environment recordings and synthesised beds, not commercial music, so there is no ASCAP/BMI/SESAC performance royalty attached to what we hand you. Check your own jurisdiction before public playback.
It tells you what it cannot do Ask for a piano and you get an unavailable list back rather than a silent substitution.

Try it

windswept highland moor monks chanting in a mountain temple deep focus for writing soft piano in a jazz lounge
Press Compile.

“Render locally” is the point of the demo: this page holds no soundtrack. It reads the spec above, fetches only the primitives that spec names, and mixes them in your browser — exactly what your integration would do.

Endpoints

POST /api/v1/compile

curl -s https://www.noisedrop.app/api/v1/compile \
  -H 'Content-Type: application/json' \
  -d '{"prompt":"windswept highland moor"}'

A GET with ?prompt=… does the same thing, so you can try it in a browser tab.

{
  "specVersion": 1,
  "compiler": "noisedrop-compiler@0.1.0",
  "prompt": "windswept highland moor",
  "category": "wind",
  "fallback": false,
  "layers": [
    { "source": "windBlowing", "gain": 0.46, "role": "lead" }
  ],
  "unavailable": []
}

GET /api/v1/catalog

Every primitive a spec can reference, with its id, description, and category. Filter with ?category=transit. Read this before you integrate — it is also the honest list of what NoiseDrop can and cannot make.

curl -s https://www.noisedrop.app/api/v1/catalog

The Scene Spec

FieldMeaning
specVersionContract version. Additive changes keep this at 1; anything that could break a reader bumps it.
compilerWhich compiler produced this. Changes whenever output changes for an unchanged prompt — use it as a cache key.
categoryDemand bucket derived from the mix, not the wording. “rainy tokyo street” and “downpour outside my flat” land in the same one.
fallbacktrue when nothing in the prompt matched and a default bed was returned. Worth logging: it is a list of scenes we cannot yet make.
layers[].sourcePrimitive id from the catalog.
layers[].gainLinear gain, 01. Apply directly to a gain node or element volume.
layers[].rolelead, support, or accent. Drop accents first if you cannot play every layer.
unavailableThings the prompt asked for that the catalog cannot render. Show this to your user rather than pretending.

Layers arrive loudest-first, ties broken by id, so two identical scenes are byte-identical.

Where this is today

This is an early developer preview, published so integrations can be built against a real contract rather than a mock. Being concrete about the limits: