Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

phonepod

Local AI audio restoration. Phone recording → podcast quality.

Zero cloud. Zero uploads. Everything runs on your machine.

phonepod transforms noisy voice memos into broadcast-ready audio. It combines neural noise suppression (DeepFilterNet3 + MossFormer2) with a subtractive DSP mastering chain - all running locally on CPU. No cloud, no uploads, no subscription.

Status: 0.1.0-beta.1 - works well, API may change. Feedback welcome.

Before / After

Audio demos coming soon — record on your phone, run phonepod, hear the difference.

Install

pip install phonepod

Requires Python 3.11+ and ffmpeg (brew install ffmpeg on macOS).

Usage

CLI (simplest)

phonepod recording.m4a podcast.wav

Python API

import phonepod

# One-liner: file in, file out
phonepod.enhance("recording.m4a", "podcast.wav")

# Advanced: tensor-level control
engine = phonepod.Engine()
enhanced_tensor, sample_rate = engine.enhance(audio_tensor, input_sr)

Web UI

pip install phonepod[ui]
python -m phonepod.app
# Opens at http://localhost:7860

What it does

Stage Model / Tool What it does
1 DeepFilterNet3 Neural noise suppression - removes background noise
2 MossFormer2 (48kHz) Speech enhancement - fills frequencies phones can't capture
3 Pedalboard DSP Subtractive mastering - gate, HPF, EQ cuts (mud/box/nasal), 2x compression, de-ess
4 Pedalboard Reverb Optional studio room ambience
5 pyloudnorm Loudness normalization to -18 LUFS (podcast standard)
6 Limiter + ceiling Prevents clipping at -1.5 dB ceiling

Subtractive philosophy: all EQ moves are cuts, not boosts. Remove mud (200Hz), boxiness (500Hz), nasal honk (1500Hz), and harshness (6500Hz). The ML models already shaped the frequency balance - cuts work with them, boosts fight them.

Processing a 2-minute recording takes ~7 seconds on Apple Silicon.

How it started

phonepod began as a personal problem: voice memos recorded on a phone sound terrible in a podcast. The AI models that exist are research demos, not products. Professional mastering chains exist but don't denoise. Nothing combines both into a single, local pipeline.

So I built it. The full build story — from first prototype to production pipeline, every dead end and breakthrough — is in JOURNEY.md.

Architecture

Input (any format)
  -> ffmpeg -> 48kHz mono WAV
  -> Stage 1: DeepFilterNet3 (noise suppression)
  -> Stage 2: MossFormer2_SE_48K (speech enhancement)
  -> Stage 3: Pedalboard mastering (gate -> HPF -> mud/box/nasal cuts -> 2x compression -> de-ess)
  -> Stage 4: Reverb (subtle room ambience, optional)
  -> Stage 5: LUFS normalization (-18 LUFS)
  -> Stage 6: Limiter + hard ceiling (-1.5 dB)
Output: podcast-quality 48kHz WAV

Hard boundaries: the engine never touches the filesystem. The processor never touches the model. The CLI never touches tensors.

Development

# Clone and setup
git clone https://github.com/vedantggwp/phonepod.git
cd phonepod
uv sync

# Run tests (fast unit tests only)
uv run pytest -m "not slow"

# Run full test suite (loads ML models, ~30s)
uv run pytest

# Run on a file
uv run phonepod recording.m4a output.wav

License

MIT

Metadata

Release files for phonepod 0.1.0b2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for phonepod 0.1.0b2
File Size Uploaded
phonepod-0.1.0b2.tar.gz 7.3 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for phonepod 0.1.0b2
File Interpreter ABI Platform
phonepod-0.1.0b2-py3-none-any.whl Python 3 none any Details

Total release size: 7.3 MB

Release files / phonepod-0.1.0b2.tar.gz

Download URL phonepod-0.1.0b2.tar.gz
Size 7.3 MB
Tags Source
SHA-256 checksum
How to use checksums
c41e7e2c8dece2625c4229cfe896c8a8dcb90a34c0c33e99a0913126e183ca47
BLAKE2b-256 checksum
How to use checksums
35c437cea89ee66deae9f1c3df0ab11717dd544abbcb2b9ad41c36f77dd0f3e7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.10.10 {"installer":{"name":"uv","version":"0.10.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / phonepod-0.1.0b2-py3-none-any.whl

Download URL phonepod-0.1.0b2-py3-none-any.whl
Size 23.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4b0d2a7a4527a63be3c72642fd6d0b95977704ed208d2f921f2223f93ab2011d
BLAKE2b-256 checksum
How to use checksums
ad20ab4ce4beafec9a0ccab7c283661d56bf8ed79dc4b2e30968c02d69c75064
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.10.10 {"installer":{"name":"uv","version":"0.10.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

0.1.0b2 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page