Own Your Voice. Deploy Your Agent. Earn Forever.
VoiceVault is a decentralized Web3 platform for creating, owning, and monetizing AI voice models on the Sui blockchain. Users can train custom AI voice models, mint on-chain ownership NFTs, deploy autonomous voice agents powered by LiveKit, and earn crypto every time someone uses their voice. It bridges the gap between voice creators and consumers through a transparent, decentralized marketplace with cryptographic proof of rights and automated payment distribution.
- Voice Registration β Train and register custom AI voice models on-chain as NFTs
- Global Registry β On-chain
VoiceRegistryshared object makes all voices globally discoverable (no localStorage dependency) - Voice Marketplace β Browse, search, and license voices from creators worldwide
- On-chain License Pass β Purchasing a voice mints a
LicensePassobject to your wallet; backend verifies it instead of trusting internal DB logic
- 4-step wizard β Voice β Template β Configure β Deploy
- 5 agent templates β Sales Agent, Support Agent, Tutor Agent, Creator Clone, Custom
- LLM choice β GPT-4o, Claude 3.5 Sonnet, Gemini 1.5 Pro, Groq Llama 3
- Pay-per-call pricing β Set a SUI price per call; payment split handled on-chain
- LiveKit integration β Generates a voice room and agent worker start command on deploy
- Agent dashboard β See all deployed agents, live/paused status, call count, earnings
- Royalty split β Every payment automatically splits: 2.5% platform fee, 10% royalty, remainder to creator
- On-chain access verification β Backend queries Sui RPC for
LicensePassownership; no permissive placeholder logic - Revenue tracking β Creator earnings visible in the dashboard
- Framework: React 18 + TypeScript
- Bundler: Vite
- Styling: Tailwind CSS
- UI Components: shadcn/ui + Radix UI
- Web3:
@mysten/sui,@mysten/dapp-kit - State: React Context + TanStack Query
- Charts: Recharts
- Language: Python 3.8+
- API Framework: FastAPI + Uvicorn
- Storage: Walrus (content-addressed blob storage)
- Voice runtime: LiveKit Agents (
livekit-api) - Agent store: JSON-backed flat file store (
storage/agents.json)
- Language: Move 2024
- Network: Sui testnet / mainnet
- Modules:
voice_identity,payment,agent_identity
- Node.js 18+
- Python 3.8+
- Sui CLI (for contract deployment)
- Sui Wallet browser extension
- LiveKit account (optional β required for live voice rooms)
cd frontend
npm install
npm run dev # http://localhost:5173cd backend
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
python server.py # http://localhost:8000cd voice_vault_sui
sui client publish --gas-budget 50000000After publishing, copy the Package ID and the VoiceRegistry shared object ID from the output into .env.
Copy .env at the project root and fill in your values:
# ββ Sui ββββββββββββββββββββββββββββββββββββββββββββββ
SUI_NETWORK=testnet
SUI_RPC_URL=https://fullnode.testnet.sui.io
SUI_PACKAGE_ID=0x<your_package_id>
SUI_VOICE_REGISTRY_ID=0x<registry_shared_object_id>
# ββ Frontend (Vite) βββββββββββββββββββββββββββββββββββ
VITE_SUI_PACKAGE_ID=0x<your_package_id>
VITE_SUI_VOICE_REGISTRY_ID=0x<registry_shared_object_id>
VITE_API_URL=http://localhost:8000
# ββ Walrus ββββββββββββββββββββββββββββββββββββββββββββ
WALRUS_STORAGE_MODE=local # or "remote"
WALRUS_PUBLISHER_URL=https://publisher.walrus-testnet.walrus.space
# ββ LiveKit (required for live voice agent rooms) βββββ
# Get credentials at https://cloud.livekit.io
LIVEKIT_URL=wss://your-project.livekit.cloud
LIVEKIT_API_KEY=your_livekit_api_key
LIVEKIT_API_SECRET=your_livekit_api_secret
# ββ LLM providers (used by the agent worker) ββββββββββ
OPENAI_API_KEY=your_openai_api_key
ANTHROPIC_API_KEY=your_anthropic_api_keyVoiceVaultSui/
βββ frontend/
β βββ src/
β βββ pages/
β β βββ Index.tsx Landing page
β β βββ Marketplace.tsx Voice discovery & purchase
β β βββ Upload.tsx Voice model processing & registration
β β βββ Deploy.tsx Agent deployment wizard + dashboard
β β βββ Dashboard.tsx Creator earnings & analytics
β βββ hooks/
β β βββ useVoiceMetadata.ts
β β βββ useGlobalRegistry.ts On-chain registry query
β β βββ useVoiceRegister.ts
β β βββ useVoiceUnregister.ts
β β βββ usePayForInference.ts Payment + LicensePass mint
β βββ lib/
β βββ contracts.ts Package ID, registry ID, fee constants
β βββ agentApi.ts Agent CRUD + deploy API client
β βββ voiceRegistry.ts (legacy β superseded by on-chain registry)
β βββ purchasedVoices.ts Local cache of purchased voices
β βββ walrus.ts Walrus manifest fetch helpers
β
βββ backend/
β βββ server.py FastAPI app + all routes
β βββ agent_store.py JSON-backed agent store
β βββ livekit_service.py LiveKit token generation
β βββ walrus.py Walrus storage + verify_license_pass()
β βββ voice_model.py Voice embedding + bundle generation
β βββ storage/
β βββ walrus/ Local Walrus blob store
β βββ agents.json Deployed agent configs
β
βββ voice_vault_sui/
β βββ sources/
β βββ voice_identity.move VoiceIdentity NFT + VoiceRegistry
β βββ payment.move Royalty split + LicensePass mint
β βββ agent_identity.move AgentIdentity on-chain object
β
βββ docs/
# Terminal 1 β backend
cd backend && python server.py
# Terminal 2 β frontend
cd frontend && npm run dev- Connect your Sui wallet
- Go to Create Voice (
/upload) - Record or upload a voice sample
- Process the model β uploads bundle to Walrus
- Register on-chain β mints a
VoiceIdentityNFT to your wallet - Your voice appears in the global marketplace immediately
- Browse Marketplace (
/marketplace) - Click Buy Voice on any listing
- Approve the SUI transaction β a
LicensePassNFT is minted to your wallet - Go to Create Voice β use the purchased voice for TTS generation
- Go to Deploy Agent (
/deploy) - Step 1 β Voice: Confirm your registered on-chain voice
- Step 2 β Template: Pick Sales Agent, Support Agent, Tutor, Creator Clone, or Custom
- Step 3 β Configure: Set agent name, system prompt, LLM provider, and price per call (SUI)
- Step 4 β Deploy: Review summary β click Deploy Agent
- Copy the displayed worker start command and run it in a terminal:
LIVEKIT_URL=wss://... LIVEKIT_API_KEY=... LIVEKIT_API_SECRET=... ROOM_NAME=vv-<id> python agent_worker.py dev- Click Talk on your agent card to open the live voice room
- Callers pay your configured SUI price per call, split on-chain automatically
VoiceRegistryβ shared object; all registered voice owners appended on everyregister_voicecallVoiceIdentityβ owned NFT per creator with name, Walrus URI, rights, priceregister_voice(registry, ...)β appends owner to global registrydelete_voice(registry, ...)β removes owner from registry
LicensePassβ owned NFT minted to the buyer on every successful purchasepay_with_royalty_split(payment, voice_id, ...)β splits coins and mintsLicensePassin a single transaction- Fee structure: 2.5% platform fee, 10% royalty, remainder to creator
AgentIdentityβ on-chain object linking a voice to a deployed agent configcreate_agent,pause_agent,resume_agent,delete_agent- Emits
AgentCreatedevent on deployment
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/voice/process |
Process audio β generate embedding bundle β upload to Walrus |
| POST | /api/tts/generate |
Generate speech (owner or valid LicensePass required) |
| POST | /api/walrus/upload |
Upload a voice bundle to Walrus |
| POST | /api/walrus/download |
Download a file from a Walrus bundle |
| POST | /api/walrus/delete |
Delete a voice bundle (owner only) |
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/payment/breakdown |
Calculate platform fee + royalty + creator split |
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/agent/create |
Create a new agent config |
| GET | /api/agent/list?owner= |
List all agents for an owner address |
| GET | /api/agent/:id |
Get a single agent |
| POST | /api/agent/deploy/:id |
Mark agent live, generate LiveKit room + token |
| POST | /api/agent/pause/:id |
Pause agent |
| POST | /api/agent/resume/:id |
Resume agent |
| DELETE | /api/agent/:id |
Delete agent |
| POST | /api/agent/join/:id |
Get a user token to join the agent's room |
# Frontend
npm run dev # Dev server
npm run build # Production build
npm run lint # ESLint
npm run type-check # TypeScript check
# Backend
python server.py # Dev server (auto-reloads with uvicorn --reload)# Frontend
cd frontend && npm run build # outputs to dist/
# Backend
pip install gunicorn
gunicorn -w 4 -k uvicorn.workers.UvicornWorker server:app
# Or Docker
docker build -t voicevault-backend ./backend
docker run -p 8000:8000 --env-file .env voicevault-backend- Fork the repository
- Create a feature branch (
git checkout -b feature/your-feature) - Commit your changes
- Open a Pull Request
Code style: ESLint for frontend, PEP 8 for backend, Move style guide for contracts.
MIT β see LICENSE.