ITQAN LAB

MIT · verified 2026-08-11

catalog / Media / skill

audio-narrate

Turn text into natural English or Arabic narration for free, as one file or one file per video scene. Online neural voices by default (edge-tts), Piper when there is no internet, a pronunciation list for words the voice says wrong, and language detected per line. No key, no sign-up, no cost.

version
1.0.0
updated
2026-10-13
works in
every conformant agent
needs
python · uv · ffmpeg
cost
free · no account
license
MIT

Say this you do not type commands, you ask

  • “read this aloud”
  • “make a narration for this script”
  • “voice-over for this video, free”
  • “text to speech in Arabic”
  • “one audio file per scene”
  • “narrate this offline”
  • “record an Arabic voice-over for this”

Once it is installed, that is the whole interface. Your agent picks the skill up on its own and runs whatever it needs to. The commands further down are there for anyone who would rather drive it themselves.

Install pick your agent

Changelog what changed, newest first

1.0.0

Added

  • Turn text into English or Arabic narration for free, with natural online voices, or offline with Piper.
  • Make one file per line of a script, named for the scene order, to cut a video to.
  • Fix words the voice says wrong with a pronunciation list, built in or kept in the project.
  • Set up once with a check that says what is missing and how to install it. The engines and voices live outside the skill folder, and the offline voices download only when asked for.
  • Clear messages when the free online voice service refuses, or when Piper's install path is too long, with what to do next.

An agent that has this installed reads CHANGELOG.md in the skill folder. The same history is at changelog.json, and every tool's releases are at /updates.json.

Just ask

"read this paragraph aloud and save it" "make an Arabic narration for this script, one file per scene" "use the female voice and slow it down a little" "it says our product name wrong, fix it" "I'm offline, narrate this anyway"

The agent runs the commands and hands you the audio files. Nothing to pay and no account to make.

Two engines

Engine Needs Quality
edge-tts (default) Internet Natural neural voices. Clearly the better Arabic
Piper Nothing once set up Works offline. More robotic

For a studio voice, a cloned voice or exact timing per character, the paid elevenlabs-studio skill is the step up.

Requirements

  • Python 3 (or uv) and ffmpeg.
  • About 155 MB for the Python environment, and 126 MB more if you want the offline voices.
bash scripts/setup.sh --check    # what is there, what is missing, and how to install it
bash scripts/setup.sh            # the environment with both engines
bash scripts/setup.sh --piper    # also the two offline voices

Windows: .\scripts\setup.ps1 with -Check or -Piper. Not yet tested on Windows.

Everything is stored outside the skill folder, in AUDIO_NARRATE_HOME, or audio-narrate inside AGENT_TOOLKIT_HOME (by default ~/.itqan-agent-toolkit). Reinstalling the skill keeps the voices.

Command line

bash scripts/run.sh edge --text "Welcome to the tour." --out intro.mp3
bash scripts/run.sh edge --text "مرحبا بكم في الجولة." --female --out intro_ar.mp3
bash scripts/run.sh edge --input script.json --per-segment scenes/ --out scene.mp3
bash scripts/run.sh piper --text "No internet needed." --out offline.wav

script.json:

[
  { "lang": "ar", "text": "مرحبا بكم." },
  { "lang": "en", "text": "Welcome." },
  { "text": "The language of this line is detected." }
]

With --per-segment scenes/ you get scenes/001_ar.mp3, scenes/002_en.mp3, scenes/003_en.mp3.

Pronunciation

Put a narrate-lexicon.json in your project folder. Each key is respelled before it is spoken:

{ "ar": { "لاب": "لَاابْ" }, "en": { "SQL": "sequel" } }

Calling it from your own scripts

The engines keep the interface of the voiceover skill this was ported from. A script that called that skill changes two paths:

Was Now
<skills>/voiceover/.venv/bin/python <AGENT_TOOLKIT_HOME>/audio-narrate/venv/bin/python, by default ~/.itqan-agent-toolkit/audio-narrate/venv/bin/python. bash scripts/setup.sh --where prints it
<skills>/voiceover/scripts/tts.py and edge.py <skills>/audio-narrate/scripts/tts.py and edge.py
<skills>/voiceover/scripts/setup.sh <skills>/audio-narrate/scripts/setup.sh --piper

Same flags (--input, --out, --per-segment, --voice, --rate and the rest), same [{lang,text}] input, and the same NNN_<lang>.<ext> files per segment.

Troubleshooting

  • "Microsoft's voice service refused the request": the free edge endpoint is unofficial and sometimes blocks the client. Use Piper meanwhile.
  • "path too long for espeak-ng": Piper cannot read data from a folder path over about 160 characters. Set AUDIO_NARRATE_HOME to a shorter folder and run setup again.

Source on GitHub ↗

Itqan Lab

Built at Itqan Lab, a design and technology studio.

إتقان — itqan, the Arabic word for mastery: doing a thing precisely, and completely.

Open source under MIT · agent paths re-verified 2026-08-11 · this site is generated from the repository on every push.