From 48937c684b34d3e4784fbee8434dbd1e226df11e Mon Sep 17 00:00:00 2001 From: claude-bot Date: Sat, 2 May 2026 21:54:49 +0900 Subject: [PATCH] Gate loopback logs behind DEBUG env --- .env.example | 1 + README.md | 4 ++++ src/config.ts | 4 ++++ src/index.ts | 22 ++++++++++++++-------- 4 files changed, 23 insertions(+), 8 deletions(-) diff --git a/.env.example b/.env.example index 8483955..97e5f56 100644 --- a/.env.example +++ b/.env.example @@ -6,6 +6,7 @@ LOCAL_AI_PYTHON=python # Linux: pactl list sources short 에서 monitor/source 이름 AUDIO_SOURCE= +DEBUG=false WHISPER_MODEL=large-v3-turbo WHISPER_LANGUAGE=ko WHISPER_DEVICE=auto diff --git a/README.md b/README.md index e078575..d9a6a8e 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,9 @@ bun run start:loopback - `AUDIO_SOURCE` - `bun run devices` 에서 보이는 `ffmpeg dshow` 오디오 장치 이름 - 보통 `Stereo Mix`, 오디오 인터페이스 loopback 채널, 가상 케이블 입력 같은 이름을 넣습니다 +- `DEBUG` + - `true`면 상세 로그 출력 + - `false`면 전사 결과만 출력 - `WHISPER_MODEL` - 기본값 `large-v3-turbo` - `WHISPER_LANGUAGE` @@ -79,6 +82,7 @@ bun run start:loopback ```env LOCAL_AI_PYTHON=python AUDIO_SOURCE= +DEBUG=false WHISPER_MODEL=large-v3-turbo WHISPER_LANGUAGE=ko WHISPER_DEVICE=auto diff --git a/src/config.ts b/src/config.ts index 2cde868..496c289 100644 --- a/src/config.ts +++ b/src/config.ts @@ -15,6 +15,10 @@ const envSchema = z.object({ LOCAL_AI_VENV_PATH: z.string().min(1).default(".local-ai/.venv"), LOCAL_AI_PYTHON: emptyToUndefined, AUDIO_SOURCE: emptyToUndefined, + DEBUG: z + .string() + .optional() + .transform((value) => value?.trim().toLowerCase() === "true"), WHISPER_MODEL: z.string().min(1).default("large-v3-turbo"), WHISPER_LANGUAGE: z.string().min(1).default("ko"), WHISPER_DEVICE: z.enum(["auto", "cuda", "cpu"]).default("auto"), diff --git a/src/index.ts b/src/index.ts index bf56e12..08998c6 100644 --- a/src/index.ts +++ b/src/index.ts @@ -10,7 +10,7 @@ const mode = process.argv[2] ?? "loopback"; async function runLoopback(): Promise { const config = loadConfig(); - const logger = new Logger(config.LOG_LEVEL); + const logger = new Logger(config.DEBUG ? config.LOG_LEVEL : "error"); const stt = new FasterWhisperSttService(config, logger); let capture = null as ReturnType | null; let shuttingDown: Promise | null = null; @@ -95,8 +95,12 @@ async function runLoopback(): Promise { logger.info("빈 전사 결과"); } else { logger.info("Transcript", { index: next.index, text }); - if (config.DEBUG_TRANSCRIPTS) { - console.log(`\n[text] ${text}\n`); + if (config.DEBUG) { + if (config.DEBUG_TRANSCRIPTS) { + console.log(`\n[text] ${text}\n`); + } + } else { + console.log(text); } } } catch (error) { @@ -183,11 +187,13 @@ async function runLoopback(): Promise { } }); - console.log("실시간 출력장치 STT를 시작합니다. Ctrl+C 로 종료합니다."); - console.log(`source: ${config.AUDIO_SOURCE ?? "unset"}`); - console.log(`model: ${config.WHISPER_MODEL}`); - console.log(`language: ${config.WHISPER_LANGUAGE}`); - console.log(`beam: ${config.WHISPER_BEAM_SIZE}`); + if (config.DEBUG) { + console.log("실시간 출력장치 STT를 시작합니다. Ctrl+C 로 종료합니다."); + console.log(`source: ${config.AUDIO_SOURCE ?? "unset"}`); + console.log(`model: ${config.WHISPER_MODEL}`); + console.log(`language: ${config.WHISPER_LANGUAGE}`); + console.log(`beam: ${config.WHISPER_BEAM_SIZE}`); + } setInterval(() => { const now = Date.now();