Close
0%
0%

Spider Subtitler

Real-time speech-to-subtitle tool powered by whisper.cpp. Captures microphone audio in short chunks, transcribes and translates it

Similar projects worth following
The workflow is: open the app on your laptop, start the laserdisc, place the laptop near the TV, and wait. The microphone picks up the audio, whisper.cpp transcribes and translates it, and the subtitles appear on your screen. There is a theater mode so you can read them from the couch without squinting. That's it. That's the whole thing. The software handles silence detection, filters hallucinations, suppresses the whisper model's tendency to spontaneous Real-time speech-to-subtitle tool powered by whisper.cpp. Captures microphone audio in short chunks, transcribes and translates it (Japanese → English by default), and displays live subtitles — either overlaid on a video feed (Linux/GStreamer) or in an Electron GUI window (macOS/Linux).

Spider Subtitler


Real-time speech-to-subtitle tool powered by whisper.cpp. Captures microphone audio in short chunks, transcribes and translates it (Japanese → English by default), and displays live subtitles — either overlaid on a video feed (Linux/GStreamer) or in an Electron GUI window (macOS/Linux).

How it works


  • id_subtitle_deamon.py — core Python daemon; records audio chunks, runs whisper.cpp for translation, and emits subtitles
  • electron-subtitle-app/ — optional Electron GUI that wraps the daemon with a config panel and floating subtitle window

Prerequisites


All platforms


  1. whisper.cpp — build from source and note the path to the binary and a model file.
    git clone https://github.com/ggerganov/whisper.cpp
    cd whisper.cpp
    cmake -B build && cmake --build build --config Release
    bash models/download-ggml-model.sh small   # or base, medium, large
  2. Python 3.9+

Installation


macOS


# Audio capture and (optional) GStreamer overlay
brew install ffmpeg pygobject3 gobject-introspection gst-plugins-base gstreamer

# Python dependencies
pip3 install SpeechRecognition PyAudio PyGObject

Linux (Debian / Ubuntu / Raspberry Pi)


# Audio capture (arecord) and GStreamer overlay
sudo apt-get install -y \    alsa-utils \    python3-gi \    gir1.2-gstreamer-1.0 \    gstreamer1.0-tools \    gstreamer1.0-plugins-base \    gstreamer1.0-plugins-good

# Python dependencies
pip3 install SpeechRecognition PyAudio

Electron GUI (optional, all platforms)


Requires Node.js 18+.

cd electron-subtitle-app
npm install

Running


Command-line daemon


python3 id_subtitle_deamon.py \  --whisper-bin /path/to/whisper.cpp/build/bin/whisper-cli \  --model /path/to/whisper.cpp/models/ggml-small.bin \  --source-language ja        # source language (ja = Japanese, auto = auto-detect)  --no-overlay                # omit to use GStreamer video overlay (Linux)

Key environment variables (override defaults):


VariableDefault (Linux)Default (macOS)
AUDIO_DEVICEplughw:1,0:0
VIDEO_DEVICE/dev/usb001
WHISPER_BIN/home/pi/whisper.cpp/main
MODEL_PATH/home/pi/whisper.cpp/models/ggml-small.bin
MIN_AUDIO_RMS250250

Electron GUI


cd electron-subtitle-app
npm start

Configure the whisper binary path, model path, audio device, and language from the settings panel in the app.

One-shot translation (testing)


python3 id_subtitle_deamon.py \  --test-translate /path/to/audio.wav \  --whisper-bin /path/to/whisper-cli \  --model /path/to/ggml-small.bin

Notes


  • On macOS, PyGObject/GStreamer is optional; the daemon falls back to --no-overlay mode automatically if not installed.
  • Adjust --chunk-seconds (default: 2) to tune latency vs. accuracy.
  • Set MIN_AUDIO_RMS lower to pick up quieter audio, or higher to reduce false triggers.

  • Here are some pictures of the software in action!!!

    TheCatwoman05/05/2026 at 18:44 0 comments

    This is what the system looks like in real life.  It is meant to be easy.  You have your japanese laserdisc and you need it to be subtitled.  it picks up the audio from the tv and then translates that to english.  The system is currently in theatre mode.  This dims the screen and makes the subtitle text larger than before. 

View project log

Enjoy this project?

Share

Discussions

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates