openvoiceui 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/.env.example +104 -0
  2. package/Dockerfile +30 -0
  3. package/LICENSE +21 -0
  4. package/README.md +638 -0
  5. package/SETUP.md +360 -0
  6. package/app.py +232 -0
  7. package/auto-approve-devices.js +111 -0
  8. package/cli/index.js +372 -0
  9. package/config/__init__.py +4 -0
  10. package/config/default.yaml +43 -0
  11. package/config/flags.yaml +67 -0
  12. package/config/loader.py +203 -0
  13. package/config/providers.yaml +71 -0
  14. package/config/speech_normalization.yaml +182 -0
  15. package/config/theme.json +4 -0
  16. package/data/greetings.json +25 -0
  17. package/default-pages/ai-image-creator.html +915 -0
  18. package/default-pages/bulk-image-uploader.html +492 -0
  19. package/default-pages/desktop.html +2865 -0
  20. package/default-pages/file-explorer.html +854 -0
  21. package/default-pages/interactive-map.html +655 -0
  22. package/default-pages/style-guide.html +1005 -0
  23. package/default-pages/website-setup.html +1623 -0
  24. package/deploy/openclaw/Dockerfile +46 -0
  25. package/deploy/openvoiceui.service +30 -0
  26. package/deploy/setup-nginx.sh +50 -0
  27. package/deploy/setup-sudo.sh +306 -0
  28. package/deploy/skill-runner/Dockerfile +19 -0
  29. package/deploy/skill-runner/requirements.txt +14 -0
  30. package/deploy/skill-runner/server.py +269 -0
  31. package/deploy/supertonic/Dockerfile +22 -0
  32. package/deploy/supertonic/server.py +79 -0
  33. package/docker-compose.pinokio.yml +11 -0
  34. package/docker-compose.yml +59 -0
  35. package/greetings.json +25 -0
  36. package/index.html +65 -0
  37. package/inject-device-identity.js +142 -0
  38. package/package.json +82 -0
  39. package/profiles/default.json +114 -0
  40. package/profiles/manager.py +354 -0
  41. package/profiles/schema.json +337 -0
  42. package/prompts/voice-system-prompt.md +149 -0
  43. package/providers/__init__.py +39 -0
  44. package/providers/base.py +63 -0
  45. package/providers/llm/__init__.py +12 -0
  46. package/providers/llm/base.py +71 -0
  47. package/providers/llm/clawdbot_provider.py +112 -0
  48. package/providers/llm/zai_provider.py +115 -0
  49. package/providers/registry.py +320 -0
  50. package/providers/stt/__init__.py +12 -0
  51. package/providers/stt/base.py +58 -0
  52. package/providers/stt/webspeech_provider.py +49 -0
  53. package/providers/stt/whisper_provider.py +100 -0
  54. package/providers/tts/__init__.py +20 -0
  55. package/providers/tts/base.py +91 -0
  56. package/providers/tts/groq_provider.py +74 -0
  57. package/providers/tts/supertonic_provider.py +72 -0
  58. package/requirements.txt +38 -0
  59. package/routes/__init__.py +10 -0
  60. package/routes/admin.py +515 -0
  61. package/routes/canvas.py +1315 -0
  62. package/routes/chat.py +51 -0
  63. package/routes/conversation.py +2158 -0
  64. package/routes/elevenlabs_hybrid.py +306 -0
  65. package/routes/greetings.py +98 -0
  66. package/routes/icons.py +279 -0
  67. package/routes/image_gen.py +364 -0
  68. package/routes/instructions.py +190 -0
  69. package/routes/music.py +838 -0
  70. package/routes/onboarding.py +43 -0
  71. package/routes/pi.py +62 -0
  72. package/routes/profiles.py +215 -0
  73. package/routes/report_issue.py +68 -0
  74. package/routes/static_files.py +533 -0
  75. package/routes/suno.py +664 -0
  76. package/routes/theme.py +81 -0
  77. package/routes/transcripts.py +199 -0
  78. package/routes/vision.py +348 -0
  79. package/routes/workspace.py +288 -0
  80. package/server.py +1510 -0
  81. package/services/__init__.py +1 -0
  82. package/services/auth.py +143 -0
  83. package/services/canvas_versioning.py +239 -0
  84. package/services/db_pool.py +107 -0
  85. package/services/gateway.py +16 -0
  86. package/services/gateway_manager.py +333 -0
  87. package/services/gateways/__init__.py +12 -0
  88. package/services/gateways/base.py +110 -0
  89. package/services/gateways/compat.py +264 -0
  90. package/services/gateways/openclaw.py +1134 -0
  91. package/services/health.py +100 -0
  92. package/services/memory_client.py +455 -0
  93. package/services/paths.py +26 -0
  94. package/services/speech_normalizer.py +285 -0
  95. package/services/tts.py +270 -0
  96. package/setup-config.js +262 -0
  97. package/sounds/air_horn.mp3 +0 -0
  98. package/sounds/bruh.mp3 +0 -0
  99. package/sounds/crowd_cheer.mp3 +0 -0
  100. package/sounds/gunshot.mp3 +0 -0
  101. package/sounds/impact.mp3 +0 -0
  102. package/sounds/lets_go.mp3 +0 -0
  103. package/sounds/record_stop.mp3 +0 -0
  104. package/sounds/rewind.mp3 +0 -0
  105. package/sounds/sad_trombone.mp3 +0 -0
  106. package/sounds/scratch_long.mp3 +0 -0
  107. package/sounds/yeah.mp3 +0 -0
  108. package/src/adapters/ClawdBotAdapter.js +264 -0
  109. package/src/adapters/_template.js +133 -0
  110. package/src/adapters/elevenlabs-classic.js +841 -0
  111. package/src/adapters/elevenlabs-hybrid.js +812 -0
  112. package/src/adapters/hume-evi.js +676 -0
  113. package/src/admin.html +1339 -0
  114. package/src/app.js +8802 -0
  115. package/src/core/Config.js +173 -0
  116. package/src/core/EmotionEngine.js +307 -0
  117. package/src/core/EventBridge.js +180 -0
  118. package/src/core/EventBus.js +117 -0
  119. package/src/core/VoiceSession.js +607 -0
  120. package/src/face/BaseFace.js +259 -0
  121. package/src/face/EyeFace.js +208 -0
  122. package/src/face/HaloSmokeFace.js +509 -0
  123. package/src/face/manifest.json +27 -0
  124. package/src/face/previews/eyes.svg +16 -0
  125. package/src/face/previews/orb.svg +29 -0
  126. package/src/features/MusicPlayer.js +620 -0
  127. package/src/features/Soundboard.js +128 -0
  128. package/src/providers/DeepgramSTT.js +472 -0
  129. package/src/providers/DeepgramStreamingSTT.js +766 -0
  130. package/src/providers/GroqSTT.js +559 -0
  131. package/src/providers/TTSPlayer.js +323 -0
  132. package/src/providers/WebSpeechSTT.js +479 -0
  133. package/src/providers/tts/BaseTTSProvider.js +81 -0
  134. package/src/providers/tts/HumeProvider.js +77 -0
  135. package/src/providers/tts/SupertonicProvider.js +174 -0
  136. package/src/providers/tts/index.js +140 -0
  137. package/src/shell/adapter-registry.js +154 -0
  138. package/src/shell/caller-bridge.js +35 -0
  139. package/src/shell/camera-bridge.js +28 -0
  140. package/src/shell/canvas-bridge.js +32 -0
  141. package/src/shell/commercial-bridge.js +44 -0
  142. package/src/shell/face-bridge.js +44 -0
  143. package/src/shell/music-bridge.js +60 -0
  144. package/src/shell/orchestrator.js +233 -0
  145. package/src/shell/profile-discovery.js +303 -0
  146. package/src/shell/sounds-bridge.js +28 -0
  147. package/src/shell/transcript-bridge.js +61 -0
  148. package/src/shell/waveform-bridge.js +33 -0
  149. package/src/styles/base.css +2862 -0
  150. package/src/styles/face.css +417 -0
  151. package/src/styles/pi-overrides.css +89 -0
  152. package/src/styles/theme-dark.css +67 -0
  153. package/src/test-tts.html +175 -0
  154. package/src/ui/AppShell.js +544 -0
  155. package/src/ui/ProfileSwitcher.js +228 -0
  156. package/src/ui/SessionControl.js +240 -0
  157. package/src/ui/face/FacePicker.js +195 -0
  158. package/src/ui/face/FaceRenderer.js +309 -0
  159. package/src/ui/settings/PlaylistEditor.js +366 -0
  160. package/src/ui/settings/SettingsPanel.css +684 -0
  161. package/src/ui/settings/SettingsPanel.js +419 -0
  162. package/src/ui/settings/TTSVoicePreview.js +210 -0
  163. package/src/ui/themes/ThemeManager.js +213 -0
  164. package/src/ui/visualizers/BaseVisualizer.js +29 -0
  165. package/src/ui/visualizers/PartyFXVisualizer.css +291 -0
  166. package/src/ui/visualizers/PartyFXVisualizer.js +637 -0
  167. package/static/emulators/jsdos/js-dos.css +1 -0
  168. package/static/emulators/jsdos/js-dos.js +22 -0
  169. package/static/favicon.svg +55 -0
  170. package/static/icons/apple-touch-icon.png +0 -0
  171. package/static/icons/favicon-32.png +0 -0
  172. package/static/icons/icon-192.png +0 -0
  173. package/static/icons/icon-512.png +0 -0
  174. package/static/install.html +449 -0
  175. package/static/manifest.json +26 -0
  176. package/static/sw.js +21 -0
  177. package/tts_providers/__init__.py +136 -0
  178. package/tts_providers/base_provider.py +319 -0
  179. package/tts_providers/groq_provider.py +155 -0
  180. package/tts_providers/hume_provider.py +226 -0
  181. package/tts_providers/providers_config.json +119 -0
  182. package/tts_providers/qwen3_provider.py +371 -0
  183. package/tts_providers/resemble_provider.py +315 -0
  184. package/tts_providers/supertonic_provider.py +557 -0
  185. package/tts_providers/supertonic_tts.py +399 -0
