Commit Graph

302 Commits (main)
 

Author SHA1 Message Date
John Montagu, the 4th Earl of Sandvich 692bc829a2
Refactor target pages into feature modules and remove event-era credits flow 2026-04-15 18:08:46 -07:00
name 5ad86cbbb1 Replace T-pose pause with crossed-arms (hand on opposite shoulder) gesture
- Add crossedArmsDetector using 2D landmarks normalized by shoulder width
- Either hand on opposite shoulder for 0.5s triggers start/pause/resume (toggle)
- Remove arms-out from pause, resume, and calibration-start roles
- Add CalibrationMachine.resume() method, engine drives all transitions
- Update all UI text (GestureOverlay, Tutorial, GamePage) for new gesture
- Show debug overlay in /debug with live distances and threshold
- Show body centroid tracking dot before game starts
- Remove sticky drawDebug3D canvas overlay from usePoseLoop
- Add 'nose' draw mode for pre-game tracking indicator

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 21:31:42 +00:00
name 5007dd9440 Improve debug views: add 2D graph, fix flipped axes, hide invisible landmarks, show data pre-calibration
- Delete REFACTOR.md, add PAUSE_SIGNAL.md for pause gesture rework planning
- Fix vertically flipped FRONT/SIDE 3D views (remove incorrect Y negation)
- Hide landmarks with visibility < 0.3 and exclude from auto-scale
- Show step graphs before calibration completes (use raw position as baseline)
- Add 4th debug view showing 2D normalized landmarks
- Expose landmarks2D from usePoseLoop
- Flip step graph Y axis to match intuitive direction

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 20:35:32 +00:00
name ce7cf3a042 Color-code arms vs legs in 3D debug views
Arms: cyan (L) / blue (R), Legs: orange (L) / yellow (R),
Head: gray, Torso: dim gray.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 17:39:39 +00:00
name 366e527b86 Add 3-view orthographic debug visualization for 3D landmarks
Shows front (X·Y), side (Z·Y), and top (X·Z) projections of MediaPipe
world landmarks on the /debug page to evaluate 3D estimation quality.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 17:33:52 +00:00
name 7db482c90b Remove non-YouTube songs and local audio files
Delete 22 song folders that lack YouTube audio (unused in UI).
Remove audio.ogg from the 4 remaining YouTube-backed songs.
Remove stray Get Lucky MP3 from public root.
Simplify song-data.ts to only the 4 playable songs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 17:28:38 +00:00
name 58820e4864 Remove debug YT audio toggle button from pause menu
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 17:23:16 +00:00
name 36b0e57cb8 Clarify that uploaded tracks stay local and are not shared
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 17:22:01 +00:00
name 049f4366c0 Fix upload page for mobile
- Show "Tap to choose files" instead of drag & drop text on mobile
- Hide zip drop hint on small screens
- Stack options and actions vertically on mobile
- Shrink song banner thumbnails, font sizes, and spacing
- Full-width add button on mobile
- Larger touch targets for checkboxes

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 16:14:20 +00:00
name f58e396a22 Hide YouTube player for custom songs
Skip YouTube attribution and player in both the song selector preview
and the game page when playing a custom (non-YouTube) track.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 16:10:03 +00:00
name 2a1f187c1b Show download icon badge on custom song cards in carousel
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 16:08:38 +00:00
name 7c3fd0b044 Use CSS tooltips with help cursor for option explanations
Replaces native title attributes with CSS ::after tooltips that appear
instantly on hover, with a help cursor to signal interactivity.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 16:07:48 +00:00
name f9a9a2d779 Add hover tooltips explaining simplify and store options
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 16:06:46 +00:00
name 0dc2801a91 Improve drop zone with clearer file requirements
Show required files (audio + chart) vs optional (images) explicitly,
and mention zip support as a separate line.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 16:04:57 +00:00
name bf51dc6208 Add custom StepMania track upload feature
Users can upload their own StepMania song bundles via drag & drop (individual
files or .zip archives) from the song selector. Tracks are parsed, displayed
in the carousel alongside built-in songs, and optionally persisted to the
browser using the Origin Private File System (OPFS). Difficulty selection and
arrow simplification are configurable per track.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 15:53:33 +00:00
Claude 5fbe74691d Fix carousel showing duplicate cards with few songs
With only 4 songs, the carousel tried to show 5 positions, causing
the same song to appear twice (e.g. far-left and far-right wrapping
to the same index). Deduplicate display indices so each song only
renders once regardless of how many songs exist.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 23:42:22 +00:00
Claude 33504558ce Block pointer events on YouTube iframes to suppress hover UI
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 23:38:37 +00:00
Claude a980086396 Add click-to-explain popup on YouTube player, fix spinner overlay
Clicking the YouTube player window shows a popup explaining why it's
there (music streamed from YouTube, ToS compliance). Spinner now uses
absolute positioning so it overlays the container instead of pushing
content aside.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 23:37:51 +00:00
Claude 9bc7a57d69 Add loading spinner to YouTube player windows
Song select: spinner shown via yt-loading class, removed when PLAYING.
Game page: spinner shown via :empty pseudo-class while iframe loads.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 23:35:53 +00:00
Claude 808da507f6 Use visible YouTube player for song preview (ToS compliance)
Preview now uses YouTube IFrame API with a visible 240x135 player in the
top-left corner of the song select screen, matching the game page layout.
Falls back to local audio for songs without YouTube config.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 23:34:57 +00:00
Claude 8f642cc301 Use YouTube for song preview in selection screen
Songs with youtubeVideoId now preview via YouTube IFrame API instead of
local .ogg files. Creates a hidden YouTube player, seeks to the preview
position (offset + 30s), and fades volume in/out on song change.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 23:31:41 +00:00
Claude 84a8dfc7f9 Only show YouTube-enabled songs, exclude others from build
Filter SONGS export to only include songs with youtubeVideoId. All song
definitions remain in the source for future use. Vite plugin removes
non-YouTube song folders from dist after build so they aren't deployed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 23:29:35 +00:00
Claude b7f13f5593 Add YT/local audio toggle in pause menu for comparison
For songs with YouTube config, a YT: ON/OFF button appears in the pause
menu next to KB. Toggling it recreates the audio player so you can
compare YouTube vs local audio during the same session.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 23:22:53 +00:00
Claude 494e0d08ed Add setup guide for audio offset tool
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 23:21:26 +00:00
Claude c2efac530e Switch offset tool to Chromaprint fingerprint matching
Raw PCM cross-correlation fails on different masters/mixes (all candidates
have near-identical confidence). Chromaprint generates perceptual hashes
that are invariant to mastering, so the correct offset is always in the
top 2 candidates with clear separation. Still generates comparison WAVs
for ear verification since repetitive songs can have ambiguous top picks.

