Skip to main content

Structure

meetings/
├── bin/
│   ├── meeting-start        # starts recording + live transcription
│   ├── meeting-stop         # stops recording, asks for meeting name, renames files
│   ├── meeting-follow       # follow transcript while it is being written
│   └── summarize-meeting    # create post-meeting summaries
│
├── lib/
│   ├── paths.sh             # creates session dirs + defines file paths
│   └── whisper.sh           # whisper.cpp binary, model, ASR parameters
│
└── recordings/
    └── 2025-03-24_1930/     # session directory (created on meeting-start)
        ├── audio.wav        # raw system audio recording
        ├── transcript.txt  # live transcript (grows during meeting)
        ├── meta.env        # session metadata (PIDs, language, timestamps)
        ├── 2025-03-24T1930_project-sync_transcript.txt
        ├── 2025-03-24T1930_project-sync_audio.wav
        └── summary.md      # created by summarize-meeting

Description of Paths and Scripts

Paths

Paths

Path: meetings/bin/

  • Executable scripts. 

Path: meetings/lib/

  • Scripts to be used by the executable scripts. 

Path: meetings/recordings/

  • Subdirectories (ISO timestamp format) containing:
    • Audio files (to be deleted after the transcript has been written)
    • transcript.txt (renamed and timestamped after the meeting's end by the meeting-stop script)
    • meta.env (Meeting information)
      • PIDs
      • language used
      • the meeting's timestamps
    • summary.md (meeting summary in Markdown format)

Scripts (current architecture)

TranscriptOMatic is implemented as a small set of composable shell scripts. Each script has a clearly defined responsibility within the session lifecycle. No script relies on implicit system state or hard-coded audio devices.

ScriptsLibrary scripts (meetings/lib/)

Script: meetings/lib/paths.sh

Creates:Responsible
for 
session creation and path management.

On invocation, it:

  • Sessioncreates Directorya new session directory
~/meetings/recordings/<ISO_TIMESTAMP>/
  • Session Files

    defines canonical file locations:

    • audio.wav

    • transcript.txt

    • meta.env

  • Timestamps (ISO)

    provides these paths to all other scripts

andThis script is the only place where session directories are created.

  • Provides path information for all scripts

Script: meetings/lib/whisper.sh

Contains:Defines the speech recognition backend configuration.

It contains:

  • the path to the local whisper.cpp installation

  • the language model used (currently ggml-base.bin)

  • ASR parameter

    model usedselection (language-specific vs. multilingual)

  • streaming parameters

  • threading configuration suitable for a Raspberry Pi–class system

The setup is explicitly optimized for Scriptlive transcription: using whisper-stream, not for batch processing.

No audio devices are referenced here.

Executable scripts (meetings/bin/)

meeting-start

  • Creates

    Starts a new directorylive intranscription meetings/recordings/

  • session.

    Responsibilities

    1. startsSession
      • ffmpeg (feeds system audio into audio.wav)
      • whisper.cpp initialization
        • creates livea transcriptnew fromsession audio
        • directory
        • feedsvia transcript into meetings/recordings/$DATE/transcript.txt
      paths.sh
    2. writes informationthe intoactive session path to ~/meetings/recordings/$DATE/meta.env
    3. finetunes whisper.cpp by language switch --de, --en, --auto

Script: meetings/bin/meeting-stop

  • Stops the recording
  • asks for a meeting name
    • replaces spaces with hyphens
  • renames the meeting-related files
    • audio.wav
    • transcript.txt.current
  • according to

    Audio graph setup (PipeWire)

    • ensures a persistent null sink (discord_sink)

    • routes Discord audio into that sink

    • exposes the timestampsink containedmonitor inas meta.enva virtual microphone (whisper_mic)

    Script: meetings/bin/meeting-follow

       

    • Shows the transcript while it is written
      • mainly to monitor the process, but can be used as a live transcript, too.

    • Needs to run in a different terminal from meeting-start

    Script: meetings/bin/summarize-meeting

       

    • Creates

      a

       summary file based on the meeting transcript.