One-line verdict. The powerful live-transcription engine you want already exists and is already chosen (skynet + jigasi). It hasn't shipped because of infrastructure — a GPU host and the self-host Jitsi cutover — not tool choice. Meetily is the stopgap standing in exactly that gap. Don't re-tool; unblock the infra.
Every Meetily complaint is exactly what skynet+jigasi fixes:
| Meetily limitation | skynet + jigasi |
|---|---|
| Processes background OS audio | Joins the conference server-side; transcribes the live call |
| No speaker attribution (one mixed stream) | Per-participant RTP stream → XMPP-roster name, before ASR |
| Doesn't slot into the pipeline | /summarize + /action-items → write-back to the meetings, CRM, and task tables |
| Single-machine operator dependency | Server-side service beside the Jitsi deploy |
Why it's not live: per metis #26 — Epic #110 all at 🔬/❌, D1 gated on metis-051 GPU host; meet.boas.dev still on JaaS 8x8.vc (Phase-1 self-host cutover to jitsi.boas.dev not done, #41). Jigasi cannot attach to JaaS — it needs Prosody VirtualHost + brewery-MUC + Jicofo config that 8x8's closed service doesn't expose. The self-host dependency is hard, not arbitrary.
MECHANISM CONFIRMED JVB is an SFU → Jigasi gets N separate RTP streams (one SSRC/speaker, no mixing). Transcriber.findParticipant(ssrc) routes each buffer to its own Participant carrying getName()/getEmail() from XMPP presence; skynet just echoes the speaker_id|lang tag. Stronger than acoustic diarization for "who said this."
PARTIAL Caveats the build must handle: (1) unmapped-SSRC segments are silently dropped (GitHub issue #91, open; jigasi has no release trail to confirm a fix) → instrument for drops; (2) getName() falls back to literal "Fellow Jitser" for presence-less participants; (3) no independent accuracy study — forum traffic is setup pain, not misattribution. Keep a diarization fallback.
Cross-lane note: a secondary source claimed Jigasi "mixes all audio into one stream." The jigasi source code refutes this — per-SSRC separation, no mix step. Primary source wins.
| Option | Today? | Speakers? | Self-host / privacy | Effort | Cost |
|---|---|---|---|---|---|
| JaaS-native transcription | Yes | Yes | No — Google Cloud STT hop | Low | $0.06/min |
| Jigasi → JaaS | No | — | needs Prosody/Jicofo access | — | — |
| Custom participant-bot | Possible, no OSS tool | If built | STT stays local | Med-high build | infra |
| Phase-1 self-host + skynet/jigasi (ratified) | Blocked (GPU+cutover) | Yes | Fully self-hosted | scoped | infra |
Under self-host mandatory, JaaS-native is disqualified as a standing solution — viable only as a deliberate bridge. No off-the-shelf tool reaches live + speaker-labeled + self-hosted without the cutover or a custom bot. Recall.ai / Vexa / Attendee / MeetingBaas — none support Jitsi.
skynet's streaming_whisper requires a per-stream language hint (no auto-detect) — and that constraint is the answer:
whisper-large-v3(-turbo) on EN-primary speakers (zero forgetting risk), IS fine-tune on IS-primary speakers. Different checkpoints per stream — a config change, not code.jonasaise (frozen base → preserves EN) over full fine-tunes sam8000 / LVL (best IS WER but EN-forgetting risk).CONFIRMED-with-build In-meeting language toggle (Lane D, source-verified across jigasi + lib-jitsi-meet + skynet master). A participant fires a command to flip IS↔EN; transcription switches from that point forward.
Headline: don't re-tool. Unblock the infra, close two small gaps, update the PRD with the verified caveats.
streaming_whisper (stock v3 EN / IS fine-tune IS). Update PRD ASR section (was IS-single-model).| Option | What you get | Trade |
|---|---|---|
| (a) Stay on Meetily | No third-party hop; keep waiting | No speaker attribution in the interim |
| (b) Bridge on JaaS-native | Live, speaker-attributed, ~1 day, $0.06/min | Audio → Google Cloud STT (flex self-host, time-boxed) |
| (c) Custom participant-bot | Self-host STT, no wait | Real build; ≈ cost of finishing cutover, no durable result — dominated |
Hermes rec: (a) or (b) depending on urgency for live speaker-attributed notes — and push metis-051 + #41 as the actual fix. (c) is dominated.
research/meeting-transcription-refresh-2026-07-07/ · commit 01c964b