aboutsummaryrefslogtreecommitdiff
path: root/working/meeting-transcription-service/systemd
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-09-25 13:05:42 -0400
committerCraig Jennings <c@cjennings.net>2026-09-25 13:05:42 -0400
commit767b84e2675e7074408a81257a5ec6d0dd410c4d (patch)
treedaf291354ba3be11224849635e2962771ba5fde8 /working/meeting-transcription-service/systemd
parent676970817ef7fdc0425205d4f3c319bdc534b51b (diff)
downloadarchsetup-767b84e2675e7074408a81257a5ec6d0dd410c4d.tar.gz
archsetup-767b84e2675e7074408a81257a5ec6d0dd410c4d.zip
chore: stage the meeting transcription service for an install home
This is a self-hosted transcription service: whisper.cpp for the words, pyannote for the speaker labels. It has been running on ratio since 2026-09-17, with velox as the offline fallback. A systemd path unit watches a filesystem queue and starts a oneshot worker per job. There is no network listener. ssh is the transport, systemd is the daemon, and the filesystem is the queue. It lands in working/ rather than its final home because two decisions come first. I haven't picked where the code lives in this repo. The Hugging Face token the diarization model needs on its first download also has to be handled, since anyone can read this repo. Neither blocks the service, which already runs. Both block the install path this repo owes it. The accompanying note lists what each machine needs. The torch venv is 1.3 GB and the whisper model is a separate download, so the note describes both rather than carrying them here.
Diffstat (limited to 'working/meeting-transcription-service/systemd')
-rw-r--r--working/meeting-transcription-service/systemd/meeting-transcribe.path12
-rw-r--r--working/meeting-transcription-service/systemd/meeting-transcribe.service9
2 files changed, 21 insertions, 0 deletions
diff --git a/working/meeting-transcription-service/systemd/meeting-transcribe.path b/working/meeting-transcription-service/systemd/meeting-transcribe.path
new file mode 100644
index 0000000..821b292
--- /dev/null
+++ b/working/meeting-transcription-service/systemd/meeting-transcribe.path
@@ -0,0 +1,12 @@
+[Unit]
+Description=Watch the meeting-transcription queue for new jobs
+
+[Path]
+# incoming/ only ever holds complete jobs: the client uploads into uploading/ and
+# renames the finished folder across. So "not empty" always means real work, and the
+# worker emptying the folder is what lets this unit go quiet again.
+DirectoryNotEmpty=%h/.local/state/meeting-transcribe/incoming
+MakeDirectory=yes
+
+[Install]
+WantedBy=default.target
diff --git a/working/meeting-transcription-service/systemd/meeting-transcribe.service b/working/meeting-transcription-service/systemd/meeting-transcribe.service
new file mode 100644
index 0000000..92f5ef4
--- /dev/null
+++ b/working/meeting-transcription-service/systemd/meeting-transcribe.service
@@ -0,0 +1,9 @@
+[Unit]
+Description=Transcribe queued meeting recordings (whisper + pyannote)
+
+[Service]
+Type=oneshot
+ExecStart=%h/.local/share/pyannote-diarize/src/transcribe-worker
+# The pyannote model is cached after its first download; never reach for the network.
+Environment=HF_HUB_OFFLINE=1
+Nice=5