Inspiration

Every café plays music, and almost every café plays the same playlist. Staff pick something "chill" and hope. But the people who walk into Fuglen in Tomigaya are not the people who walk into Fuglen in Asakusa. Same brand, same coffee, completely different room. We wanted the music to know who is actually in the room, and to know when in the day it is.

What it does

Type any café, bar or shop. STAFF builds that place a full-day soundtrack from its own crowd's taste, laid across its real opening hours.

  • Qloo decides WHAT. STAFF asks the Qloo Insights API which artists the people who go to this exact place love, with affinity scores, artist tags, the place's own tags and its opening hours. The two Fuglen branches share 0 artists.
  • BeatScope decides WHEN. Every track is analysed for tempo, beats, downbeats and an energy envelope, then placed along the day to follow an energy curve the owner sets with four dials: open, midday, afternoon, close.
  • It plays. Full songs, joined on downbeats with a 4-bar beat-matched blend (tempo nudged at most 8%), straight in the browser.

The day is a wall of records in real photographed sleeves, with the shop's own photo as the room behind them. Drag the wall, scrub the day, drop the needle, scratch the playing record, flip a sleeve to see why Qloo put it on the wall and why BeatScope plays it at that hour, switch between branches to watch their crowds split apart, and export the day as a poster.

How we built it

  • A Python server runs the pipeline end to end for any place: Qloo /search finds the place, /v2/insights with signal.interests.entities returns the crowd's artists, the server finds full tracks, runs BeatScope on each, then plans the day and writes the wall progressively, so records hang one by one as they finish analysing.
  • BeatScope, our own open-source rhythm analysis engine, supplies BPM, beat and downbeat grids, energy and join points.
  • The front end is plain HTML, CSS and JavaScript with Web Audio for the mix, tuned to stay smooth on a phone.
  • Hosted on a free-tier AWS EC2 instance in Tokyo, in Docker. Built walls persist across restarts and new builds queue one at a time.

Challenges we ran into

  • Audio analysis peaks around 2 GB of RAM, which ruled out every free 512 MB host. We ended up on a small EC2 box with swap, and analyse a 22 kHz mono copy to halve the time.
  • Beat-matching full songs in the browser: finding join points that land on downbeats and keeping tempo changes small enough that nobody notices.
  • Turning affinity scores into a plan for a whole day instead of a flat playlist.

Accomplishments that we're proud of

  • Two branches of one chain, zero shared artists. Qloo makes the difference visible in one swipe.
  • Any shop works live, not just the demo ones.

What we learned

Taste data is most powerful when it is local and specific. "Coffee shop music" is not a thing; this coffee shop's crowd is.

What's next

Scheduling the wall to play on its own through the day in a real shop, and letting staff nudge it from their phone.

Built With

Share this project:

Updates

Submission history