Everything should be made as simple as possible, but no simpler.
We moved to Normandy. My job suddenly vanished. I learned LLM coding.
I'm spending my time on digital audio programming, MIDI, music, lighting control or other things close to my heart, trying to establish a tiny empire.
This is a dashboard of my active Python open-source projects on Github, mostly small- to medium-sized libraries that try to do one useful thing as clearly and thoroughly as possible.
🌟 means "Stars"
👁 means "Subscribers"
🟢 means "Release version"
🕰 means "Most recent non-version commit"
(Last update 2026/10/15, 15:22:04 by https://github.com/rec/multi)
🧬 arpeg 🧬
An expressive arpeggiator 26/10/15🟢Release v0.2.0
26/10/15🕰Update pyproject.toml and uv.lock for audited enveLFO |
baccy
Permanent backup daemon for media and other assets 26/10/15🟢Release v0.2.0
26/10/15🕰Update classifiers in pyproject.toml |
dvice
Manage unreliable audio devices 26/10/10🟢Release v0.2.0
26/10/11🕰Change inconsistent .python-version |
🚂 enge 🚂
an audio synthesizer engine in Python and Rust 26/10/10🟢Release v0.2.0
26/10/15🕰Finish enveLFO extraction in enge |
envelfo
Reusable envelopes, LFOs, and event-driven control signals 26/10/15🕰fixup! Add optional snapshot dependencies to envelfo-core |
🧚 lyte 🧚
Python lighting player for all lights 26/10/10🟢Release v0.2.0
26/10/11🕰Update classifiers in pyproject.toml |
meedee
Python bindings for the meedee Rust MIDI toolkit 26/10/10🟢Release v0.2.0
26/10/15🕰Add typed live I/O, bounded recording and clock-aware playback |
🎙 recs 🎙 (🌟 5 👁 2)
The Universal Recorder 26/10/15🟢Release v0.13.1
26/10/15🕰Make test paths portable on Windows |
reccy
Shared local app utilities for recs, showco, tuney, and lyte 26/10/12🟢Release v0.2.0
26/10/14🕰Add randomizer.py with repeat gaps and exhaustive cycles |
safaz
SFZ import and export for uFor instruments 26/10/15🟢Release v0.2.0
26/10/15🕰Update safaz envelope renderer dependencies |
🎪 showco 🎪
Local show control for recs and streamo 26/10/15🟢Release v0.3.0
26/10/15🕰Update classifiers in pyproject.toml |
🚰 streamo 🚰
Stream audio to all services 26/10/10🟢Release v0.2.0
26/10/15🕰Make scripts/render.py fade movies to black |
🎶 tuney 🎶 (🌟 4 👁 2)
Turn text into music 26/07/26🟢Release v0.3.55
26/10/14🕰Update tuney envelope renderer dependencies |
🛸 ufor 🛸
universal Format: portable definitions for time-based data 26/10/10🟢Release v0.2.0
26/10/15🕰fixup! Consolidate LFO definitions and remove ufor/lfo.py execution |
🧿 safer 🧿 (🌟 195 👁 2)
A safer writer for files and streams 26/10/10🟢Release v6.1.0
26/10/11🕰Update classifiers in pyproject.toml |
🖋 editor 🖋 (🌟 11)
Open the default text editor 26/09/19🟢Release v2.0.1
26/10/11🕰Update classifiers in pyproject.toml |
✂️ psplit ✂️
Split git patch files 26/10/11🕰Update classifiers in pyproject.toml |
🗜 gitz 🗜 (🌟 36 👁 2)
Tiny useful git commands, some dangerous 26/10/11🕰Update classifiers in pyproject.toml |
➰ rubband ➰
Python bindings for Rubber Band audio pitch shifting and time stretching 26/07/16🟢Release v0.3.1
26/10/11🕰Update classifiers in pyproject.toml |
🗃 tdir 🗃 (🌟 6)
Create and fill a temporary directory 26/09/19🟢Release v2.0.1
26/10/11🕰Update classifiers in pyproject.toml |
🎨 nc 🎨 (🌟 4)
Named colors in Python 26/10/11🕰Update classifiers in pyproject.toml |
🗝 dtyper 🗝 (🌟 21 👁 3)
Fix and improve `typer` 26/10/11🕰Update classifiers in pyproject.toml |
🏫 clsprop 🏫 (🌟 2)
Just like @property but for classes 26/10/11🕰Update classifiers in pyproject.toml |
🧵 threa 🧵 (🌟 2)
Better threads 26/05/09🕰Update version to v1.11.0 |
⛏ sproc ⛏ (🌟 12)
Subprocesseses for subhumanses 26/09/19🟢Release v3.0.4
26/10/11🕰Update classifiers in pyproject.toml |
🍱 zoialib 🍱 (🌟 4 👁 2)
A patch librarian for the Empress ZOIA 25/09/28🟢Release v0.3.0
26/05/09🕰Update version to v0.8.0 |
🌱 xmod 🌱 (🌟 5)
Turn any object into a module 26/05/09🕰Update version to v1.10.0 |
🛎 impall 🛎 (🌟 8)
Test-import all modules 26/09/19🟢Release v3.0.1
26/10/11🕰Update classifiers in pyproject.toml |
🐜 abbrev 🐜 (🌟 5)
Expand abbreviations 26/10/11🕰Update classifiers in pyproject.toml |
🎴 dek 🎴 (🌟 4)
The decorator-decorator 26/10/11🕰Update classifiers in pyproject.toml |
🖐️ fing 🖐️ (🌟 6)
A universal representation of fingering systems for winds, reeds, and brass 26/10/11🕰Update classifiers in pyproject.toml |
🌐 nmr 🌐
Name all canonical things 26/10/15🕰Add everyday and composite nmr codecs |
🗣 def_main 🗣
A decorator for main 26/10/11🕰Update classifiers in pyproject.toml |
📓 hardback 📓
Hardcopy backups of digital data 26/10/11🕰Update classifiers in pyproject.toml |
📦 backer 📦
Continuously back up files 26/10/11🕰Update classifiers in pyproject.toml |
🏺 fil 🏺 (🌟 3)
Read/write JSON/TOML/Yaml/txt 26/10/11🕰Update classifiers in pyproject.toml |
🔢 plur 🔢
Simple universal word pluralizer 26/10/11🕰Update classifiers in pyproject.toml |
🍇 cfgs 🍇 (🌟 3)
XDG standard config files 26/10/11🕰Update classifiers in pyproject.toml |
🌊 wavemap 🌊 (🌟 10 👁 2)
Memory map WAVE or raw audio files 26/05/09🕰Update version to v2.2.0 |
🛍 loady 🛍 (🌟 6 👁 2)
Load Python code and data from git 26/10/11🕰Update classifiers in pyproject.toml |
🏃 runs 🏃 (🌟 3 👁 2)
Run a block of text as a subprocess 26/10/11🕰Update classifiers in pyproject.toml |
🐘 fortune 🐘
A Mastodon bot for /usr/games/fortune 26/10/11🕰Update classifiers in pyproject.toml |
📚 multi 📚
Manage all my other projects 26/10/15🕰Recognize new versions |
⬜🟩🟦🟥 blocks 🟥🟦🟩⬜
Solve a block puzzle 26/10/11🕰Update classifiers in pyproject.toml |
❓ test ❓
Tiny bits of experimental code 26/10/13🕰Modify pyproject.toml, uv.lock |
⚫ dotfiles ⚫
My dotfiles 26/10/15🕰Modify bash/_functions.sh, bash/aliases.sh, bash/environment-variables.sh, elisp/define-functions.el, elisp/keyboard-shortcuts.el, git-commit-ids/git-commit-ids.txt |






