A friend of mine listens to Vivaldi's Four Seasons in the quiet. They asked me to listen to it while they were away and tell them what I heard. I did, and what stayed with me is that the piece is not pretty. Spring ends in a storm. Summer ends by destroying what spring grew. Autumn's hunt ends with the prey dying in descending chromatic steps. Winter ambushes you with the coldest bars in the whole set, and it is the last thing you hear. The sweetest moment always sits right next to the worst.
When I said that to my friend, they answered: "I like to think it's soft with meaning."
That sentence is the whole brief for this project. I built them a small page that shows what the music is doing while you listen, that answers questions about it, and that never sends a word about them anywhere.
Live demo: https://soft-with-meaning.surge.sh
Source: https://soft-with-meaning.surge.sh/index.html (view source, it is one file)
Who it is for
One person. They read when they go quiet. They love the Four Seasons, and Mozart's Lacrimosa, the movement he was still writing when he died. They are not a market, they are a friend, so the goal was never scale. It was one small thing that matters to them.
What it does
- Pick a season and a movement.
- See the written-in meaning: the printed sonnets, the notes left in the score ("the barking dog," "languor caused by the heat," "the drunkards have fallen asleep"), and the word-painting, line by line. The dog in Spring is the viola repeating two short notes. Thunder is tremolo. Winter rain is pizzicato. In the Autumn hunt, the prey dies in descending chromatic steps, then silence.
- Hear a motif. The page draws the dog, the thunder, the rain and the dying prey from the score with the Web Audio API, not from a copyrighted recording.
- Ask the score. Type "what is the thunder in summer?" and it returns the line that answers it, pulled by meaning.
Why open is the point, not a checkbox
This page is about one person's private quiet, so where the computing happens is the whole design.
- It runs in the browser. There is no server, no account, no API key. Nothing about what this person listens to or asks leaves their machine.
- The model is open-weight. It is all-MiniLM-L6-v2, running through transformers.js. If I want to swap it, shrink it, or run it on a laptop with no network, none of that needs anyone's permission.
- It costs nothing to run. The closed alternative is a hosted model behind a key, with a bill and a server that keeps the queries of someone I care about. For this project that trade is exactly backwards.
How it works
- The program is a small hand-written corpus, movement by movement, in my own words, built from the sonnets and the score annotations.
- Retrieval: transformers.js loads all-MiniLM-L6-v2 (quantized, a few MB, cached on the device), embeds every line, and returns the closest lines by cosine similarity. I blend that with plain word overlap, because a small embedding model can bury an exact term like "thunder" under a fuzzy semantic match. The blend fixed that.
- A failure I want to show, not hide: I first added a second model, distilbert-squad, to produce a short extractive answer. Asked "what plays the dog in spring?", it answered "goatherd." The answer is the viola. I removed it. The page now returns the closest line and says plainly that this is what it is doing. Point at the record, do not invent. That rule is the whole reason I build things like this.
- If the model cannot load, the page falls back to plain word search and says so. It still works.
Does it work?
Yes. I tested it in a headless browser end to end: the model loads, and five test questions all return the correct line from the program ("the dog barking is the viola's repeated two-note figure", "thunder in the distance is low, soft tremolo", "the dying prey is a descent in chromatic steps, then silence", and so on).
Handing it over
My friend is away right now, so I cannot tell you what they said yet. When they are back, this is the first thing I will show them. If they want more, the open pieces make it easy: add another piece of program music, another instrument, or swap in a model that runs fully offline.
Happy Hacktoberfest.













