gitea-actions[bot]
5a18bb5f44
shots + sw stamp f62ebdc79b
2026-10-21 07:33:38 +00:00
teahubxyz and Claude Fable 5.1
f62ebdc79b
room tone default 18% (was 35%); a saved higher level is brought down once
...
shots / shots (push) Successful in 2m21s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6
2026-10-21 07:31:27 +00:00
gitea-actions[bot]
4f846dc15a
shots + sw stamp 6e3965bf1c
2026-10-21 07:30:51 +00:00
teahubxyz and Claude Fable 5.1
6e3965bf1c
reaction ticks: hits close together become one pill reading them in order, recomputed from the hit list each time
...
shots / shots (push) Successful in 2m25s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6
2026-10-21 07:28:14 +00:00
gitea-actions[bot]
cc6ca29cbe
shots + sw stamp 9186dc1be6
2026-10-21 07:28:06 +00:00
teahubxyz and Claude Fable 5.1
9186dc1be6
emoji tray: the last emoji you used always has a slot (one tap puts it in the bar), the other six are the most used
...
shots / shots (push) Canceled after 2m20s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6
2026-10-21 07:26:03 +00:00
gitea-actions[bot]
68aa700794
shots + sw stamp 4df29cc14f
2026-10-21 07:25:46 +00:00
teahubxyz and Claude Fable 5.1
4df29cc14f
bed: when Web Audio takes over, the element is silenced
...
shots / shots (push) Successful in 2m20s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6
2026-10-21 07:22:57 +00:00
teahubxyz and Claude Fable 5.1
7c1992278e
the room tone plays through Web Audio (a looping buffer is seamless; the element loop had a gap every pass); the element stays as the fallback and as the player's hold
...
shots / shots (push) Canceled after 56s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6
2026-10-21 07:22:25 +00:00
gitea-actions[bot]
c9475f62d6
shots + sw stamp cf522e8926
2026-10-21 07:18:28 +00:00
teahubxyz and Claude Fable 5.1
cf522e8926
the player's hold uses a short 4 s crackle (handover waits at most one pass); the room tone keeps the long one
...
shots / shots (push) Successful in 2m18s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6
2026-10-21 07:16:08 +00:00
teahubxyz and Claude Fable 5.1
84c7ba1665
room tone decided from the phase, not from the player's paused flag (the unlock clip flipped it and caused an on-off-on fade); the crackle sample is 12 s long
...
shots / shots (push) Canceled after 34s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6
2026-10-21 07:15:50 +00:00
gitea-actions[bot]
b47f62f8e6
shots + sw stamp 9213647549
2026-10-21 07:10:37 +00:00
teahubxyz and Claude Fable 5.1
9213647549
emoji drawer above the scrim (it was underneath it, so every tap closed it)
...
shots / shots (push) Successful in 2m15s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6
2026-10-21 07:08:39 +00:00
gitea-actions[bot]
e531760491
shots + sw stamp b11b3b47a2
2026-10-21 07:06:23 +00:00
teahubxyz and Claude Fable 5.1
b11b3b47a2
emoji drawer: opens without grabbing the keyboard; the type-any-emoji box moves to the bottom; taps register on pointerup so a moving drawer can't swallow them
...
shots / shots (push) Successful in 2m17s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6
2026-10-21 07:04:21 +00:00
gitea-actions[bot]
f01be6f5b2
shots + sw stamp b11ff4b7b6
2026-10-21 06:58:24 +00:00
teahubxyz and Claude Fable 5.1
b11ff4b7b6
reactions: the tray re-ranks after every tap; ticks that land within a second of each other stack upward instead of hiding one another
...
shots / shots (push) Successful in 2m18s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6
2026-10-21 06:56:22 +00:00
teahubxyz and Claude Fable 5.1
70c630711b
webamp: mixtapes in the Open menu / LOAD LIST, SAVE LIST makes a tape from the playlist, ~40 Winamp Skin Museum skins in Options › Skins plus any museum link
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6
2026-10-21 06:47:39 +00:00
gitea-actions[bot]
d607db3aac
shots + sw stamp 6e0259daff
2026-10-21 06:31:36 +00:00
teahubxyz and Claude Fable 5.1
6e0259daff
library opens again: the playing tile's class list no longer gets an empty token (which threw and aborted the render)
...
shots / shots (push) Successful in 2m26s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6
2026-10-21 06:29:08 +00:00
gitea-actions[bot]
c2586c42e4
shots + sw stamp c5991ebc36
2026-10-21 06:27:46 +00:00
teahubxyz and Claude Fable 5.1
c5991ebc36
a little 🦙 in the library's cost line opens Winamp
...
shots / shots (push) Successful in 2m16s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6
2026-10-21 06:25:46 +00:00
teahubxyz and Claude Fable 5.1
105609b4b1
webamp.html on main: the library in Winamp with Milkdrop (gandora.lol/webamp.html)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6
2026-10-21 06:21:50 +00:00
teahubxyz and Claude Fable 5.1
582e5bebf2
typed "no X" / "less X" goes on the avoid list and marks X as a disliked tag; "more X" the reverse; the DJ is told the avoid list is a hard rule that outranks the taste model
...
shots / shots (push) Failing after 2m21s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6
2026-10-21 06:20:49 +00:00
teahubxyz and Claude Fable 5.1
a4dab59f21
brain: typed negatives count against the track, warm words never include what the station was told to avoid, a young station gets only a faint region prior from the other stations (no words), and the listener's avoid list wins
...
shots / shots (push) Canceled after 42s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6
2026-10-21 06:20:23 +00:00
gitea-actions[bot]
d4b4f48b03
shots + sw stamp fc0bfe05a6
2026-10-21 06:16:27 +00:00
teahubxyz and Claude Fable 5.1
fc0bfe05a6
Merge pull request 'playback: one explicit state machine (idle → cooking → holding → playing → ended)' ( #1 ) from playback-state-machine into main
...
shots / shots (push) Successful in 2m24s
playback as one state machine; brain.js via hooks; db.get; harness resume mode; docs (#1 )
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6
2026-10-21 06:14:04 +00:00
teahubxyz and Claude Fable 5.1
1aeebac6f2
harness: a resume mode (autoplay blocked); docs for the state machine and hooks
...
tools/harness.sh resume seeds IndexedDB with a station and one rendered
track, resumes it with no user gesture and expects the TAP TO PLAY wait.
IndexedDB needs http, so the page is served from a temp folder; headless
Chrome's virtual time doesn't wait for IndexedDB, so this mode is driven in
real time over the DevTools protocol (tools/harness-cdp.py, stdlib only).
The loop harness now prints state.phase too.
ARCHITECTURE.md describes the machine as implemented; HANDOFF.md lists what
was found and left alone; STORAGE.md gains db.get and the tapes store (the
code already had both); README points at the new files.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6
2026-10-21 06:01:48 +00:00
teahubxyz and Claude Fable 5.1
dddf8f0add
brain: plug into the page's hooks instead of overriding its functions
...
hooks.djPrompt, hooks.stationOpened, hooks.jobMade and hooks.reacted carry what
the djPrompt / openStation / makeJob / react reassignments did; same behaviour.
countPlay reads its one row with db.get instead of db.all().
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6
2026-10-21 05:58:46 +00:00
teahubxyz and Claude Fable 5.1
eb110e827b
playback: one explicit state machine, hooks for brain.js, db.get for single rows
...
state.phase (idle → cooking → holding → playing → ended) with named transitions
(toCooking, toHolding, toPlaying, startNow, handOver, toEnded, toIdle) replaces
the three overlapping mechanisms (playJob/advance, swapNow, the crackle hold with
state.holding/pendingJob). state.holding is now a read-only view of the phase.
Behaviour unchanged; the harness prints the same state lines before and after.
A `hooks` object (djPrompt, jobMade, stationOpened, reacted) is what brain.js
plugs into instead of overriding page functions by assignment.
db.all() used to find one row becomes db.get(id); tapes go through tapeById
(KEPT is virtual). setSource drops old object URLs but never the crackle's.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6
2026-10-21 05:57:59 +00:00
gitea-actions[bot]
52fad5f297
shots + sw stamp 7453484460
2026-10-21 05:30:24 +00:00
teahubxyz and Claude Fable 5.1
7453484460
a blocked resume no longer double-handles the first tap: the unlock starts playback and the play button's own click is ignored for that tap (it used to pause it straight back)
...
shots / shots (push) Successful in 2m20s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6
2026-10-21 05:28:20 +00:00
teahubxyz and Claude Fable 5.1
a54bfdff7e
harness needs no audio file: it renders a generated wav; README wording
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6
2026-10-21 05:24:42 +00:00
teahubxyz and Claude Fable 5.1
4a33a30820
docs: README (what it is, how it runs), ARCHITECTURE (every moving part, the playback state machine, the data), HANDOFF (seams, known rough edges, what a refactor should keep); tools/harness.html as the playback regression test
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6
2026-10-21 05:24:03 +00:00
gitea-actions[bot]
2dbbbbe2be
shots + sw stamp 8fc613ed20
2026-10-21 05:20:16 +00:00
teahubxyz and Claude Fable 5.1
8fc613ed20
the room tone tries to start on load (plays where the browser allows, otherwise on the first tap) — the seed page is never silent for want of a gesture
...
shots / shots (push) Successful in 2m22s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6
2026-10-21 05:17:12 +00:00
teahubxyz and Claude Fable 5.1
131f3b255b
when a resume on load is blocked by autoplay rules, the cover says TAP TO PLAY and the first tap anywhere starts it; any play that succeeds counts as the unlock
...
shots / shots (push) Canceled after 1m48s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6
2026-10-21 05:16:09 +00:00
gitea-actions[bot]
bdc62084a6
shots + sw stamp c14e3452ea
2026-10-21 05:06:28 +00:00
teahubxyz and Claude Fable 5.1
c14e3452ea
crackle eases in over 600 ms and the bed decision waits 300 ms, so a source swap never fires a burst; default level 35%
...
shots / shots (push) Successful in 2m21s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6
2026-10-21 05:04:08 +00:00
gitea-actions[bot]
46589c9bf5
shots + sw stamp a6cb989fd8
2026-10-21 05:02:23 +00:00
teahubxyz and Claude Fable 5.1
a6cb989fd8
crackle: mix in float, clamp once into 16-bit (overlapping pops could wrap in the int buffer and click)
...
shots / shots (push) Successful in 2m16s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6
2026-10-21 05:00:11 +00:00
teahubxyz and Claude Fable 5.1
fb6497161e
playback: the next track starts cooking before the play call, not after it resolves; the crackle fades the moment play resolves (not only on the playing event); the crackle itself is 12 dB louder (it sat at -27 dBFS, which is why nobody heard it)
...
shots / shots (push) Canceled after 34s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6
2026-10-21 04:59:49 +00:00
gitea-actions[bot]
53f5e8561f
shots + sw stamp de1537050e
2026-10-21 04:54:38 +00:00
teahubxyz and Claude Fable 5.1
de1537050e
reactions land in time: each tap keeps where in the track it hit (and which lyric section), shows as a tick on the bar, and the DJ hears " 🔥 at 0:42 (chorus)"
...
shots / shots (push) Successful in 2m23s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6
2026-10-21 04:52:13 +00:00
gitea-actions[bot]
25d97db0ab
shots + sw stamp 778ffcf925
2026-10-21 04:48:35 +00:00
teahubxyz and Claude Fable 5.1
778ffcf925
mashups: ⚡ MASHUP on any tape takes up to three of its tracks — the DJ writes one sheet from their sheets, the renderer hears them stitched together with crossfades — and the result goes next on the station
...
shots / shots (push) Successful in 2m17s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6
2026-10-21 04:46:31 +00:00
gitea-actions[bot]
0edbe3a9f2
shots + sw stamp 03251b5948
2026-10-21 04:40:44 +00:00
teahubxyz and Claude Fable 5.1
03251b5948
the tab says g*ndora, and the track while one plays
...
shots / shots (push) Successful in 2m23s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6
2026-10-21 04:38:27 +00:00
gitea-actions[bot]
ab43f01073
shots + sw stamp d08be95048
2026-10-21 04:37:02 +00:00