Use the bundled scripts to create one stable local text-to-voice path.
Produce voice from any text file with:
Default input text:
tmp/text-to-voice-input.txtCanonical output:
tmp/voice-mode-latest.mp3State directory:
skills/text-to-voice-local/state/State pointer:
skills/text-to-voice-local/state/last-output.txtFor normal use, run:
scripts/text_to_voice.sh voice [voice] [max_direct_chars] Useful helpers:
scripts/text_to_voice.sh statusscripts/text_to_voice.sh voicesstatus now also checks runtime dependencies and prints install hints when something is missing.
Examples:
scripts/text_to_voice.sh text
scripts/text_to_voice.sh voice ./tmp/text-to-voice-input.txt
scripts/text_to_voice.sh voice ./tmp/text.txt ru-RU-SvetlanaNeural 280
scripts/text_to_voice.shscripts/tts_from_file.shscripts/tts_from_file_chunked.shscripts/voice_reply.shscripts/voice_reply_latest.shstate/text-to-voice.jsonscripts/edge_tts.jsEnsure these dependencies exist on the target machine:
nodeffmpegnode-edge-ttsThe skill checks these at runtime and, if something is missing, prints suggested install commands instead of failing silently.
Verify:
node -v
ffmpeg -version
node -e "require('node-edge-tts'); console.log('node-edge-tts ok')"
If node-edge-tts is missing:
npm i -g node-edge-tts
tmp/ exists.Minimal setup:
chmod +x skills/text-to-voice-local/scripts/*.sh
mkdir -p tmp
skills/text-to-voice-local/scripts/text_to_voice.sh voice ./tmp/text-to-voice-input.txt
If the result is sent as Telegram voice, send only the canonical file:
./tmp/voice-mode-latest.mp3Prefer sending text and voice as separate messages.
Progress printed by shell scripts is useful in terminal diagnostics, but chat-side live progress editing depends on OpenClaw preview streaming, not shell stdout alone.
Use low-level scripts only for debugging or careful manual control.
Default to the high-level wrapper unless there is a reason not to.
共 1 个版本