Commit Graph

229 Commits

Author SHA1 Message Date
kennethreitz cc56d075ee Website: download all zip (built in Docker), duration, tab title
Zip generated at Docker build time — not checked into git.
Album duration shown (83:58). Browser tab shows now playing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 08:29:40 -04:00
kennethreitz f9d45dcde9 Website: sticky oscilloscope — stays on screen when scrolling
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 08:24:20 -04:00
kennethreitz 265346eaf9 Add Gauges analytics
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 08:21:02 -04:00
kennethreitz 938086337a Website: album art 560px — go big
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 08:17:40 -04:00
kennethreitz 75b70fabcb Website: album art 460px — the goldilocks size
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 08:16:04 -04:00
kennethreitz fdfe46860f Website: album art 380px — cover + a few tracks above the fold
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 08:14:37 -04:00
kennethreitz 1520a787b3 Website: bigger album art (560px, responsive)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 08:12:35 -04:00
kennethreitz 71eca537ab Re-encode all MP3s at 320 CBR with ID3 tags
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 08:10:40 -04:00
kennethreitz 5c28ee5fff Add ID3 tags to all MP3s — artist, album, track number, genre, year
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 08:07:25 -04:00
kennethreitz 0b1c7fa199 Website: MP3 download button per track
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 08:06:03 -04:00
kennethreitz 80bb3ae1de play.py: bass tilt 30%→10% on spectrum
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 07:59:55 -04:00
kennethreitz fabcd0de92 play.py: spectrum 76 chars wide — nearly full terminal width
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 07:59:11 -04:00
kennethreitz ef6e7ab54c play.py: spectrum peak hold with slow decay
Peaks hold and decay by 1 level per frame (~40fps = smooth falloff).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 07:57:43 -04:00
kennethreitz 219ac4974b play.py: tilt EQ on spectrum — bass reduced 70%, highs untouched
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 07:57:09 -04:00
kennethreitz 054d837454 play.py: spectrum log 8→3 — quiet parts nearly silent on display
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 07:56:09 -04:00
kennethreitz 76bcc531f9 play.py: spectrum log 15→8 — even more contrast
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:38:40 -04:00
kennethreitz 1dd53ac8c0 play.py: reduce log compression on spectrum (50→15) for more contrast
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:38:02 -04:00
kennethreitz dc8e9627d7 play.py: extra newline before controls
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:36:29 -04:00
kennethreitz c43156e40b play.py: 3-row braille spectrum — 12 levels of vertical resolution
Each frequency band maps to 0-12 height across 3 rows of braille.
Top row shows peaks only, bottom row shows everything.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:33:39 -04:00
kennethreitz 387fcfb3d7 play.py: spectrum above controls, progress below
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:30:44 -04:00
kennethreitz 72ab3c7949 play.py: lighter braille spectrum — ⡀⡄⡆⡇
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:28:55 -04:00
kennethreitz 135ea951d2 play.py: braille spectrum analyzer ⡀⡄⡆⡇⣇⣧⣷⣿
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:28:13 -04:00
kennethreitz b87188798b play.py: log scale on spectrum analyzer for better sensitivity
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:26:53 -04:00
kennethreitz e5e0093dc9 Fix oscilloscope — overwrite in place instead of scrolling
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:25:19 -04:00
kennethreitz ebb6067e53 play.py: FFT spectrum analyzer with colored frequency bands
Logarithmic frequency bins via FFT. Bass (green) → mids (yellow) →
highs (red). Block characters ▁▂▃▄▅▆▇█. 40fps at 48 bands.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:24:20 -04:00
kennethreitz 2bb36d0e41 play.py: 40fps oscilloscope with centered waveform display
Shorter sample window (30ms), finer block characters, centered
on zero crossing. Flat line shows as ─, peaks as █.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:22:45 -04:00
kennethreitz 186e5b8aff play.py: oscilloscope refresh 20fps (was ~7fps)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:21:48 -04:00
kennethreitz 5f1b95609b play.py: terminal oscilloscope during playback
Block character waveform (▁▂▃▄▅▆▇█) sampled from the audio buffer
at the current playback position. Amber colored. Updates in real time
above the progress bar.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:21:18 -04:00
kennethreitz 8b9dcb4bd4 Disable share links on tracks
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:05:02 -04:00
kennethreitz 695c5ef98f Update uv.lock for Python 3.14
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 00:56:25 -04:00
kennethreitz b6009f9a11 Add web player — HTML5 audio, oscilloscope, SEO, share links
Static site with nginx on fly.io. Features:
- Album art, track list with descriptions and metadata
- Persistent bottom player bar with seek, volume, next/prev
- Real-time oscilloscope via Web Audio API
- Deep linking via URL hash (#track_name)
- Share link per track (copy to clipboard)
- Keyboard shortcuts (space, arrows, n/p)
- Mobile responsive
- SEO meta tags, Open Graph, Twitter cards
- Streaming service link placeholders
- MP3s converted from WAVs for web delivery

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 00:39:40 -04:00
kennethreitz c1b4a11d51 Update album description in README.md
Removed a sentence about a piano's story from the album description.
2026-04-03 20:34:27 -04:00
kennethreitz e4ac27e951 Fix formatting in README for play command examples 2026-04-03 17:00:47 -04:00
kennethreitz ffea82b246 play.py: n/p in single play mode keeps navigating through album
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 16:57:55 -04:00
kennethreitz ea1dafa8dd play.py: Ctrl+C/q returns to menu during play-all, auto-advance on track end
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 16:56:38 -04:00
kennethreitz 9fd3698082 play.py: next/prev track with n/p keys during playback
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 16:54:16 -04:00
kennethreitz 4e8870e4e7 Remove h1 — let the cover speak
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 15:11:22 -04:00
kennethreitz 118ee63255 Remove ASCII art from README
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 15:10:56 -04:00
kennethreitz 54b20d85db Add rendered WAV files for all 24 tracks
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 15:08:36 -04:00
kennethreitz 1501b3b4bc README: prose about sonic landscape and code-as-music philosophy
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 15:08:00 -04:00
kennethreitz d0661759e5 Add album cover, embed in README
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 14:42:38 -04:00
kennethreitz 7a1c3f9e7e play.py: numbered WAV filenames matching album order (01_raga_midnight.wav)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 14:37:59 -04:00
kennethreitz 9d27bb0f91 The Interruption: reese volume 0.28→0.2
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 14:17:44 -04:00
kennethreitz 9f928d7fa7 play.py: skip ahead/back during playback (+/-/f/s/d/a/space/q)
Callback-based playback with raw terminal input. Single char keys
only — no escape sequences. The Interruption: reese sidechain 0.55.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 14:14:40 -04:00
kennethreitz e40156787b Revert mellotron on Raga Midnight, wavefold on Acid Reign, bump Ghost Protocol arp
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 14:06:02 -04:00
kennethreitz a9b356f5cc New synths across 10 more tracks — mellotron, drift, wavefold, granular
Silk Road: mellotron_flute in finale. The Dialogue: drift pad, mellotron ending.
Acid Reign: wavefold in breakdown. Chakra: drift at crown. Raga Midnight:
mellotron_strings over 808 drop. The Temple: granular_pad texture.
Sleight of Hand: mellotron_choir. Gravity: drift tambura.
Ghost Protocol: NES pulled back. An Exception: psycho bass 0.3.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 13:55:52 -04:00
kennethreitz 04d13255e1 Revisit 6 tracks with new pytheory 0.40.9 synths
Ghost Protocol: arp → drift (analog wobble)
Deep Time: shimmer → drift, added granular_pad grain layer
Voltage: added hard_sync part at bar 49
The Interruption: reese bass → drift (analog menace)
An Exception Occurred: added ring_mod during psychosis
Intrusive: thought → wavefold with organ envelope (uglier, harder)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 13:34:15 -04:00
kennethreitz 48a80d9fa4 Remove artist references from track descriptions
Ghost Protocol: no more Portishead/Strobe references.
Apex: no more Beast Mode reference. Descriptions stand alone.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 13:19:51 -04:00
kennethreitz d5193b0b66 play.py: widen selection bar to fit tuning/Hz
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 13:06:35 -04:00
kennethreitz 1cee7b342e play.py: fixed-width selection bar — no more size jumping
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 13:06:04 -04:00