Everything should be made as simple as possible, but no simpler.
We moved to Normandy. My job suddenly vanished. AI bores me. I took early retirement! Life is good.
So I'm spending my time on music and digital audio programm. I'm still open to work in digital audio, MIDI, music, lighting control or other things I find personally entertaining.
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.
(No AI was used in the writing or maintenance of any of these libraries.)
🌟 means "Stars"
👁 means "Subscribers"
🟢 means "Release version"
🕰 means "Most recent non-version commit"
(Last update 2026/05/09, 20:40:16 by https://github.com/rec/multi)
🧿 safer 🧿 (🌟 193 👁 2)
A safer writer for files and streams 26/05/09🟢Update version to v5.4.0
26/05/08🕰Make project compatible with uv and poetry |
🗃 tdir 🗃 (🌟 6)
Create and fill a temporary directory 26/05/09🟢Update version to v1.10.0
26/05/08🕰Make project compatible with uv and poetry |
🖋 editor 🖋 (🌟 10)
Open the default text editor 26/05/09🟢Update version to v1.8.0
26/05/08🕰Make project compatible with uv and poetry |
✂️ psplit ✂️
Split git patch files 26/05/09🟢Update version to v1.2.0
26/05/08🕰Make project compatible with uv and poetry |
🗜 gitz 🗜 (🌟 37 👁 2)
Tiny useful git commands, some dangerous 26/05/09🟢Update version to v1.9.0
26/05/08🕰Make project compatible with uv and poetry |
🎨 nc 🎨 (🌟 4)
Named colors in Python 26/05/09🟢Update version to v1.2.0
26/05/08🕰Make project compatible with uv and poetry |
🗝 dtyper 🗝 (🌟 21 👁 3)
Fix and improve `typer` 26/05/09🟢Update version to v2.7.0
26/05/08🕰Make project compatible with uv and poetry |
🏫 clsprop 🏫 (🌟 2)
Just like @property but for classes 26/05/09🟢Update version to v1.5.0
26/05/08🕰Make project compatible with uv and poetry |
🧵 threa 🧵 (🌟 2)
Better threads 26/05/09🟢Update version to v1.11.0
26/05/08🕰Make project compatible with uv and poetry |
⛏ sproc ⛏ (🌟 12)
Subprocesseses for subhumanses 26/05/09🟢Update version to v2.6.0
26/05/08🕰Make project compatible with uv and poetry |
🍱 zoialib 🍱 (🌟 4 👁 2)
A patch librarian for the Empress ZOIA 26/05/09🟢Update version to v0.8.0
26/05/08🕰Make project compatible with uv and poetry |
🌱 xmod 🌱 (🌟 5)
Turn any object into a module 26/05/09🟢Update version to v1.10.0
26/05/09🕰Make project compatible with uv and poetry (fix #9) |
🛎 impall 🛎 (🌟 8)
Test-import all modules 26/05/09🟢Update version to v1.7.0
26/05/08🕰Make project compatible with uv and poetry |
🗂 datacls 🗂 (🌟 3)
Take the edge off `dataclass` 26/05/09🟢Update version to v4.10.0
26/05/08🕰Make project compatible with uv and poetry |
🐜 abbrev 🐜 (🌟 4)
Expand abbreviations 26/05/09🟢Update version to v1.4.0
26/05/08🕰Make project compatible with uv and poetry |
🎴 dek 🎴 (🌟 4)
The decorator-decorator 26/05/09🟢Update version to v1.6.0
26/05/08🕰Make project compatible with uv and poetry |
🎧 fmix 🎧
A scripted track mixer 26/05/09🟢Update version to v0.2.0
26/05/09🕰Make sure that sys.exit is called with a string in __main__.py |
🎶 tuney 🎶
Turn text into music (#noAI) 26/05/09🟢Update version to v0.3.0
26/05/08🕰Make project compatible with uv and poetry |
🥞 pullman 🥞
Manage ghstack pull requests 26/05/09🟢Update version to v0.12.0
26/05/08🕰Make project compatible with uv and poetry |
🔧 fixo 🔧
Semi-automatic rule based editing of Python code 26/05/09🟢Update version to v0.3.0
26/05/08🕰Make project compatible with uv and poetry |
🏺 fil 🏺 (🌟 3)
Read/write JSON/TOML/Yaml/txt 26/05/09🟢Update version to v1.6.0
26/05/08🕰Make project compatible with uv and poetry |
🔢 plur 🔢
Simple universal word pluralizer 26/02/03🟢Update version to v1.1.0
26/05/08🕰Make project compatible with uv and poetry |
🍇 cfgs 🍇 (🌟 3)
XDG standard config files 26/02/03🟢Update version to v0.14.0
26/05/08🕰Make project compatible with uv and poetry |
🖐️ fing 🖐️ (🌟 6)
A universal representation of fingering systems for winds, reeds, and brass 26/05/09🟢Update version to v0.3.0
26/05/08🕰Make project compatible with uv and poetry |
🌐 nmr 🌐
Name all canonical things 26/05/09🟢Update version to v0.11.0
26/05/08🕰Make project compatible with uv and poetry |
🎙 recs 🎙 (🌟 3 👁 2)
The Universal Recorder 26/05/09🟢Update version to v0.12.0
26/05/08🕰Make project compatible with uv and poetry |
🔉 vl8 🔉 (🌟 3)
Perturbed audio 26/05/09🟢Update version to v0.4.0
26/05/08🕰Make project compatible with uv and poetry |
💡 litoid 💡
Sequence DMX lighting 26/05/09🟢Update version to v0.3.0
26/05/08🕰Make project compatible with uv and poetry |
🗣 def_main 🗣
A decorator for main 26/02/03🟢Update version to v0.12.0
26/05/08🕰Make project compatible with uv and poetry |
📓 hardback 📓
Hardcopy backups of digital data 26/02/03🟢Update version to v0.10.0
26/05/08🕰Make project compatible with uv and poetry |
📦 backer 📦
Continuously back up files 26/02/03🟢Update version to v0.8.0
26/05/08🕰Make project compatible with uv and poetry |
🌊 wavemap 🌊 (🌟 10 👁 2)
Memory map WAVE or raw audio files 26/05/09🟢Update version to v2.2.0
26/05/08🕰Make project compatible with uv and poetry |
🛍 loady 🛍 (🌟 6 👁 2)
Load Python code and data from git 26/02/03🟢Update version to v1.9.0
26/05/08🕰Make project compatible with uv and poetry |
🏃 runs 🏃 (🌟 3 👁 2)
Run a block of text as a subprocess 26/02/03🟢Update version to v1.3.0
26/05/08🕰Make project compatible with uv and poetry |
🐘 fortune 🐘
A Mastodon bot for /usr/games/fortune 26/05/09🟢Update version to v0.3.0
26/05/08🕰Make project compatible with uv and poetry |
📚 multi 📚
Manage all my other projects 23/02/02🟢Update to version v0.1.0
26/05/09🕰Make project compatible with uv and poetry |
⬜🟩🟦🟥 blocks 🟥🟦🟩⬜
Solve a block puzzle 26/02/03🟢Update version to v1.1.0
26/05/08🕰Make project compatible with uv and poetry |
❓ test ❓
Tiny bits of experimental code 26/05/08🕰Several changes |
⚫ dotfiles ⚫
My dotfiles 26/05/08🕰Modify dotfiles/.emacs.d/.emacs.desktop |






