AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Transcription And Notation With Pytheory

skill-kennethreitz-pytheory-skill-transcription-and-notation-with-pytheory · by kennethreitz

>-

No reviews yet
0 installs
19 views
0.0% view→install

Install

$ agentstack add skill-kennethreitz-pytheory-skill-transcription-and-notation-with-pytheory

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-kennethreitz-pytheory-skill-transcription-and-notation-with-pytheory)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
1mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Transcription And Notation With Pytheory? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Transcription & Notation

Getting music into PyTheory from audio/MIDI, and out to MIDI, sheet music, and tab.

Transcribe a recording → notes / MIDI

from pytheory import Score

score = Score.from_wav("hum.wav", bpm=80)        # estimates tempo if bpm omitted
for name, part in score.parts.items():
    print(name, len(part.notes), "notes")
score.save_midi("hum.mid")
  • Score.from_wav(path, *, bpm=None, quantize=None, split=False, fmin=50, fmax=1500).

quantize=0.25 snaps to sixteenths; split=True separates a full mix into bass + melody (and drums) instead of one monophonic melody part.

  • .m4a/.mp3 work if afconvert/ffmpeg is available; WAV always works.
  • CLI equivalent: pytheory transcribe hum.m4a out.mid (add --split,

--quantize 0.25, --bpm 90).

Identify the chord in an audio buffer

from pytheory.audio import identify_chord
import scipy.io.wavfile
sr, data = scipy.io.wavfile.read("clip.wav")
identify_chord(data, sr)
# {'symbol': 'D7', 'confidence': 0.76, 'notes': ['D', 'F#', 'A', 'C']}  (or None)

Returns a best-guess symbol with a confidence (0..1) and the detected notes, or None if it can't tell. Works best on clean, sustained chords; it's a real-time recognizer, not a perfect oracle. (The live version is pytheory tune --chords, in the guitar skill.)

Import MIDI

from pytheory import Score
score = Score.from_midi("song.mid")

Export to every format

score.save_midi("song.mid")                                  # MIDI (drums ch 10)
open("song.abc", "w").write(score.to_abc(title="Song", key="C"))
open("song.xml", "w").write(score.to_musicxml(title="Song"))   # MusicXML for notation apps
open("song.ly",  "w").write(score.to_lilypond(title="Song", key="C"))
print(score.to_tab("part_name"))                             # ASCII guitar tab for a part
  • to_tab(part_name, tuning="guitar", frets=24) turns a single part into tab.
  • to_musicxml opens in MuseScore/Finale/Sibelius; to_lilypond engraves to PDF

via LilyPond; to_abc is compact plain-text notation.

Lead sheets (chord symbols + fret diagrams)

to_lilypond can render a chord part as a lead sheet — chord names, fret diagrams, and/or tab above the melody staff:

ly = score.to_lilypond(chord_names=True, fretboards=True, tab=True)
# chord_names -> a ChordNames row (C  G  Am  F)
# fretboards  -> a FretBoards row using PyTheory's OWN voicings (not LilyPond's)
# tab         -> a TabStaff of the progression
# chord_part="comp" picks which part supplies the harmony (else the first
#   chord-bearing part); fretboard=Fretboard.guitar(...) sets the diagram source

The fret diagrams come straight from PyTheory's Fretboard, so they match score.to_tab() / what it would actually play. Compile with lilypond leadsheet.ly → PDF.

A complete round-trip

from pytheory import Score, Key
score = Score.from_wav("melody.wav", quantize=0.25)          # hum -> notes
key = Key.detect(*[n.tone.name for n in score.parts["melody"].notes if n.tone])
score.save_midi("melody.mid")                                # -> DAW
open("melody.xml", "w").write(score.to_musicxml(title="My Melody"))   # -> sheet music
print("Detected key:", key)

Tips

  • Transcription is monophonic by default — one note at a time. Use split=True

for full mixes.

  • Pass bpm= if you know the tempo; otherwise it's estimated and timing/quantize

is interpreted against that estimate.

  • identify_chord returns a dict (or None) — check confidence before trusting

the symbol.

  • NumPy/SciPy ship as PyTheory dependencies, so scipy.io.wavfile (for reading

the audio buffer) needs no extra install.

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.