Skip to content

Add stable tuner and multi-genre chord creator#2

Draft
pgotta wants to merge 17 commits into
mainfrom
agent/tuner-chord-creator
Draft

Add stable tuner and multi-genre chord creator#2
pgotta wants to merge 17 commits into
mainfrom
agent/tuner-chord-creator

Conversation

@pgotta

@pgotta pgotta commented Jul 21, 2026

Copy link
Copy Markdown
Owner

What this adds

Stable chromatic tuner

  • New Tuner button immediately to the right of Karaoke
  • Full-screen/pop-out interface matching Stemmy's existing tool style
  • All chromatic notes with sharps/flats display
  • Standard, half-step down, Drop D, D standard, Drop C#, Drop C, Open G, and Open D presets
  • Selectable microphone/audio interface and adjustable A4 reference
  • YIN-style pitch estimation with confidence filtering, rolling median smoothing, cents smoothing, and note-lock hysteresis to reduce bouncing
  • Stops Stemmy/Karaoke playback before listening and releases the microphone when closed

Local chord creator

  • New Chord Creator button immediately to the right of Tuner
  • Genre selection uses checkboxes, so one or several genres can be combined
  • Pop, classic rock, alternative rock, post-hardcore, metalcore, punk/pop-punk, indie, blues, folk/country, funk/R&B, jazz, and cinematic/synthwave
  • Start from a selected chord, choose 4–8 chords, and generate six options
  • No AI and no external API; progression rules and theory logic are local
  • Roman numerals, key context, genre character, strumming suggestion, preview playback, chord replacement, transposition, chord diagrams, capo/easy-shape suggestions, copying, and local favorites

Low-risk integration

  • The existing app/templates/index.html was intentionally not modified.
  • The features live in isolated CSS/JavaScript files and are attached through a small app-factory hook.
  • No existing studio, separation, Karaoke, visualizer, MIDI/tab, or backend processing code was changed.

Validation performed

  • Python files compile successfully.
  • The assembled JavaScript passes node --check.
  • Remote Git blob hashes match the locally validated JavaScript/CSS files.
  • HTML injection smoke test passed.
  • A real browser microphone test and full Windows audio-interface test still need to be performed locally in Stemmy.

Unrelated static-audit findings — deliberately not fixed

These are review notes only, per request:

  1. Deep stem-count label mismatch: the UI says “up to 12,” while the Deep preset declares 13 stems and the README also describes up to 13.
  2. Karaoke separation failures can lose the useful error: Pipeline.run() can return after a model error, but the Karaoke worker continues into mixdown and may report only “no instrumental produced.”
  3. Karaoke retry disk buildup: retrying a failed/interrupted item creates a new project folder without removing the previous failed project folder.
  4. Restored Karaoke ZIP edge case: playback heals moved/stale instrumental paths, but the ZIP download route reads the recorded path directly and can omit tracks until another route has healed the stored path.
  5. Mixdown length/sample-rate assumption: combined output is sized from the first included stem and later stems are truncated to that length; differing sample rates are not resampled.
  6. YouTube stale-file fallback edge case: if the expected yt_<video-id> output is missing, the fallback can select the first matching WAV already in the shared upload directory.

None of the unrelated findings above were changed in this branch.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant