Independent software workshop

Voices, signals & strange maps.

I build local-first tools that put the interesting machinery on the outside—so it can be measured, questioned, and changed.

Five public projects

The workbench

Each project has its own repository and field notes. The apps stay local; the measurements, trade-offs, and failures are left visible.

01 / CARTOGRAPHY

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.

Swift · SwiftUI · macOS + iOS companion · GPL-3.0-or-later
Gateway Forge desktop home screen with its Focus-level map
02 / SPEECH

Voice Forge

A text-to-speech instrument with the synthesiser’s timing controls exposed and measured instead of hidden behind one generic speed slider.

Swift + Electron · macOS, Linux, Windows · GPL-3.0-or-later
Voice Forge native macOS interface with speech and timing controls
03 / FACE

Protoke

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.

Python · macOS, Linux, Windows · MIT
◤‿◥ visor^w^ happy▶_◀ sharp
¬‿¬ smugo_o wide-_- sleepy
owo curious^o^ delighted^_^ content
04 / DELIVERY

Media Preflight

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.

Python · macOS, Windows, Linux · MIT
-23.1 LUFS -1.4 dBTP 2.1 s black
48 kHz h264 drift 0.4 s
fast start mono no clipping
05 / FIELD TOOLS

tools-core

The useful pieces that fell out of the larger work: audio forensics, corpus preparation, Piper workflows, and Qwen3-TTS truth probes.

Python + shell · local-first · MIT / GPL-3.0 split
tools-core/
├── audio-analysis/
├── gateway-authoring/
├── piper-workflows/
└── tts-research/

tools-core

Open the toolbox

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
Audio / measurement

Beat analyser

Find persistent stereo tone pairs, calculate their differential, and separate likely entrainment signals from drifting content.

python3 audio-analysis/analyse-beat.py track.flac --json
Instructions ↗
Speech / corpus

Corpus aligner

Use 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 output
Instructions ↗
Speech / Piper

Piper workflows

Train, 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 OUT
Instructions ↗
Speech / Qwen3-TTS

Truth probes

Dump 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 PATH
Instructions ↗
Gateway / authoring

Library helpers

Index evidence, convert measured signals into playable profiles, verify corpus labels, and safely preview provisional briefings.

python3 gateway-authoring/seed-briefings.py PATH --dry-run
Instructions ↗

Small live specimens

Try the ideas

Two deliberately tiny sketches from the larger projects. Nothing is uploaded and nothing follows you away from this page.

A / DIFFERENTIAL

Two tones, one perceived beat

Pick a differential, put on headphones, then start the quiet signal. The left and right channels differ by the selected amount.

ready · carrier 100 Hz · differential 4.0 Hz

Headphones required to perceive the differential. Starts very quietly, stops automatically after 30 seconds, and stops when the page is hidden.

B / TIMING

A lyric line is a clock

Play the timing sketch. The words are fixed; only their measured windows decide what is active.

Build a little signal,
then give it room to breathe.
00:00.000 / 00:05.200
C / FACE

The face is a subtitle track

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.

64 frames · 3 shapes · one loop

A recurring method

How I build

The subjects change. The rules underneath them have stayed remarkably consistent.

01

Keep it local

Personal voice, private journals, and unfinished material stay on the machine unless there is a clear reason for them to leave.

02

Measure the claim

A waveform, duration, tensor, or failing check is more useful than “sounds about right.” Unknown stays a named state.

03

Show the mechanism

Good tools expose the meaningful controls and preserve the source material, instead of hiding both behind a convenient button.

Contact

Questions, odd measurements, useful disagreements.

Bug reports belong in the project that produced them. For everything else, email or Telegram reaches me directly.