Requires fpcalc (chromaprint) on PATH in addition to ffmpeg.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 23:14:46 +00:00
Claude 2a5935b137 Add YouTube audio for Chop Suey, Just Dance, Meet Me Halfway
Offsets verified by ear using comparison WAVs:
- Chop Suey: GK-DkHHAMIU offset 8.968s
- Just Dance: 5q7byFPTehs offset 0.062s
- Meet Me Halfway: -GY8MhHMxLM offset 6.973s

Also fix offset tool: handle video IDs starting with '-' via --yt flag,
skip negative/empty offset candidates in WAV generation.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 23:10:19 +00:00
Claude 500a0373ce Gitignore debug audio and offset comparison outputs
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 23:04:33 +00:00
Claude a72c52edf5 Fix Get Lucky offset and improve alignment tool
Correct offset from 66.389 to 0.207 (was matching repeated section).
The tool now generates stereo comparison WAV files (left=local,
right=YouTube) for each candidate so you can verify by ear.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 23:01:27 +00:00
Claude c673b3e746 Show YouTube player visibly in game UI (ToS compliance)
YouTube ToS requires the embedded player to be visible (min 200x200px).
Place it in the top-left corner at 240x135 with rounded corners and a
subtle border. Player fills its container and is non-interactive
(pointer-events: none) so it doesn't interfere with gameplay.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 22:52:28 +00:00
Claude 279de08433 Add keyboard mode toggle for testing without camera
Pause menu now has a KB button next to LOG. When enabled:
- Arrow keys feed steps directly into the game
- Calibration is bypassed so the game starts immediately
- Camera-based step detection and auto-pause are disabled

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 22:47:28 +00:00
Claude ce258e86bd Add YouTube audio source support with auto offset detection
Replace direct HTML5 Audio usage with an AudioPlayer abstraction that
supports both local audio files and YouTube IFrame Player API. Songs
can now specify a youtubeVideoId and youtubeOffset to stream audio
from YouTube instead of hosting audio files.