package/.env.example ADDED
@@ -0,0 +1,104 @@
1
+ # =============================================================================
2
+ # OpenVoiceUI — .env.example
3
+ # Copy to .env and fill in your values: cp .env.example .env
4
+ # =============================================================================
5
+
6
+ # Server
7
+ PORT=5001
8
+ DOMAIN=your-domain.com
9
+
10
+ # Flask secret key — generate with: python3 -c "import secrets; print(secrets.token_hex(32))"
11
+ # Required for persistent sessions. If unset, a random key is generated per restart.
12
+ SECRET_KEY=your-secret-key-here
13
+
14
+ # Canvas pages directory
15
+ # VPS/systemd install: set to the path created by deploy/setup-sudo.sh
16
+ # Docker install: leave UNSET — defaults to runtime/canvas-pages/ inside the container
17
+ # (matches the docker-compose volume mount)
18
+ # CANVAS_PAGES_DIR=/var/www/openvoiceui/canvas-pages
19
+
20
+ # =============================================================================
21
+ # OpenClaw Gateway (required for LLM / voice conversations)
22
+ # Download and install OpenClaw: https://openclaw.ai
23
+ # =============================================================================
24
+ CLAWDBOT_GATEWAY_URL=ws://127.0.0.1:18791
25
+ CLAWDBOT_AUTH_TOKEN=your-openclaw-gateway-token
26
+
27
+ # Coding CLI for the openclaw container (activates the coding-agent skill).
28
+ # Same options as openclaw's setup wizard. Choose one:
29
+ # codex — OpenAI Codex CLI (also set OPENAI_API_KEY)
30
+ # claude — Anthropic Claude Code (also set ANTHROPIC_API_KEY)
31
+ # opencode — OpenCode (bring your own provider key)
32
+ # pi — Pi coding agent (bring your own provider key)
33
+ # none — skip (coding-agent skill inactive, default)
34
+ # Note: if you already ran openclaw's setup wizard it handled this for you.
35
+ # CODING_CLI=codex
36
+
37
+ # OpenClaw version for the Docker image — pinned to a tested release.
38
+ # Only change this if you've verified the new version works with OpenVoiceUI.
39
+ # OPENCLAW_VERSION=2026.3.13
40
+
41
+ # Session key prefix — change if running multiple instances on the same gateway
42
+ GATEWAY_SESSION_KEY=voice-main-1
43
+
44
+ # =============================================================================
45
+ # TTS — choose one or more providers
46
+ # =============================================================================
47
+
48
+ # Groq Orpheus (recommended — fast, high quality, free tier available)
49
+ # Get key: https://console.groq.com
50
+ GROQ_API_KEY=your-groq-api-key
51
+ USE_GROQ=true
52
+ USE_GROQ_TTS=true
53
+
54
+ # Qwen3-TTS via fal.ai (optional)
55
+ # Get key: https://fal.ai/dashboard
56
+ # FAL_KEY=your-fal-key
57
+
58
+ # Hume EVI (optional — expressive, emotion-aware TTS)
59
+ # Get keys: https://platform.hume.ai/settings/keys
60
+ # HUME_API_KEY=your-hume-api-key
61
+ # HUME_SECRET_KEY=your-hume-secret-key
62
+
63
+ # Supertonic (ships with docker compose — no config needed)
64
+ # Override only if you run the Supertonic service elsewhere:
65
+ # SUPERTONIC_API_URL=http://supertonic:8765
66
+
67
+ # =============================================================================
68
+ # Authentication — Clerk (optional)
69
+ # Without Clerk, the app runs open — no login required (fine for single-user).
70
+ # To require login: set key below + CANVAS_REQUIRE_AUTH=true + ALLOWED_USER_IDS
71
+ # Get keys: https://clerk.com → Your App → API Keys
72
+ # =============================================================================
73
+ # CLERK_PUBLISHABLE_KEY=pk_live_...
74
+ # CANVAS_REQUIRE_AUTH=true
75
+
76
+ # Restrict access to specific user IDs (recommended in production)
77
+ # Find your user_id in server logs after first login, then set it here
78
+ # ALLOWED_USER_IDS=user_abc123,user_xyz789
79
+
80
+ # =============================================================================
81
+ # Vision (optional — for screenshot/image analysis)
82
+ # Get key: https://aistudio.google.com/app/apikey
83
+ # =============================================================================
84
+ # GEMINI_API_KEY=your-gemini-key
85
+
86
+ # =============================================================================
87
+ # Music Generation (optional — Suno AI)
88
+ # =============================================================================
89
+ # SUNO_API_KEY=your-suno-key
90
+ # SUNO_CALLBACK_URL=https://your-domain.com/api/suno/callback
91
+ # SUNO_WEBHOOK_SECRET=your-webhook-secret # optional HMAC verification
92
+
93
+ # =============================================================================
94
+ # Search (optional — Brave Search for web_search tool in OpenClaw agent)
95
+ # Free tier: 2,000 queries/month. Get key: https://brave.com/search/api/
96
+ # Must also be set in the OpenClaw gateway service environment.
97
+ # =============================================================================
98
+ # BRAVE_API_KEY=your-brave-search-api-key
99
+
100
+ # =============================================================================
101
+ # Rate limiting (optional — overrides defaults set in app.py)
102
+ # Format: "N per period" e.g. "500 per day" or "500 per day;100 per hour"
103
+ # =============================================================================
104
+ # RATELIMIT_DEFAULT=200 per day;50 per hour
package/Dockerfile ADDED
@@ -0,0 +1,30 @@
1
+ FROM python:3.12-slim
2
+
3
+ WORKDIR /app
4
+
5
+ # System deps for cryptography, audio processing, vision, and canvas features
6
+ RUN apt-get update && apt-get install -y --no-install-recommends \
7
+ build-essential libffi-dev \
8
+ libgl1 libglib2.0-0 \
9
+ ffmpeg \
10
+ libsndfile1 && \
11
+ rm -rf /var/lib/apt/lists/*
12
+
13
+ COPY requirements.txt .
14
+ RUN pip install --no-cache-dir -r requirements.txt
15
+
16
+ COPY . .
17
+
18
+ # Writable dirs for runtime data
19
+ RUN mkdir -p runtime/uploads runtime/canvas-pages runtime/known_faces runtime/music runtime/generated_music runtime/faces runtime/transcripts
20
+
21
+ # Run as non-root user
22
+ RUN useradd -m -u 1001 appuser && chown -R appuser:appuser /app
23
+ USER appuser
24
+
25
+ # Bind to all interfaces inside the container
26
+ ENV HOST=0.0.0.0
27
+
28
+ EXPOSE 5001
29
+
30
+ CMD ["python3", "server.py"]
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 OpenVoiceUI Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.