Voice & tone
The brand voice, adapted for a scroll. Warmer and plainer than the website, never casual to the point of undermining authority. This page sets how Pierce Law sounds on social and how the tone shifts between LinkedIn and YouTube.
script.json records.Social voice principles
The through-line across every channel: plain-language, human, authoritative without being cold. How we sound when we're explaining the law to a worried person on their phone.
Tone by channel
LinkedIn leans professional and thought-leadership; YouTube leans approachable and educational. The same idea, dialed for the room.
Writing rules
Hooks in the first line, one clear CTA, plain over jargon, the emoji policy, and how to handle sensitive subjects (death, divorce, estates) with care.
Mastering the AI voice
How to control pitch, pacing, volume, cadence, and speed when generating voiceover for these videos — whether through the TimDS edge-tts command (timds video voiceover <slug>) or an approved prompt-driven engine like ElevenLabs. This section is the canonical client source; TimDS supplies the generic orchestration.
The house voice: calm, confident, knowledgeable, reassuring. A trusted advisor who has explained this a thousand times and still means it. Light NC softness is welcome; announcer polish is not. The listener just lost someone or is worried about their family — the voice should lower the temperature of the room, not perform.
The five levers
| Lever | What it controls | Too little | Too much |
|---|---|---|---|
| Pitch | Perceived age, weight, authority | Thin, salesy | Fake gravitas, "movie trailer" |
| Speed (rate) | Words per minute | Rushed, nervous, salesy | Somber, funereal, "AI slow" |
| Pacing (pauses) | Where silence lands | Wall of words, no room to absorb | Melodramatic, disjointed |
| Cadence | The rhythm between lines — variance | Metronomic, obviously synthetic | Erratic, hard to follow |
| Volume/energy | Intensity, brightness | Flat, depressed | Forced brightness, customer-service cheer |
edge-tts pipeline (scripts/generate_voiceover.py)
edge-tts is a fixed neural TTS: it cannot add breath, hesitation, or texture. Your levers are voice choice, rate, pitch, and punctuation — applied per job and per line.
Config anatomy
// src/videos/<slug>/script.json
{
"voice": "en-US-AndrewMultilingualNeural", // job-wide voice
"rate": "-10%", // job-wide default speed
"pitch": "-2Hz", // job-wide default pitch
"lines": [
// per-line overrides beat the defaults — THIS is where cadence lives
{ "id": "01-hook", "tts": "…", "rate": "-13%", "pitch": "-3Hz" },
{ "id": "02-list", "tts": "…", "rate": "-6%", "pitch": "+0Hz" }
]
} +0Hz, -2Hz — bare 0Hz errors. Regenerate only the selected topic with timds video voiceover <slug> --force, and only after explicit approval: replacing the locked take re-times every edited word in that production.Rate (speed)
| Setting | Reads as | Use for |
|---|---|---|
+0% to -4% | Normal conversational | Lists, facts, mid-video info |
-5% to -9% | Measured, considered | Default for most lines |
-10% to -13% | Weighty, deliberate | Hooks, empathy beats, CTA |
below -15% | Somber / "depressed" | Avoid — this killed early drafts |
Pitch
Small moves only. -1Hz to -3Hz adds groundedness; beyond -5Hz sounds processed. Drop pitch with rate on the lines that carry weight (hook, CTA), return to +0Hz on brisk informational lines.
Cadence recipe — the anti-AI pattern. Give every line its own rate/pitch, shaped like a real read:
hook slow + low (-13% / -3Hz) let the opening land list/facts near-normal (-6% / +0Hz) pick the energy up empathy slow again (-11% / -2Hz) soften, don't drag proof middle (-8% / -1Hz) conversational confidence CTA slow + low (-12% / -3Hz) settled, final
The spread matters more than the exact values: 5–7 points of rate variance across the video is the difference between "read by a person" and "rendered by a machine."
Pacing & volume through text — edge-tts has no other knobs:
- Ellipsis "…" → real pause with a falling lead-in. Best before a payoff:
"the details… matter." - Em dash "—" → short catch-breath:
"Every piece protected — so nothing's left to chance." - Short sentences.
"Wills. Trusts. Probate."— each period is a beat. - Contractions (
nothing's,who'll,doesn't) and small spoken-word filler ("…families now…") loosen the grammar-perfect AI read. - Volume: edge-tts supports a
volumeparam but don't use it for emphasis — word emphasis comes from sentence position and punctuation. Put the important word at the end of the sentence, after a pause.
Voices that fit the brand
| Voice | Reads as |
|---|---|
en-US-AndrewMultilingualNeural | Warm low-mid male — the house voice |
en-US-AvaMultilingualNeural | Warmest of the female mid-registers |
en-US-EmmaMultilingualNeural | More neutral/calm female alternative |
ElevenLabs (prompt-driven)
When edge-tts's ceiling is too low (no breath, no texture), ElevenLabs adds real disfluency. Two prompts are involved: the voice design prompt and the annotated script.
Voice design prompt — write it as: register → pace/energy → persona → texture → inflection → negative space. Example (the house male voice, light NC accent):
Middle-aged American male, light NC accent — soft southern warmth, not heavy, professional. Warm low-mid register, steady, conversational, not somber. Trusted-advisor tone — said this before, means it. Slight breath, minor pacing imperfections, not studio-clean. Downward inflection, never upward. Confident, easy, not brisk or flat. Warm on empathetic lines, never saccharine. No vocal fry, no over-enunciation, no announcer polish.
Rules of thumb, learned the hard way:
- Ask for imperfection explicitly ("slight breath, minor pacing imperfections, not studio-clean") — otherwise you get the polished AI read.
- Every positive needs a cap: "warm, never saccharine"; "southern, not heavy"; "slow" drifts to somber unless you say "not somber".
- Inflection direction matters: "downward inflection, never upward" is what makes statements sound settled instead of uncertain.
- End with negatives — the "no vocal fry, no announcer polish" list is as load-bearing as the positives.
- Generate 3–4 takes and pick the least "read"-sounding one.
Script annotation (v3 audio tags) — inline [tags] direct the read per phrase, eleven_v3 only (v2 reads the brackets aloud):
[warm, easy] When you're planning for your family's future [beat] ...the details matter. Wills. Trusts. Probate. [brighter] Every piece protected — so nothing's left to chance. [friendly] We've walked this road with over ten thousand North Carolina families [breath] ... [sincere] That's not just a slogan. [beat] It's five stars, family after family... [confident] Pierce Law Group. Your family's legacy — protected.
Tag vocabulary by lever:
- Cadence/energy:
[warm, easy][brighter][friendly][confident]— vary them line to line, same principle as edge-tts rate variance. Avoid stacking[calm][thoughtful][settled]— that combination reads as slow/depressed. - Pacing:
[beat](short),[pause](longer),[breath](audible inhale). Use[beat]+ ellipsis before payoffs; ration[pause]. - Volume/emphasis: tags like
[sincere]shift intensity; also CAPS sparingly for a single stressed word.
Voice settings (Studio / API)
| Setting | Value | Why |
|---|---|---|
| Stability | 0.35–0.45 | The real "irregularity" knob — high stability = flat robot |
| Similarity | ~0.75 | Keeps the designed voice consistent |
| Style | 0.2–0.3 | Empathetic softening without theater |
| Model | eleven_v3 | Required for [tags]; eleven_multilingual_v2 if untagged |
Script-writing rules that serve the voice (any engine)
- Write for the ear, not the page. Read every line aloud once before generating. If you stumble, the TTS will too.
- One idea per line. Each
script.jsonline is one breath-group; the pause between clips is free pacing. - Front-load calm, end settled. Hook slow, middle conversational, CTA slow and low. Never end on an up-note — falling intonation = "you can trust this."
- Spell out anything the engine will mangle:
"pierce law dot com"in thettstext, merged back for captions viamergeWords. - Numbers as words when they carry weight:
"ninety days", not "90". - Empathy lines get the slowest rate and the simplest words.
"You just lost someone. The paperwork shouldn't be the hard part."
QA checklist before rendering
- Listen to the concatenated take end-to-end, eyes closed. Does any stretch sound metronomic? Add per-line variance there.
- Does it sound sad? Raise mid-video rates toward
-5%, keep only hook/CTA slow. - Does the CTA sound like an ad? Slow it down, drop pitch, add a beat before the URL.
- Check
captions.jsontimings — merged words (piercelaw.com) intact? durationMstotals ≈ target runtime (30s spot ⇒ ~33–36s spoken is fine; video pacing adds gaps).
AI voiceover — source examples
The spoken voice for AI-animated videos, generated with ElevenLabs (eleven_v3), applying the mastery guide above. Two takes from the same prompt and settings — pick whichever reads least "read."
| Setting | Value |
|---|---|
| Model | eleven_v3 |
| Speed | 100% (no time-stretch) |
| Stability | 50% |
| Similarity boost | 75% |
Take 1
Take 2
Voice design prompt used — see Mastering the AI voice above for the full breakdown of why each phrase is there:
Middle-aged American male, light NC accent — soft southern warmth, not heavy, professional. Warm low-mid register, steady, conversational, not somber. Trusted-advisor tone — said this before, means it. Slight breath, minor pacing imperfections, not studio-clean. Downward inflection, never upward. Confident, easy, not brisk or flat. Warm on empathetic lines, never saccharine. No vocal fry, no over-enunciation, no announcer polish.
Script / pacing prompt used:
[warm, easy] When you're planning for your family's future [beat] ...the details matter. Wills. Trusts. Probate. [brighter] Every piece protected — so nothing's left to chance. [friendly] We've walked this road with over ten thousand North Carolina families [breath] ...each guided by an attorney who'll call you back. [sincere] That's not just a slogan. It's five stars, family after family [beat] ...because the guidance doesn't stop at the paperwork. [confident] Pierce Law Group. Your family's legacy — protected. Free consultation, at piercelaw dot com.