- AudioPlayer interface with LocalAudioPlayer and YouTubeAudioPlayer
- YouTube IFrame API type declarations and script loader
- Cross-correlation offset detection tool (tools/audio-offset/)
- Get Lucky configured with YouTube video 5NV6Rdv1a3I, offset 66.389s

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 22:38:01 +00:00
name 2b6ca91d47 high impact: add missing sponsor logo 2026-04-12 12:04:58 -07:00
name 13ae210d49 critical fix: support inline SSC note charts 2026-04-12 10:55:00 -07:00
name ec397ee226 critical fix: enable mouse clicks on home menu 2026-04-12 10:47:12 -07:00
name 62ee6a180d Clarify tutorial pause gesture copy 2026-04-12 10:34:33 -07:00
name 53861aad9d Add Devpost CTA to credits page 2026-04-12 10:29:13 -07:00
name 40d7de4db8 Merge branch 'worktree-record-animation' 2026-04-12 10:17:32 -07:00
name 723b1a9886 add Chop Suey! by System of a Down
128 BPM, 2:09, from Oakridge ITG Cab 2011 Songpack 3.
Placed after Meet Me Halfway in the front section.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 10:13:23 -07:00
name 172159cda8 add Beat It, Meet Me Halfway, and Horsestyle; reorder song list
Beat It (Michael Jackson, 139 BPM) and Meet Me Halfway (Black Eyed
Peas, 130 BPM) added after Just Dance at the front. Horsestyle
(Unicorn On Ketamine, 200 BPM) and Heroine moved to the middle.
25 songs total.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 10:03:50 -07:00
name 87a5109294 Merge branch 'worktree-tutorial' 2026-04-12 09:55:18 -07:00
name 5e1623f172 hide target arrow borders on touch devices
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 09:55:06 -07:00
name c07afb89c7 Merge branch 'record-page' 2026-04-12 09:53:28 -07:00
name f58f4a87fc mobile tutorial shows one tip at a time with next button
Desktop unchanged (side-by-side layout). On mobile (<600px), shows
player + single tip with step counter and Next/Got It button.
Removed overflow scroll from overlay.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 09:52:20 -07:00
name b961bc32c1 lay out tutorial player and tips side by side on desktop
Player sits left, tips right. Stacks vertically on mobile (<600px).
Card wider (680px) to fit both comfortably.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 09:47:29 -07:00
name 5251e7ed02 add exaggerate steps tip to tutorial
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 09:46:01 -07:00
name c98a9e71e0 add looping recording playback to tutorial
RecordingPlayer gains autoPlay, loop, showControls props.
Tutorial shows the stick figure demo on loop above the tips.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 09:44:41 -07:00
name 07e7276470 merge feature/mobile-home-ui-improvement: better mobile menu interaction
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 09:44:15 -07:00
name f032139b7c record all 33 landmarks, add simplifyRecording util
Recording now captures full MediaPipe data. simplifyRecording() picks
the 13 stick-figure landmarks with optional movement dedup and end trim.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 09:43:43 -07:00
name 7f0f2c0180 simplify stick figure to head circle + 12 joints, bundle recording
Recording now captures only 13 landmarks (nose + shoulders/elbows/wrists
+ hips/knees/ankles). Player draws circle head, no palms/feet.
Test page loads bundled recording on mount.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 09:43:43 -07:00
name eb98af56d3 add RecordingPlayer component and /recording-test page
RecordingPlayer draws 2D skeleton from recorded frames with play/pause
and scrub controls. Test page at /recording-test loads JSON via file picker.
Also added download button to /record results.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 09:43:43 -07:00