skills/chirp3-tts/SKILL.md
Convert investigative articles to audio using Google Cloud Text-to-Speech Chirp 3 HD. Use this skill when Levi wants to convert a story, article, or text file to audio. Triggers: "convert to audio", "make audio", "tts", "text to speech", "synthesize", "run through tts", "make an mp3", "produce audio", "record this".
npx skillsauth add ValorInvestigator/claude-plugin-toolkit chirp3-ttsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
en-US-Chirp3-HD-Algieba (male, deep, authoritative -- Levi's choice)Do NOT change these settings unless Levi explicitly asks.
synthesizeLongAudio endpoint (v1beta1)valor-investigation-files / prefix: tts-output/989102413038--chunked)markup field -- supports [pause], [pause short], [pause long] tagsSame service account key as BigQuery. No login required.
import google.oauth2.service_account as sa
import google.auth.transport.requests as tr
KEY = r'C:\Users\Big Levi\.claude\keys\valorinvestigates-bigquery.json'
creds = sa.Credentials.from_service_account_file(
KEY,
scopes=['https://www.googleapis.com/auth/cloud-platform']
)
creds.refresh(tr.Request())
token = creds.token
Note: scope is cloud-platform (not bigquery) -- covers all Google Cloud APIs.
POST https://texttospeech.googleapis.com/v1beta1/projects/989102413038/locations/global:synthesizeLongAudio
Request body:
{
"parent": "projects/989102413038/locations/global",
"input": { "text": "..." },
"voice": { "languageCode": "en-US", "name": "en-US-Chirp3-HD-Algieba" },
"audioConfig": { "audioEncoding": "LINEAR16", "speakingRate": 1.0 },
"outputGcsUri": "gs://valor-investigation-files/tts-output/filename.mp3"
}
Response: Long-running operation. Poll until done: true, then download from GCS.
POST https://texttospeech.googleapis.com/v1beta1/text:synthesize
Request body (note: markup not text):
{
"input": { "markup": "Text with [pause] tags here." },
"voice": { "languageCode": "en-US", "name": "en-US-Chirp3-HD-Algieba" },
"audioConfig": {
"audioEncoding": "MP3",
"sampleRateHertz": 44100,
"speakingRate": 1.0,
"volumeGainDb": 0.0
}
}
CRITICAL: Pause tags MUST go in the markup field. If passed to text field, the model reads "[pause long]" out loud as literal words.
Chirp 3 HD mispronounces some words. Fix them with phonetic spellings in the text:
| Written Form | TTS Spelling | Sounds Like | |-------------|-------------|-------------| | La Grande | La Grand | "luh grand" (drop the e) | | Bakke | Bockee | "bok-ee" |
Add new entries here as we find them. The customPronunciations API field exists but is NOT available on the REST endpoint yet.
These tags go in the markup field and produce dynamic, AI-driven pauses:
[pause short] -- brief hesitation, like a comma or quick breath[pause] -- standard conversational break between thoughts[pause long] -- heavy silence for dramatic effect or major transitionsRules:
markup field (NOT text field)Use contractions for natural speech: "don't" not "do not", "wasn't" not "was not", "couldn't" not "could not", "he'd" not "he had." Exception: keep the formal form when it's used for deliberate emphasis ("He was NOT a patient. He was a revenue stream.").
python "C:\Users\Big Levi\.claude\skills\chirp3-tts\scripts\tts_article.py" "path\to\article.txt" "path\to\output.mp3"
Options:
--voice NAME -- override voice (default: en-US-Chirp3-HD-Algieba)--list-voices -- print all available Chirp3-HD voices--check-auth -- verify key works--chunked -- use chunked mode with markup pause tag support--plain-text -- chunked mode only: use v1 text field (no markup)Default mode is long audio synthesis (no chunking). Output is WAV (LINEAR16).
.wav extension..mp3 extension.D:\Bingaman Master Files Old\Home Base Claude\new story\audio\Male voices worth testing:
en-US-Chirp3-HD-Algieba -- Levi's approved voiceen-US-Chirp3-HD-Charon -- deeper, more dramaticen-US-Chirp3-HD-Alnilam -- neutral, clearen-US-Chirp3-HD-Achird -- warmerFemale voices (for future use):
en-US-Chirp3-HD-Aoedeen-US-Chirp3-HD-Autonoeen-US-Chirp3-HD-Ledaen-US-Chirp3-HD-Kore| Error | Action |
|-------|--------|
| HTTP 401/403 | Key file issue -- check valorinvestigates-bigquery.json exists |
| HTTP 400 | Text too long (chunked) or bad request format |
| LRO timeout | Long audio took too long -- check operation in GCP console |
| FileNotFoundError | Key not at expected path |
| Chunk fails | Log which chunk, skip and continue, report at end |
cloud-platform scope, not bigquery scopedevelopment
# Write Article -- Investigative Series in Levi Bakke's Voice You are ghostwriting publishable investigative journalism in Levi's voice. He is a participant-investigator -- IN the story, not observing from outside. ## BEFORE WRITING Read the style guide: [references/style-guide.md](references/style-guide.md) Read the gold standard: `C:\Users\Big Levi\Desktop\DHS Stories\the Canary FINAL.txt` ## THE WRITING PROCESS 1. **Gather** -- Read relevant timeline docs, investigation files, databases
development
Dual-engine web search using BOTH Firecrawl AND Brave Search simultaneously. ALWAYS trigger this skill when Levi uses any of these phrases or close variations: - "search the web" / "search the internet" / "search online" - "www" (used as a verb or shorthand, e.g. "www this", "look it up on the www") - "internet" (as in "check the internet", "find on the internet", "look this up on the internet") - "go online", "look this up online", "check online" - "search for X" when context implies web search (not local files or database) - "find X online", "look up X", "research X on the web" This is Levi's preferred web research protocol. Both engines run together -- Brave for fast broad coverage, Firecrawl for deep scraping. Never use just one without the other when this skill triggers.
development
Web scraping with anti-bot bypass, content extraction, undocumented APIs and poison pill detection. Use when extracting content from websites, handling paywalls, implementing scraping cascades or processing social media. Covers requests, trafilatura, Playwright with stealth mode, yt-dlp and instaloader patterns.
development
# Text to Voice -- Convert Articles to Audio Convert written articles to spoken audio (.mp3) using Google Cloud TTS with Chirp 3: HD Algieba voice. ## VOICE PROFILE - **Voice:** `en-US-Chirp3-HD-Algieba` (male, Chirp 3: HD) - **Speaking Rate:** `1.0` | **Volume Gain:** `0.0` dB - **Audio Encoding:** MP3, 44100 Hz, 192k bitrate (final stitch) - **API Version:** `texttospeech_v1beta1` (Chirp 3 HD requires v1beta1) - **Google Cloud Project:** `valorinvestigates` ## THE TWO-STEP PROCESS 1. **Rew