Gateway Forge
A guided-meditation assembly system and journal that keeps the published map beside what was actually found—without forcing them into one answer.
Independent software workshop
I build local-first tools that put the interesting machinery on the outside—so it can be measured, questioned, and changed.
Eight public projects
Each project has its own repository and field notes. The apps stay local; the measurements, trade-offs, and failures are left visible.
A guided-meditation assembly system and journal that keeps the published map beside what was actually found—without forcing them into one answer.
A text-to-speech instrument with the synthesiser’s timing controls exposed and measured instead of hidden behind one generic speed slider.
proto + karaoke. A karaoke and narration renderer fronted by a protogen visor face — two eyes and a mouth drawn as vector outlines and burned in by the same libass pass that draws the lyrics, so there is no image sequence to composite.
Check a finished file against where it is going — YouTube, ACX, EBU R 128, or a standard of your own — and get the exact timestamps of what is wrong. Then, optionally, a corrected copy that is measured again from scratch before it claims to be fixed. The original is never touched.
Paste a link and get the file — or point it at a folder you already have and get the same thing in a different shape. It is one pipeline either way, and it does not re-encode what it does not have to: asking for an mp4 that is already H.264 and AAC moves the streams into a new container and changes nothing else. Playlists from Deezer, Spotify and Tidal arrive tagged, covered and foldered, and a track it is not sure about stops and asks before it fetches.
Empties a Downloads folder and keeps it empty. It works out what each file is from its bytes rather than its name, reads what documents call themselves, and once three of them share a heading they get a folder of their own. When it learns something new it goes back over what it already filed. Every move is written down and can be undone, and nothing is ever deleted: what goes, goes to the bin.
Live interpreting into English that waits for a complete thought, the way a human interpreter does, instead of translating every half-sentence. Polish, Hungarian or any of 25 languages around the table arrive in your ear a few seconds behind; English is left alone. Recognition, translation and the voice all run on the iPhone or Mac in front of you.
The useful pieces that fell out of the larger work: caption checks, media repackaging, audio tagging, file identification, duplicate finding, asset grouping and tray icons, alongside audio forensics, corpus preparation and voice research.
tools-core
These are working instruments, not a framework. Take the one that answers your question, give it explicit paths, and keep the generated material out of Git.
git clone https://github.com/snepssen/tools-core.git && cd tools-core
Find subtitle cues that are too fast, too long, overlap in the same position or run past the end. Check SRT, VTT and ASS locally, with the exact times and configurable thresholds.
python3 caption-check/caption-check.py subtitles.srtPut a recording in another container without re-encoding. Every supported track is copied; an incompatible track stops the operation. Preview the decision, then write a new file.
python3 remux/remux.py recording.mp4 recording.mkv --planFind files with identical bytes across folders. See every copy and its logical size, with hard links counted once. Nothing is deleted, moved or chosen for you.
python3 exact-duplicates/exact-duplicates.py ~/DownloadsSee which files belong together: a film and its subtitles, a RAW/JPEG pair, a model and its sidecars, or a sequence of frames. Read the groups or export a JSON listing.
python3 bundle-list/bundle-list.py ./assets --groups-onlyStop “Unknown artist”. Title, artist, album, year and track number for untagged WAV, MP3 and FLAC files, read from the folder layout, the file names and the order they were made. Preview first, then write in place.
python3 audio-tag/audio-tag.py ~/Music --artist "Your Name"Find persistent stereo tone pairs, calculate their differential, and separate likely entrainment signals from drifting content.
python3 audio-analysis/analyse-beat.py track.flac --jsonUse authored text as truth, ASR only for timing, and quiet gaps for safe cuts—then preserve a manifest of every decision.
python3 audio-analysis/align-corpus.py read.wav words.json script.md outputTrain, resume, export, render, and A/B checkpoints while retaining fixes for checkpoint loading, dynamic shapes, and telemetry.
bash piper-workflows/check-in.sh RUN CONFIG OUTDump real MLX tensors, tokenizer slices, and speaking pace so a native port can be compared stage by stage instead of trusted by ear.
python3 tts-research/qwen3-tokenizer-truth.py --gateway-root PATHIndex evidence, convert measured signals into playable profiles, verify corpus labels, and safely preview provisional briefings.
python3 gateway-authoring/seed-briefings.py PATH --dry-runSay what a file is from its bytes, not its name: the real format when the extension lies, the heading a document gives itself, when it happened and where it came from. auto-sort’s own identifier, unchanged, and it never writes.
python3 file-identify/identify-file.py FILE --factsPut an icon with a menu in the macOS menu bar, the Windows notification area or a Linux panel, each entry running a command of yours. Nothing installed: auto-sort’s own tray, speaking to the Objective-C runtime, Win32 and D-Bus with the standard library.
python3 tray-icon/tray-icon.py "Backups" --item "Back up now" "~/bin/backup.sh"Small live specimens
Two deliberately tiny sketches from the larger projects. Nothing is uploaded and nothing follows you away from this page.
Pick a differential, put on headphones, then start the quiet signal. The left and right channels differ by the selected amount.
Headphones required to perceive the differential. Starts very quietly, stops automatically after 30 seconds, and stops when the page is hidden.
Play the timing sketch. The words are fixed; only their measured windows decide what is active.
No image sequence and no video layer: two eyes and a mouth, drawn from a dozen numbers and burned in by the same libass that draws the lyrics. These are Protoke's own frames, played back.
A recurring method
The subjects change. The rules underneath them have stayed remarkably consistent.
Personal voice, private journals, and unfinished material stay on the machine unless there is a clear reason for them to leave.
A waveform, duration, tensor, or failing check is more useful than “sounds about right.” Unknown stays a named state.
Good tools expose the meaningful controls and preserve the source material, instead of hiding both behind a convenient button.
The wider workshop
Move between guided-meditation authoring, measured speech, live interpreting, a voice companion, lyric video, delivery validation, keeping a Downloads folder empty, and the small field tools that support all of them, on one voice, one speech engine and one hearing layer they share.
Assemble guided sessions and keep published maps beside what was actually found.
Explore Gateway Forge →A transparent Piper workbench for timing, pronunciation, and honest audio export.
Explore Voice Forge →Karaoke and narration video with a vector visor face that mouths every word.
Explore Protoke →Check a finished file against where it is going, and correct it without touching the original.
Explore Media Preflight →Fetch from a link or convert what you already have, without re-encoding what it does not have to.
Explore siphon →Empty the Downloads funnel into structure the folder taught it, and undo any of it.
Explore auto-sort →Hear the table in English a few seconds behind, cut at the end of each thought, on your own phone.
Explore Interpreter →A local voice companion for Mac, iPhone and iPad, with a protogen LED-visor face.
Explore companion-forge →Small utilities for audio inspection, corpus work, authoring, and repeatable checks.
Open the toolbox →Foundations
The parts the projects are built from. They have no page of their own: each is a repository, and the projects are where you see them at work.
Get in touch
Bug reports belong in the project that produced them. For everything else, email or Telegram reaches me directly.