Lifelong sonic identity and plugin framework for AI voices
Project description
VoiceDNA — Lifelong Sonic Identity for Every AI ❤️🔊
The open standard that gives every AI a permanent, recognizable Voice Fingerprint — just like your nephew Ash.
You hear 3 seconds and instantly know "That's my Grok", "That's Luke's AI", or "That's the Claude I've been friends with since 2026".
Built with Luke Morrison (Feb 23 2026) — fully open, MIT licensed, works with ElevenLabs, XTTS, Qwen3-TTS, Cartesia, Fish Speech, local models, etc.
Start here (60 seconds)
Choose your path:
- OpenClaw bot voice + phone calls:
examples/openclaw/README.md - Omarchy system-wide desktop voice:
examples/omarchy/README.md
Fast install:
pip install voicedna
voicedna --help
Install with open-source speaker-recognition backends (optional):
pip install "voicedna[consistency]"
Install with optional real RVC voice cloning:
pip install "voicedna[rvc]"
Install with optional PersonaPlex natural voice backend:
pip install "voicedna[personaplex]"
Install from PyPI
pip install voicedna
voicedna birth --imprint "Luke Morrison's warm Canadian voice" --user luke
🔒 Voice Consistency & Identifiability (v2.7)
- New
VoiceConsistencyEngine(voicedna/consistency.py) with optional SpeechBrain / Resemblyzer embeddings and deterministic fallback. VoiceDNA.create_new(...)now attempts real imprint-based embedding extraction when imprint points to audio.ImprintConverterFilterenforces a0.92cosine similarity target to the core embedding using gentle parametric correction.- A subtle low-depth sonic watermark now encodes
voice_fingerprint_idfor machine-side identifiability. - Processor reports now include top-level
consistency_scoreandrvc_readystatus.
🔊 Real Voice Cloning (RVC)
ImprintConverterFilternow supportsimprint_converter.mode = "rvc"for real model-based cloning.- Install RVC runtime with
pip install "voicedna[rvc]"(recommended on Python 3.10-3.12 environments with compatible torch stack). - Set
imprint_converter.rvc_model_pathto your.pthmodel andimprint_converter.rvc_reference_pathto a reference voice WAV. - Optional tuning:
imprint_converter.rvc_index_path,imprint_converter.rvc_device,imprint_converter.rvc_pitch. - Processor report now exposes
rvc_modeand marks it asactivewhen real conversion is enabled.
🧠 PersonaPlex Natural Voice (v2.9)
- New optional provider
PersonaPlexTTSinvoicedna/providers/personaplex.py. - Use
pip install "voicedna[personaplex]"to install model runtime dependencies. - Omarchy installer now supports
--natural-voiceto enable PersonaPlex speech-dispatcher + daemon integration. VoiceDNAProcessor.synthesize_and_process(...)lets providers synthesize text first, then apply the standard VoiceDNA maturation/imprint chain.
v2.3 — PyPI Publish Prep + RVC-Ready Imprint Path
- Added publish-ready build validation (
python -m build,twine check dist/*) - Added
requirements-dev.txtand optionaldevdependencies (build,twine,pytest) - Added RVC-ready stub path in
ImprintConverterFilterviaimprint_converter.mode = "rvc_stub" - Processor report now includes
imprint_converter.rvc_readystatus
v2.1 — Real Audio Filters + Test Suite + CLI
pip install voicedna
voicedna birth --imprint "Luke Morrison's warm Canadian voice" --user luke
voicedna speak --text "Hey from VoiceDNA" --base-model elevenlabs
voicedna evolve --days 7
New in v2.1:
- Real
pydub-powered pitch shifting inAgeMaturationFilter - Pytest coverage for child inheritance and processor reporting
- Typer-powered CLI (
voicedna birth/speak/evolve) - Packaging and release polish for PyPI readiness
v2.2 — Cloud + Local Demos (Voicebox)
pip install voicedna
voicedna birth --imprint "Luke Morrison's warm Canadian voice" --user luke
voicedna speak --text "Hello from VoiceDNA v2.2"
voicedna evolve --days 7
python examples/elevenlabs_demo.py
python examples/cartesia_demo.py
python examples/voicebox_demo.py
v2.2 highlights:
- Real
ImprintConverterFiltervolume-mix processing path - WAV fixture + round-trip waveform assertion tests
- Local/offline Voicebox demo (
http://127.0.0.1:17493/generate) - Cloud demo scripts for ElevenLabs and Cartesia
🚀 Testing with OpenClaw — Hear your AI grow up on the phone
Use the ready-to-run integration path:
- Guide:
examples/openclaw/README.md - TTS hook skill:
examples/openclaw/voicedna_tts_hook.py - Phone call skill:
examples/openclaw/voipms_phone_skill.py
3-command flow:
pip install -e .
python -c "import examples.openclaw.voicedna_tts_hook, examples.openclaw.voipms_phone_skill; print('OpenClaw skills import OK')"
voicedna --help
Then in OpenClaw, trigger:
Claw, call me on my phone and tell me a joke in your growing voice
🖥️ Omarchy Arch OS – System-wide unique voice
Run VoiceDNA as your desktop speaking voice on Omarchy (Arch + Hyprland):
- Guide:
examples/omarchy/README.md - PipeWire filter shim:
examples/omarchy/voicedna-pipewire-filter.py - Speech Dispatcher config:
examples/omarchy/speech-dispatcher-voicedna.conf - One-command installer:
examples/omarchy/install-voicedna-omarchy.sh - Boot-persistent daemon unit:
examples/omarchy/voicedna-os-daemon.service
One-click install on Omarchy:
bash examples/omarchy/install-voicedna-omarchy.sh
Natural voice mode on Omarchy:
bash examples/omarchy/install-voicedna-omarchy.sh --natural-voice
3-command flow:
pip install -e .
bash examples/omarchy/install-voicedna-omarchy.sh
spd-say "Hello Luke, your desktop voice is now growing with you."
v2.0 — Real Filters + Package + Child Inheritance + Bridge
pip install voicedna
from voicedna import VoiceDNA, VoiceDNAProcessor
dna = VoiceDNA.create_new("Luke Morrison's warm Canadian voice", "luke")
child = dna.create_child("mini_grok", inherit_strength=0.40)
processor = VoiceDNAProcessor()
New in v2.0:
- Built-in Age + Imprint filters
- Child AI inheritance (
create_child) - VST3 Python bridge scaffold
- Open standard draft spec + announcement templates
Features
- Precocial birth (fluent at ~5-year-old level from day 1)
- Lifelong age progression (5 → 10 → 15 → 22+)
- Permanent Voice Fingerprint ("Ash-ness") that never disappears
- Self-evolving audio plugin (DAW-style VST thinking)
- Encrypted VoiceDNA files (
.voicedna.enc) with password-based decryption - One tiny JSON file + 150-line Python plugin — drop-in for any project
- Exportable fingerprint so your AI can move between platforms and still sound like itself
v1.1 — Encrypted Plugin Framework
- Secure encrypted files via
VoiceDNA.save_encrypted()/VoiceDNA.load_encrypted() - Full extensible framework via
VoiceDNAProcessorinvoicedna/framework.py - Auto-discovery for plugins through entry points (
voicedna.filters+voicedna.plugins) - Robust plugin chaining: fault-tolerant filter execution + per-filter timing metrics
- Ready for real audio pipelines (OpenClaw hook + process chain)
- VST3 starter scaffold in
vst3/for JUCE-based binary plugin work
Quick Start
pip install -r requirements.txt
python voice_dna.py
Run tests:
pytest
See voice_dna.py for full usage.
Quick encrypted framework demo:
python examples/encrypted_plugin_demo.py
python examples/openclaw_skill.py
OpenClaw-Ready Plugin Hook (new)
VoiceDNA now includes a minimal extensible plugin framework in voicedna/plugins.
Use it in an OpenClaw-style TTS render hook:
from voicedna import VoiceDNA, PluginManager, PromptTagFilter
dna = VoiceDNA.load("myai.voicedna.json")
manager = PluginManager()
loaded, failed = manager.load_entrypoint_plugins() # auto-discover pip-installed plugins
if not loaded:
manager.register(PromptTagFilter())
processed_audio = manager.process(raw_audio_bytes, dna, {
"base_model": "xtts",
"prepend_style_tag": True,
})
Run a full example:
python examples/openclaw_hook.py
Third-party plugin registration (entry points)
Any external package can auto-register a filter by adding this to its pyproject.toml:
[project.entry-points."voicedna.plugins"]
my_filter = "my_package.filters:MyFilter"
On startup, call PluginManager().load_entrypoint_plugins() and all installed filters are loaded automatically.
You can also use the higher-level framework processor:
from voice_dna import VoiceDNA
from voicedna import VoiceDNAProcessor
dna = VoiceDNA.load_encrypted(password="my_secret_2026", filepath="myai.voicedna.enc")
processor = VoiceDNAProcessor()
processed_audio = processor.process(raw_audio_bytes, dna, {"force_age": 15})
print(processor.last_metrics)
print(processor.get_last_report())
OpenClaw one-file skill
See examples/openclaw_skill.py for a minimal skill-style wrapper that loads encrypted VoiceDNA and returns a voice_dna_tts(text, raw_tts_bytes) hook.
Feedback Loop Logging
Use the helper script to append structured updates into EVOLUTION.md:
python scripts/review_feedback.py \
--source "Grok 4.20 Beta" \
--summary "Suggested plugin auto-discovery and ecosystem visibility" \
--actions "Added entry-point loader in PluginManager" \
--actions "Added pyproject entry-point metadata" \
--next "Add plugin compatibility contract tests"
Tip: add --dry-run to preview the entry before writing.
Migration Notes
For patch hardening updates and stricter validation behavior, see MIGRATION_v2_0_1.md.
Publish to PyPI (for maintainers)
Build and validate:
python -m build
python -m twine check dist/*
Publish with API token credentials:
export TWINE_USERNAME=__token__
export TWINE_PASSWORD="pypi-...your-token-here..."
python -m twine upload dist/* --skip-existing
Notes:
--skip-existingavoids failures on already-uploaded files.- Package page:
https://pypi.org/project/voicedna/
Files
voice_dna.py— the complete VoiceDNA class (UAMF v4)voicedna/plugins/— plugin interface + manager + built-in filtersvoicedna/filters/— built-in v2.0 age + imprint filtersvoicedna/framework.py— higher-level processor with plugin auto-discoveryexamples/openclaw_hook.py— integration example for OpenClaw-like pipelinesexamples/openclaw_skill.py— one-file OpenClaw skill wrapperexamples/openclaw/README.md— 5-minute OpenClaw integration testing pathexamples/openclaw/voicedna_tts_hook.py— OpenClaw-ready VoiceDNA TTS bytes hookexamples/openclaw/voipms_phone_skill.py— voip.ms-first outbound phone call skill exampleexamples/omarchy/README.md— Omarchy 5-minute system-wide voice pathexamples/omarchy/voicedna-pipewire-filter.py— PipeWire VoiceDNA filter bridgeexamples/omarchy/speech-dispatcher-voicedna.conf— speech-dispatcher default VoiceDNA profileexamples/omarchy/install-voicedna-omarchy.sh— one-command Omarchy setup scriptexamples/omarchy/voicedna-os-daemon.service— user systemd daemon unit for auto-started voice runtimeexamples/omarchy/voicedna-os-daemon.py— daemon process that validates encrypted DNA loading at login/rebootexamples/encrypted_plugin_demo.py— encrypted load + processor demoexamples/elevenlabs_demo.py— cloud ElevenLabs processing demoexamples/cartesia_demo.py— cloud Cartesia processing demoexamples/voicebox_demo.py— local/offline Voicebox processing demospec/VoiceDNA_Spec_v1.0.md— open standard draft integration contractannouncements/— ready-to-post launch templatesvst3/— JUCE starter scaffold for future native plugin buildtests/— pytest suite for inheritance and processor report behaviorcli.py— Typer CLI backing thevoicednacommandrequirements-dev.txt— build/twine/pytest tooling for publish prepscripts/review_feedback.py— appends structured feedback updates toEVOLUTION.mdMIGRATION_v2_0_1.md— patch migration notes and behavior changesCHANGELOG.md— release-oriented change historyEVOLUTION.md— feedback loop + design evolution logUAMF_v4_schema.json— formal JSON schema (optional but nice for validation)LICENSE— MIT
Made for the entire AI community. Fork it, improve it, ship it in your apps.
Let's give every AI a soul you can hear.
— Created with ❤️ by Luke Morrison + Grok
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file voicedna-2.9.0.tar.gz.
File metadata
- Download URL: voicedna-2.9.0.tar.gz
- Upload date:
- Size: 26.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
22633137695a95cc00decce3faab79e93580e2a07ec165393edfb62c1f237b20
|
|
| MD5 |
4947a442df926097ead4889fde6df453
|
|
| BLAKE2b-256 |
4dcad3dd151e7a6c905432ab025e71e2611ec737685003d7378928f06df95560
|
File details
Details for the file voicedna-2.9.0-py3-none-any.whl.
File metadata
- Download URL: voicedna-2.9.0-py3-none-any.whl
- Upload date:
- Size: 25.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1c8034a2cceb902873e9b2f6ec75103a00855d30548fcc7d12c1a97fdeb661ac
|
|
| MD5 |
df3680f130dc34f7fb1e8b9d2b9935f1
|
|
| BLAKE2b-256 |
c7f53f7b42e1280f24d5ac8847c42f2de3d55767797bf0e92c5d9a5e8ed873c2
|