| title | Podcast Transcribe |
|---|---|
| emoji | 🎙️ |
| colorFrom | blue |
| colorTo | green |
| sdk | docker |
| app_port | 7860 |
A web app for podcasters: load an audio file, transcribe it locally with OpenAI Whisper, then edit the transcript segment by segment while it stays synchronized with the audio.
- Audio player with a real waveform drawn from the loaded file (any
audio/*file). - Transcription with local
openai-whisperthrough a Python script; no API key needed. - Time-stamped segments (start, end, text) shown next to the player, with the text editable in place.
- Export of the edited transcript as
.txtor.json.
The Next.js page uploads the audio to POST /api/transcribe-local. The route saves it to a temporary file, runs scripts/transcribe_local.py, and returns { "segments": [{ "start", "end", "text" }] }.
The repo also contains POST /api/transcribe, which sends the file to the OpenAI Whisper API (needs OPENAI_API_KEY). The current UI does not call it.
Requirements: Node.js 20+, Python 3.10+, and ffmpeg on your PATH.
# 1. Python environment with Whisper (the app uses ./.venv automatically if it exists)
uv venv
uv pip install -r scripts/requirements.txt
# 2. Web app
npm install
npm run devOpen http://localhost:3000. The first transcription downloads the Whisper model (base by default).
Environment variables (optional):
| Variable | Purpose | Default |
|---|---|---|
WHISPER_MODEL |
Whisper model: tiny, base, small, medium, large, turbo |
base |
WHISPER_PYTHON |
Python command used to run the script | ./.venv Python, else python3 |
OPENAI_API_KEY |
Only for the unused /api/transcribe route |
none |
More detail on the local setup: scripts/README.md.
The Dockerfile builds the Next.js app, installs Python, ffmpeg and openai-whisper, and serves on port 7860, which is the port the Space metadata above declares.
docker build -t podcast-transcribe .
docker run -p 7860:7860 podcast-transcribeNext.js 16, React 19, TypeScript, Tailwind CSS 4, shadcn/ui components, Python with openai-whisper.
The audio player started from this tutorial; see Explanation_Personnal.md for the project notes.