MCP article narration
MCP article narration
The recording uses Kokoro’s af_heart voice at speed 0.98. The seven section
headings are synthesized separately from the paragraphs:
- Finish the preceding paragraph.
- Leave 1.0 second of silence.
- Speak the section heading on its own.
- Leave 0.7 second of silence, then start the section body.
The page title and Further reading list are not spoken. Normal paragraph gaps
remain 0.46 seconds. narration-recipe.json preserves the text, heading/body
boundaries, voice, model hashes and pause policy. narration-timeline.json
records actual generated sample boundaries, not estimated reading times.
Regenerate
From the repository root, use a Python environment with the dependency versions
listed in the recipe, FFmpeg/ffprobe, and the matching kokoro-v1.0.onnx and
voices-v1.0.bin model files:
ORT_DISABLE_TELEMETRY=1 python scripts/render_mcp_narration.py \
--models /path/to/kokoro-models \
--output /tmp/mcp-narration
The renderer checks the source-post and model hashes before generating. If the article changes, review the recipe against it and update its source hash first. Do not remove headings or merge them into neighboring body text to shorten the recording.
Copy the reviewed MP3 and timeline into this folder. Update the displayed audio
duration if needed. Put the first 12 characters of the MP3 SHA-256 in both
the post audio and audio_sync URL query strings (?v=...) so returning readers
receive matching fresh assets. Then bind the final source hash in the recipe
and the sync plan. Build the site and regenerate sync-v2.json with
scripts/build_post_audio_sync.py, using each timeline chunk’s exact start/end
and its recipe segment IDs. Never estimate within-chunk timings. Heading cues
must contain only the heading target; paragraph cues start after the silent gap.
Validate
python scripts/test_mcp_narration_structure.py
python scripts/test_post_audio_sync_rollout.py --site-dir _site
The first check verifies heading separation, source coverage, sync timing and the silence measured from the decoded MP3. It also exercises deliberately broken fixtures. The browser suite separately checks playback and highlighting. Neither test is a substitute for an auditory review of pronunciation and pacing.
Disclaimer of liability
The information provided by the Earth Inversion is made available for educational purposes only.
Whilst we endeavor to keep the information up-to-date and correct. Earth Inversion makes no representations or warranties of any kind, express or implied about the completeness, accuracy, reliability, suitability or availability with respect to the website or the information, products, services or related graphics content on the website for any purpose.
UNDER NO CIRCUMSTANCE SHALL WE HAVE ANY LIABILITY TO YOU FOR ANY LOSS OR DAMAGE OF ANY KIND INCURRED AS A RESULT OF THE USE OF THE SITE OR RELIANCE ON ANY INFORMATION PROVIDED ON THE SITE. ANY RELIANCE YOU PLACED ON SUCH MATERIAL IS THEREFORE STRICTLY AT YOUR OWN RISK.