Remember. Mix. Keep it local. — your music, your moments, your archive.
Highlights · Live Demo · Player · Moments · Smart Mixes · Setup · Support
A music player that remembers. One click saves a Moment; one sentence builds a Mix. Local-first by design — your audio never leaves the browser.
Echo89 modernizes the compact desktop player: a cinematic custom UI, readable controls, a real queue, local playlists, one-click Moments, Smart Mixes, and mood-to-mood Journey Mixes — all powered by a deterministic, local engine.
The three pillars:
- 🎵 Remember — one click captures the song, mood, and moment without breaking playback.
- 🎚️ Mix — Smart Mixes from a sentence; Journey Mixes from mood to mood. AI is optional.
- 🔒 Local-first — audio, artwork, and memories stay in your browser. No accounts, no analytics.
| 🎚️ Cinematic player | 🧠 One-click Moments | 🎛️ Smart Mixes |
| HTMLAudioElement + Web Audio viz/equalizer, persistent queue, 3 themes. | Save song, mood, timestamp, artwork — no form, no pause. | Sentence → validated intent → deterministic local track selection. |
| 🗺️ Journey Mixes | 📚 Local playlists | ⌨️ Command bar |
| Mood→mood routes with Short/Medium/Long. | Create, reorder, dedupe, queue, "Re-import required" safety. | Ctrl/Cmd+K for real product actions, never deletes blindly. |
| 🔎 Artwork matching | 🧬 Memory DNA | 🔒 Private by default |
| Embedded → MusicBrainz → iTunes/Cover Art, SSRF-hardened proxy. | Deterministic local mood/scene/emotion profiles. | No cloud audio, no analytics, no third-party trackers. |
Try it now: echo89.vercel.app
Echo89's cinematic player in action.
Echo89 is designed around two simple actions:
- Saving a moment takes one click.
- Creating a mix takes one sentence.
The music player stays central. Memory intelligence quietly improves rediscovery and mixing without making the user complete a diary form.
Classic local players were fast and personal, but their tiny controls, separate tool windows, and file-only organization aged poorly. Echo89 keeps playback controls, a queue, equalizer, visualization, local files, themes, and compact-player personality while presenting them as one responsive 2026 interface.
- Native
HTMLAudioElementplayback with Web Audio visualization and equalizer - Seek, previous/next, play/pause, shuffle, repeat, volume, and mute
- Persistent player instance across Player, Library, Mixes, and Moments
- Local multi-file import and IndexedDB persistence
- Embedded metadata and cover extraction
- Automatic MusicBrainz matching for coverless files
- Cover images cached as IndexedDB Blobs after a successful match
- Queue controls and local playback source labels
- Three switchable Echo89 themes
Press Remember this while a song plays. Echo89 immediately saves:
- current song and artist
- album and available artwork
- playback timestamp
- current date and approximate time
- an honest default title
- deterministic local Memory DNA
Playback never pauses and no form blocks the player. A small confirmation lets the user optionally add a short note or open Add details.
The advanced editor preserves optional title, note, moods, date, time, place, private people labels, photo, and playback-position controls under progressive disclosure.
Moments combines three views:
- Recent — direct cards with replay, song, date, note, edit, and delete actions
- Timeline — searchable and filterable chronological history
- Map — a stable visual relationship map with pan, zoom, keyboard access, and list fallback
Map lines represent real shared songs, moods, or scene tags. A single Moment is centered at a controlled size with its title and track visible. Technical emotional numbers stay inside optional analysis details.
New users begin with an empty Moments area. Echo89 does not seed demo memories or demo timelines.
Playlists are stored locally in IndexedDB. Users can:
- create, rename, duplicate, and delete playlists
- add the current track
- add one or multiple Library tracks
- save the current queue
- remove and reorder tracks
- play normally or shuffled
- add a playlist to the queue
- start playback at a selected track
Playlist entries remain when a local file is unavailable and display Re-import required instead of silently disappearing.
Smart Mixes use real music already in the local Library. Presets include:
- Continue this vibe
- Make it calmer
- Raise the energy
- Deep focus
- Late-night drive
- Rediscover something
- Memory lane
- Build from this moment
A one-sentence request such as “Focused coding music that slowly gets more energetic for 25 minutes” is parsed into a validated intent. Track selection remains deterministic and local, using sonic profiles, saved Moments, recent playback, listening history, artist-repeat penalties, availability, and a stable seed.
AI is optional. Smart Mix generation works without an AI provider.
Journey Mixes preserve Echo89’s deterministic route engine while simplifying the controls:
- Start from a Moment or mood.
- Move toward another Moment or mood.
- Choose Short, Medium, or Long.
- Create Journey.
Cards lead with the journey, song count, and play action. Technical stage explanations sit inside Why these songs?. A Journey can be saved as a playlist.
Journey Mode shows the current stage, artwork, associated Moment when available, path progress, and a clear exit. Escape exits the overlay.
Echo89 stores lightweight local listening events:
- track start
- meaningful listening threshold
- completion
- skip
- playback source
- playlist or Journey source
It does not log every progress update and sends no history to analytics. History supports rediscovery and repeat penalties and can be cleared independently.
Press Ctrl/Cmd + K to preview and execute local actions such as:
Create a playlist called HackathonSave my queue as Late NightContinue this vibeReplay my latest momentBuild a journey from nervous to confidentShow recent moments
The command bar performs product actions rather than open-ended chat and never deletes data without confirmation.
Next.js App Router
├── Browser
│ ├── HTMLAudioElement + Web Audio API
│ ├── music-metadata local file parsing
│ ├── Dexie / IndexedDB
│ │ ├── tracks + queue + settings
│ │ ├── moments + sonic profiles + routes
│ │ └── playlists + listening events
│ ├── deterministic Memory DNA
│ ├── deterministic Smart Mix engine
│ └── deterministic Journey engine
└── Server routes
├── /api/music/metadata sanitized MusicBrainz lookup + multi-source artwork
├── /api/music/artwork/proxy SSRF-hardened same-origin image proxy (iTunes, MusicBrainz)
├── /api/memories/enrich optional Kilo enrichment
└── /api/memories/models live free-model discovery
The IndexedDB database intentionally retains its original physical name so existing local libraries survive the Echo89 rebrand. Schema version 3 adds playlists and listening events without resetting tracks, queue, settings, Moments, profiles, or routes.
Echo89 sends sanitized text from one Moment to the configured Kilo route. The response must match strict Memory DNA JSON and all numeric values are clamped.
Normal Moment cards do not advertise implementation statuses. Advanced details report whether Kilo enrichment completed or local Memory DNA is active.
Every Moment is committed to IndexedDB before network work. Local Memory DNA derives bounded mood, scene, emotional, and visual profiles from available input. If Kilo is offline, unavailable, or malformed, saving and all local product behavior continue.
Smart Mix selection and Journey generation never require AI.
Schema version 3 contains:
trackssettingsqueuememoriessonicProfilesroutesplaylistslisteningEvents
Unavailable local files do not cause playlist or Moment deletion.
Version 2 JSON backups include:
- Moments without private photo Blobs
- Journey routes
- playlists and Smart Mix definitions
- safe theme and player settings
Audio, photos, file paths, and listening history are excluded. Version 1 Echo89 memory backups remain importable.
- Audio, embedded artwork, downloaded cover Blobs, photos, playlists, and listening history stay in the browser.
- Audio bytes, photos, file paths, the full Library, listening history, and all Moments are never sent to AI.
- Artwork matching sends only sanitized song text to MusicBrainz.
- Kilo receives only sanitized text for the single Moment being enriched.
- There are no accounts, cloud audio uploads, third-party analytics, Firebase, or Supabase.
Artwork requires no API key. Echo89 uses this order:
- Read an embedded file cover.
- Match sanitized metadata through MusicBrainz for title/artist/year correction.
- Resolve cover art from free, no-key sources in priority order:
- iTunes Search API (broad coverage, upscaled to 600×600) — primary.
- MusicBrainz + Cover Art Archive — exact-release fallback.
- Fetch the chosen cover through the same-origin, SSRF-hardened
/api/music/artwork/proxyso external services only see the server IP. - Save the resulting image Blob in IndexedDB.
The default Kilo configuration uses an anonymously accessible free model, so an API key is optional. For authenticated Kilo usage:
Copy-Item .env.example .env.local
# Add KILO_API_KEY and optionally KILO_MEMORY_MODEL.Never use a NEXT_PUBLIC_ variable for a provider key. On Vercel, add server-only variables under Project Settings → Environment Variables and redeploy.
Requirements: Node.js 20+ and npm.
npm install
npm run devOpen http://localhost:3000.
npm run lint
npm run typecheck
npm test
npm run build
npm run startVitest covers:
- deterministic Memory DNA and validation
- one-click Moment creation and optional notes
- honest default Moment titles
- route scoring, attached-memory weighting, and recent penalties
- playlist creation, normalization, missing entries, and ordering
- Smart Mix prompt parsing, presets, deterministic generation, and rediscovery
- command parsing
- timeline filtering
- backup validation and legacy compatibility
npm run build
npm run startThe repository is a standard Next.js App Router project and can be imported into Vercel without a custom build command.
- Import a legal local track.
- Confirm metadata and artwork appear.
- Play it and press Remember this.
- Close the confirmation without entering a note.
- Open Moments → Recent, then replay the saved timestamp.
- Create a playlist and add Library tracks.
- Open Smart Mixes and choose Continue this vibe.
- Save the preview as a playlist.
- Create a short Journey Mix between two moods.
- Export a backup.
The files in public/audio/ are short synthesized WAV signals created for verification. Do not commit commercial recordings or personal imports. Echo89 is an independent hackathon project and is not affiliated with or endorsed by Winamp or its owners.
- Persistent audio depends on browser quota and storage policy.
- MusicBrainz matching quality depends on embedded metadata or filename quality and network availability.
- Browser autoplay may require a user gesture.
- Background playback can still be affected by operating-system or browser power policies.
- Smart Mix and Journey variety improves with a larger local Library and more listening history.
- Backups intentionally do not contain local audio or private photos.
- Optional user-controlled encrypted sync
- More local audio-feature extraction
- Richer playlist cover editing
- Additional deterministic Smart Mix directions
- Installable PWA media-session controls
If Echo89 makes your music feel more personal, a ⭐ helps others find it.
- Bug or idea? Open an issue.
- Questions? Reach out via the profile README.
Built by @akyourowngames. Local-first, always learning. 🎶
- friday — local-first AI assistant (graph memory, semantic routing, FastAPI/Next.js).
- A.N.K.I.T.A — Python personal AI assistant with voice, memory, Telegram.
- AniKai — anime discovery web app (Next.js + Vercel).
MIT. See LICENSE.
