Bouliw

Software that does its work where your files are.

I build apps and command-line tools to fix problems I actually have, then publish them as open source. Most of them run entirely on-device, so footage, audio, logs and documents stay on the machine.

01 · Video editing

Roughcut

Turns a folder of footage into a rough cut in Final Cut Pro.

Drop a folder on the window and press Edit. Whisper transcribes every word with its timestamp on the Mac, then a language model of your choice picks the takes. The scripts turn its cuts into a frame-accurate FCPXML timeline that comes with subtitles and up to three vertical Shorts. Each timeline is checked against the DTD that ships inside Final Cut Pro before it's imported.

Real test: 47 min of 4K vlog footage became a 22-min rough cut and three Shorts in 31 min.

  • Swift
  • Python
  • whisper.cpp
  • ffmpeg
  • FCPXML
Waveforms of a 30.7 s raw take with the kept parts highlighted, then the 16.3 s rough cut made from it Roughcut window: the demo footage is ready, a 20-minute edit and three Shorts, with an Open in Final Cut Pro button

02 · Live transcription

Earshot

Live transcription of any app on the Mac, with speaker names.

Pick Teams, Zoom or Chrome from the menu bar and Earshot transcribes only that app's audio, as it's said. It taps the app's own output through Core Audio. System sounds and your own microphone stay out of the transcript, and no bot joins the call.

In Teams, speaker names come from its live captions. Each session is filed under its calendar event, and live subtitles can float over any window.

Nothing is uploaded: capture and transcription both run on the Mac.

  • Swift
  • Core Audio taps
  • whisper.cpp + Metal
  • EventKit
  • Accessibility API

03 · Threat detection

Vigie

A blue team tool that turns raw logs into a report an analyst can read.

Vigie reads Windows event logs (Sysmon and PowerShell included), Linux auth.log files, the macOS unified log and the activity logs of AI agents and LLM applications. It runs Sigma rules on them with its own engine and maps every alert to MITRE ATT&CK offline, or to the OWASP Top 10 lists when the target is an AI system. It works on collected logs or live, from a desktop app or the terminal.

Correlation rules catch brute force, password spraying and a successful login right after a brute force. On the AI side, Vigie flags prompt injections, leaked system prompts and MCP tools whose description hides instructions for the model.

53 Sigma rules, each one tested with positive and negative cases.

  • Python
  • Sigma
  • MITRE ATT&CK
  • OWASP
  • EVTX
  • Jinja2
Top of a Vigie HTML report: the verdict, alert counts by severity and the MITRE ATT&CK tactics they map to

04 · Voice assistant

Boulito

A voice assistant for macOS that runs 100% on the Mac.

Hold a key or say its name, then talk in English or French: open apps, drive YouTube in Safari, set timers, send a message or dictate. Simple commands go through rules in about 0.2 s, and a local model only steps in for free-form requests.

No server runs, not even on localhost. Messages and reminders are read back first, and Boulito waits for a clear yes.

Parakeet and Qwen 3.5 run through MLX, with no open port.

  • Python
  • MLX
  • Parakeet
  • Qwen 3.5
  • PyObjC

05 · Teleprompter

Takeline

A teleprompter that follows your voice in French and English, entirely on the Mac.

The script sits under the MacBook notch or in a floating window, and each word lights up as you say it. Say “take two” or “on la refait”, or just read the sentence again: the text goes back and the retake is noted with its time, in a session file an editing tool can use.

It's a fork of Textream.

On-device speech recognition with SpeechAnalyzer. No account, no analytics.

  • Swift
  • SwiftUI
  • SpeechAnalyzer
  • Foundation Models

06 · Music library

trackmend

Repairs a macOS Music library full of local files.

It's made for YouTube rips and albums saved as one long file. trackmend cleans the titles and finds the real artwork, album, year and track number on Deezer. It also adds lyrics from LRCLIB and removes duplicate copies. Full albums get cut into one track per song.

Changes go through the Music app itself: each track is found by its persistent ID, so Music takes every one of them.

Dry run by default. Every change is backed up first, and trackmend undo puts it all back.

  • Python
  • JavaScript for Automation
  • AppleScript
  • mutagen
  • ffmpeg
trackmend scan report on a sample library of twelve files, before and after the tags, lyrics and dedup commands

07 · Private OCR

doc-indexer-macos

On-device OCR and text extraction for a folder of paperwork.

Point it at scanned PDFs and phone photos of receipts, and you get one plain-text file per document plus a manifest that grep or any other tool can read. OCR runs on the Mac with Apple Vision, and the originals are never modified.

Runs are incremental: only the documents that changed are processed again.

Zero dependencies: Python's standard library and frameworks that ship with macOS.

  • Python
  • Swift
  • Apple Vision
  • PDFKit
  • textutil
Terminal: fictitious documents extracted to text, then the OCR text of a scanned rent receipt

08 · Everyday tools

mac-toolkit

Small tools I use every day, in one install script.

HeadsetGuard keeps a Bluetooth headset from clipping short sounds, CleanLinks strips tracking parameters from copied links, and Finder quick actions transcribe a video or compress it for Discord. Two Safari share actions download a video or send it to an LG TV at the current timestamp.

Most of them run in the background as launch agents.

Running ./install.sh again updates everything in place.

  • Shell
  • Swift
  • Python
  • launchd
  • Shortcuts

$ ./install.sh --list

headset-guard
Bluetooth headset: no more clipped sounds, its mic is never picked automatically
clean-links
strips tracking parameters (utm, fbclid, ?si=…) from copied links
fps-counter
Metal FPS counter in games
quick-actions
Finder: Transcribe, Compress for Discord, Shrink PDF, Strip Metadata
download-video
Share menu: Download Video (yt-dlp, updated daily)
send-to-tv
Share menu: send a YouTube video or a Twitch channel to an LG TV
auto-pip
Safari: automatic picture-in-picture when you switch tabs
wallper-sync
system wallpaper kept in sync with Wallper
finetune-patch
FineTune rebuilt: per-app volume, audio devices left to macOS

09 · Home cinema

Lantern

A stylish client for my Jellyfin library, on the Mac, an LG TV and phones.

One TypeScript web app: it installs from Safari on the Mac and on phones, and ships as a webOS app on the TV, where every press of the remote answers instantly. Jellyfin stays the engine; Lantern only replaces the interface.

Films in a collection become sagas, recommendations come from a small engine that runs in the app and learns from what I watch, and the player chooses between direct play and a server stream on its own, with intro and credits skipping, scrubbing previews and the next episode.

Eight styles, each with its own motion, interface sounds and generative background music.

  • TypeScript
  • Preact
  • Vite
  • hls.js
  • Web Audio
  • webOS
Lantern's home page in the P5 style: a large banner for a film saga, then rows of titles

Upstream

Homebrew

One-line fix to the whisper.cpp formula, merged into homebrew-core.

After installing whisper.cpp, Homebrew's caveats sent users to a model host that now returns a 404. I replaced the link with the models folder of the upstream repository, which lists the available models and how to download them.

Formula/w/whisper.cpp.rb    To obtain model files (.bin), visit one of these locations:       https://huggingface.co/ggerganov/whisper.cpp/tree/main-     https://ggml.ggerganov.com/+     https://github.com/ggml-org/whisper.cpp/tree/master/models