CastPolish v1.3 — AI Noise Reduction, In-App Installer, and Processing Logs

CastPolish v1.3 — AI Noise Reduction, In-App Installer, and Processing Logs

CastPolish v1.3 lands three features that make it meaningfully easier to install, use, and understand what's happening under the hood. Here's what's new.

1. DeepFilterNet AI Noise Reduction

CastPolish now supports three tiers of noise reduction, and each level only appears in the dropdown if its package is installed — so nothing breaks if you skip one.

  • Standard (ffmpeg afftdn) — always available, fast FFT-based suppression.
  • Dynamic (noisereduce) — spectral subtraction that adapts over time. Good for variable background noise.
  • AI Enhanced (DeepFilterNet3) — a neural network trained specifically for speech. Highest quality. Runs ~10–60× realtime on CPU, no GPU required.

DeepFilterNet runs in a completely isolated Python virtual environment at ~/.castpolish/df_venv/ to avoid a numpy version conflict with pyannote.audio. You never see this — it just works. On a real-world 13-minute lavaliere recording, DeepFilterNet finished in 13 seconds.

2. In-App Install & Update Buttons

The Dependencies panel now has Install buttons next to every optional package that isn't yet installed. Click Install next to DeepFilterNet, noisereduce, or pyannote.audio and watch the install log stream live in the UI — no terminal required.

A Check for updates button runs parallel PyPI version checks for all installed packages and shows Update badges with one-click upgrades for anything outdated.

3. install.command — Double-Click Installer for macOS

A new install.command file sits in the repo root. Double-click it in Finder and Terminal walks you through a complete guided setup: Homebrew, ffmpeg, Python, core packages, optional features (Whisper, Ollama, pyannote, DeepFilterNet), and building the .app. It's idempotent — run it fresh or use it to update an existing install.

4. Processing Log File

Every completed job now writes a .log file alongside the audio, VTT, JSON, and HTML outputs. It captures the input file, all settings used, every processing step with a [MM:SS] timestamp, loudness before and after, and output file sizes. A Log download link appears in the results table. Here's an excerpt from a real 13-minute sermon recording:

The Installer (macOS)

Double-click install.command in Finder and a guided 7-step Terminal session handles everything: Homebrew, ffmpeg, Python, core packages, optional features (Whisper, Ollama, pyannote.audio, DeepFilterNet), and building the native .app. Idempotent — safe to run fresh or to update.

CastPolish installer Terminal — Step 7 building CastPolish.app
Step 7 of 7: the installer builds CastPolish.app, generates icons at every resolution, compiles the launcher, and walks you through copying to /Applications.

What a Processing Log Looks Like

Every completed job writes a .log file alongside the outputs. Real log — 13-minute sermon, lavalier mic, AI noise reduction + loudness + Whisper transcription, done in 2 minutes:

══════════════════════════════════════════════════════════════
  CastPolish v1.3.0  —  Processing Log
  Generated : 2026-06-07 15:31:09
══════════════════════════════════════════════════════════════

  INPUT
    File        :  2026-06-07 "After Two Days… Mercy, Not Sacrifice" Sermon Pentecost 2.m4a
    Duration    :  13:44
    Size        :  12.7 MB

  SETTINGS
    Noise mode  :  AI Enhanced (DeepFilterNet3)
    Normalize   :  Yes  →  target -16.0 LUFS (EBU R128)
    Transcribe  :  Yes  (model: small, task: transcribe, language: auto-detect)
    Diarization :  No
    Output fmt  :  MP3

  PROCESSING STEPS
    [00:00]  Processing: 2026-06-07 "After Two Days… Mercy, Not Sacrifice" Sermon Pentecost 2.m4a
    [00:00]  Output dir: ~/CastPolish-output/2026-06-07-After-Two-Days-Mercy-Not-Sacrifice-Sermon-Pentecost-2
    [00:00]  Starting DeepFilterNet3 (loading model…)
    [00:14]    [DF] Running on torch 2.12.0
    [00:14]    [DF] Loading model settings of DeepFilterNet3
    [00:14]    [DF] Using DeepFilterNet3 model at ~/.cache/DeepFilterNet/DeepFilterNet3
    [00:14]    [DF] Initializing model `deepfilternet3`
    [00:14]    [DF] Found checkpoint model_120.ckpt.best (epoch 120)
    [00:14]    [DF] Running on device cpu
    [00:14]    [DF] Model loaded
    [00:14]    [DF] DeepFilterNet3 running on CPU (48 kHz, model sr=48000)
    [00:14]    [DF] DeepFilterNet enhancement complete.
    [00:14]  Measuring loudness (pass 1/2)…
    [00:24]  Applying loudness correction (pass 2/2, -32.3 → -16.0 LUFS)…
    [00:36]  Preparing audio for transcription…
    [00:36]  Loading Whisper model 'small' (faster-whisper)…
    [00:37]  Transcribing…
    [01:52]  Generating chapter titles with Ollama (llama3.2:latest)…
    [01:54]    Chapter 1: The Problem of Human Sinfulness
    [01:54]  Generating shownotes (summaries & tags)…
    [01:54]  Generating long summary…
    [02:02]  Generating brief summary…
    [02:04]  Generating tags…
    [02:05]  Writing output files…
    [02:05]  Done — 240 segments, 1 chapter.

  OUTPUT FILES
    2026-06-07 "After Two Days…" Sermon Pentecost 2.mp3   7.8 MB
    2026-06-07 "After Two Days…" Sermon Pentecost 2.vtt   0.0 MB
    2026-06-07 "After Two Days…" Sermon Pentecost 2.json  0.2 MB
    2026-06-07 "After Two Days…" Sermon Pentecost 2.html  0.1 MB

  Total processing time :  2:05
══════════════════════════════════════════════════════════════

CastPolish is free and open-source

MIT license  ·  macOS full support  ·  Linux & Windows supported

★  View on GitHub ⬇  Download install.command

macOS: double-click install.command in Finder  ·  Linux/Windows: python3 castpolish.py serve

Albert Collver

Albert Collver

Albert Collver, Ph.D. — Lutheran theologian, podcaster, and lifelong coder since the '90s shareware era. I build free, open-source tools like CastPolish, liturgical software, and family-history projects. All local, no cloud.
Missouri