From db770c341d0a9a53b04c23aa5055e2ca19ad5cf7 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 22 Mar 2026 09:54:19 -0700 Subject: [PATCH] Fix CSP blocking IPC/assets + fix pyannote AudioDecoder crash CSP: Add connect-src for ipc.localhost and asset.localhost so Tauri IPC commands and local file loading (waveform, audio playback) work. pyannote: Block torchcodec in sys.modules at startup so pyannote.audio falls back to torchaudio for audio decoding. pyannote has a bug where it uses AudioDecoder unconditionally even when torchcodec import fails. Co-Authored-By: Claude Opus 4.6 --- python/voice_to_notes/main.py | 7 +++++++ src-tauri/tauri.conf.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/python/voice_to_notes/main.py b/python/voice_to_notes/main.py index d72d1df..c13ca7d 100644 --- a/python/voice_to_notes/main.py +++ b/python/voice_to_notes/main.py @@ -5,6 +5,13 @@ from __future__ import annotations import signal import sys +# Block torchcodec before anything imports it. pyannote.audio has a bug where +# it conditionally imports AudioDecoder from torchcodec but uses it +# unconditionally. Making torchcodec fully unimportable forces the torchaudio +# fallback path. +sys.modules["torchcodec"] = None # type: ignore[assignment] +sys.modules["torchcodec.decoders"] = None # type: ignore[assignment] + # CRITICAL: Capture real stdout for IPC *before* importing any ML libraries # that might print to stdout and corrupt the JSON-line protocol. from voice_to_notes.ipc.protocol import init_ipc diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 931d7f7..6e0e08e 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -22,7 +22,7 @@ } ], "security": { - "csp": "default-src 'self'; img-src 'self' asset: https://asset.localhost; media-src 'self' asset: https://asset.localhost; style-src 'self' 'unsafe-inline'", + "csp": "default-src 'self'; connect-src ipc: http://ipc.localhost http://asset.localhost https://asset.localhost; img-src 'self' asset: http://asset.localhost https://asset.localhost; media-src 'self' asset: http://asset.localhost https://asset.localhost; style-src 'self' 'unsafe-inline'", "assetProtocol": { "enable": true, "scope": ["**"]