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.
unavailable list back rather than a silent substitution.
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.
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": []
}
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
| Field | Meaning |
|---|---|
specVersion | Contract version. Additive changes keep this at 1; anything that could break a reader bumps it. |
compiler | Which compiler produced this. Changes whenever output changes for an unchanged prompt — use it as a cache key. |
category | Demand bucket derived from the mix, not the wording. “rainy tokyo street” and “downpour outside my flat” land in the same one. |
fallback | true 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[].source | Primitive id from the catalog. |
layers[].gain | Linear gain, 0–1. Apply directly to a gain node or element volume. |
layers[].role | lead, support, or accent. Drop accents first if you cannot play every layer. |
unavailable | Things 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.
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: