Gettr Transcribe (MLX Whisper)
Quick start
# 1. Parse the slug from the URL (just read it — no script needed)
# https://gettr.com/post/p1abc2def → slug = p1abc2def
# https://gettr.com/streaming/p3xyz → slug = p3xyz
# 2. Get the audio/video URL via browser automation (see Step 1 below)
# For /streaming/ URLs: extract the .m4a audio URL
# For /post/ URLs: extract the og:video .m3u8 URL
# 3. Run download + transcription pipeline
bash scripts/run_pipeline.sh "<AUDIO_OR_VIDEO_URL>" "<SLUG>"
To explicitly set the transcription language (recommended for non-English content):
bash scripts/run_pipeline.sh --language zh "<AUDIO_OR_VIDEO_URL>" "<SLUG>"
Common language codes: zh (Chinese), en (English), ja (Japanese), ko (Korean), es (Spanish), fr (French), de (German), ru (Russian).
This outputs:
./out/gettr-transcribe/<slug>/audio.wav./out/gettr-transcribe/<slug>/audio.vtt
Summarization is handled separately by the caller (see your prompt for summarization instructions).
Workflow (GETTR URL → transcript)
Inputs to confirm
Ask for:
- GETTR post URL
- Language (optional): if the video is non-English and auto-detection fails, ask for the language code (e.g.,
zhfor Chinese)
Notes:
- This skill does not handle authentication-gated GETTR posts.
- This skill does not translate; outputs stay in the video's original language.
- If transcription quality is poor or mixed with English, re-run with explicit
--languageflag.
Prereqs (local)
mlx_whisperinstalled and on PATHffmpeginstalled (recommended:brew install ffmpeg)
Step 0 — Parse the slug and pick an output directory
Parse the slug directly from the GETTR URL — just read the last path segment, no script needed:
https://gettr.com/post/p1abc2def→ slug =p1abc2defhttps://gettr.com/streaming/p3xyz789→ slug =p3xyz789
Output directory: ./out/gettr-transcribe/<slug>/
Directory structure:
./out/gettr-transcribe/<slug>/audio.wav./out/gettr-transcribe/<slug>/audio.vtt
Step 1 — Get the audio/video URL via browser automation
Use browser automation to navigate to the GETTR URL and extract the media URL from the rendered DOM.
For /streaming/ URLs (primary path)
Streaming pages provide a direct .m4a audio download. Extract it by deriving from the og:video meta tag:
- Navigate to the GETTR streaming URL and wait for the page to fully load (JavaScript must execute)
- Extract the audio URL via JavaScript:
const ogVideo = document.querySelector('meta[property="og:video"]')?.getAttribute("content"); // Replace .m3u8 with /audio.m4a to get the direct audio download URL const audioUrl = ogVideo.replace(".m3u8", "/audio.m4a"); - Use the
.m4aURL for the pipeline in Step 2
The .m4a URL is a direct file download (no HLS), so it downloads faster and more reliably than the .m3u8 stream.
For /post/ URLs (fallback path)
Post pages do not have a "Download Audio" button. Extract the og:video URL from the rendered DOM:
- Navigate to the GETTR post URL and wait for the page to fully load
- Extract the video URL via JavaScript:
document.querySelector('meta[property="og:video"]')?.getAttribute("content"); - Use the
.m3u8URL directly for the pipeline in Step 2
If browser automation is not available or fails, see references/troubleshooting.md for how to guide the user to manually extract the URL from their browser.
Step 2 — Run the pipeline (download + transcribe)
Feed the extracted URL and slug into the pipeline:
bash scripts/run_pipeline.sh "<AUDIO_OR_VIDEO_URL>" "<SLUG>"
To explicitly set the language (recommended when auto-detection fails):
bash scripts/run_pipeline.sh --language zh "<AUDIO_OR_VIDEO_URL>" "<SLUG>"
The pipeline does two things:
- Downloads audio as 16kHz mono WAV via ffmpeg (handles both
.m4aand.m3u8inputs) - Transcribes with MLX Whisper, outputting VTT with timestamps
If the pipeline fails with HTTP 412 (stale signed URL)
This error occurs with /streaming/ URLs when the signed URL has expired. Re-run browser automation to get a fresh URL, then retry the pipeline.
If browser automation is not available or fails, see references/troubleshooting.md for how to guide the user to manually extract the fresh URL from their browser.
Notes:
- By default, language is auto-detected. For non-English content where detection fails, use
--language. - If too slow or memory-heavy, try smaller models:
mlx-community/whisper-mediumormlx-community/whisper-small. - If quality is poor, try the full model:
mlx-community/whisper-large-v3(slower but more accurate). - If
--word-timestampscauses issues, the pipeline retries automatically without it.
Bundled scripts
scripts/run_pipeline.sh: download + transcription pipeline (takes an audio/video URL and slug)scripts/download_audio.sh: download/extract audio from HLS (.m3u8) or direct (.m4a) URL to 16kHz mono WAV
Error handling
- No audio track: The download script validates output and reports if the source has no audio.
- HTTP 412 errors: Occurs with
/streaming/URLs when the signed URL has expired. Re-run browser automation to get a fresh URL (see Step 1); if that fails, seereferences/troubleshooting.md.
Troubleshooting
See references/troubleshooting.md for detailed solutions to common issues including:
- HTTP 412 errors (stale signed URLs)
- Download errors
- Transcription quality issues